github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/Makefile (about) 1 # Copyright hechain All Rights Reserved. 2 # Copyright London Stock Exchange Group All Rights Reserved. 3 # 4 # SPDX-License-Identifier: Apache-2.0 5 # 6 # ------------------------------------------------------------- 7 # This makefile defines the following targets 8 # 9 # - all (default) - builds all targets and runs all non-integration tests/checks 10 # - basic-checks - performs basic checks like license, spelling, trailing spaces and linter 11 # - check-deps - check for vendored dependencies that are no longer used 12 # - checks - runs all non-integration tests/checks 13 # - clean-all - superset of 'clean' that also removes persistent state 14 # - clean - cleans the build area 15 # - configtxgen - builds a native configtxgen binary 16 # - configtxlator - builds a native configtxlator binary 17 # - cryptogen - builds a native cryptogen binary 18 # - desk-check - runs linters and verify to test changed packages 19 # - dist-clean - clean release packages for all target platforms 20 # - docker[-clean] - ensures all docker images are available[/cleaned] 21 # - docker-list - generates a list of docker images that 'make docker' produces 22 # - docker-tag-latest - re-tags the images made by 'make docker' with the :latest tag 23 # - docker-tag-stable - re-tags the images made by 'make docker' with the :stable tag 24 # - docker-thirdparty - pulls thirdparty images (kafka,zookeeper,couchdb) 25 # - docs - builds the documentation in html format 26 # - gotools - installs go tools like golint 27 # - help-docs - generate the command reference docs 28 # - integration-test-prereqs - setup prerequisites for integration tests 29 # - integration-test - runs the integration tests 30 # - ledgerutil - builds a native ledgerutil binary 31 # - license - checks go source files for Apache license header 32 # - linter - runs all code checks 33 # - native - ensures all native binaries are available 34 # - orderer - builds a native fabric orderer binary 35 # - orderer-docker[-clean] - ensures the orderer container is available[/cleaned] 36 # - osnadmin - builds a native fabric osnadmin binary 37 # - peer - builds a native fabric peer binary 38 # - peer-docker[-clean] - ensures the peer container is available[/cleaned] 39 # - profile - runs unit tests for all packages in coverprofile mode (slow) 40 # - protos - generate all protobuf artifacts based on .proto files 41 # - publish-images - publishes release docker images to nexus3 or docker hub. 42 # - release-all - builds release packages for all target platforms 43 # - release - builds release packages for the host platform 44 # - tools-docker[-clean] - ensures the tools container is available[/cleaned] 45 # - unit-test-clean - cleans unit test state (particularly from docker) 46 # - unit-test - runs the go-test based unit tests 47 # - verify - runs unit tests for only the changed package tree 48 49 ALPINE_VER ?= 3.14 50 BASE_VERSION = 2.4.3 51 52 # 3rd party image version 53 # These versions are also set in the runners in ./integration/runners/ 54 COUCHDB_VER ?= 3.1.1 55 KAFKA_VER ?= 5.3.1 56 ZOOKEEPER_VER ?= 5.3.1 57 58 # Disable implicit rules 59 .SUFFIXES: 60 MAKEFLAGS += --no-builtin-rules 61 62 BUILD_DIR ?= build 63 64 EXTRA_VERSION ?= $(shell git rev-parse --short HEAD) 65 PROJECT_VERSION=$(BASE_VERSION)-snapshot-$(EXTRA_VERSION) 66 67 # TWO_DIGIT_VERSION is derived, e.g. "2.0", especially useful as a local tag 68 # for two digit references to most recent baseos and ccenv patch releases 69 TWO_DIGIT_VERSION = $(shell echo $(BASE_VERSION) | cut -d '.' -f 1,2) 70 71 PKGNAME = github.com/hyperledger/fabric 72 ARCH=$(shell go env GOARCH) 73 MARCH=$(shell go env GOOS)-$(shell go env GOARCH) 74 75 # defined in common/metadata/metadata.go 76 METADATA_VAR = Version=$(BASE_VERSION) 77 METADATA_VAR += CommitSHA=$(EXTRA_VERSION) 78 METADATA_VAR += BaseDockerLabel=$(BASE_DOCKER_LABEL) 79 METADATA_VAR += DockerNamespace=$(DOCKER_NS) 80 81 GO_VER = 1.17.5 82 GO_TAGS ?= 83 84 RELEASE_EXES = orderer $(TOOLS_EXES) 85 RELEASE_IMAGES = baseos ccenv orderer peer tools 86 RELEASE_PLATFORMS = darwin-amd64 linux-amd64 windows-amd64 87 TOOLS_EXES = configtxgen configtxlator cryptogen discover ledgerutil osnadmin peer 88 89 pkgmap.configtxgen := $(PKGNAME)/cmd/configtxgen 90 pkgmap.configtxlator := $(PKGNAME)/cmd/configtxlator 91 pkgmap.cryptogen := $(PKGNAME)/cmd/cryptogen 92 pkgmap.discover := $(PKGNAME)/cmd/discover 93 pkgmap.ledgerutil := $(PKGNAME)/cmd/ledgerutil 94 pkgmap.orderer := $(PKGNAME)/cmd/orderer 95 pkgmap.osnadmin := $(PKGNAME)/cmd/osnadmin 96 pkgmap.peer := $(PKGNAME)/cmd/peer 97 98 .DEFAULT_GOAL := all 99 100 include docker-env.mk 101 include gotools.mk 102 103 .PHONY: all 104 all: check-go-version native docker checks 105 106 .PHONY: checks 107 checks: basic-checks unit-test integration-test 108 109 .PHONY: basic-checks 110 basic-checks: check-go-version license spelling references trailing-spaces linter check-help-docs check-metrics-doc filename-spaces check-swagger 111 112 .PHONY: desk-checks 113 desk-check: checks verify 114 115 .PHONY: help-docs 116 help-docs: native 117 @scripts/help_docs.sh 118 119 .PHONY: check-help-docs 120 check-help-docs: native 121 @scripts/help_docs.sh check 122 123 .PHONY: spelling 124 spelling: gotool.misspell 125 @scripts/check_spelling.sh 126 127 .PHONY: references 128 references: 129 @scripts/check_references.sh 130 131 .PHONY: license 132 license: 133 @scripts/check_license.sh 134 135 .PHONY: trailing-spaces 136 trailing-spaces: 137 @scripts/check_trailingspaces.sh 138 139 .PHONY: gotools 140 gotools: gotools-install 141 142 .PHONY: check-go-version 143 check-go-version: 144 @scripts/check_go_version.sh $(GO_VER) 145 146 .PHONY: integration-test 147 integration-test: integration-test-prereqs 148 ./scripts/run-integration-tests.sh 149 150 .PHONY: integration-test-prereqs 151 integration-test-prereqs: gotool.ginkgo baseos-docker ccenv-docker docker-thirdparty ccaasbuilder 152 153 .PHONY: unit-test 154 unit-test: unit-test-clean docker-thirdparty-couchdb 155 ./scripts/run-unit-tests.sh 156 157 .PHONY: unit-tests 158 unit-tests: unit-test 159 160 # Pull thirdparty docker images based on the latest baseimage release version 161 # Also pull ccenv-1.4 for compatibility test to ensure pre-2.0 installed chaincodes 162 # can be built by a peer configured to use the ccenv-1.4 as the builder image. 163 .PHONY: docker-thirdparty 164 docker-thirdparty: docker-thirdparty-couchdb 165 docker pull confluentinc/cp-zookeeper:${ZOOKEEPER_VER} 166 docker pull confluentinc/cp-kafka:${KAFKA_VER} 167 docker pull hyperledger/fabric-ccenv:1.4 168 169 .PHONY: docker-thirdparty-couchdb 170 docker-thirdparty-couchdb: 171 docker pull couchdb:${COUCHDB_VER} 172 173 .PHONY: verify 174 verify: export JOB_TYPE=VERIFY 175 verify: unit-test 176 177 .PHONY: profile 178 profile: export JOB_TYPE=PROFILE 179 profile: unit-test 180 181 .PHONY: linter 182 linter: check-deps gotool.goimports gotool.gofumpt gotool.staticcheck 183 @echo "LINT: Running code checks.." 184 ./scripts/golinter.sh 185 186 .PHONY: check-deps 187 check-deps: 188 @echo "DEP: Checking for dependency issues.." 189 ./scripts/check_deps.sh 190 191 .PHONY: check-metrics-docs 192 check-metrics-doc: 193 @echo "METRICS: Checking for outdated reference documentation.." 194 ./scripts/metrics_doc.sh check 195 196 .PHONY: generate-metrics-docs 197 generate-metrics-doc: 198 @echo "Generating metrics reference documentation..." 199 ./scripts/metrics_doc.sh generate 200 201 .PHONY: check-swagger 202 check-swagger: gotool.swagger 203 @echo "SWAGGER: Checking for outdated swagger..." 204 ./scripts/swagger.sh check 205 206 .PHONY: generate-swagger 207 generate-swagger: gotool.swagger 208 @echo "Generating swagger..." 209 ./scripts/swagger.sh generate 210 211 .PHONY: protos 212 protos: gotool.protoc-gen-go 213 @echo "Compiling non-API protos..." 214 ./scripts/compile_protos.sh 215 216 .PHONY: native 217 native: $(RELEASE_EXES) 218 219 .PHONY: tools 220 tools: $(TOOLS_EXES) 221 222 .PHONY: $(RELEASE_EXES) 223 $(RELEASE_EXES): %: $(BUILD_DIR)/bin/% 224 225 $(BUILD_DIR)/bin/%: GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%) 226 $(BUILD_DIR)/bin/%: 227 @echo "Building $@" 228 @mkdir -p $(@D) 229 GOBIN=$(abspath $(@D)) go install -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 230 @touch $@ 231 232 .PHONY: docker 233 docker: $(RELEASE_IMAGES:%=%-docker) 234 235 .PHONY: $(RELEASE_IMAGES:%=%-docker) 236 $(RELEASE_IMAGES:%=%-docker): %-docker: $(BUILD_DIR)/images/%/$(DUMMY) 237 238 $(BUILD_DIR)/images/baseos/$(DUMMY): BUILD_CONTEXT=images/baseos 239 $(BUILD_DIR)/images/ccenv/$(DUMMY): BUILD_CONTEXT=images/ccenv 240 $(BUILD_DIR)/images/peer/$(DUMMY): BUILD_ARGS=--build-arg GO_TAGS=${GO_TAGS} 241 $(BUILD_DIR)/images/orderer/$(DUMMY): BUILD_ARGS=--build-arg GO_TAGS=${GO_TAGS} 242 $(BUILD_DIR)/images/tools/$(DUMMY): BUILD_ARGS=--build-arg GO_TAGS=${GO_TAGS} 243 244 $(BUILD_DIR)/images/%/$(DUMMY): 245 @echo "Building Docker image $(DOCKER_NS)/fabric-$*" 246 @mkdir -p $(@D) 247 $(DBUILD) -f images/$*/Dockerfile \ 248 --build-arg GO_VER=$(GO_VER) \ 249 --build-arg ALPINE_VER=$(ALPINE_VER) \ 250 $(BUILD_ARGS) \ 251 -t $(DOCKER_NS)/fabric-$* ./$(BUILD_CONTEXT) 252 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(BASE_VERSION) 253 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(TWO_DIGIT_VERSION) 254 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) 255 @touch $@ 256 257 # builds release packages for the host platform 258 .PHONY: release 259 release: check-go-version $(MARCH:%=release/%) 260 261 # builds release packages for all target platforms 262 .PHONY: release-all 263 release-all: check-go-version $(RELEASE_PLATFORMS:%=release/%) 264 265 .PHONY: $(RELEASE_PLATFORMS:%=release/%) 266 $(RELEASE_PLATFORMS:%=release/%): GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%) 267 $(RELEASE_PLATFORMS:%=release/%): release/%: $(foreach exe,$(RELEASE_EXES),release/%/bin/$(exe)) 268 269 # explicit targets for all platform executables 270 $(foreach platform, $(RELEASE_PLATFORMS), $(RELEASE_EXES:%=release/$(platform)/bin/%)): 271 $(eval platform = $(patsubst release/%/bin,%,$(@D))) 272 $(eval GOOS = $(word 1,$(subst -, ,$(platform)))) 273 $(eval GOARCH = $(word 2,$(subst -, ,$(platform)))) 274 @echo "Building $@ for $(GOOS)-$(GOARCH)" 275 mkdir -p $(@D) 276 GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $@ -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 277 278 .PHONY: dist 279 dist: dist-clean dist/$(MARCH) 280 281 .PHONY: dist-all 282 dist-all: dist-clean $(RELEASE_PLATFORMS:%=dist/%) 283 dist/%: release/% ccaasbuilder 284 mkdir -p release/$(@F)/config 285 cp -r sampleconfig/*.yaml release/$(@F)/config 286 cd release/$(@F) && tar -czvf hyperledger-fabric-$(@F).$(PROJECT_VERSION).tar.gz * 287 288 .PHONY: docker-list 289 docker-list: $(RELEASE_IMAGES:%=%-docker-list) 290 %-docker-list: 291 @echo $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) 292 293 .PHONY: docker-clean 294 docker-clean: $(RELEASE_IMAGES:%=%-docker-clean) 295 %-docker-clean: 296 -@for image in "$$(docker images --quiet --filter=reference='$(DOCKER_NS)/fabric-$*:$(DOCKER_TAG)')"; do \ 297 [ -z "$$image" ] || docker rmi -f $$image; \ 298 done 299 -@rm -rf $(BUILD_DIR)/images/$* || true 300 301 .PHONY: docker-tag-latest 302 docker-tag-latest: $(RELEASE_IMAGES:%=%-docker-tag-latest) 303 %-docker-tag-latest: 304 docker tag $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) $(DOCKER_NS)/fabric-$*:latest 305 306 .PHONY: docker-tag-stable 307 docker-tag-stable: $(RELEASE_IMAGES:%=%-docker-tag-stable) 308 %-docker-tag-stable: 309 docker tag $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) $(DOCKER_NS)/fabric-$*:stable 310 311 .PHONY: publish-images 312 publish-images: $(RELEASE_IMAGES:%=%-publish-images) 313 %-publish-images: 314 @docker login $(DOCKER_HUB_USERNAME) $(DOCKER_HUB_PASSWORD) 315 @docker push $(DOCKER_NS)/fabric-$*:$(PROJECT_VERSION) 316 317 .PHONY: clean 318 clean: docker-clean unit-test-clean release-clean 319 -@rm -rf $(BUILD_DIR) 320 321 .PHONY: clean-all 322 clean-all: clean gotools-clean dist-clean 323 -@rm -rf /var/hyperledger/* 324 -@rm -rf docs/build/ 325 326 .PHONY: dist-clean 327 dist-clean: 328 -@for platform in $(RELEASE_PLATFORMS) ""; do \ 329 [ -z "$$platform" ] || rm -rf release/$${platform}/hyperledger-fabric-$${platform}.$(PROJECT_VERSION).tar.gz; \ 330 done 331 332 .PHONY: release-clean 333 release-clean: $(RELEASE_PLATFORMS:%=%-release-clean) 334 %-release-clean: 335 -@rm -rf release/$* 336 337 .PHONY: unit-test-clean 338 unit-test-clean: 339 340 .PHONY: filename-spaces 341 spaces: 342 @scripts/check_file_name_spaces.sh 343 344 .PHONY: docs 345 docs: 346 @docker run --rm -v $$(pwd):/docs n42org/tox:3.4.0 sh -c 'cd /docs && tox -e docs' 347 348 .PHONY: ccaasbuilder-clean 349 ccaasbuilder-clean: 350 rm -rf $(MARCH:%=release/%)/bin/ccaas_builder 351 352 .PHONY: ccaasbuilder 353 ccaasbuilder: ccaasbuilder-clean 354 cd ccaas_builder && go test -v ./cmd/detect && go build -o ../$(MARCH:%=release/%)/bin/ccaas_builder/bin/ ./cmd/detect/ 355 cd ccaas_builder && go test -v ./cmd/build && go build -o ../$(MARCH:%=release/%)/bin/ccaas_builder/bin/ ./cmd/build/ 356 cd ccaas_builder && go test -v ./cmd/release && go build -o ../$(MARCH:%=release/%)/bin/ccaas_builder/bin/ ./cmd/release/