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