From 70af7b1276cb1aa0b451736a07944e401fe25be0 Mon Sep 17 00:00:00 2001 From: Markus Pesch Date: Sun, 1 Jun 2025 14:46:27 +0200 Subject: [PATCH] fix(Makefile): update config --- Makefile | 125 ++++++++++++++++++++++++++++++++----------- pkg/config/config.go | 2 +- 2 files changed, 94 insertions(+), 33 deletions(-) diff --git a/Makefile b/Makefile index 206b0c5..d0e602c 100644 --- a/Makefile +++ b/Makefile @@ -1,53 +1,114 @@ -# VERSION -VERSION ?= $(shell git describe --abbrev=0)+hash.$(shell git rev-parse --short HEAD) +dcmergeEXECUTABLE=dyndns-client +VERSION?=$(shell git describe --abbrev=0)+hash.$(shell git rev-parse --short HEAD) -DESTDIR ?= -PREFIX ?= /usr/local -EXECUTABLE := dyndns-client +# Destination directory and prefix to place the compiled binaries, documentaions +# and other files. +DESTDIR?= +PREFIX?=/usr/local -# BINARIES +# CONTAINER_RUNTIME +# The CONTAINER_RUNTIME variable will be used to specified the path to a +# container runtime. This is needed to start and run a container image. +CONTAINER_RUNTIME?=$(shell which podman) + +# DYNDNS_CLIENT_IMAGE_REGISTRY_NAME +# Defines the name of the new container to be built using several variables. +DYNDNS_CLIENT_IMAGE_REGISTRY_NAME:=git.cryptic.systems +DYNDNS_CLIENT_IMAGE_REGISTRY_USER:=volker.raschek + +DYNDNS_CLIENT_IMAGE_NAMESPACE?=${DYNDNS_CLIENT_IMAGE_REGISTRY_USER} +DYNDNS_CLIENT_IMAGE_NAME:=${EXECUTABLE} +_IMAGE_VERSION?=latest +DYNDNS_CLIENT_IMAGE_FULLY_QUALIFIED=${DYNDNS_CLIENT_IMAGE_REGISTRY_NAME}/${DYNDNS_CLIENT_IMAGE_NAMESPACE}/${DYNDNS_CLIENT_IMAGE_NAME}:${DYNDNS_CLIENT_IMAGE_VERSION} + +# BIN # ============================================================================== -all: ${EXECUTABLE} - -${EXECUTABLE}: +dyndns-client: CGO_ENABLED=0 \ - GOPRIVATE=$(shell go env GOPRIVATE) \ GOPROXY=$(shell go env GOPROXY) \ - go build -ldflags "-X main.version=${VERSION:v%=%}" -o ${@} - -# TEST -# ============================================================================== -PHONY+=test/unit -test/unit: clean ${EXECUTABLE} - go test -v ./pkg/... + go build -ldflags "-X 'main.version=${VERSION}'" -o ${@} main.go # CLEAN # ============================================================================== PHONY+=clean clean: - rm --force ${EXECUTABLE} || true - rm --force --recursive bin || true + rm --force --recursive dyndns-client -# UN/INSTALL +# TESTS # ============================================================================== -PHONY+=install -install: ${EXECUTABLE} +PHONY+=test/unit +test/unit: + CGO_ENABLED=0 \ + GOPROXY=$(shell go env GOPROXY) \ + go test -v -p 1 -coverprofile=coverage.txt -covermode=count -timeout 1200s ./pkg/... + +PHONY+=test/integration +test/integration: + CGO_ENABLED=0 \ + GOPROXY=$(shell go env GOPROXY) \ + go test -v -p 1 -count=1 -timeout 1200s ./it/... + +PHONY+=test/coverage +test/coverage: test/unit + CGO_ENABLED=0 \ + GOPROXY=$(shell go env GOPROXY) \ + go tool cover -html=coverage.txt + +# GOLANGCI-LINT +# ============================================================================== +PHONY+=golangci-lint +golangci-lint: + golangci-lint run --concurrency=$(shell nproc) + +# INSTALL +# ============================================================================== +PHONY+=uninstall +install: dyndns-client + install --directory ${DESTDIR}/etc/bash_completion.d + ./dyndns-client completion bash > ${DESTDIR}/etc/bash_completion.d/${EXECUTABLE} + install --directory ${DESTDIR}${PREFIX}/bin - install --mode 755 ${EXECUTABLE} ${DESTDIR}${PREFIX}/bin/${EXECUTABLE} + install --mode 0755 ${EXECUTABLE} ${DESTDIR}${PREFIX}/bin/${EXECUTABLE} - install --directory ${DESTDIR}/usr/lib/systemd/system - install --mode 644 systemd/${EXECUTABLE}.service ${DESTDIR}/usr/lib/systemd/system - - install --directory ${DESTDIR}/usr/share/licenses/${EXECUTABLE} - install --mode 644 LICENSE ${DESTDIR}/usr/share/licenses/${EXECUTABLE}/LICENSE + install --directory ${DESTDIR}${PREFIX}/share/licenses/${EXECUTABLE} + install --mode 0644 LICENSE ${DESTDIR}${PREFIX}/share/licenses/${EXECUTABLE}/LICENSE +# UNINSTALL +# ============================================================================== PHONY+=uninstall uninstall: - -rm --recursive --force \ + -rm --force --recursive \ + ${DESTDIR}/etc/bash_completion.d/${EXECUTABLE} \ ${DESTDIR}${PREFIX}/bin/${EXECUTABLE} \ - ${DESTDIR}/usr/lib/systemd/system/${EXECUTABLE}.service \ - ${DESTDIR}/usr/share/licenses/${EXECUTABLE}/LICENSE + ${DESTDIR}${PREFIX}/share/licenses/${EXECUTABLE} + +# BUILD CONTAINER IMAGE +# ============================================================================== +PHONY+=container-image/build +container-image/build: + ${CONTAINER_RUNTIME} build \ + --build-arg VERSION=${VERSION} \ + --file Dockerfile \ + --no-cache \ + --pull \ + --tag ${DYNDNS_CLIENT_IMAGE_FULLY_QUALIFIED} \ + . + +# DELETE CONTAINER IMAGE +# ============================================================================== +PHONY:=container-image/delete +container-image/delete: + - ${CONTAINER_RUNTIME} image rm ${DYNDNS_CLIENT_IMAGE_FULLY_QUALIFIED} + +# PUSH CONTAINER IMAGE +# ============================================================================== +PHONY+=container-image/push +container-image/push: + echo ${DYNDNS_CLIENT_IMAGE_REGISTRY_PASSWORD} | ${CONTAINER_RUNTIME} login ${DYNDNS_CLIENT_IMAGE_REGISTRY_NAME} --username ${DYNDNS_CLIENT_IMAGE_REGISTRY_USER} --password-stdin + ${CONTAINER_RUNTIME} push ${DYNDNS_CLIENT_IMAGE_FULLY_QUALIFIED} # PHONY # ============================================================================== -.PHONY: ${PHONY} +# Declare the contents of the PHONY variable as phony. We keep that information +# in a variable so we can use it in if_changed. +.PHONY: ${PHONY} \ No newline at end of file diff --git a/pkg/config/config.go b/pkg/config/config.go index 75b68fe..3414dbb 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -152,7 +152,7 @@ func getOutboundIP() net.IP { if err != nil { log.Fatal(err) } - defer conn.Close() + defer func() { _ = conn.Close() }() localAddr := conn.LocalAddr().(*net.UDPAddr) return localAddr.IP }