github.com/vijaypunugubati/fabric@v2.0.0-alpha.0.20200109185758-70466159f5b3+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.0 47 PREV_VERSION = 2.0.0-beta 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 PKGNAME = github.com/hyperledger/fabric 68 ARCH=$(shell go env GOARCH) 69 MARCH=$(shell go env GOOS)-$(shell go env GOARCH) 70 71 # defined in common/metadata/metadata.go 72 METADATA_VAR = Version=$(BASE_VERSION) 73 METADATA_VAR += CommitSHA=$(EXTRA_VERSION) 74 METADATA_VAR += BaseDockerLabel=$(BASE_DOCKER_LABEL) 75 METADATA_VAR += DockerNamespace=$(DOCKER_NS) 76 METADATA_VAR += BaseDockerNamespace=$(BASE_DOCKER_NS) 77 78 GO_VER = $(shell grep "GO_VER" ci.properties |cut -d'=' -f2-) 79 GO_TAGS ?= 80 81 RELEASE_EXES = orderer $(TOOLS_EXES) 82 RELEASE_IMAGES = baseos ccenv orderer peer tools 83 RELEASE_PLATFORMS = darwin-amd64 linux-amd64 linux-ppc64le linux-s390x windows-amd64 84 TOOLS_EXES = configtxgen configtxlator cryptogen discover idemixgen peer 85 86 pkgmap.configtxgen := $(PKGNAME)/cmd/configtxgen 87 pkgmap.configtxlator := $(PKGNAME)/cmd/configtxlator 88 pkgmap.cryptogen := $(PKGNAME)/cmd/cryptogen 89 pkgmap.discover := $(PKGNAME)/cmd/discover 90 pkgmap.idemixgen := $(PKGNAME)/cmd/idemixgen 91 pkgmap.orderer := $(PKGNAME)/cmd/orderer 92 pkgmap.peer := $(PKGNAME)/cmd/peer 93 94 .DEFAULT_GOAL := all 95 96 include docker-env.mk 97 include gotools.mk 98 99 .PHONY: all 100 all: check-go-version native docker checks 101 102 .PHONY: checks 103 checks: basic-checks unit-test integration-test 104 105 .PHONY: basic-checks 106 basic-checks: check-go-version license spelling references trailing-spaces linter check-metrics-doc filename-spaces 107 108 .PHONY: desk-checks 109 desk-check: checks verify 110 111 .PHONY: help-docs 112 help-docs: native 113 @scripts/generateHelpDocs.sh 114 115 .PHONY: spelling 116 spelling: 117 @scripts/check_spelling.sh 118 119 .PHONY: references 120 references: 121 @scripts/check_references.sh 122 123 .PHONY: license 124 license: 125 @scripts/check_license.sh 126 127 .PHONY: trailing-spaces 128 trailing-spaces: 129 @scripts/check_trailingspaces.sh 130 131 .PHONY: gotools 132 gotools: gotools-install 133 134 .PHONY: check-go-version 135 check-go-version: 136 @scripts/check_go_version.sh 137 138 .PHONY: integration-test 139 integration-test: gotool.ginkgo ccenv-docker baseos-docker docker-thirdparty 140 ./scripts/run-integration-tests.sh 141 142 .PHONY: unit-test 143 unit-test: unit-test-clean docker-thirdparty ccenv-docker baseos-docker 144 ./scripts/run-unit-tests.sh 145 146 .PHONY: unit-tests 147 unit-tests: unit-test 148 149 # Pull thirdparty docker images based on the latest baseimage release version 150 # Also pull ccenv-1.4 for compatibility test to ensure pre-2.0 installed chaincodes 151 # can be built by a peer configured to use the ccenv-1.4 as the builder image. 152 .PHONY: docker-thirdparty 153 docker-thirdparty: 154 docker pull couchdb:${COUCHDB_VER} 155 docker pull confluentinc/cp-zookeeper:${ZOOKEEPER_VER} 156 docker pull confluentinc/cp-kafka:${KAFKA_VER} 157 docker pull hyperledger/fabric-ccenv:1.4 158 159 .PHONY: verify 160 verify: export JOB_TYPE=VERIFY 161 verify: unit-test 162 163 .PHONY: profile 164 profile: export JOB_TYPE=PROFILE 165 profile: unit-test 166 167 .PHONY: linter 168 linter: check-deps gotools 169 @echo "LINT: Running code checks.." 170 ./scripts/golinter.sh 171 172 .PHONY: check-deps 173 check-deps: gotools 174 @echo "DEP: Checking for dependency issues.." 175 ./scripts/check_deps.sh 176 177 .PHONY: check-metrics-docs 178 check-metrics-doc: gotools 179 @echo "METRICS: Checking for outdated reference documentation.." 180 ./scripts/metrics_doc.sh check 181 182 .PHONY: generate-metrics-docs 183 generate-metrics-doc: gotools 184 @echo "Generating metrics reference documentation..." 185 ./scripts/metrics_doc.sh generate 186 187 .PHONY: protos 188 protos: gotools 189 @echo "Compiling non-API protos..." 190 ./scripts/compile_protos.sh 191 192 .PHONY: changelog 193 changelog: 194 ./scripts/changelog.sh v$(PREV_VERSION) v$(BASE_VERSION) 195 196 .PHONY: native 197 native: $(RELEASE_EXES) 198 199 .PHONY: $(RELEASE_EXES) 200 $(RELEASE_EXES): %: $(BUILD_DIR)/bin/% 201 202 $(BUILD_DIR)/bin/%: GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%) 203 $(BUILD_DIR)/bin/%: 204 @echo "Building $@" 205 @mkdir -p $(@D) 206 GOBIN=$(abspath $(@D)) go install -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 207 @touch $@ 208 209 .PHONY: docker 210 docker: $(RELEASE_IMAGES:%=%-docker) 211 212 .PHONY: $(RELEASE_IMAGES:%=%-docker) 213 $(RELEASE_IMAGES:%=%-docker): %-docker: $(BUILD_DIR)/images/%/$(DUMMY) 214 215 $(BUILD_DIR)/images/ccenv/$(DUMMY): BUILD_CONTEXT=images/ccenv 216 $(BUILD_DIR)/images/baseos/$(DUMMY): BUILD_CONTEXT=images/baseos 217 $(BUILD_DIR)/images/peer/$(DUMMY): BUILD_ARGS=--build-arg GO_TAGS=${GO_TAGS} 218 $(BUILD_DIR)/images/orderer/$(DUMMY): BUILD_ARGS=--build-arg GO_TAGS=${GO_TAGS} 219 220 $(BUILD_DIR)/images/%/$(DUMMY): 221 @echo "Building Docker image $(DOCKER_NS)/fabric-$*" 222 @mkdir -p $(@D) 223 $(DBUILD) -f images/$*/Dockerfile \ 224 --build-arg GO_VER=$(GO_VER) \ 225 --build-arg ALPINE_VER=$(ALPINE_VER) \ 226 $(BUILD_ARGS) \ 227 -t $(DOCKER_NS)/fabric-$* ./$(BUILD_CONTEXT) 228 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(BASE_VERSION) 229 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) 230 @touch $@ 231 232 # builds release packages for the host platform 233 .PHONY: release 234 release: check-go-version $(MARCH:%=release/%) 235 236 # builds release packages for all target platforms 237 .PHONY: release-all 238 release-all: check-go-version $(RELEASE_PLATFORMS:%=release/%) 239 240 .PHONY: $(RELEASE_PLATFORMS:%=release/%) 241 $(RELEASE_PLATFORMS:%=release/%): GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%) 242 $(RELEASE_PLATFORMS:%=release/%): release/%: $(foreach exe,$(RELEASE_EXES),release/%/bin/$(exe)) 243 244 # explicit targets for all platform executables 245 $(foreach platform, $(RELEASE_PLATFORMS), $(RELEASE_EXES:%=release/$(platform)/bin/%)): 246 $(eval platform = $(patsubst release/%/bin,%,$(@D))) 247 $(eval GOOS = $(word 1,$(subst -, ,$(platform)))) 248 $(eval GOARCH = $(word 2,$(subst -, ,$(platform)))) 249 @echo "Building $@ for $(GOOS)-$(GOARCH)" 250 mkdir -p $(@D) 251 GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $@ -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 252 253 .PHONY: dist 254 dist: dist-clean dist/$(MARCH) 255 256 .PHONY: dist-all 257 dist-all: dist-clean $(RELEASE_PLATFORMS:%=dist/%) 258 dist/%: release/% 259 mkdir -p release/$(@F)/config 260 cp -r sampleconfig/*.yaml release/$(@F)/config 261 cd release/$(@F) && tar -czvf hyperledger-fabric-$(@F).$(PROJECT_VERSION).tar.gz * 262 263 .PHONY: docker-list 264 docker-list: $(RELEASE_IMAGES:%=%-docker-list) 265 %-docker-list: 266 @echo $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) 267 268 .PHONY: docker-clean 269 docker-clean: $(RELEASE_IMAGES:%=%-docker-clean) 270 %-docker-clean: 271 -@for image in "$$(docker images --quiet --filter=reference='$(DOCKER_NS)/fabric-$*:$(DOCKER_TAG)')"; do \ 272 [ -z "$$image" ] || docker rmi -f $$image; \ 273 done 274 -@rm -rf $(BUILD_DIR)/images/$* || true 275 276 .PHONY: docker-tag-latest 277 docker-tag-latest: $(RELEASE_IMAGES:%=%-docker-tag-latest) 278 %-docker-tag-latest: 279 docker tag $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) $(DOCKER_NS)/fabric-$*:latest 280 281 .PHONY: docker-tag-stable 282 docker-tag-stable: $(RELEASE_IMAGES:%=%-docker-tag-stable) 283 %-docker-tag-stable: 284 docker tag $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) $(DOCKER_NS)/fabric-$*:stable 285 286 .PHONY: publish-images 287 publish-images: $(RELEASE_IMAGES:%=%-publish-images) 288 %-publish-images: 289 @docker login $(DOCKER_HUB_USERNAME) $(DOCKER_HUB_PASSWORD) 290 @docker push $(DOCKER_NS)/fabric-$*:$(PROJECT_VERSION) 291 292 .PHONY: clean 293 clean: docker-clean unit-test-clean release-clean 294 -@rm -rf $(BUILD_DIR) 295 296 .PHONY: clean-all 297 clean-all: clean gotools-clean dist-clean 298 -@rm -rf /var/hyperledger/* 299 -@rm -rf docs/build/ 300 301 .PHONY: dist-clean 302 dist-clean: 303 -@for platform in $(RELEASE_PLATFORMS) ""; do \ 304 [ -z "$$platform" ] || rm -rf release/$${platform}/hyperledger-fabric-$${platform}.$(PROJECT_VERSION).tar.gz; \ 305 done 306 307 .PHONY: release-clean 308 release-clean: $(RELEASE_PLATFORMS:%=%-release-clean) 309 %-release-clean: 310 -@rm -rf release/$* 311 312 .PHONY: unit-test-clean 313 unit-test-clean: 314 315 .PHONY: filename-spaces 316 spaces: 317 @scripts/check_file_name_spaces.sh