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)