github.com/hellobchain/third_party@v0.0.0-20230331131523-deb0478a2e52/prometheus/procfs/Makefile.common (about) 1 # Copyright 2018 The Prometheus Authors 2 # Licensed under the Apache License, Version 2.0 (the "License"); 3 # you may not use this file except in compliance with the License. 4 # You may obtain a copy of the License at 5 # 6 # http://www.apache.org/licenses/LICENSE-2.0 7 # 8 # Unless required by applicable law or agreed to in writing, software 9 # distributed under the License is distributed on an "AS IS" BASIS, 10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 # See the License for the specific language governing permissions and 12 # limitations under the License. 13 14 15 # A common Makefile that includes rules to be reused in different prometheus projects. 16 # !!! Open PRs only against the prometheus/prometheus/Makefile.common repository! 17 18 # Example usage : 19 # Create the main Makefile in the root project directory. 20 # include Makefile.common 21 # customTarget: 22 # @echo ">> Running customTarget" 23 # 24 25 # Ensure GOBIN is not set during build so that promu is installed to the correct path 26 unexport GOBIN 27 28 GO ?= go 29 GOFMT ?= $(GO)fmt 30 FIRST_GOPATH := $(firstword $(subst :, ,$(shell $(GO) env GOPATH))) 31 GOOPTS ?= 32 33 GO_VERSION ?= $(shell $(GO) version) 34 GO_VERSION_NUMBER ?= $(word 3, $(GO_VERSION)) 35 PRE_GO_111 ?= $(shell echo $(GO_VERSION_NUMBER) | grep -E 'go1\.(10|[0-9])\.') 36 37 unexport GOVENDOR 38 ifeq (, $(PRE_GO_111)) 39 ifneq (,$(wildcard go.mod)) 40 # Enforce Go modules support just in case the directory is inside GOPATH (and for Travis CI). 41 GO111MODULE := on 42 43 ifneq (,$(wildcard vendor)) 44 # Always use the local vendor/ directory to satisfy the dependencies. 45 GOOPTS := $(GOOPTS) -mod=vendor 46 endif 47 endif 48 else 49 ifneq (,$(wildcard go.mod)) 50 ifneq (,$(wildcard vendor)) 51 $(warning This repository requires Go >= 1.11 because of Go modules) 52 $(warning Some recipes may not work as expected as the current Go runtime is '$(GO_VERSION_NUMBER)') 53 endif 54 else 55 # This repository isn't using Go modules (yet). 56 GOVENDOR := $(FIRST_GOPATH)/bin/govendor 57 endif 58 59 unexport GO111MODULE 60 endif 61 PROMU := $(FIRST_GOPATH)/bin/promu 62 STATICCHECK := $(FIRST_GOPATH)/bin/staticcheck 63 pkgs = ./... 64 65 GO_VERSION ?= $(shell $(GO) version) 66 GO_BUILD_PLATFORM ?= $(subst /,-,$(lastword $(GO_VERSION))) 67 68 PROMU_VERSION ?= 0.2.0 69 PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz 70 71 PREFIX ?= $(shell pwd) 72 BIN_DIR ?= $(shell pwd) 73 DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) 74 DOCKER_REPO ?= prom 75 76 .PHONY: all 77 all: precheck style staticcheck unused build test 78 79 # This rule is used to forward a target like "build" to "common-build". This 80 # allows a new "build" target to be defined in a Makefile which includes this 81 # one and override "common-build" without override warnings. 82 %: common-% ; 83 84 .PHONY: common-style 85 common-style: 86 @echo ">> checking code style" 87 @fmtRes=$$($(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print)); \ 88 if [ -n "$${fmtRes}" ]; then \ 89 echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \ 90 echo "Please ensure you are using $$($(GO) version) for formatting code."; \ 91 exit 1; \ 92 fi 93 94 .PHONY: common-check_license 95 common-check_license: 96 @echo ">> checking license header" 97 @licRes=$$(for file in $$(find . -type f -iname '*.go' ! -path './vendor/*') ; do \ 98 awk 'NR<=3' $$file | grep -Eq "(Copyright|generated|GENERATED)" || echo $$file; \ 99 done); \ 100 if [ -n "$${licRes}" ]; then \ 101 echo "license header checking failed:"; echo "$${licRes}"; \ 102 exit 1; \ 103 fi 104 105 .PHONY: common-test-short 106 common-test-short: 107 @echo ">> running short tests" 108 GO111MODULE=$(GO111MODULE) $(GO) test -short $(GOOPTS) $(pkgs) 109 110 .PHONY: common-test 111 common-test: 112 @echo ">> running all tests" 113 GO111MODULE=$(GO111MODULE) $(GO) test -race $(GOOPTS) $(pkgs) 114 115 .PHONY: common-format 116 common-format: 117 @echo ">> formatting code" 118 GO111MODULE=$(GO111MODULE) $(GO) fmt $(GOOPTS) $(pkgs) 119 120 .PHONY: common-vet 121 common-vet: 122 @echo ">> vetting code" 123 GO111MODULE=$(GO111MODULE) $(GO) vet $(GOOPTS) $(pkgs) 124 125 .PHONY: common-staticcheck 126 common-staticcheck: $(STATICCHECK) 127 @echo ">> running staticcheck" 128 ifdef GO111MODULE 129 GO111MODULE=$(GO111MODULE) $(STATICCHECK) -ignore "$(STATICCHECK_IGNORE)" -checks "SA*" $(pkgs) 130 else 131 $(STATICCHECK) -ignore "$(STATICCHECK_IGNORE)" $(pkgs) 132 endif 133 134 .PHONY: common-unused 135 common-unused: $(GOVENDOR) 136 ifdef GOVENDOR 137 @echo ">> running check for unused packages" 138 @$(GOVENDOR) list +unused | grep . && exit 1 || echo 'No unused packages' 139 else 140 ifdef GO111MODULE 141 @echo ">> running check for unused/missing packages in go.mod" 142 GO111MODULE=$(GO111MODULE) $(GO) mod tidy 143 @git diff --exit-code -- go.sum go.mod 144 ifneq (,$(wildcard vendor)) 145 @echo ">> running check for unused packages in vendor/" 146 GO111MODULE=$(GO111MODULE) $(GO) mod vendor 147 @git diff --exit-code -- go.sum go.mod vendor/ 148 endif 149 endif 150 endif 151 152 .PHONY: common-build 153 common-build: promu 154 @echo ">> building binaries" 155 GO111MODULE=$(GO111MODULE) $(PROMU) build --prefix $(PREFIX) 156 157 .PHONY: common-tarball 158 common-tarball: promu 159 @echo ">> building release tarball" 160 $(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) 161 162 .PHONY: common-docker 163 common-docker: 164 docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" . 165 166 .PHONY: common-docker-publish 167 common-docker-publish: 168 docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)" 169 170 .PHONY: common-docker-tag-latest 171 common-docker-tag-latest: 172 docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):latest" 173 174 .PHONY: promu 175 promu: $(PROMU) 176 177 $(PROMU): 178 curl -s -L $(PROMU_URL) | tar -xvz -C /tmp 179 mkdir -v -p $(FIRST_GOPATH)/bin 180 cp -v /tmp/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM)/promu $(PROMU) 181 182 .PHONY: proto 183 proto: 184 @echo ">> generating code from proto files" 185 @./scripts/genproto.sh 186 187 .PHONY: $(STATICCHECK) 188 $(STATICCHECK): 189 ifdef GO111MODULE 190 # Get staticcheck from a temporary directory to avoid modifying the local go.{mod,sum}. 191 # See https://github.com/golang/go/issues/27643. 192 # For now, we are using the next branch of staticcheck because master isn't compatible yet with Go modules. 193 tmpModule=$$(mktemp -d 2>&1) && \ 194 mkdir -p $${tmpModule}/staticcheck && \ 195 cd "$${tmpModule}"/staticcheck && \ 196 GO111MODULE=on $(GO) mod init example.com/staticcheck && \ 197 GO111MODULE=on GOOS= GOARCH= $(GO) get -u honnef.co/go/tools/cmd/staticcheck@next && \ 198 rm -rf $${tmpModule}; 199 else 200 GOOS= GOARCH= GO111MODULE=off $(GO) get -u honnef.co/go/tools/cmd/staticcheck 201 endif 202 203 ifdef GOVENDOR 204 .PHONY: $(GOVENDOR) 205 $(GOVENDOR): 206 GOOS= GOARCH= $(GO) get -u github.com/kardianos/govendor 207 endif 208 209 .PHONY: precheck 210 precheck:: 211 212 define PRECHECK_COMMAND_template = 213 precheck:: $(1)_precheck 214 215 216 PRECHECK_COMMAND_$(1) ?= $(1) $$(strip $$(PRECHECK_OPTIONS_$(1))) 217 .PHONY: $(1)_precheck 218 $(1)_precheck: 219 @if ! $$(PRECHECK_COMMAND_$(1)) 1>/dev/null 2>&1; then \ 220 echo "Execution of '$$(PRECHECK_COMMAND_$(1))' command failed. Is $(1) installed?"; \ 221 exit 1; \ 222 fi 223 endef