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/* ||: