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