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