github.com/sudo-bmitch/version-bump@v0.0.0-20240503123857-70b0e3f646dd/Makefile (about) 1 COMMANDS?=version-bump 2 BINARIES?=$(addprefix bin/,$(COMMANDS)) 3 IMAGES?=$(addprefix docker-,$(COMMANDS)) 4 ARTIFACT_PLATFORMS?=linux-amd64 linux-arm64 linux-ppc64le linux-s390x darwin-amd64 darwin-arm64 windows-amd64.exe 5 ARTIFACTS?=$(foreach cmd,$(addprefix artifacts/,$(COMMANDS)),$(addprefix $(cmd)-,$(ARTIFACT_PLATFORMS))) 6 TEST_PLATFORMS?=linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x 7 VCS_REPO?="https://github.com/sudo-bmitch/version-bump.git" 8 VCS_REF?=$(shell git rev-list -1 HEAD) 9 ifneq ($(shell git status --porcelain 2>/dev/null),) 10 VCS_REF := $(VCS_REF)-dirty 11 endif 12 VCS_DATE?=$(shell date -d "@$(shell git log -1 --format=%at)" +%Y-%m-%dT%H:%M:%SZ --utc) 13 VCS_TAG?=$(shell git describe --tags --abbrev=0 2>/dev/null || true) 14 LD_FLAGS?=-s -w -extldflags -static -buildid= 15 GO_BUILD_FLAGS?=-trimpath -ldflags "$(LD_FLAGS)" -tags nolegacy 16 DOCKERFILE_EXT?=$(shell if docker build --help 2>/dev/null | grep -q -- '--progress'; then echo ".buildkit"; fi) 17 DOCKER_ARGS?=--build-arg "VCS_REF=$(VCS_REF)" 18 GOPATH?=$(shell go env GOPATH) 19 PWD:=$(shell pwd) 20 MARKDOWN_LINT_VER?=v0.13.0 21 GOMAJOR_VER?=v0.10.1 22 GO_VULNCHECK_VER?=v1.1.0 23 OSV_SCANNER_VER?=v1.7.2 24 STATICCHECK_VER?=v0.4.7 25 26 .PHONY: .FORCE 27 28 .FORCE: 29 30 .PHONY: all 31 all: fmt vet test lint binaries ## Full build of Go binaries (including fmt, vet, test, and lint) 32 33 .PHONY: fmt 34 fmt: ## go fmt 35 go fmt ./... 36 37 .PHONY: vet 38 vet: ## go vet 39 go vet ./... 40 41 .PHONY: test 42 test: ## go test 43 go test -cover ./... 44 45 .PHONY: lint 46 lint: lint-go lint-md ## Run all linting 47 48 .PHONY: lint-go 49 lint-go: $(GOPATH)/bin/staticcheck .FORCE ## Run linting for Go 50 $(GOPATH)/bin/staticcheck -checks all ./... 51 52 .PHONY: lint-md 53 lint-md: .FORCE ## Run linting for markdown 54 docker run --rm -v "$(PWD):/workdir:ro" davidanson/markdownlint-cli2:$(MARKDOWN_LINT_VER) \ 55 "**/*.md" "#vendor" 56 57 .PHONY: vulnerability-scan 58 vulnerability-scan: osv-scanner vulncheck-go ## Run all vulnerability scanners 59 60 .PHONY: osv-scanner 61 osv-scanner: $(GOPATH)/bin/osv-scanner .FORCE ## Run OSV Scanner 62 $(GOPATH)/bin/osv-scanner scan --config .osv-scanner.toml -r --experimental-licenses="Apache-2.0,BSD-2-Clause,BSD-3-Clause,ISC,MIT,CC-BY-SA-4.0,UNKNOWN" . 63 64 .PHONY: vulncheck-go 65 vulncheck-go: $(GOPATH)/bin/govulncheck .FORCE ## Run govulncheck 66 $(GOPATH)/bin/govulncheck ./... 67 68 .PHONY: vendor 69 vendor: ## Vendor Go modules 70 go mod vendor 71 72 .PHONY: binaries 73 binaries: $(BINARIES) ## Build Go binaries 74 75 bin/version-bump: .FORCE 76 CGO_ENABLED=0 go build ${GO_BUILD_FLAGS} -o bin/version-bump . 77 78 .PHONY: docker 79 docker: $(IMAGES) ## Build the docker image 80 81 .PHONY: docker-version-bump 82 docker-version-bump: .FORCE 83 docker build -t sudo-bmitch/version-bump -f Dockerfile$(DOCKERFILE_EXT) $(DOCKER_ARGS) . 84 docker build -t sudo-bmitch/version-bump:alpine -f Dockerfile$(DOCKERFILE_EXT) --target release-alpine $(DOCKER_ARGS) . 85 86 # oci-image: $(addprefix oci-image-,$(COMMANDS)) ## Build reproducible images to an OCI Layout 87 88 # oci-image-%: bin/regctl .FORCE 89 # build/oci-image.sh -r scratch -i "$*" -p "$(TEST_PLATFORMS)" 90 # build/oci-image.sh -r alpine -i "$*" -p "$(TEST_PLATFORMS)" -b "alpine:3" 91 92 .PHONY: test-docker 93 test-docker: $(addprefix test-docker-,$(COMMANDS)) ## Test the docker multi-platform image builds 94 95 .PHONY: test-docker-version-bump 96 test-docker-version-bump: 97 docker buildx build --platform="$(TEST_PLATFORMS)" -f Dockerfile.buildkit . 98 docker buildx build --platform="$(TEST_PLATFORMS)" -f Dockerfile.buildkit --target release-alpine . 99 100 .PHONY: artifacts 101 artifacts: $(ARTIFACTS) ## Generate artifacts 102 103 .PHONY: artifact-pre 104 artifact-pre: 105 mkdir -p artifacts 106 107 artifacts/version-bump-%: artifact-pre .FORCE 108 platform_ext="$*"; \ 109 platform="$${platform_ext%.*}"; \ 110 export GOOS="$${platform%%-*}"; \ 111 export GOARCH="$${platform#*-}"; \ 112 echo export GOOS=$${GOOS}; \ 113 echo export GOARCH=$${GOARCH}; \ 114 echo go build ${GO_BUILD_FLAGS} -o "$@" .; \ 115 CGO_ENABLED=0 go build ${GO_BUILD_FLAGS} -o "$@" . 116 117 .PHONY: util-version-check 118 util-version-check: bin/version-bump .FORCE ## Check versions of dependencies in this project 119 bin/version-bump check 120 121 .PHONY: util-version-update 122 util-version-update: bin/version-bump .FORCE ## Update versions of dependencies in this project 123 bin/version-bump update 124 125 .PHONY: util-golang-major 126 util-golang-major: $(GOPATH)/bin/gomajor ## check for major dependency updates 127 $(GOPATH)/bin/gomajor list 128 129 .PHONY: util-golang-update 130 util-golang-update: ## Update golang dependencies 131 go get -u -t ./... 132 go mod tidy 133 [ ! -d vendor ] || go mod vendor 134 135 $(GOPATH)/bin/staticcheck: .FORCE 136 @[ -f $(GOPATH)/bin/staticcheck ] \ 137 && [ "$$($(GOPATH)/bin/staticcheck -version | cut -f 3 -d ' ' | tr -d '()')" = "$(STATICCHECK_VER)" ] \ 138 || go install "honnef.co/go/tools/cmd/staticcheck@$(STATICCHECK_VER)" 139 140 $(GOPATH)/bin/gomajor: .FORCE 141 @[ -f "$(GOPATH)/bin/gomajor" ] \ 142 && [ "$$($(GOPATH)/bin/gomajor version | grep '^version' | cut -f 2 -d ' ')" = "$(GOMAJOR_VER)" ] \ 143 || go install github.com/icholy/gomajor@$(GOMAJOR_VER) 144 145 $(GOPATH)/bin/govulncheck: .FORCE 146 @[ $$(go version -m $(GOPATH)/bin/govulncheck | \ 147 awk -F ' ' '{ if ($$1 == "mod" && $$2 == "golang.org/x/vuln") { printf "%s\n", $$3 } }') = "$(GO_VULNCHECK_VER)" ] \ 148 || CGO_ENABLED=0 go install "golang.org/x/vuln/cmd/govulncheck@$(GO_VULNCHECK_VER)" 149 150 $(GOPATH)/bin/osv-scanner: .FORCE 151 @[ -f $(GOPATH)/bin/osv-scanner ] \ 152 && [ "$$(osv-scanner --version | awk -F ': ' '{ if ($$1 == "osv-scanner version") { printf "%s\n", $$2 } }')" = "$(OSV_SCANNER_VER)" ] \ 153 || CGO_ENABLED=0 go install "github.com/google/osv-scanner/cmd/osv-scanner@$(OSV_SCANNER_VER)" 154 155 help: # Display help 156 @awk -F ':|##' '/^[^\t].+?:.*?##/ { printf "\033[36m%-30s\033[0m %s\n", $$1, $$NF }' $(MAKEFILE_LIST)