set fallback default: just --choose list: just --list import? 'justfile.custom' # Variables with defaults CGO_ENABLED := env_var_or_default('CGO_ENABLED', '0') GO111MODULE := env_var_or_default('GO111MODULE', 'on') GOFLAGS := env_var_or_default('GOFLAGS', '"-mod=mod"') SUFFIX := env_var_or_default('SUFFIX', '') # Determine project name NAME := if env_var_or_default('GITEA_REPO_NAME', '') != '' { env_var('GITEA_REPO_NAME') } else { file_name(justfile_directory()) } OUTBIN := env_var_or_default('OUTBIN', NAME) # Build metadata VERSION := env_var_or_default('VERSION', `git describe --tags --always --dirty 2> /dev/null || echo dev`) BUILD_TIME := env_var_or_default('BUILD_TIME', `/bin/date +%FT%T%z`) PKG := `GOWORK=off go list -m` LD_FLAGS_OPTIMIZE := env_var_or_default('LD_FLAGS_OPTIMIZE', '-s -w') LD_FLAGS := '"-X main.Version=' + VERSION + ' -X main.BuildTime=' + BUILD_TIME + ' ' + LD_FLAGS_OPTIMIZE + '"' GO_OPTS := env_var_or_default('GO_OPTS', '-trimpath') OPTIMIZE := env_var_or_default('OPTIMIZE', 'false') # Display version information version: @echo {{NAME}} {{VERSION}} {{BUILD_TIME}} {{PKG}} {{LD_FLAGS}} # Build for all platforms all-build: build-linux-amd64 build-linux-arm64 build-linux-386 # Download dependencies download: @echo Download go.mod dependencies go mod download # Generate code generate: GOWORK=off go generate -mod=mod ./... # Run wire dependency injection wire: go generate -x ./di # Build for specific platform build GOOS GOARCH: GOOS={{GOOS}} GOARCH={{GOARCH}} CGO_ENABLED={{CGO_ENABLED}} go build \ -ldflags {{LD_FLAGS}} {{GO_OPTS}} \ -mod mod \ -o bin/{{OUTBIN}}{{SUFFIX}}_{{GOOS}}_{{GOARCH}} \ ./main.go build-race: GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -race \ -ldflags {{LD_FLAGS}} {{GO_OPTS}} \ -mod mod \ -o bin/{{OUTBIN}}{{SUFFIX}}_linux_amd64 \ ./main.go # Install binaries install: CGO_ENABLED={{CGO_ENABLED}} go install \ -ldflags {{LD_FLAGS}} \ ./... # Build for Linux ARM64 build-linux-arm64: (build "linux" "arm64") # Build for Linux AMD64 build-linux-amd64: (build "linux" "amd64") # Build for Linux 386 build-linux-386: (build "linux" "386") # Pre-push checks prepush: generate vet fmt tidy test # Run tests test: CGO_ENABLED=0 go build -mod=mod ./... CGO_ENABLED=1 go test -race -cover -v -mod=mod ./... && echo -e "\033[32mSUCCESS\033[0m" || (echo -e "\033[31mFAILED\033[0m" && exit 1) # Run benchmarks bench: go test -test.timeout=30m -benchmem -run ^$$ -benchtime=20s -bench . ./... && echo -e "\033[32mSUCCESS\033[0m" || (echo -e "\033[31mFAILED\033[0m" && exit 1) # Run go vet vet: go vet ./... # Format code fmt: go fmt ./... # Tidy dependencies tidy: go mod tidy verify: go mod verify # List all modules go_list: go list -u -m all # Update all dependencies go_update_all: go get -t -u ./...