github.com/adnan-c/fabric_e2e_couchdb@v0.6.1-preview.0.20170228180935-21ce6b23cf91/Makefile (about) 1 # Copyright IBM Corp All Rights Reserved. 2 # Copyright London Stock Exchange Group All Rights Reserved. 3 # 4 # Licensed under the Apache License, Version 2.0 (the "License"); 5 # you may not use this file except in compliance with the License. 6 # You may obtain a copy of the License at 7 # 8 # http://www.apache.org/licenses/LICENSE-2.0 9 # 10 # Unless required by applicable law or agreed to in writing, software 11 # distributed under the License is distributed on an "AS IS" BASIS, 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 # See the License for the specific language governing permissions and 14 # limitations under the License. 15 # 16 # ------------------------------------------------------------- 17 # This makefile defines the following targets 18 # 19 # - all (default) - builds all targets and runs all tests/checks 20 # - checks - runs all tests/checks 21 # - peer - builds a native fabric peer binary 22 # - orderer - builds a native fabric orderer binary 23 # - unit-test - runs the go-test based unit tests 24 # - behave - runs the behave test 25 # - behave-deps - ensures pre-requisites are availble for running behave manually 26 # - gotools - installs go tools like golint 27 # - linter - runs all code checks 28 # - native - ensures all native binaries are available 29 # - docker[-clean] - ensures all docker images are available[/cleaned] 30 # - peer-docker[-clean] - ensures the peer container is available[/cleaned] 31 # - orderer-docker[-clean] - ensures the orderer container is available[/cleaned] 32 # - protos - generate all protobuf artifacts based on .proto files 33 # - clean - cleans the build area 34 # - dist-clean - superset of 'clean' that also removes persistent state 35 36 PROJECT_NAME = hyperledger/fabric 37 BASE_VERSION = 0.7.0 38 IS_RELEASE = false 39 40 ifneq ($(IS_RELEASE),true) 41 EXTRA_VERSION ?= snapshot-$(shell git rev-parse --short HEAD) 42 PROJECT_VERSION=$(BASE_VERSION)-$(EXTRA_VERSION) 43 else 44 PROJECT_VERSION=$(BASE_VERSION) 45 endif 46 47 PKGNAME = github.com/$(PROJECT_NAME) 48 CGO_FLAGS = CGO_CFLAGS=" " 49 ARCH=$(shell uname -m) 50 CHAINTOOL_RELEASE=v0.10.3 51 BASEIMAGE_RELEASE=$(shell cat ./.baseimage-release) 52 53 # defined in common/metadata/metadata.go 54 METADATA_VAR = Version=$(PROJECT_VERSION) 55 METADATA_VAR += BaseVersion=$(BASEIMAGE_RELEASE) 56 METADATA_VAR += BaseDockerLabel=$(BASE_DOCKER_LABEL) 57 58 GO_LDFLAGS = $(patsubst %,-X $(PKGNAME)/common/metadata.%,$(METADATA_VAR)) 59 60 CHAINTOOL_URL ?= https://github.com/hyperledger/fabric-chaintool/releases/download/$(CHAINTOOL_RELEASE)/chaintool 61 62 export GO_LDFLAGS 63 64 EXECUTABLES = go docker git curl 65 K := $(foreach exec,$(EXECUTABLES),\ 66 $(if $(shell which $(exec)),some string,$(error "No $(exec) in PATH: Check dependencies"))) 67 68 GOSHIM_DEPS = $(shell ./scripts/goListFiles.sh $(PKGNAME)/core/chaincode/shim) 69 JAVASHIM_DEPS = $(shell git ls-files core/chaincode/shim/java) 70 PROTOS = $(shell git ls-files *.proto | grep -v vendor) 71 MSP_SAMPLECONFIG = $(shell git ls-files msp/sampleconfig/*) 72 PROJECT_FILES = $(shell git ls-files) 73 IMAGES = peer orderer ccenv javaenv buildenv testenv zookeeper kafka couchdb 74 75 pkgmap.configtxgen := $(PKGNAME)/common/configtx/tool/configtxgen 76 pkgmap.peer := $(PKGNAME)/peer 77 pkgmap.orderer := $(PKGNAME)/orderer 78 pkgmap.block-listener := $(PKGNAME)/examples/events/block-listener 79 80 include docker-env.mk 81 82 all: native docker checks 83 84 checks: linter unit-test behave 85 86 .PHONY: gotools 87 gotools: 88 mkdir -p build/bin 89 cd gotools && $(MAKE) install BINDIR=$(GOPATH)/bin 90 91 gotools-clean: 92 cd gotools && $(MAKE) clean 93 94 # This is a legacy target left to satisfy existing CI scripts 95 membersrvc-image: 96 @echo "membersrvc has been removed from this build" 97 98 .PHONY: peer 99 peer: build/bin/peer 100 peer-docker: build/image/peer/$(DUMMY) 101 102 .PHONY: orderer 103 orderer: build/bin/orderer 104 orderer-docker: build/image/orderer/$(DUMMY) 105 106 .PHONY: configtxgen 107 configtxgen: build/bin/configtxgen 108 109 buildenv: build/image/buildenv/$(DUMMY) 110 111 build/image/testenv/$(DUMMY): build/image/buildenv/$(DUMMY) 112 testenv: build/image/testenv/$(DUMMY) 113 114 couchdb: build/image/couchdb/$(DUMMY) 115 116 unit-test: peer-docker testenv couchdb 117 cd unit-test && docker-compose up --abort-on-container-exit --force-recreate && docker-compose down 118 119 unit-tests: unit-test 120 121 docker: $(patsubst %,build/image/%/$(DUMMY), $(IMAGES)) 122 native: peer orderer 123 124 BEHAVE_ENVIRONMENTS = kafka orderer orderer-1-kafka-1 orderer-1-kafka-3 125 BEHAVE_ENVIRONMENT_TARGETS = $(patsubst %,bddtests/environments/%, $(BEHAVE_ENVIRONMENTS)) 126 .PHONY: behave-environments $(BEHAVE_ENVIRONMENT_TARGETS) 127 behave-environments: $(BEHAVE_ENVIRONMENT_TARGETS) 128 $(BEHAVE_ENVIRONMENT_TARGETS): 129 @docker-compose --file $@/docker-compose.yml build 130 131 behave-deps: docker peer build/bin/block-listener behave-environments 132 behave: behave-deps 133 @echo "Running behave tests" 134 @cd bddtests; behave $(BEHAVE_OPTS) 135 136 linter: buildenv 137 @echo "LINT: Running code checks.." 138 @$(DRUN) hyperledger/fabric-buildenv:$(DOCKER_TAG) ./scripts/golinter.sh 139 140 %/chaintool: Makefile 141 @echo "Installing chaintool" 142 @mkdir -p $(@D) 143 curl -L $(CHAINTOOL_URL) > $@ 144 chmod +x $@ 145 146 # We (re)build a package within a docker context but persist the $GOPATH/pkg 147 # directory so that subsequent builds are faster 148 build/docker/bin/%: $(PROJECT_FILES) 149 $(eval TARGET = ${patsubst build/docker/bin/%,%,${@}}) 150 @echo "Building $@" 151 @mkdir -p build/docker/bin build/docker/$(TARGET)/pkg 152 @$(DRUN) \ 153 -v $(abspath build/docker/bin):/opt/gopath/bin \ 154 -v $(abspath build/docker/$(TARGET)/pkg):/opt/gopath/pkg \ 155 hyperledger/fabric-baseimage:$(BASE_DOCKER_TAG) \ 156 go install -ldflags "$(DOCKER_GO_LDFLAGS)" $(pkgmap.$(@F)) 157 @touch $@ 158 159 build/bin: 160 mkdir -p $@ 161 162 build/docker/gotools/bin/protoc-gen-go: build/docker/gotools 163 164 build/docker/gotools: gotools/Makefile 165 @mkdir -p $@/bin $@/obj 166 @$(DRUN) \ 167 -v $(abspath $@):/opt/gotools \ 168 -w /opt/gopath/src/$(PKGNAME)/gotools \ 169 hyperledger/fabric-baseimage:$(BASE_DOCKER_TAG) \ 170 make install BINDIR=/opt/gotools/bin OBJDIR=/opt/gotools/obj 171 172 # Both peer and peer-docker depend on ccenv and javaenv (all docker env images it supports). 173 build/bin/peer: build/image/ccenv/$(DUMMY) build/image/javaenv/$(DUMMY) 174 build/image/peer/$(DUMMY): build/image/ccenv/$(DUMMY) build/image/javaenv/$(DUMMY) 175 176 build/bin/%: $(PROJECT_FILES) 177 @mkdir -p $(@D) 178 @echo "$@" 179 $(CGO_FLAGS) GOBIN=$(abspath $(@D)) go install -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 180 @echo "Binary available as $@" 181 @touch $@ 182 183 # payload definitions' 184 build/image/ccenv/payload: build/docker/gotools/bin/protoc-gen-go \ 185 build/bin/chaintool \ 186 build/goshim.tar.bz2 187 build/image/javaenv/payload: build/javashim.tar.bz2 \ 188 build/protos.tar.bz2 \ 189 settings.gradle 190 build/image/peer/payload: build/docker/bin/peer \ 191 peer/core.yaml \ 192 build/msp-sampleconfig.tar.bz2 \ 193 common/configtx/tool/configtx.yaml 194 build/image/orderer/payload: build/docker/bin/orderer \ 195 build/msp-sampleconfig.tar.bz2 \ 196 orderer/orderer.yaml \ 197 common/configtx/tool/configtx.yaml 198 build/image/buildenv/payload: build/gotools.tar.bz2 \ 199 build/docker/gotools/bin/protoc-gen-go 200 build/image/testenv/payload: build/docker/bin/orderer \ 201 orderer/orderer.yaml \ 202 common/configtx/tool/configtx.yaml \ 203 build/docker/bin/peer \ 204 peer/core.yaml \ 205 build/msp-sampleconfig.tar.bz2 \ 206 images/testenv/install-softhsm2.sh 207 build/image/zookeeper/payload: images/zookeeper/docker-entrypoint.sh 208 build/image/kafka/payload: images/kafka/docker-entrypoint.sh \ 209 images/kafka/kafka-run-class.sh 210 build/image/couchdb/payload: images/couchdb/docker-entrypoint.sh \ 211 images/couchdb/local.ini \ 212 images/couchdb/vm.args 213 214 build/image/%/payload: 215 mkdir -p $@ 216 cp $^ $@ 217 218 .PRECIOUS: build/image/%/Dockerfile 219 220 build/image/%/Dockerfile: images/%/Dockerfile.in 221 @cat $< \ 222 | sed -e 's/_BASE_TAG_/$(BASE_DOCKER_TAG)/g' \ 223 | sed -e 's/_TAG_/$(DOCKER_TAG)/g' \ 224 > $@ 225 @echo LABEL $(BASE_DOCKER_LABEL).version=$(PROJECT_VERSION) \\>>$@ 226 @echo " " $(BASE_DOCKER_LABEL).base.version=$(BASEIMAGE_RELEASE)>>$@ 227 228 build/image/%/$(DUMMY): Makefile build/image/%/payload build/image/%/Dockerfile 229 $(eval TARGET = ${patsubst build/image/%/$(DUMMY),%,${@}}) 230 @echo "Building docker $(TARGET)-image" 231 $(DBUILD) -t $(PROJECT_NAME)-$(TARGET) $(@D) 232 docker tag $(PROJECT_NAME)-$(TARGET) $(PROJECT_NAME)-$(TARGET):$(DOCKER_TAG) 233 @touch $@ 234 235 build/gotools.tar.bz2: build/docker/gotools 236 (cd $</bin && tar -jc *) > $@ 237 238 build/goshim.tar.bz2: $(GOSHIM_DEPS) 239 @echo "Creating $@" 240 @tar -jhc -C $(GOPATH)/src $(patsubst $(GOPATH)/src/%,%,$(GOSHIM_DEPS)) > $@ 241 242 build/javashim.tar.bz2: $(JAVASHIM_DEPS) 243 build/protos.tar.bz2: $(PROTOS) 244 build/msp-sampleconfig.tar.bz2: $(MSP_SAMPLECONFIG) 245 246 build/%.tar.bz2: 247 @echo "Creating $@" 248 @tar -jc $^ > $@ 249 250 .PHONY: protos 251 protos: buildenv 252 @$(DRUN) hyperledger/fabric-buildenv:$(DOCKER_TAG) ./scripts/compile_protos.sh 253 254 %-docker-clean: 255 $(eval TARGET = ${patsubst %-docker-clean,%,${@}}) 256 -docker images -q $(PROJECT_NAME)-$(TARGET) | xargs -I '{}' docker rmi -f '{}' 257 -@rm -rf build/image/$(TARGET) ||: 258 259 docker-clean: $(patsubst %,%-docker-clean, $(IMAGES)) 260 261 .PHONY: clean 262 clean: docker-clean 263 -@rm -rf build ||: 264 265 .PHONY: dist-clean 266 dist-clean: clean gotools-clean 267 -@rm -rf /var/hyperledger/* ||: