.PHONY: help test-race lint sec-scan gci-format db-mysql-init docker-image-build db-mysql-down generate help: ## show how tot use this tools @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[36m%-25s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) PROJECT_NAME?=member ######## # test # ######## test-race: ## launch all tests with race detection go test ./... -cover -race ######## # lint # ######## lint: ## lints the entire codebase @golangci-lint run ./... --config=./.golangci.yaml ####### # sec # ####### sec-scan: trivy-scan vuln-scan ## scan for security and vulnerability issues trivy-scan: ## scan for sec issues with trivy (trivy binary needed) trivy fs --exit-code 1 --no-progress --severity CRITICAL ./ vuln-scan: ## scan for vulnerability issues with govulncheck (govulncheck binary needed) govulncheck ./... ###### # db # ###### MYSQL_SQL_PATH="./database/migrations/mysql" db-mysql-init: @( \ printf "Enter migrate name: "; read -r MIGRATE_NAME && \ migrate create -ext sql -dir ${MYSQL_SQL_PATH} $${MIGRATE_NAME} \ ) db-mysql-up: @( \ printf "Enter pass for db: \n"; read -rs DB_PASSWORD && \ printf "Enter port(3306...): \n"; read -r DB_PORT &&\ migrate --database "mysql://root:$${DB_PASSWORD}@tcp(localhost:$${DB_PORT})/$(PROJECT_NAME)?charset=utf8&parseTime=True&loc=Local" --path ${MYSQL_SQL_PATH} up \ ) db-mysql-down: @( \ printf "Enter pass for db: \n"; read -s DB_PASSWORD && \ printf "Enter port(3306...): \n"; read -r DB_PORT &&\ migrate --database "mysql://root:$${DB_PASSWORD}@tcp(localhost:$${DB_PORT})/$(PROJECT_NAME)?charset=utf8&parseTime=True&loc=Local" --path ${MYSQL_SQL_PATH} down \ ) SQL_FILE_TIMESTAMP=$(shell date '+%Y%m%d%H%M%S') gen-migrate-sql: @( \ printf "Enter file name: "; read -r FILE_NAME; \ touch database/migrations/mysql/$(SQL_FILE_TIMESTAMP)_$$FILE_NAME.up.sql; \ touch database/migrations/mysql/$(SQL_FILE_TIMESTAMP)_$$FILE_NAME.down.sql; \ ) ########### # GCI # ########### gci-format: gci write --skip-generated -s standard -s default -s "prefix(yt.com/backend)" -s "prefix($(PROJECT_NAME))" ./ ######### # build # ######### GitCommit=$(shell git rev-parse HEAD) Date=$(shell date -Iseconds) build: @( \ printf "Enter file name: "; read -r VERSION; \ go build -ldflags "-s -w -X 'main.Version=$$VERSION' -X 'main.Built=$(Date)' -X 'main.GitCommit=$(GitCommit)'" -o ./bin/$(PROJECT_NAME) ./cmd/$(PROJECT_NAME) \ ) docker-image-build: docker build \ -f ./build/Dockerfile \ -t $(PROJECT_NAME) \ --platform linux/amd64 \ --build-arg BUILT=$(Date) \ --build-arg GIT_COMMIT=$(GitCommit) \ --ssh default=$$HOME/.ssh/id_rsa \ ./ generate: @( \ printf "Generate protobuf .... "; \ # goctl rpc protoc ./generate/protobuf/member.proto --style=go_zero --go_out=./gen_result/pb --go-grpc_out=./gen_result/pb --zrpc_out=. \ # printf "Generate docker .... "; \ # goctl docker --go member.go --exe member --version 1.22 --tz Asia/Taipei --remote code.30cm.net --base gcr.io/distroless/static-debian12 # goctl model mysql ddl -c yes -s ./generate/database/mysql/20230529020011_account_uid_table.up.sql --style go_zero -d ./internal/model )