github.com/darrenli6/fabric-sdk-example@v0.0.0-20220109053535-94b13b56df8c/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/checks 10 # - checks - runs all 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 # - peer - builds a native fabric peer binary 16 # - orderer - builds a native fabric orderer binary 17 # - release - builds release packages for the host platform 18 # - release-all - builds release packages for all target platforms 19 # - unit-test - runs the go-test based unit tests 20 # - verify - runs unit tests for only the changed package tree 21 # - test-cmd - generates a "go test" string suitable for manual customization 22 # - behave - runs the behave test 23 # - docker-thirdparty - pulls thirdparty images (kafka,zookeeper,couchdb) 24 # - behave-deps - ensures pre-requisites are available for running behave manually 25 # - gotools - installs go tools like golint 26 # - linter - runs all code checks 27 # - license - checks go sourrce files for Apache license header 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 # - tools-docker[-clean] - ensures the tools container is available[/cleaned] 33 # - protos - generate all protobuf artifacts based on .proto files 34 # - clean - cleans the build area 35 # - clean-all - superset of 'clean' that also removes persistent state 36 # - dist-clean - clean release packages for all target platforms 37 # - unit-test-clean - cleans unit test state (particularly from docker) 38 # - basic-checks - performs basic checks like license, spelling and linter 39 40 PROJECT_NAME = hyperledger/fabric 41 BASE_VERSION = 1.0.7 42 PREV_VERSION = 1.0.6 43 IS_RELEASE = false 44 45 ifneq ($(IS_RELEASE),true) 46 EXTRA_VERSION ?= snapshot-$(shell git rev-parse --short HEAD) 47 PROJECT_VERSION=$(BASE_VERSION)-$(EXTRA_VERSION) 48 else 49 PROJECT_VERSION=$(BASE_VERSION) 50 endif 51 52 PKGNAME = github.com/$(PROJECT_NAME) 53 CGO_FLAGS = CGO_CFLAGS=" " 54 ARCH=$(shell uname -m) 55 MARCH=$(shell go env GOOS)-$(shell go env GOARCH) 56 CHAINTOOL_RELEASE=1.0.0 57 BASEIMAGE_RELEASE=0.3.2 58 59 # defined in common/metadata/metadata.go 60 METADATA_VAR = Version=$(PROJECT_VERSION) 61 METADATA_VAR += BaseVersion=$(BASEIMAGE_RELEASE) 62 METADATA_VAR += BaseDockerLabel=$(BASE_DOCKER_LABEL) 63 METADATA_VAR += DockerNamespace=$(DOCKER_NS) 64 METADATA_VAR += BaseDockerNamespace=$(BASE_DOCKER_NS) 65 66 GO_LDFLAGS = $(patsubst %,-X $(PKGNAME)/common/metadata.%,$(METADATA_VAR)) 67 68 GO_TAGS ?= 69 70 CHAINTOOL_URL ?= https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/chaintool-$(CHAINTOOL_RELEASE)/hyperledger-fabric-chaintool-$(CHAINTOOL_RELEASE).jar 71 72 export GO_LDFLAGS 73 74 EXECUTABLES = go docker git curl 75 K := $(foreach exec,$(EXECUTABLES),\ 76 $(if $(shell which $(exec)),some string,$(error "No $(exec) in PATH: Check dependencies"))) 77 78 GOSHIM_DEPS = $(shell ./scripts/goListFiles.sh $(PKGNAME)/core/chaincode/shim) 79 JAVASHIM_DEPS = $(shell git ls-files core/chaincode/shim/java) 80 PROTOS = $(shell git ls-files *.proto | grep -v vendor) 81 # No sense rebuilding when non production code is changed 82 PROJECT_FILES = $(shell git ls-files | grep -v ^test | grep -v ^unit-test | \ 83 grep -v ^bddtests | grep -v ^docs | grep -v _test.go$ | grep -v .md$ | \ 84 grep -v ^.git | grep -v ^examples | grep -v ^devenv | grep -v .png$ | \ 85 grep -v ^LICENSE ) 86 RELEASE_TEMPLATES = $(shell git ls-files | grep "release/templates") 87 IMAGES = peer orderer ccenv javaenv buildenv testenv zookeeper kafka couchdb tools 88 RELEASE_PLATFORMS = windows-amd64 darwin-amd64 linux-amd64 linux-ppc64le linux-s390x 89 RELEASE_PKGS = configtxgen cryptogen configtxlator peer orderer 90 91 pkgmap.cryptogen := $(PKGNAME)/common/tools/cryptogen 92 pkgmap.configtxgen := $(PKGNAME)/common/configtx/tool/configtxgen 93 pkgmap.configtxlator := $(PKGNAME)/common/tools/configtxlator 94 pkgmap.peer := $(PKGNAME)/peer 95 pkgmap.orderer := $(PKGNAME)/orderer 96 pkgmap.block-listener := $(PKGNAME)/examples/events/block-listener 97 pkgmap.cryptogen := $(PKGNAME)/common/tools/cryptogen 98 99 include docker-env.mk 100 101 all: native docker checks 102 103 checks: license spelling linter unit-test behave 104 105 basic-checks: license spelling linter 106 107 desk-check: license spelling linter verify behave 108 109 .PHONY: spelling 110 spelling: 111 @scripts/check_spelling.sh 112 113 .PHONY: license 114 license: 115 @scripts/check_license.sh 116 117 .PHONY: gotools 118 gotools: 119 mkdir -p build/bin 120 cd gotools && $(MAKE) install BINDIR=$(GOPATH)/bin 121 122 .PHONY: gotools-clean 123 gotools-clean: 124 cd gotools && $(MAKE) clean 125 126 # This is a legacy target left to satisfy existing CI scripts 127 membersrvc-image: 128 @echo "membersrvc has been removed from this build" 129 130 .PHONY: peer 131 peer: build/bin/peer 132 peer-docker: build/image/peer/$(DUMMY) 133 134 .PHONY: orderer 135 orderer: build/bin/orderer 136 orderer-docker: build/image/orderer/$(DUMMY) 137 138 .PHONY: configtxgen 139 configtxgen: GO_TAGS+= nopkcs11 140 configtxgen: GO_LDFLAGS=-X $(pkgmap.$(@F))/metadata.Version=$(PROJECT_VERSION) 141 configtxgen: build/bin/configtxgen 142 143 configtxlator: GO_LDFLAGS=-X $(pkgmap.$(@F))/metadata.Version=$(PROJECT_VERSION) 144 configtxlator: build/bin/configtxlator 145 146 cryptogen: GO_LDFLAGS=-X $(pkgmap.$(@F))/metadata.Version=$(PROJECT_VERSION) 147 cryptogen: build/bin/cryptogen 148 149 tools-docker: build/image/tools/$(DUMMY) 150 151 javaenv: build/image/javaenv/$(DUMMY) 152 153 buildenv: build/image/buildenv/$(DUMMY) 154 155 build/image/testenv/$(DUMMY): build/image/buildenv/$(DUMMY) 156 testenv: build/image/testenv/$(DUMMY) 157 158 couchdb: build/image/couchdb/$(DUMMY) 159 160 kafka: build/image/kafka/$(DUMMY) 161 162 zookeeper: build/image/zookeeper/$(DUMMY) 163 164 unit-test: unit-test-clean peer-docker testenv docker-thirdparty 165 cd unit-test && docker-compose up --abort-on-container-exit --force-recreate && docker-compose down 166 167 unit-tests: unit-test 168 169 verify: unit-test-clean peer-docker testenv docker-thirdparty 170 cd unit-test && JOB_TYPE=VERIFY docker-compose up --abort-on-container-exit --force-recreate && docker-compose down 171 172 # Generates a string to the terminal suitable for manual augmentation / re-issue, useful for running tests by hand 173 test-cmd: 174 @echo "go test -ldflags \"$(GO_LDFLAGS)\"" 175 176 docker: $(patsubst %,build/image/%/$(DUMMY), $(IMAGES)) 177 native: peer orderer configtxgen cryptogen configtxlator 178 179 behave-deps: docker peer build/bin/block-listener configtxgen cryptogen 180 behave: behave-deps 181 @echo "Running behave tests" 182 @cd bddtests; behave $(BEHAVE_OPTS) 183 184 behave-peer-chaincode: build/bin/peer peer-docker orderer-docker 185 @cd peer/chaincode && behave 186 187 linter: buildenv 188 @echo "LINT: Running code checks.." 189 @$(DRUN) $(DOCKER_NS)/fabric-buildenv:$(DOCKER_TAG) ./scripts/golinter.sh 190 191 # Pull thirdparty docker images based on the latest baseimage release version 192 .PHONY: docker-thirdparty 193 docker-thirdparty: 194 docker pull $(BASE_DOCKER_NS)/fabric-couchdb:$(ARCH)-$(PREV_VERSION) 195 docker tag $(BASE_DOCKER_NS)/fabric-couchdb:$(ARCH)-$(PREV_VERSION) $(DOCKER_NS)/fabric-couchdb 196 docker pull $(BASE_DOCKER_NS)/fabric-zookeeper:$(ARCH)-$(PREV_VERSION) 197 docker tag $(BASE_DOCKER_NS)/fabric-zookeeper:$(ARCH)-$(PREV_VERSION) $(DOCKER_NS)/fabric-zookeeper 198 docker pull $(BASE_DOCKER_NS)/fabric-kafka:$(ARCH)-$(PREV_VERSION) 199 docker tag $(BASE_DOCKER_NS)/fabric-kafka:$(ARCH)-$(PREV_VERSION) $(DOCKER_NS)/fabric-kafka 200 201 %/chaintool: Makefile 202 @echo "Installing chaintool" 203 @mkdir -p $(@D) 204 curl -fL $(CHAINTOOL_URL) > $@ 205 chmod +x $@ 206 207 # We (re)build a package within a docker context but persist the $GOPATH/pkg 208 # directory so that subsequent builds are faster 209 build/docker/bin/%: $(PROJECT_FILES) 210 $(eval TARGET = ${patsubst build/docker/bin/%,%,${@}}) 211 @echo "Building $@" 212 @mkdir -p build/docker/bin build/docker/$(TARGET)/pkg 213 @$(DRUN) \ 214 -v $(abspath build/docker/bin):/opt/gopath/bin \ 215 -v $(abspath build/docker/$(TARGET)/pkg):/opt/gopath/pkg \ 216 $(BASE_DOCKER_NS)/fabric-baseimage:$(BASE_DOCKER_TAG) \ 217 go install -ldflags "$(DOCKER_GO_LDFLAGS)" $(pkgmap.$(@F)) 218 @touch $@ 219 220 build/bin: 221 mkdir -p $@ 222 223 changelog: 224 ./scripts/changelog.sh v$(PREV_VERSION) v$(BASE_VERSION) 225 226 build/docker/gotools/bin/protoc-gen-go: build/docker/gotools 227 228 build/docker/gotools: gotools/Makefile 229 @mkdir -p $@/bin $@/obj 230 @$(DRUN) \ 231 -v $(abspath $@):/opt/gotools \ 232 -w /opt/gopath/src/$(PKGNAME)/gotools \ 233 $(BASE_DOCKER_NS)/fabric-baseimage:$(BASE_DOCKER_TAG) \ 234 make install BINDIR=/opt/gotools/bin OBJDIR=/opt/gotools/obj 235 236 # Both peer and peer-docker depend on ccenv and javaenv (all docker env images it supports). 237 build/bin/peer: build/image/ccenv/$(DUMMY) build/image/javaenv/$(DUMMY) 238 build/image/peer/$(DUMMY): build/image/ccenv/$(DUMMY) build/image/javaenv/$(DUMMY) 239 240 build/bin/%: $(PROJECT_FILES) 241 @mkdir -p $(@D) 242 @echo "$@" 243 $(CGO_FLAGS) GOBIN=$(abspath $(@D)) go install -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 244 @echo "Binary available as $@" 245 @touch $@ 246 247 # payload definitions' 248 build/image/ccenv/payload: build/docker/gotools/bin/protoc-gen-go \ 249 build/bin/chaintool \ 250 build/goshim.tar.bz2 251 build/image/javaenv/payload: build/javashim.tar.bz2 \ 252 build/protos.tar.bz2 \ 253 settings.gradle 254 build/image/peer/payload: build/docker/bin/peer \ 255 build/sampleconfig.tar.bz2 256 build/image/orderer/payload: build/docker/bin/orderer \ 257 build/sampleconfig.tar.bz2 258 build/image/buildenv/payload: build/gotools.tar.bz2 \ 259 build/docker/gotools/bin/protoc-gen-go 260 build/image/testenv/payload: build/docker/bin/orderer \ 261 build/docker/bin/peer \ 262 build/sampleconfig.tar.bz2 \ 263 images/testenv/install-softhsm2.sh 264 build/image/zookeeper/payload: images/zookeeper/docker-entrypoint.sh 265 build/image/kafka/payload: images/kafka/docker-entrypoint.sh \ 266 images/kafka/kafka-run-class.sh 267 build/image/couchdb/payload: images/couchdb/docker-entrypoint.sh \ 268 images/couchdb/local.ini \ 269 images/couchdb/vm.args 270 build/image/tools/payload: build/docker/bin/cryptogen \ 271 build/docker/bin/configtxgen \ 272 build/docker/bin/configtxlator \ 273 build/docker/bin/peer \ 274 build/sampleconfig.tar.bz2 275 276 build/image/%/payload: 277 mkdir -p $@ 278 cp $^ $@ 279 280 .PRECIOUS: build/image/%/Dockerfile 281 282 build/image/%/Dockerfile: images/%/Dockerfile.in 283 @cat $< \ 284 | sed -e 's/_BASE_NS_/$(BASE_DOCKER_NS)/g' \ 285 | sed -e 's/_NS_/$(DOCKER_NS)/g' \ 286 | sed -e 's/_BASE_TAG_/$(BASE_DOCKER_TAG)/g' \ 287 | sed -e 's/_TAG_/$(DOCKER_TAG)/g' \ 288 > $@ 289 @echo LABEL $(BASE_DOCKER_LABEL).version=$(PROJECT_VERSION) \\>>$@ 290 @echo " " $(BASE_DOCKER_LABEL).base.version=$(BASEIMAGE_RELEASE)>>$@ 291 292 build/image/%/$(DUMMY): Makefile build/image/%/payload build/image/%/Dockerfile 293 $(eval TARGET = ${patsubst build/image/%/$(DUMMY),%,${@}}) 294 @echo "Building docker $(TARGET)-image" 295 $(DBUILD) -t $(DOCKER_NS)/fabric-$(TARGET) $(@D) 296 docker tag $(DOCKER_NS)/fabric-$(TARGET) $(DOCKER_NS)/fabric-$(TARGET):$(DOCKER_TAG) 297 @touch $@ 298 299 build/gotools.tar.bz2: build/docker/gotools 300 (cd $</bin && tar -jc *) > $@ 301 302 build/goshim.tar.bz2: $(GOSHIM_DEPS) 303 @echo "Creating $@" 304 @tar -jhc -C $(GOPATH)/src $(patsubst $(GOPATH)/src/%,%,$(GOSHIM_DEPS)) > $@ 305 306 build/sampleconfig.tar.bz2: $(shell find sampleconfig -type f) 307 (cd sampleconfig && tar -jc *) > $@ 308 309 build/javashim.tar.bz2: $(JAVASHIM_DEPS) 310 build/protos.tar.bz2: $(PROTOS) 311 312 build/%.tar.bz2: 313 @echo "Creating $@" 314 @tar -jc $^ > $@ 315 316 # builds release packages for the host platform 317 release: $(patsubst %,release/%, $(MARCH)) 318 319 # builds release packages for all target platforms 320 release-all: $(patsubst %,release/%, $(RELEASE_PLATFORMS)) 321 322 release/%: GO_LDFLAGS=-X $(pkgmap.$(@F))/metadata.Version=$(PROJECT_VERSION) 323 324 release/windows-amd64: GOOS=windows 325 release/windows-amd64: GO_TAGS+= nopkcs11 326 release/windows-amd64: $(patsubst %,release/windows-amd64/bin/%, $(RELEASE_PKGS)) release/windows-amd64/install 327 328 release/darwin-amd64: GOOS=darwin 329 release/darwin-amd64: GO_TAGS+= nopkcs11 330 release/darwin-amd64: $(patsubst %,release/darwin-amd64/bin/%, $(RELEASE_PKGS)) release/darwin-amd64/install 331 332 release/linux-amd64: GOOS=linux 333 release/linux-amd64: GO_TAGS+= nopkcs11 334 release/linux-amd64: $(patsubst %,release/linux-amd64/bin/%, $(RELEASE_PKGS)) release/linux-amd64/install 335 336 release/%-amd64: DOCKER_ARCH=x86_64 337 release/%-amd64: GOARCH=amd64 338 release/linux-%: GOOS=linux 339 340 release/linux-ppc64le: GOARCH=ppc64le 341 release/linux-ppc64le: DOCKER_ARCH=ppc64le 342 release/linux-ppc64le: GO_TAGS+= nopkcs11 343 release/linux-ppc64le: $(patsubst %,release/linux-ppc64le/bin/%, $(RELEASE_PKGS)) release/linux-ppc64le/install 344 345 release/linux-s390x: GOARCH=s390x 346 release/linux-s390x: DOCKER_ARCH=s390x 347 release/linux-s390x: GO_TAGS+= nopkcs11 348 release/linux-s390x: $(patsubst %,release/linux-s390x/bin/%, $(RELEASE_PKGS)) release/linux-s390x/install 349 350 release/%/bin/configtxlator: $(PROJECT_FILES) 351 @echo "Building $@ for $(GOOS)-$(GOARCH)" 352 mkdir -p $(@D) 353 $(CGO_FLAGS) GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $(abspath $@) -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 354 355 release/%/bin/configtxgen: $(PROJECT_FILES) 356 @echo "Building $@ for $(GOOS)-$(GOARCH)" 357 mkdir -p $(@D) 358 $(CGO_FLAGS) GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $(abspath $@) -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 359 360 release/%/bin/cryptogen: $(PROJECT_FILES) 361 @echo "Building $@ for $(GOOS)-$(GOARCH)" 362 mkdir -p $(@D) 363 $(CGO_FLAGS) GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $(abspath $@) -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 364 365 release/%/bin/orderer: GO_LDFLAGS = $(patsubst %,-X $(PKGNAME)/common/metadata.%,$(METADATA_VAR)) 366 367 release/%/bin/orderer: $(PROJECT_FILES) 368 @echo "Building $@ for $(GOOS)-$(GOARCH)" 369 mkdir -p $(@D) 370 $(CGO_FLAGS) GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $(abspath $@) -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 371 372 release/%/bin/peer: GO_LDFLAGS = $(patsubst %,-X $(PKGNAME)/common/metadata.%,$(METADATA_VAR)) 373 374 release/%/bin/peer: $(PROJECT_FILES) 375 @echo "Building $@ for $(GOOS)-$(GOARCH)" 376 mkdir -p $(@D) 377 $(CGO_FLAGS) GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $(abspath $@) -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 378 379 release/%/install: $(PROJECT_FILES) 380 mkdir -p $(@D)/bin 381 @cat $(@D)/../templates/get-docker-images.in \ 382 | sed -e 's/_NS_/$(DOCKER_NS)/g' \ 383 | sed -e 's/_ARCH_/$(DOCKER_ARCH)/g' \ 384 | sed -e 's/_VERSION_/$(PROJECT_VERSION)/g' \ 385 | sed -e 's/_BASE_DOCKER_TAG_/$(BASE_DOCKER_TAG)/g' \ 386 > $(@D)/bin/get-docker-images.sh 387 @chmod +x $(@D)/bin/get-docker-images.sh 388 @cat $(@D)/../templates/get-byfn.in \ 389 | sed -e 's/_VERSION_/$(PROJECT_VERSION)/g' \ 390 > $(@D)/bin/get-byfn.sh 391 @chmod +x $(@D)/bin/get-byfn.sh 392 393 .PHONY: dist 394 dist: dist-clean release 395 cd release/$(MARCH) && tar -czvf hyperledger-fabric-$(MARCH).$(PROJECT_VERSION).tar.gz * 396 397 dist-all: dist-clean release-all $(patsubst %,dist/%, $(RELEASE_PLATFORMS)) 398 399 dist/windows-amd64: 400 cd release/windows-amd64 && tar -czvf hyperledger-fabric-windows-amd64.$(PROJECT_VERSION).tar.gz * 401 402 dist/darwin-amd64: 403 cd release/darwin-amd64 && tar -czvf hyperledger-fabric-darwin-amd64.$(PROJECT_VERSION).tar.gz * 404 405 dist/linux-amd64: 406 cd release/linux-amd64 && tar -czvf hyperledger-fabric-linux-amd64.$(PROJECT_VERSION).tar.gz * 407 408 dist/linux-ppc64le: 409 cd release/linux-ppc64le && tar -czvf hyperledger-fabric-linux-ppc64le.$(PROJECT_VERSION).tar.gz * 410 411 dist/linux-s390x: 412 cd release/linux-s390x && tar -czvf hyperledger-fabric-linux-s390x.$(PROJECT_VERSION).tar.gz * 413 414 .PHONY: protos 415 protos: buildenv 416 @$(DRUN) $(DOCKER_NS)/fabric-buildenv:$(DOCKER_TAG) ./scripts/compile_protos.sh 417 418 %-docker-clean: 419 $(eval TARGET = ${patsubst %-docker-clean,%,${@}}) 420 -docker images -q $(DOCKER_NS)/fabric-$(TARGET) | xargs -I '{}' docker rmi -f '{}' 421 -@rm -rf build/image/$(TARGET) ||: 422 423 docker-clean: $(patsubst %,%-docker-clean, $(IMAGES)) 424 425 .PHONY: clean 426 clean: docker-clean unit-test-clean release-clean 427 -@rm -rf build ||: 428 429 .PHONY: clean-all 430 clean-all: clean gotools-clean dist-clean release-clean unit-test-clean 431 -@rm -rf /var/hyperledger/* ||: 432 433 .PHONY: dist-clean 434 dist-clean: 435 -@rm -rf release/windows-amd64/hyperledger-fabric-windows-amd64.$(PROJECT_VERSION).tar.gz ||: 436 -@rm -rf release/darwin-amd64/hyperledger-fabric-darwin-amd64.$(PROJECT_VERSION).tar.gz ||: 437 -@rm -rf release/linux-amd64/hyperledger-fabric-linux-amd64.$(PROJECT_VERSION).tar.gz ||: 438 -@rm -rf release/linux-ppc64le/hyperledger-fabric-linux-ppc64le.$(PROJECT_VERSION).tar.gz ||: 439 -@rm -rf release/linux-s390x/hyperledger-fabric-linux-s390x.$(PROJECT_VERSION).tar.gz ||: 440 441 %-release-clean: 442 $(eval TARGET = ${patsubst %-release-clean,%,${@}}) 443 -@rm -rf release/$(TARGET) 444 445 release-clean: $(patsubst %,%-release-clean, $(RELEASE_PLATFORMS)) 446 447 .PHONY: unit-test-clean 448 unit-test-clean: 449 cd unit-test && docker-compose down