100 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
PROJECT_NAME := discord-radio-bot
 | 
						|
 | 
						|
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://git.nakama.town/fmartingr/${PROJECT_NAME}"
 | 
						|
CONTAINER_MAINTAINER := "Felipe Martin <me@fmartingr.com>"
 | 
						|
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)
 | 
						|
	CGO_ENABLED=1 go test ${TEST_OPTIONS} -timeout=${TEST_TIMEOUT} ${SOURCE_FILES}
 |