chore: project boilerplate
This commit is contained in:
		
							parent
							
								
									e5cf23619d
								
							
						
					
					
						commit
						9dafbe26c7
					
				
					 10 changed files with 577 additions and 52 deletions
				
			
		
							
								
								
									
										100
									
								
								Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								Makefile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,100 @@
 | 
			
		|||
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}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue