.PHONY: help build clean build-all package release .DEFAULT_GOAL := help ### Calculate a few variables for use in building and deploying the app VERSION = $(shell git describe --tags --always) COMMIT = $(shell git log --pretty='format:%h' -n 1) BUILDDATE = $(shell date +"%Y.%m.%d.%H%M%S") # ldflags inject new values into variables at compilation time # this is how we dynamically set the version/etc of the application ldflags = "-X 'main.appVersion=$(VERSION)' \ -X 'main.appCommit=$(COMMIT)' \ -X 'main.buildTime=$(BUILDDATE)' \ -w -s" ##@ Help help: ## Display this help @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) ##@ Utilities init: ## Install utils go mod download go install github.com/markbates/pkger/cmd/pkger run: ## go-run locally (optional args="") go run gemif/cmd/gemif air: ## run app with live reloading rm -f cmd/gemif/pkged.go air -c .air.toml tidy_deps: ## Remove unused dependencies go mod tidy upgrade_deps: ## Upgrade versions of dependencies go get -u ##@ Build gemif-build: clean generate ## Build GemIF server for your native architecture go build -o ./bin/gemif -ldflags=$(ldflags) gemif/cmd/gemif gemif-build-all: clean generate ## Build GemIF server for linux and mac GOOS=darwin GOARCH=amd64 go build -o ./bin/gemif-darwin-amd64/gemif -ldflags=$(ldflags) gemif/cmd/gemif GOOS=linux GOARCH=amd64 go build -o ./bin/gemif-linux-amd64/gemif -ldflags=$(ldflags) gemif/cmd/gemif GOOS=linux GOARCH=arm64 go build -o ./bin/gemif-linux-arm64/gemif -ldflags=$(ldflags) gemif/cmd/gemif gemifc-build: clean ## Build story copiler for your native architecture go build -o ./bin/gemifc -ldflags=$(ldflags) gemif/cmd/gemifc gemifc-build-all: clean ## Build story compiler for linux and mac GOOS=darwin GOARCH=amd64 go build -o ./bin/gemif-darwin-amd64/gemifc -ldflags=$(ldflags) gemif/cmd/gemifc GOOS=linux GOARCH=amd64 go build -o ./bin/gemif-linux-amd64/gemifc -ldflags=$(ldflags) gemif/cmd/gemifc GOOS=linux GOARCH=arm64 go build -o ./bin/gemif-linux-arm64/gemifc -ldflags=$(ldflags) gemif/cmd/gemifc build: gemif-build gemifc-build ## Build gemif and gemifc for native architecture build-all: gemif-build-all gemifc-build-all ## Build gemif and gemifc for linux and mac clean: ## Delete any compiled artifacts rm -rf ./bin generate: ## Generate bindata from static files go generate gemif/cmd/gemif protobuf: ## until i can reliably re-generate this, separate it from generate protoc -I pkg/ --go_out=pkg/ pkg/gamemanager/statetoken.proto ##@ Deploy package: build-all ## Build everything and package up arch-specific tarballs tar czvf ./bin/gemif-darwin-amd64.tar.gz ./bin/gemif-darwin-amd64 tar czvf ./bin/gemif-linux-amd64.tar.gz ./bin/gemif-linux-amd64 tar czvf ./bin/gemif-linux-arm64.tar.gz ./bin/gemif-linux-arm64 release: package ## Attach packages to sr.ht ref for current tag ./scripts/release_version.sh ##@ Test test: ## Run tests go test $(shell go list ./...) -coverprofile=coverage.out go tool cover -func=coverage.out nonmegalint: ## do a regular golint golint $(shell go list ./...) megalint: ## Run several linters in parallel (requires docker) docker run --rm -v $(PWD):/app -w /app golangci/golangci-lint:latest golangci-lint run \ --skip-files pkger.go \ --enable-all # Non-docker golangci-lint for running in CI without docker available megalintci: golangci-lint run --skip-files pkger.go --enable-all