github.com/tw-bc-group/fabric-ca-gm@v0.0.0-20201218004200-3b690512bd5a/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 tests
    10  #   - license - check all go files for license headers
    11  #   - fabric-ca-server - builds the fabric-ca-server executable
    12  #   - fabric-ca-client - builds the fabric-ca-client executable
    13  #   - unit-tests - runs the go-test based unit tests
    14  #   - checks - runs all check conditions (license, format, imports, lint and vet)
    15  #   - docker[-clean] - ensures all docker images are available[/cleaned]
    16  #   - docker-fabric-ca - build the fabric-ca docker image
    17  #   - bench - Runs benchmarks in all the packages and stores the results in /tmp/bench.results
    18  #   - bench-cpu - Runs the benchmarks in the specified package with cpu profiling
    19  #   - bench-mem - Runs the benchmarks in the specified package with memory profiling
    20  #   - bench-clean - Removes all benchmark related files
    21  #   - benchcmp - Compares benchmarks results of current and previous release
    22  #   - release - builds fabric-ca-client binary for the host platform. Binary built with this target will not support pkcs11
    23  #   - release-all - builds fabric-ca-client binary for all target platforms. Binaries built with this target will not support pkcs11
    24  #   - dist - builds release package for the host platform
    25  #   - dist-all - builds release packages for all target platforms
    26  #   - clean - cleans the build area
    27  #   - release-clean - cleans the binaries for all target platforms
    28  #   - dist-clean - cleans release packages for all target platforms
    29  #   - clean-all - cleans the build area and release packages
    30  
    31  PROJECT_NAME = fabric-ca-gm
    32  BASE_VERSION = 1.4.2
    33  PREV_VERSION = 1.4.1
    34  IS_RELEASE = false
    35  
    36  ARCH=$(shell go env GOARCH)
    37  MARCH=$(shell go env GOOS)-$(shell go env GOARCH)
    38  STABLE_TAG ?= $(ARCH)-$(BASE_VERSION)-stable
    39  
    40  ifneq ($(IS_RELEASE),true)
    41  EXTRA_VERSION ?= $(shell git rev-parse --short HEAD)
    42  PROJECT_VERSION=$(BASE_VERSION)-$(EXTRA_VERSION)
    43  FABRIC_TAG ?= latest
    44  else
    45  PROJECT_VERSION=$(BASE_VERSION)
    46  FABRIC_TAG ?= $(ARCH)-$(BASE_VERSION)
    47  endif
    48  
    49  ifeq ($(ARCH),s390x)
    50  PGVER=9.6
    51  else
    52  PGVER=9.5
    53  endif
    54  
    55  BASEIMAGE_RELEASE = 0.4.15
    56  PKGNAME = github.com/tw-bc-group/$(PROJECT_NAME)
    57  
    58  METADATA_VAR = Version=$(PROJECT_VERSION)
    59  
    60  GO_SOURCE := $(shell find . -name '*.go')
    61  GO_LDFLAGS = $(patsubst %,-X $(PKGNAME)/lib/metadata.%,$(METADATA_VAR))
    62  export GO_LDFLAGS
    63  
    64  IMAGES = $(PROJECT_NAME)
    65  FVTIMAGE = $(PROJECT_NAME)-fvt
    66  
    67  RELEASE_PLATFORMS = linux-amd64 darwin-amd64 linux-ppc64le linux-s390x windows-amd64
    68  RELEASE_PKGS = fabric-ca-client
    69  
    70  path-map.fabric-ca-client := cmd/fabric-ca-client
    71  path-map.fabric-ca-server := cmd/fabric-ca-server
    72  path-map.fabric-ca-zh := cmd/fabric-ca-zh
    73  
    74  include docker-env.mk
    75  
    76  all: rename docker unit-tests
    77  
    78  rename: .FORCE
    79  	@scripts/rename-repo
    80  
    81  docker: $(patsubst %,build/image/%/$(DUMMY), $(IMAGES))
    82  
    83  docker-all: docker
    84  
    85  
    86  docker-fabric-ca: docker
    87  
    88  docker-fvt: $(patsubst %,build/image/%/$(DUMMY), $(FVTIMAGE))
    89  
    90  changelog:
    91  	./scripts/changelog.sh v$(PREV_VERSION) HEAD v$(BASE_VERSION)
    92  
    93  checks: license vet lint format imports
    94  
    95  license: .FORCE
    96  	@scripts/check_license
    97  
    98  format: .FORCE
    99  	@scripts/check_format
   100  
   101  imports: .FORCE
   102  	@scripts/check_imports
   103  
   104  lint: .FORCE
   105  	@scripts/check_lint
   106  
   107  vet: .FORCE
   108  	@scripts/check_vet
   109  
   110  docs: fabric-ca-client fabric-ca-server
   111  	@scripts/regenDocs
   112  
   113  fabric-ca-client: bin/fabric-ca-client
   114  fabric-ca-server: bin/fabric-ca-server
   115  fabric-ca-zh: bin/fabric-ca-zh
   116  
   117  bin/%: $(GO_SOURCE)
   118  	@echo "Building ${@F} in bin directory ..."
   119  	@mkdir -p bin && go build -o bin/${@F} -tags "pkcs11" -ldflags "$(GO_LDFLAGS)" $(PKGNAME)/$(path-map.${@F})
   120  	@echo "Built bin/${@F}"
   121  
   122  # We (re)build a package within a docker context but persist the $GOPATH/pkg
   123  # directory so that subsequent builds are faster
   124  build/docker/bin/%: build/docker/gocache
   125  	@echo "Building $@"
   126  	@mkdir -p $(@D) build/docker/$(@F)/pkg
   127  	@$(DRUN) \
   128  		-e GOCACHE=/opt/gopath/gocache \
   129  		-v $(abspath build/docker/gocache):/opt/gopath/gocache \
   130  		-v $(abspath build/docker/bin):/opt/gopath/bin \
   131  		-v $(abspath build/docker/$(@F)/pkg):/opt/gopath/pkg \
   132  		$(BASE_DOCKER_NS)/fabric-baseimage:$(BASE_DOCKER_TAG) \
   133  		go install -ldflags "$(DOCKER_GO_LDFLAGS)" $(PKGNAME)/$(path-map.${@F})
   134  	@touch $@
   135  
   136  build/docker/gocache:
   137  	@mkdir -p build/docker/gocache
   138  
   139  build/image/%/$(DUMMY): Makefile build/image/%/payload
   140  	$(eval TARGET = ${patsubst build/image/%/$(DUMMY),%,${@}})
   141  	$(eval DOCKER_NAME = $(DOCKER_NS)/$(TARGET))
   142  	@echo "Building docker $(TARGET) image"
   143  	@cat images/$(TARGET)/Dockerfile.in \
   144  		| sed -e 's|_BASE_NS_|$(BASE_DOCKER_NS)|g' \
   145  		| sed -e 's|_NS_|$(DOCKER_NS)|g' \
   146  		| sed -e 's|_NEXUS_REPO_|$(NEXUS_URL)|g' \
   147  		| sed -e 's|_BASE_TAG_|$(BASE_DOCKER_TAG)|g' \
   148  		| sed -e 's|_FABRIC_TAG_|$(FABRIC_TAG)|g' \
   149  		| sed -e 's|_STABLE_TAG_|$(STABLE_TAG)|g' \
   150  		| sed -e 's|_TAG_|$(DOCKER_TAG)|g' \
   151  		| sed -e 's|_PGVER_|$(PGVER)|g' \
   152  		> $(@D)/Dockerfile
   153  	$(DBUILD) -t $(DOCKER_NAME) --build-arg FABRIC_CA_DYNAMIC_LINK=$(FABRIC_CA_DYNAMIC_LINK) $(@D)
   154  	docker tag $(DOCKER_NAME) $(DOCKER_NAME):$(DOCKER_TAG)
   155  	@touch $@
   156  
   157  build/image/fabric-ca-gm/payload: \
   158  	build/docker/bin/fabric-ca-client \
   159  	build/docker/bin/fabric-ca-server \
   160  	build/docker/bin/fabric-ca-zh \
   161  	build/fabric-ca.tar.bz2
   162  build/image/fabric-ca-fvt/payload: \
   163  	build/docker/bin/fabric-ca-client \
   164  	build/docker/bin/fabric-ca-server \
   165  	build/docker/bin/fabric-ca-zh \
   166  	build/fabric-ca-fvt.tar.bz2
   167  build/image/%/payload:
   168  	@echo "Copying $^ to $@"
   169  	mkdir -p $@
   170  	cp $^ $@
   171  
   172  build/fabric-ca.tar.bz2: $(shell git ls-files images/$(PROJECT_NAME)/payload)
   173  
   174  build/fabric-ca-fvt.tar.bz2: $(shell find images/fabric-ca-fvt/payload/ -maxdepth 1)
   175  
   176  build/%.tar.bz2:
   177  	@echo "Building $@"
   178  	@tar -jc -C images/$*-gm/payload $(notdir $^) > $@
   179  
   180  all-tests: checks fabric-ca-server fabric-ca-client
   181  	@scripts/run_unit_tests
   182  	@scripts/run_integration_tests
   183  
   184  unit-tests: fabric-ca-server fabric-ca-client
   185  	@scripts/run_unit_tests
   186  
   187  unit-test: unit-tests
   188  
   189  int-tests: checks fabric-ca-server fabric-ca-client
   190  	@scripts/run_integration_tests
   191  
   192  # Runs benchmarks in all the packages and stores the benchmarks in /tmp/bench.results
   193  bench: checks fabric-ca-server fabric-ca-client
   194  	@scripts/run_benchmarks
   195  
   196  # Runs benchmarks in the specified package with cpu profiling
   197  # e.g. make bench-cpu pkg=github.com/hyperledger/fabric-ca/lib
   198  bench-cpu: checks fabric-ca-server fabric-ca-client
   199  	@scripts/run_benchmarks -C -P $(pkg)
   200  
   201  # Runs benchmarks in the specified package with memory profiling
   202  # e.g. make bench-mem pkg=github.com/hyperledger/fabric-ca/lib
   203  bench-mem: checks fabric-ca-server fabric-ca-client
   204  	@scripts/run_benchmarks -M -P $(pkg)
   205  
   206  # e.g. make benchcmp prev_rel=v1.0.0
   207  benchcmp: guard-prev_rel bench
   208  	@scripts/compare_benchmarks $(prev_rel)
   209  
   210  guard-%:
   211  	@if [ "${${*}}" = "" ]; then \
   212  		echo "Environment variable $* not set"; \
   213  		exit 1; \
   214  	fi
   215  
   216  
   217  # Removes all benchmark related files (bench, bench-cpu, bench-mem and *.test)
   218  bench-clean:
   219  	@scripts/run_benchmarks -R
   220  
   221  container-tests: docker
   222  
   223  load-test: docker-clean docker-fvt
   224  	@docker run -p 8888:8888 -p 8054:8054 -v $(shell pwd):/opt/gopath/src/github.com/hyperledger/fabric-ca -e FABRIC_CA_SERVER_PROFILE_PORT=8054 --name loadTest -td hyperledger/fabric-ca-fvt test/fabric-ca-load-tester/launchServer.sh 3
   225  	@test/fabric-ca-load-tester/runLoad.sh -B
   226  	@docker kill loadTest
   227  
   228  fvt-tests:
   229  	@scripts/run_fvt_tests
   230  
   231  ci-tests: docker-clean all-tests docker-fvt docs
   232  	@docker run -v $(shell pwd):/opt/gopath/src/github.com/hyperledger/fabric-ca ${DOCKER_NS}/fabric-ca-fvt
   233  
   234  %-docker-list:
   235  	$(eval TARGET = ${patsubst %-docker-list,%,${@}})
   236  	@echo $(DOCKER_NS)/$(TARGET):$(DOCKER_TAG)
   237  
   238  docker-list: $(patsubst %,%-docker-list, $(IMAGES))
   239  
   240  %-docker-clean:
   241  	$(eval TARGET = ${patsubst %-docker-clean,%,${@}})
   242  	-docker images -q $(DOCKER_NS)/$(TARGET):latest | xargs -I '{}' docker rmi -f '{}'
   243  	-docker images -q $(DOCKER_NS)/$(TARGET):latest | xargs -I '{}' docker rmi -f '{}'
   244  	-docker images -q $(NEXUS_URL)/*:$(STABLE_TAG) | xargs -I '{}' docker rmi -f '{}'
   245  	-@rm -rf build/image/$(TARGET) ||:
   246  
   247  docker-clean: $(patsubst %,%-docker-clean, $(IMAGES) $(PROJECT_NAME)-fvt)
   248  	@rm -rf build/docker/bin/* vendor ||:
   249  
   250  native: fabric-ca-client fabric-ca-server fabric-ca-zh
   251  
   252  release: $(patsubst %,release/%, $(MARCH))
   253  release-all: $(patsubst %,release/%, $(RELEASE_PLATFORMS))
   254  
   255  release/windows-amd64: GOOS=windows
   256  release/windows-amd64: CC=/usr/bin/x86_64-w64-mingw32-gcc
   257  release/windows-amd64: GO_TAGS+= caclient
   258  release/windows-amd64: $(patsubst %,release/windows-amd64/bin/%, $(RELEASE_PKGS))
   259  
   260  release/darwin-amd64: GOOS=darwin
   261  release/darwin-amd64: CC=/usr/bin/clang
   262  release/darwin-amd64: GO_TAGS+= caclient
   263  release/darwin-amd64: $(patsubst %,release/darwin-amd64/bin/%, $(RELEASE_PKGS))
   264  
   265  release/linux-amd64: GOOS=linux
   266  release/linux-amd64: GO_TAGS+= caclient
   267  release/linux-amd64: $(patsubst %,release/linux-amd64/bin/%, $(RELEASE_PKGS))
   268  
   269  release/%-amd64: GOARCH=amd64
   270  
   271  release/linux-%: GOOS=linux
   272  
   273  release/linux-ppc64le: GOARCH=ppc64le
   274  release/linux-ppc64le: GO_TAGS+= caclient
   275  release/linux-ppc64le: CC=/usr/bin/powerpc64le-linux-gnu-gcc
   276  release/linux-ppc64le: $(patsubst %,release/linux-ppc64le/bin/%, $(RELEASE_PKGS))
   277  
   278  release/linux-s390x: GOARCH=s390x
   279  release/linux-s390x: GO_TAGS+= caclient
   280  release/linux-s390x: $(patsubst %,release/linux-s390x/bin/%, $(RELEASE_PKGS))
   281  
   282  release/%/bin/fabric-ca-client: $(GO_SOURCE)
   283  	@echo "Building $@ for $(GOOS)-$(GOARCH)"
   284  	mkdir -p $(@D)
   285  	GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $(abspath $@) -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(PKGNAME)/$(path-map.$(@F))
   286  
   287  .PHONY: dist
   288  dist: dist-clean release
   289  	cd release/$(MARCH) && tar -czvf hyperledger-fabric-ca-$(MARCH).$(PROJECT_VERSION).tar.gz *
   290  dist-all: dist-clean release-all $(patsubst %,dist/%, $(RELEASE_PLATFORMS))
   291  dist/windows-amd64:
   292  	cd release/windows-amd64 && tar -czvf hyperledger-fabric-ca-windows-amd64.$(PROJECT_VERSION).tar.gz *
   293  dist/darwin-amd64:
   294  	cd release/darwin-amd64 && tar -czvf hyperledger-fabric-ca-darwin-amd64.$(PROJECT_VERSION).tar.gz *
   295  dist/linux-amd64:
   296  	cd release/linux-amd64 && tar -czvf hyperledger-fabric-ca-linux-amd64.$(PROJECT_VERSION).tar.gz *
   297  dist/linux-ppc64le:
   298  	cd release/linux-ppc64le && tar -czvf hyperledger-fabric-ca-linux-ppc64le.$(PROJECT_VERSION).tar.gz *
   299  dist/linux-s390x:
   300  	cd release/linux-s390x && tar -czvf hyperledger-fabric-ca-linux-s390x.$(PROJECT_VERSION).tar.gz *
   301  
   302  .PHONY: clean
   303  clean: docker-clean release-clean
   304  	-@chmod -R +w build
   305  	-@rm -rf build bin ||:
   306  
   307  .PHONY: clean-all
   308  clean-all: clean dist-clean
   309  
   310  %-release-clean:
   311  	$(eval TARGET = ${patsubst %-release-clean,%,${@}})
   312  	-@rm -rf release/$(TARGET)
   313  release-clean: $(patsubst %,%-release-clean, $(RELEASE_PLATFORMS))
   314  
   315  .PHONY: dist-clean
   316  dist-clean:
   317  	-@rm -rf release/windows-amd64/hyperledger-fabric-ca-windows-amd64.$(PROJECT_VERSION).tar.gz ||:
   318  	-@rm -rf release/darwin-amd64/hyperledger-fabric-ca-darwin-amd64.$(PROJECT_VERSION).tar.gz ||:
   319  	-@rm -rf release/linux-amd64/hyperledger-fabric-ca-linux-amd64.$(PROJECT_VERSION).tar.gz ||:
   320  	-@rm -rf release/linux-ppc64le/hyperledger-fabric-ca-linux-ppc64le.$(PROJECT_VERSION).tar.gz ||:
   321  	-@rm -rf release/linux-s390x/hyperledger-fabric-ca-linux-s390x.$(PROJECT_VERSION).tar.gz ||:
   322  
   323  .FORCE: