github.com/kaituanwang/hyperledger@v2.0.1+incompatible/Makefile (about) 1 # Copyright IBM Corp 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 # - checks - runs all non-integration tests/checks 11 # - desk-check - runs linters and verify to test changed packages 12 # - configtxgen - builds a native configtxgen binary 13 # - configtxlator - builds a native configtxlator binary 14 # - cryptogen - builds a native cryptogen binary 15 # - idemixgen - builds a native idemixgen binary 16 # - peer - builds a native fabric peer binary 17 # - orderer - builds a native fabric orderer binary 18 # - release - builds release packages for the host platform 19 # - release-all - builds release packages for all target platforms 20 # - publish-images - publishes release docker images to nexus3 or docker hub. 21 # - unit-test - runs the go-test based unit tests 22 # - verify - runs unit tests for only the changed package tree 23 # - profile - runs unit tests for all packages in coverprofile mode (slow) 24 # - gotools - installs go tools like golint 25 # - linter - runs all code checks 26 # - check-deps - check for vendored dependencies that are no longer used 27 # - license - checks go source files for Apache license header 28 # - native - ensures all native binaries are available 29 # - docker[-clean] - ensures all docker images are available[/cleaned] 30 # - docker-list - generates a list of docker images that 'make docker' produces 31 # - peer-docker[-clean] - ensures the peer container is available[/cleaned] 32 # - orderer-docker[-clean] - ensures the orderer container is available[/cleaned] 33 # - tools-docker[-clean] - ensures the tools container is available[/cleaned] 34 # - protos - generate all protobuf artifacts based on .proto files 35 # - clean - cleans the build area 36 # - clean-all - superset of 'clean' that also removes persistent state 37 # - dist-clean - clean release packages for all target platforms 38 # - unit-test-clean - cleans unit test state (particularly from docker) 39 # - basic-checks - performs basic checks like license, spelling, trailing spaces and linter 40 # - docker-thirdparty - pulls thirdparty images (kafka,zookeeper,couchdb) 41 # - docker-tag-latest - re-tags the images made by 'make docker' with the :latest tag 42 # - docker-tag-stable - re-tags the images made by 'make docker' with the :stable tag 43 # - help-docs - generate the command reference docs 44 45 ALPINE_VER ?= 3.10 46 BASE_VERSION = 2.0.1 47 PREV_VERSION = 2.0.0 48 49 # BASEIMAGE_RELEASE should be removed now 50 BASEIMAGE_RELEASE = 0.4.18 51 52 # 3rd party image version 53 # These versions are also set in the runners in ./integration/runners/ 54 COUCHDB_VER ?= 2.3 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 for two digit references to most recent baseos and ccenv patch releases 68 TWO_DIGIT_VERSION = $(shell echo $(BASE_VERSION) | cut -d'.' -f1,2) 69 70 PKGNAME = github.com/hyperledger/fabric 71 ARCH=$(shell go env GOARCH) 72 MARCH=$(shell go env GOOS)-$(shell go env GOARCH) 73 74 # defined in common/metadata/metadata.go 75 METADATA_VAR = Version=$(BASE_VERSION) 76 METADATA_VAR += CommitSHA=$(EXTRA_VERSION) 77 METADATA_VAR += BaseDockerLabel=$(BASE_DOCKER_LABEL) 78 METADATA_VAR += DockerNamespace=$(DOCKER_NS) 79 METADATA_VAR += BaseDockerNamespace=$(BASE_DOCKER_NS) 80 81 GO_VER = $(shell grep "GO_VER" ci.properties |cut -d'=' -f2-) 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 linux-ppc64le linux-s390x windows-amd64 87 TOOLS_EXES = configtxgen configtxlator cryptogen discover idemixgen 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.idemixgen := $(PKGNAME)/cmd/idemixgen 94 pkgmap.orderer := $(PKGNAME)/cmd/orderer 95 pkgmap.peer := $(PKGNAME)/cmd/peer 96 97 .DEFAULT_GOAL := all 98 99 include docker-env.mk 100 include gotools.mk 101 102 .PHONY: all 103 all: check-go-version native docker checks 104 105 .PHONY: checks 106 checks: basic-checks unit-test integration-test 107 108 .PHONY: basic-checks 109 basic-checks: check-go-version license spelling references trailing-spaces linter check-metrics-doc filename-spaces 110 111 .PHONY: desk-checks 112 desk-check: checks verify 113 114 .PHONY: help-docs 115 help-docs: native 116 @scripts/generateHelpDocs.sh 117 118 .PHONY: spelling 119 spelling: 120 @scripts/check_spelling.sh 121 122 .PHONY: references 123 references: 124 @scripts/check_references.sh 125 126 .PHONY: license 127 license: 128 @scripts/check_license.sh 129 130 .PHONY: trailing-spaces 131 trailing-spaces: 132 @scripts/check_trailingspaces.sh 133 134 .PHONY: gotools 135 gotools: gotools-install 136 137 .PHONY: check-go-version 138 check-go-version: 139 @scripts/check_go_version.sh 140 141 .PHONY: integration-test 142 integration-test: gotool.ginkgo ccenv-docker baseos-docker docker-thirdparty 143 ./scripts/run-integration-tests.sh 144 145 .PHONY: unit-test 146 unit-test: unit-test-clean docker-thirdparty ccenv-docker baseos-docker 147 ./scripts/run-unit-tests.sh 148 149 .PHONY: unit-tests 150 unit-tests: unit-test 151 152 # Pull thirdparty docker images based on the latest baseimage release version 153 # Also pull ccenv-1.4 for compatibility test to ensure pre-2.0 installed chaincodes 154 # can be built by a peer configured to use the ccenv-1.4 as the builder image. 155 .PHONY: docker-thirdparty 156 docker-thirdparty: 157 docker pull couchdb:${COUCHDB_VER} 158 docker pull confluentinc/cp-zookeeper:${ZOOKEEPER_VER} 159 docker pull confluentinc/cp-kafka:${KAFKA_VER} 160 docker pull hyperledger/fabric-ccenv:1.4 161 162 .PHONY: verify 163 verify: export JOB_TYPE=VERIFY 164 verify: unit-test 165 166 .PHONY: profile 167 profile: export JOB_TYPE=PROFILE 168 profile: unit-test 169 170 .PHONY: linter 171 linter: check-deps gotools 172 @echo "LINT: Running code checks.." 173 ./scripts/golinter.sh 174 175 .PHONY: check-deps 176 check-deps: gotools 177 @echo "DEP: Checking for dependency issues.." 178 ./scripts/check_deps.sh 179 180 .PHONY: check-metrics-docs 181 check-metrics-doc: gotools 182 @echo "METRICS: Checking for outdated reference documentation.." 183 ./scripts/metrics_doc.sh check 184 185 .PHONY: generate-metrics-docs 186 generate-metrics-doc: gotools 187 @echo "Generating metrics reference documentation..." 188 ./scripts/metrics_doc.sh generate 189 190 .PHONY: protos 191 protos: gotools 192 @echo "Compiling non-API protos..." 193 ./scripts/compile_protos.sh 194 195 .PHONY: changelog 196 changelog: 197 ./scripts/changelog.sh v$(PREV_VERSION) v$(BASE_VERSION) 198 199 .PHONY: native 200 native: $(RELEASE_EXES) 201 202 .PHONY: $(RELEASE_EXES) 203 $(RELEASE_EXES): %: $(BUILD_DIR)/bin/% 204 205 $(BUILD_DIR)/bin/%: GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%) 206 $(BUILD_DIR)/bin/%: 207 @echo "Building $@" 208 @mkdir -p $(@D) 209 GOBIN=$(abspath $(@D)) go install -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 210 @touch $@ 211 212 .PHONY: docker 213 docker: $(RELEASE_IMAGES:%=%-docker) 214 215 .PHONY: $(RELEASE_IMAGES:%=%-docker) 216 $(RELEASE_IMAGES:%=%-docker): %-docker: $(BUILD_DIR)/images/%/$(DUMMY) 217 218 $(BUILD_DIR)/images/ccenv/$(DUMMY): BUILD_CONTEXT=images/ccenv 219 $(BUILD_DIR)/images/baseos/$(DUMMY): BUILD_CONTEXT=images/baseos 220 $(BUILD_DIR)/images/peer/$(DUMMY): BUILD_ARGS=--build-arg GO_TAGS=${GO_TAGS} 221 $(BUILD_DIR)/images/orderer/$(DUMMY): BUILD_ARGS=--build-arg GO_TAGS=${GO_TAGS} 222 223 $(BUILD_DIR)/images/%/$(DUMMY): 224 @echo "Building Docker image $(DOCKER_NS)/fabric-$*" 225 @mkdir -p $(@D) 226 $(DBUILD) -f images/$*/Dockerfile \ 227 --build-arg GO_VER=$(GO_VER) \ 228 --build-arg ALPINE_VER=$(ALPINE_VER) \ 229 $(BUILD_ARGS) \ 230 -t $(DOCKER_NS)/fabric-$* ./$(BUILD_CONTEXT) 231 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(BASE_VERSION) 232 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(TWO_DIGIT_VERSION) 233 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) 234 @touch $@ 235 236 # builds release packages for the host platform 237 .PHONY: release 238 release: check-go-version $(MARCH:%=release/%) 239 240 # builds release packages for all target platforms 241 .PHONY: release-all 242 release-all: check-go-version $(RELEASE_PLATFORMS:%=release/%) 243 244 .PHONY: $(RELEASE_PLATFORMS:%=release/%) 245 $(RELEASE_PLATFORMS:%=release/%): GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%) 246 $(RELEASE_PLATFORMS:%=release/%): release/%: $(foreach exe,$(RELEASE_EXES),release/%/bin/$(exe)) 247 248 # explicit targets for all platform executables 249 $(foreach platform, $(RELEASE_PLATFORMS), $(RELEASE_EXES:%=release/$(platform)/bin/%)): 250 $(eval platform = $(patsubst release/%/bin,%,$(@D))) 251 $(eval GOOS = $(word 1,$(subst -, ,$(platform)))) 252 $(eval GOARCH = $(word 2,$(subst -, ,$(platform)))) 253 @echo "Building $@ for $(GOOS)-$(GOARCH)" 254 mkdir -p $(@D) 255 GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $@ -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 256 257 .PHONY: dist 258 dist: dist-clean dist/$(MARCH) 259 260 .PHONY: dist-all 261 dist-all: dist-clean $(RELEASE_PLATFORMS:%=dist/%) 262 dist/%: release/% 263 mkdir -p release/$(@F)/config 264 cp -r sampleconfig/*.yaml release/$(@F)/config 265 cd release/$(@F) && tar -czvf hyperledger-fabric-$(@F).$(PROJECT_VERSION).tar.gz * 266 267 .PHONY: docker-list 268 docker-list: $(RELEASE_IMAGES:%=%-docker-list) 269 %-docker-list: 270 @echo $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) 271 272 .PHONY: docker-clean 273 docker-clean: $(RELEASE_IMAGES:%=%-docker-clean) 274 %-docker-clean: 275 -@for image in "$$(docker images --quiet --filter=reference='$(DOCKER_NS)/fabric-$*:$(DOCKER_TAG)')"; do \ 276 [ -z "$$image" ] || docker rmi -f $$image; \ 277 done 278 -@rm -rf $(BUILD_DIR)/images/$* || true 279 280 .PHONY: docker-tag-latest 281 docker-tag-latest: $(RELEASE_IMAGES:%=%-docker-tag-latest) 282 %-docker-tag-latest: 283 docker tag $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) $(DOCKER_NS)/fabric-$*:latest 284 285 .PHONY: docker-tag-stable 286 docker-tag-stable: $(RELEASE_IMAGES:%=%-docker-tag-stable) 287 %-docker-tag-stable: 288 docker tag $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) $(DOCKER_NS)/fabric-$*:stable 289 290 .PHONY: publish-images 291 publish-images: $(RELEASE_IMAGES:%=%-publish-images) 292 %-publish-images: 293 @docker login $(DOCKER_HUB_USERNAME) $(DOCKER_HUB_PASSWORD) 294 @docker push $(DOCKER_NS)/fabric-$*:$(PROJECT_VERSION) 295 296 .PHONY: clean 297 clean: docker-clean unit-test-clean release-clean 298 -@rm -rf $(BUILD_DIR) 299 300 .PHONY: clean-all 301 clean-all: clean gotools-clean dist-clean 302 -@rm -rf /var/hyperledger/* 303 -@rm -rf docs/build/ 304 305 .PHONY: dist-clean 306 dist-clean: 307 -@for platform in $(RELEASE_PLATFORMS) ""; do \ 308 [ -z "$$platform" ] || rm -rf release/$${platform}/hyperledger-fabric-$${platform}.$(PROJECT_VERSION).tar.gz; \ 309 done 310 311 .PHONY: release-clean 312 release-clean: $(RELEASE_PLATFORMS:%=%-release-clean) 313 %-release-clean: 314 -@rm -rf release/$* 315 316 .PHONY: unit-test-clean 317 unit-test-clean: 318 319 .PHONY: filename-spaces 320 spaces: 321 @scripts/check_file_name_spaces.sh