github.com/venafi-iw/cosign@v1.3.4/Makefile (about) 1 # 2 # Copyright 2021 The Sigstore Authors. 3 # 4 # Licensed under the Apache License, Version 2.0 (the "License"); 5 # you may not use this file except in compliance with the License. 6 # You may obtain a copy of the License at 7 # 8 # http://www.apache.org/licenses/LICENSE-2.0 9 # 10 # Unless required by applicable law or agreed to in writing, software 11 # distributed under the License is distributed on an "AS IS" BASIS, 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 # See the License for the specific language governing permissions and 14 # limitations under the License. 15 16 # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) 17 ifeq (,$(shell go env GOBIN)) 18 GOBIN=$(shell go env GOPATH)/bin 19 else 20 GOBIN=$(shell go env GOBIN) 21 endif 22 23 GOFILES ?= $(shell find . -type f -name '*.go' -not -path "./vendor/*") 24 25 # Set version variables for LDFLAGS 26 PROJECT_ID ?= projectsigstore 27 RUNTIME_IMAGE ?= gcr.io/distroless/static 28 GIT_TAG ?= dirty-tag 29 GIT_VERSION ?= $(shell git describe --tags --always --dirty) 30 GIT_HASH ?= $(shell git rev-parse HEAD) 31 DATE_FMT = +'%Y-%m-%dT%H:%M:%SZ' 32 SOURCE_DATE_EPOCH ?= $(shell git log -1 --pretty=%ct) 33 ifdef SOURCE_DATE_EPOCH 34 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)") 35 else 36 BUILD_DATE ?= $(shell date "$(DATE_FMT)") 37 endif 38 GIT_TREESTATE = "clean" 39 DIFF = $(shell git diff --quiet >/dev/null 2>&1; if [ $$? -eq 1 ]; then echo "1"; fi) 40 ifeq ($(DIFF), 1) 41 GIT_TREESTATE = "dirty" 42 endif 43 PLATFORMS=darwin linux windows 44 ARCHITECTURES=amd64 45 46 PKG=github.com/sigstore/cosign/pkg/version 47 LDFLAGS=-X $(PKG).GitVersion=$(GIT_VERSION) -X $(PKG).gitCommit=$(GIT_HASH) -X $(PKG).gitTreeState=$(GIT_TREESTATE) -X $(PKG).buildDate=$(BUILD_DATE) 48 49 SRCS = $(shell find cmd -iname "*.go") $(shell find pkg -iname "*.go") 50 51 GOLANGCI_LINT_DIR = $(shell pwd)/bin 52 GOLANGCI_LINT_BIN = $(GOLANGCI_LINT_DIR)/golangci-lint 53 54 KO_PREFIX ?= gcr.io/projectsigstore 55 export KO_DOCKER_REPO=$(KO_PREFIX) 56 57 .PHONY: all lint test clean cosign cross 58 all: cosign 59 60 log-%: 61 @grep -h -E '^$*:.*?## .*$$' $(MAKEFILE_LIST) | \ 62 awk \ 63 'BEGIN { \ 64 FS = ":.*?## " \ 65 }; \ 66 { \ 67 printf "\033[36m==> %s\033[0m\n", $$2 \ 68 }' 69 70 .PHONY: checkfmt 71 checkfmt: SHELL := /usr/bin/env bash 72 checkfmt: ## Check formatting of all go files 73 @ $(MAKE) --no-print-directory log-$@ 74 $(shell test -z "$(shell gofmt -l $(GOFILES) | tee /dev/stderr)") 75 $(shell test -z "$(shell goimports -l $(GOFILES) | tee /dev/stderr)") 76 77 .PHONY: fmt 78 fmt: ## Format all go files 79 @ $(MAKE) --no-print-directory log-$@ 80 goimports -w $(GOFILES) 81 82 cosign: $(SRCS) 83 CGO_ENABLED=0 go build -trimpath -ldflags "$(LDFLAGS)" -o $@ ./cmd/cosign 84 85 cosign-pivkey-pkcs11key: $(SRCS) 86 CGO_ENABLED=1 go build -trimpath -tags=pivkey,pkcs11key -ldflags "$(LDFLAGS)" -o cosign ./cmd/cosign 87 88 .PHONY: cosigned 89 cosigned: ## Build cosigned binary 90 CGO_ENABLED=0 go build -trimpath -ldflags "$(LDFLAGS)" -o $@ ./cmd/cosign/webhook 91 92 .PHONY: sget 93 sget: ## Build sget binary 94 go build -trimpath -ldflags "$(LDFLAGS)" -o $@ ./cmd/sget 95 96 .PHONY: cross 97 cross: 98 $(foreach GOOS, $(PLATFORMS),\ 99 $(foreach GOARCH, $(ARCHITECTURES), $(shell export GOOS=$(GOOS); export GOARCH=$(GOARCH); \ 100 go build -trimpath -ldflags "$(LDFLAGS)" -o cosign-$(GOOS)-$(GOARCH) ./cmd/cosign; \ 101 shasum -a 256 cosign-$(GOOS)-$(GOARCH) > cosign-$(GOOS)-$(GOARCH).sha256 ))) \ 102 103 ##################### 104 # lint / test section 105 ##################### 106 107 golangci-lint: 108 rm -f $(GOLANGCI_LINT_BIN) || : 109 set -e ;\ 110 GOBIN=$(GOLANGCI_LINT_DIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.43.0 ;\ 111 112 lint: golangci-lint ## Run golangci-lint linter 113 $(GOLANGCI_LINT_BIN) run -n 114 115 test: 116 go test ./... 117 118 clean: 119 rm -rf cosign 120 rm -rf cosigned 121 rm -rf sget 122 rm -rf dist/ 123 124 ########## 125 # ko build 126 ########## 127 .PHONY: ko 128 ko: 129 LDFLAGS="$(LDFLAGS)" GIT_HASH=$(GIT_HASH) GIT_VERSION=$(GIT_VERSION) \ 130 ko publish --base-import-paths --bare \ 131 --platform=all --tags $(GIT_VERSION) --tags $(GIT_HASH) \ 132 github.com/sigstore/cosign/cmd/cosign 133 134 # cosigned 135 LDFLAGS="$(LDFLAGS)" GIT_HASH=$(GIT_HASH) GIT_VERSION=$(GIT_VERSION) \ 136 KO_DOCKER_REPO=${KO_PREFIX}/cosigned ko publish --bare \ 137 --platform=all --tags $(GIT_VERSION) --tags $(GIT_HASH) \ 138 github.com/sigstore/cosign/cmd/cosign/webhook 139 140 # sget 141 LDFLAGS="$(LDFLAGS)" GIT_HASH=$(GIT_HASH) GIT_VERSION=$(GIT_VERSION) \ 142 ko publish --base-import-paths --bare \ 143 --platform=all --tags $(GIT_VERSION) --tags $(GIT_HASH) \ 144 github.com/sigstore/cosign/cmd/sget 145 146 .PHONY: ko-local 147 ko-local: 148 LDFLAGS="$(LDFLAGS)" GIT_HASH=$(GIT_HASH) GIT_VERSION=$(GIT_VERSION) \ 149 ko publish --base-import-paths --bare \ 150 --tags $(GIT_VERSION) --tags $(GIT_HASH) --local \ 151 github.com/sigstore/cosign/cmd/cosign 152 153 ################## 154 # help 155 ################## 156 157 help: # Display help 158 @awk -F ':|##' \ 159 '/^[^\t].+?:.*?##/ {\ 160 printf "\033[36m%-30s\033[0m %s\n", $$1, $$NF \ 161 }' $(MAKEFILE_LIST) | sort 162 163 include release/release.mk 164 include test/ci.mk 165 166 ########################## 167 # Documentation generation 168 ########################## 169 170 .PHONY: docgen 171 docgen: 172 go run -tags pivkey,pkcs11key,cgo ./cmd/help/