github.com/wolfi-dev/wolfictl@v0.16.11/Makefile (about) 1 # Some nice defines for the "make install" target 2 PREFIX ?= /usr 3 BINDIR ?= ${PREFIX}/bin 4 5 # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) 6 ifeq (,$(shell go env GOBIN)) 7 GOBIN=$(shell go env GOPATH)/bin 8 else 9 GOBIN=$(shell go env GOBIN) 10 endif 11 12 GOFILES ?= $(shell find . -type f -name '*.go' -not -path "./vendor/*") 13 14 # Set version variables for LDFLAGS 15 GIT_TAG ?= dirty-tag 16 GIT_VERSION ?= $(shell git describe --tags --always --dirty) 17 GIT_HASH ?= $(shell git rev-parse HEAD) 18 DATE_FMT = +'%Y-%m-%dT%H:%M:%SZ' 19 SOURCE_DATE_EPOCH ?= $(shell git log -1 --pretty=%ct) 20 ifdef SOURCE_DATE_EPOCH 21 BUILD_DATE ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null || date -u -r "$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null || date -u "$(DATE_FMT)") 22 else 23 BUILD_DATE ?= $(shell date "$(DATE_FMT)") 24 endif 25 GIT_TREESTATE = "clean" 26 DIFF = $(shell git diff --quiet >/dev/null 2>&1; if [ $$? -eq 1 ]; then echo "1"; fi) 27 ifeq ($(DIFF), 1) 28 GIT_TREESTATE = "dirty" 29 endif 30 31 SRCS = $(shell find . -iname "*.go") 32 33 PKG ?= sigs.k8s.io/release-utils/version 34 LDFLAGS=-buildid= -X $(PKG).gitVersion=$(GIT_VERSION) \ 35 -X $(PKG).gitCommit=$(GIT_HASH) \ 36 -X $(PKG).gitTreeState=$(GIT_TREESTATE) \ 37 -X $(PKG).buildDate=$(BUILD_DATE) 38 39 KO_DOCKER_REPO ?= ghcr.io/wolfi-dev/wolfictl 40 DIGEST ?= 41 BUILDFLAGS ?= 42 43 ifdef DEBUG 44 BUILDFLAGS := -gcflags "all=-N -l" $(BUILDFLAGS) 45 endif 46 47 ########## 48 # default 49 ########## 50 51 default: help 52 53 ########## 54 # Build 55 ########## 56 57 .PHONY: wolfictl 58 wolfictl: $(SRCS) ## Builds wolfictl 59 go build -trimpath $(BUILDFLAGS) -ldflags "$(LDFLAGS)" -o $@ ./ 60 61 .PHONY: install 62 install: wolfictl ## Installs wolfictl into BINDIR (default /usr/bin) 63 install -Dm755 wolfictl ${DESTDIR}${BINDIR}/wolfictl 64 65 ##################### 66 # lint / test section 67 ##################### 68 69 GOLANGCI_LINT_DIR = $(shell pwd)/bin 70 GOLANGCI_LINT_BIN = $(GOLANGCI_LINT_DIR)/golangci-lint 71 72 .PHONY: golangci-lint 73 golangci-lint: 74 rm -f $(GOLANGCI_LINT_BIN) || : 75 set -e ;\ 76 GOBIN=$(GOLANGCI_LINT_DIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.44.2 ;\ 77 78 .PHONY: fmt 79 fmt: ## Format all go files 80 @ $(MAKE) --no-print-directory log-$@ 81 goimports -w $(GOFILES) 82 83 .PHONY: checkfmt 84 checkfmt: SHELL := /usr/bin/env bash 85 checkfmt: ## Check formatting of all go files 86 @ $(MAKE) --no-print-directory log-$@ 87 $(shell test -z "$(shell gofmt -l $(GOFILES) | tee /dev/stderr)") 88 $(shell test -z "$(shell goimports -l $(GOFILES) | tee /dev/stderr)") 89 90 log-%: 91 @grep -h -E '^$*:.*?## .*$$' $(MAKEFILE_LIST) | \ 92 awk \ 93 'BEGIN { \ 94 FS = ":.*?## " \ 95 }; \ 96 { \ 97 printf "\033[36m==> %s\033[0m\n", $$2 \ 98 }' 99 100 .PHONY: lint 101 lint: checkfmt golangci-lint ## Run linters and checks like golangci-lint 102 $(GOLANGCI_LINT_BIN) run -n 103 104 .PHONY: test 105 test: ## Run go test 106 go test ./... 107 108 .PHONY: clean 109 clean: ## Clean the workspace 110 rm -rf wolfictl 111 rm -rf bin/ 112 rm -rf dist/ 113 114 ################## 115 # help 116 ################## 117 118 help: ## Display help 119 @awk -F ':|##' \ 120 '/^[^\t].+?:.*?##/ {\ 121 printf "\033[36m%-30s\033[0m %s\n", $$1, $$NF \ 122 }' $(MAKEFILE_LIST) | sort 123 124 bin/docs: 125 go build -v -o bin/docs cmd/docs/*.go 126 127 .PHONY: docs 128 docs: bin/docs ## update docs 129 @echo "Generating docs" 130 @./bin/docs --target=./docs/cmd 131 @./bin/docs --target=./docs/man/man1 --kind=man 132 @rm -f ./bin/docs