PROJECT_NAME := smtp2shoutrrr SOURCE_FILES ?=./... TEST_OPTIONS ?= -v -failfast -race -bench=. -benchtime=100000x -cover -coverprofile=coverage.out TEST_TIMEOUT ?=1m GOLANGCI_LINT_VERSION ?= v1.64.5 CLEAN_OPTIONS ?=-modcache -testcache CGO_ENABLED := 0 BUILDS_PATH := ./dist FROM_MAKEFILE := y CONTAINERFILE_NAME := Containerfile CONTAINER_ALPINE_VERSION := 3.20 CONTAINER_SOURCE_URL := "https://codeberg.org/fmartingr/${PROJECT_NAME}" CONTAINER_MAINTAINER := "Felipe Martin " CONTAINER_BIN_NAME := ${PROJECT_NAME} BUILDX_PLATFORMS := linux/amd64,linux/arm64,linux/arm/v7 export PROJECT_NAME export FROM_MAKEFILE export CGO_ENABLED export SOURCE_FILES export TEST_OPTIONS export TEST_TIMEOUT export BUILDS_PATH export CONTAINERFILE_NAME export CONTAINER_ALPINE_VERSION export CONTAINER_SOURCE_URL export CONTAINER_MAINTAINER export CONTAINER_BIN_NAME export BUILDX_PLATFORMS .PHONY: all all: help # this is godly # https://news.ycombinator.com/item?id=11939200 .PHONY: help help: ### this screen. Keep it first target to be default ifeq ($(UNAME), Linux) @grep -P '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | \ awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' else @# this is not tested, but prepared in advance for you, Mac drivers @awk -F ':.*###' '$$0 ~ FS {printf "%15s%s\n", $$1 ":", $$2}' \ $(MAKEFILE_LIST) | grep -v '@awk' | sort endif .PHONY: clean clean: ### clean test cache, build files $(info: Make: Clean) @rm -rf ${BUILDS_PATH} @go clean ${CLEAN_OPTIONS} @-docker buildx rm ${PROJECT_NAME}_builder .PHONY: build build: clean ### builds the project for the setup os/arch combinations $(info: Make: Build) @goreleaser --clean --snapshot .PHONY: quick-run quick-run: ### Executes the project using golang CGO_ENABLED=${CGO_ENABLED} go run ./cmd/${PROJECT_NAME}/*.go .PHONY: run run: ### Executes the project build locally @make build ${BUILDS_PATH}/${PROJECT_NAME} .PHONY: format format: ### Executes the formatting pipeline on the project $(info: Make: Format) @go fmt ./... @go mod tidy .PHONY: ci-lint ci-lint: ### Check the project for errors $(info: Make: Lint) @go install github.com/golangci/golangci-lint/cmd/golangci-lint@${GOLANGCI_LINT_VERSION} @golangci-lint run ./... .PHONY: lint lint: ### Check the project for errors $(info: Make: Lint) @golangci-lint run ./... .PHONY: test test: ### Runs the test suite $(info: Make: Test) @go test ${TEST_OPTIONS} -timeout=${TEST_TIMEOUT} ${SOURCE_FILES}