EXECUTABLE=prometheus-fail2ban-exporter VERSION?=$(shell git describe --abbrev=0)+hash.$(shell git rev-parse --short HEAD) # Destination directory and prefix to place the compiled binaries, documentaions # and other files. DESTDIR?= PREFIX?=/usr/local # 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) # PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_NAME # Defines the name of the new container to be built using several variables. PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_NAME:=git.cryptic.systems PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_USER:=volker.raschek PROM_FAIL2BAN_EXP_IMAGE_NAMESPACE?=${PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_USER} PROM_FAIL2BAN_EXP_IMAGE_NAME:=${EXECUTABLE} PROM_FAIL2BAN_EXP_IMAGE_VERSION?=latest PROM_FAIL2BAN_EXP_IMAGE_FULLY_QUALIFIED=${PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_NAME}/${PROM_FAIL2BAN_EXP_IMAGE_NAMESPACE}/${PROM_FAIL2BAN_EXP_IMAGE_NAME}:${PROM_FAIL2BAN_EXP_IMAGE_VERSION} # BIN # ============================================================================== prometheus-fail2ban-exporter: CGO_ENABLED=0 \ GOPROXY=$(shell go env GOPROXY) \ go build -ldflags "-X 'main.version=${VERSION}' -X 'main.date=$(shell date --rfc-3339=seconds )'" -o ${@} main.go # CLEAN # ============================================================================== PHONY+=clean clean: rm --force --recursive prometheus-fail2ban-exporter # TESTS # ============================================================================== 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: prometheus-fail2ban-exporter install --directory ${DESTDIR}/etc/bash_completion.d ./prometheus-fail2ban-exporter completion bash > ${DESTDIR}/etc/bash_completion.d/${EXECUTABLE} install --directory ${DESTDIR}${PREFIX}/bin install --mode 0755 ${EXECUTABLE} ${DESTDIR}${PREFIX}/bin/${EXECUTABLE} install --directory ${DESTDIR}${PREFIX}/share/licenses/${EXECUTABLE} install --mode 0644 LICENSE ${DESTDIR}${PREFIX}/share/licenses/${EXECUTABLE}/LICENSE install --directory ${DESTDIR}${PREFIX}/systemd/system install --mode 0644 systemd/systemd.service ${DESTDIR}${PREFIX}/systemd/system/${EXECUTABLE}.service sed --in-place --regexp-extended 's/EXECUTABLE/${EXECUTABLE}/gm' ${DESTDIR}${PREFIX}/systemd/system/${EXECUTABLE}.service # UNINSTALL # ============================================================================== PHONY+=uninstall uninstall: -rm --force --recursive \ ${DESTDIR}/etc/bash_completion.d/${EXECUTABLE} \ ${DESTDIR}${PREFIX}/bin/${EXECUTABLE} \ ${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 ${PROM_FAIL2BAN_EXP_IMAGE_FULLY_QUALIFIED} \ . # DELETE CONTAINER IMAGE # ============================================================================== PHONY:=container-image/delete container-image/delete: - ${CONTAINER_RUNTIME} image rm ${PROM_FAIL2BAN_EXP_IMAGE_FULLY_QUALIFIED} # PUSH CONTAINER IMAGE # ============================================================================== PHONY+=container-image/push container-image/push: echo ${PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_PASSWORD} | ${CONTAINER_RUNTIME} login ${PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_NAME} --username ${PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_USER} --password-stdin ${CONTAINER_RUNTIME} push ${PROM_FAIL2BAN_EXP_IMAGE_FULLY_QUALIFIED} # 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}