github.com/onflow/flow-go@v0.33.17/Makefile (about)

     1  # The short Git commit hash
     2  SHORT_COMMIT := $(shell git rev-parse --short HEAD)
     3  BRANCH_NAME:=$(shell git rev-parse --abbrev-ref HEAD | tr '/' '-')
     4  # The Git commit hash
     5  COMMIT := $(shell git rev-parse HEAD)
     6  # The tag of the current commit, otherwise empty
     7  VERSION := $(shell git describe --tags --abbrev=2 --match "v*" --match "secure-cadence*" 2>/dev/null)
     8  
     9  # By default, this will run all tests in all packages, but we have a way to override this in CI so that we can
    10  # dynamically split up CI jobs into smaller jobs that can be run in parallel
    11  GO_TEST_PACKAGES := ./...
    12  
    13  # Image tag: if image tag is not set, set it with version (or short commit if empty)
    14  ifeq (${IMAGE_TAG},)
    15  IMAGE_TAG := ${VERSION}
    16  endif
    17  
    18  ifeq (${IMAGE_TAG},)
    19  IMAGE_TAG := ${SHORT_COMMIT}
    20  endif
    21  
    22  IMAGE_TAG_NO_ADX := $(IMAGE_TAG)-without-adx
    23  IMAGE_TAG_NO_NETGO_NO_ADX := $(IMAGE_TAG)-without-netgo-without-adx
    24  IMAGE_TAG_ARM := $(IMAGE_TAG)-arm
    25  
    26  # Name of the cover profile
    27  COVER_PROFILE := coverage.txt
    28  # Disable go sum database lookup for private repos
    29  GOPRIVATE=github.com/dapperlabs/*
    30  # OS
    31  UNAME := $(shell uname)
    32  
    33  # Used when building within docker
    34  GOARCH := $(shell go env GOARCH)
    35  
    36  # The location of the k8s YAML files
    37  K8S_YAMLS_LOCATION_STAGING=./k8s/staging
    38  
    39  
    40  # docker container registry
    41  export CONTAINER_REGISTRY := gcr.io/flow-container-registry
    42  export DOCKER_BUILDKIT := 1
    43  
    44  # set `CRYPTO_FLAG` when building natively (not cross-compiling)
    45  include crypto_adx_flag.mk
    46  
    47  # needed for CI
    48  .PHONY: noop
    49  noop:
    50  	@echo "This is a no-op target"
    51  
    52  cmd/collection/collection:
    53  	CGO_CFLAGS=$(CRYPTO_FLAG) go build -o cmd/collection/collection cmd/collection/main.go
    54  
    55  cmd/util/util:
    56  	CGO_CFLAGS=$(CRYPTO_FLAG) go build -o cmd/util/util cmd/util/main.go
    57  
    58  .PHONY: update-core-contracts-version
    59  update-core-contracts-version:
    60  	# updates the core-contracts version in all of the go.mod files
    61  	# usage example: CC_VERSION=0.16.0 make update-core-contracts-version
    62  	./scripts/update-core-contracts.sh $(CC_VERSION)
    63  	make tidy
    64  
    65  .PHONY: update-cadence-version
    66  update-cadence-version:
    67  	# updates the cadence version in all of the go.mod files
    68  	# usage example: CC_VERSION=0.16.0 make update-cadence-version
    69  	./scripts/update-cadence.sh $(CC_VERSION)
    70  	make tidy
    71  
    72  .PHONY: unittest-main
    73  unittest-main:
    74  	# test all packages
    75  	CGO_CFLAGS=$(CRYPTO_FLAG) go test $(if $(VERBOSE),-v,) -coverprofile=$(COVER_PROFILE) -covermode=atomic $(if $(RACE_DETECTOR),-race,) $(if $(JSON_OUTPUT),-json,) $(if $(NUM_RUNS),-count $(NUM_RUNS),) $(GO_TEST_PACKAGES)
    76  
    77  .PHONY: install-mock-generators
    78  install-mock-generators:
    79  	cd ${GOPATH}; \
    80      go install github.com/vektra/mockery/v2@v2.21.4; \
    81      go install github.com/golang/mock/mockgen@v1.6.0;
    82  
    83  .PHONY: install-tools
    84  install-tools: check-go-version install-mock-generators
    85  	cd ${GOPATH}; \
    86  	go install github.com/golang/protobuf/protoc-gen-go@v1.3.2; \
    87  	go install github.com/uber/prototool/cmd/prototool@v1.9.0; \
    88  	go install github.com/gogo/protobuf/protoc-gen-gofast@latest; \
    89  	go install golang.org/x/tools/cmd/stringer@master;
    90  
    91  .PHONY: verify-mocks
    92  verify-mocks: tidy generate-mocks
    93  	git diff --exit-code
    94  
    95  .SILENT: go-math-rand-check
    96  go-math-rand-check:
    97  	# check that the insecure math/rand Go package isn't used by production code.
    98  	# `exclude` should only specify non production code (test, bench..).
    99  	# If this check fails, try updating your code by using:
   100  	#   - "crypto/rand" or "flow-go/utils/rand" for non-deterministic randomness
   101  	#   - "onflow/crypto/random" for deterministic randomness
   102  	grep --include=\*.go \
   103  	--exclude=*test* --exclude=*helper* --exclude=*example* --exclude=*fixture* --exclude=*benchmark* --exclude=*profiler* \
   104      --exclude-dir=*test* --exclude-dir=*helper* --exclude-dir=*example* --exclude-dir=*fixture* --exclude-dir=*benchmark* --exclude-dir=*profiler* -rnw '"math/rand"'; \
   105      if [ $$? -ne 1 ]; then \
   106         echo "[Error] Go production code should not use math/rand package"; exit 1; \
   107      fi
   108  
   109  .PHONY: code-sanity-check
   110  code-sanity-check: go-math-rand-check
   111  
   112  .PHONY: fuzz-fvm
   113  fuzz-fvm:
   114  	# run fuzz tests in the fvm package
   115  	cd ./fvm && CGO_CFLAGS=$(CRYPTO_FLAG) go test -fuzz=Fuzz -run ^$$
   116  
   117  .PHONY: test
   118  test: verify-mocks unittest-main
   119  
   120  .PHONY: integration-test
   121  integration-test: docker-native-build-flow
   122  	$(MAKE) -C integration integration-test
   123  
   124  .PHONY: benchmark
   125  benchmark: docker-native-build-flow
   126  	$(MAKE) -C integration benchmark
   127  
   128  .PHONY: coverage
   129  coverage:
   130  ifeq ($(COVER), true)
   131  	# Cover summary has to produce cover.json
   132  	COVER_PROFILE=$(COVER_PROFILE) ./cover-summary.sh
   133  	# file has to be called index.html
   134  	gocov-html cover.json > index.html
   135  	# coverage.zip will automatically be picked up by teamcity
   136  	zip coverage.zip index.html
   137  endif
   138  
   139  .PHONY: generate-openapi
   140  generate-openapi:
   141  	swagger-codegen generate -l go -i https://raw.githubusercontent.com/onflow/flow/master/openapi/access.yaml -D packageName=models,modelDocs=false,models -o engine/access/rest/models;
   142  	go fmt ./engine/access/rest/models
   143  
   144  .PHONY: generate
   145  generate: generate-proto generate-mocks generate-fvm-env-wrappers
   146  
   147  .PHONY: generate-proto
   148  generate-proto:
   149  	prototool generate protobuf
   150  
   151  .PHONY: generate-fvm-env-wrappers
   152  generate-fvm-env-wrappers:
   153  	CGO_CFLAGS=$(CRYPTO_FLAG) go run ./fvm/environment/generate-wrappers fvm/environment/parse_restricted_checker.go
   154  
   155  .PHONY: generate-mocks
   156  generate-mocks: install-mock-generators
   157  	mockery --name '(Connector|PingInfoProvider)' --dir=network/p2p --case=underscore --output="./network/mocknetwork" --outpkg="mocknetwork"
   158  	CGO_CFLAGS=$(CRYPTO_FLAG) mockgen -destination=storage/mocks/storage.go -package=mocks github.com/onflow/flow-go/storage Blocks,Headers,Payloads,Collections,Commits,Events,ServiceEvents,TransactionResults
   159  	CGO_CFLAGS=$(CRYPTO_FLAG) mockgen -destination=module/mocks/network.go -package=mocks github.com/onflow/flow-go/module Local,Requester
   160  	CGO_CFLAGS=$(CRYPTO_FLAG) mockgen -destination=network/mocknetwork/mock_network.go -package=mocknetwork github.com/onflow/flow-go/network EngineRegistry
   161  	mockery --name='.*' --dir=integration/benchmark/mocksiface --case=underscore --output="integration/benchmark/mock" --outpkg="mock"
   162  	mockery --name=ExecutionDataStore --dir=module/executiondatasync/execution_data --case=underscore --output="./module/executiondatasync/execution_data/mock" --outpkg="mock"
   163  	mockery --name=Downloader --dir=module/executiondatasync/execution_data --case=underscore --output="./module/executiondatasync/execution_data/mock" --outpkg="mock"
   164  	mockery --name '(ExecutionDataRequester|IndexReporter)' --dir=module/state_synchronization --case=underscore --output="./module/state_synchronization/mock" --outpkg="state_synchronization"
   165  	mockery --name 'ExecutionState' --dir=engine/execution/state --case=underscore --output="engine/execution/state/mock" --outpkg="mock"
   166  	mockery --name 'BlockComputer' --dir=engine/execution/computation/computer --case=underscore --output="engine/execution/computation/computer/mock" --outpkg="mock"
   167  	mockery --name 'ComputationManager' --dir=engine/execution/computation --case=underscore --output="engine/execution/computation/mock" --outpkg="mock"
   168  	mockery --name '.*' --dir=engine/execution/computation/query --case=underscore --output="engine/execution/computation/query/mock" --outpkg="mock"
   169  	mockery --name 'EpochComponentsFactory' --dir=engine/collection/epochmgr --case=underscore --output="engine/collection/epochmgr/mock" --outpkg="mock"
   170  	mockery --name '.*' --dir=engine/execution/ --case=underscore --output="engine/execution/mock" --outpkg="mock"
   171  	mockery --name 'Backend' --dir=engine/collection/rpc --case=underscore --output="engine/collection/rpc/mock" --outpkg="mock"
   172  	mockery --name 'ProviderEngine' --dir=engine/execution/provider --case=underscore --output="engine/execution/provider/mock" --outpkg="mock"
   173  	mockery --name '.*' --dir=state/cluster --case=underscore --output="state/cluster/mock" --outpkg="mock"
   174  	mockery --name '.*' --dir=module --case=underscore --output="./module/mock" --outpkg="mock"
   175  	mockery --name '.*' --dir=module/mempool --case=underscore --output="./module/mempool/mock" --outpkg="mempool"
   176  	mockery --name '.*' --dir=module/component --case=underscore --output="./module/component/mock" --outpkg="component"
   177  	mockery --name '.*' --dir=network --case=underscore --output="./network/mocknetwork" --outpkg="mocknetwork"
   178  	mockery --name '.*' --dir=storage --case=underscore --output="./storage/mock" --outpkg="mock"
   179  	mockery --name '.*' --dir="state/protocol" --case=underscore --output="state/protocol/mock" --outpkg="mock"
   180  	mockery --name '.*' --dir="state/protocol/events" --case=underscore --output="./state/protocol/events/mock" --outpkg="mock"
   181  	mockery --name '.*' --dir=engine/execution/computation/computer --case=underscore --output="./engine/execution/computation/computer/mock" --outpkg="mock"
   182  	mockery --name '.*' --dir=engine/execution/state --case=underscore --output="./engine/execution/state/mock" --outpkg="mock"
   183  	mockery --name '.*' --dir=engine/collection --case=underscore --output="./engine/collection/mock" --outpkg="mock"
   184  	mockery --name 'complianceCore' --dir=engine/common/follower --exported --case=underscore --output="./engine/common/follower/mock" --outpkg="mock"
   185  	mockery --name '.*' --dir=engine/common/follower/cache --case=underscore --output="./engine/common/follower/cache/mock" --outpkg="mock"
   186  	mockery --name '.*' --dir=engine/consensus --case=underscore --output="./engine/consensus/mock" --outpkg="mock"
   187  	mockery --name '.*' --dir=engine/consensus/approvals --case=underscore --output="./engine/consensus/approvals/mock" --outpkg="mock"
   188  	rm -rf ./fvm/mock
   189  	mockery --name '.*' --dir=fvm --case=underscore --output="./fvm/mock" --outpkg="mock"
   190  	rm -rf ./fvm/environment/mock
   191  	mockery --name '.*' --dir=fvm/environment --case=underscore --output="./fvm/environment/mock" --outpkg="mock"
   192  	mockery --name '.*' --dir=ledger --case=underscore --output="./ledger/mock" --outpkg="mock"
   193  	mockery --name 'ViolationsConsumer' --dir=network --case=underscore --output="./network/mocknetwork" --outpkg="mocknetwork"
   194  	mockery --name '.*' --dir=network/p2p/ --case=underscore --output="./network/p2p/mock" --outpkg="mockp2p"
   195  	mockery --name '.*' --dir=network/alsp --case=underscore --output="./network/alsp/mock" --outpkg="mockalsp"
   196  	mockery --name 'Vertex' --dir="./module/forest" --case=underscore --output="./module/forest/mock" --outpkg="mock"
   197  	mockery --name '.*' --dir="./consensus/hotstuff" --case=underscore --output="./consensus/hotstuff/mocks" --outpkg="mocks"
   198  	mockery --name '.*' --dir="./engine/access/wrapper" --case=underscore --output="./engine/access/mock" --outpkg="mock"
   199  	mockery --name 'API' --dir="./access" --case=underscore --output="./access/mock" --outpkg="mock"
   200  	mockery --name 'API' --dir="./engine/protocol" --case=underscore --output="./engine/protocol/mock" --outpkg="mock"
   201  	mockery --name '.*' --dir="./engine/access/state_stream" --case=underscore --output="./engine/access/state_stream/mock" --outpkg="mock"
   202  	mockery --name 'ConnectionFactory' --dir="./engine/access/rpc/connection" --case=underscore --output="./engine/access/rpc/connection/mock" --outpkg="mock"
   203  	mockery --name 'Communicator' --dir="./engine/access/rpc/backend" --case=underscore --output="./engine/access/rpc/backend/mock" --outpkg="mock"
   204  
   205  	mockery --name '.*' --dir=model/fingerprint --case=underscore --output="./model/fingerprint/mock" --outpkg="mock"
   206  	mockery --name 'ExecForkActor' --structname 'ExecForkActorMock' --dir=module/mempool/consensus/mock/ --case=underscore --output="./module/mempool/consensus/mock/" --outpkg="mock"
   207  	mockery --name '.*' --dir=engine/verification/fetcher/ --case=underscore --output="./engine/verification/fetcher/mock" --outpkg="mockfetcher"
   208  	mockery --name '.*' --dir=./cmd/util/ledger/reporters --case=underscore --output="./cmd/util/ledger/reporters/mock" --outpkg="mock"
   209  	mockery --name 'Storage' --dir=module/executiondatasync/tracker --case=underscore --output="module/executiondatasync/tracker/mock" --outpkg="mocktracker"
   210  	mockery --name 'ScriptExecutor' --dir=module/execution --case=underscore --output="module/execution/mock" --outpkg="mock"
   211  	mockery --name 'StorageSnapshot' --dir=fvm/storage/snapshot --case=underscore --output="fvm/storage/snapshot/mock" --outpkg="mock"
   212  
   213  	#temporarily make insecure/ a non-module to allow mockery to create mocks
   214  	mv insecure/go.mod insecure/go2.mod
   215  	if [ -f go.work ]; then mv go.work go2.work; fi
   216  	mockery --name '.*' --dir=insecure/ --case=underscore --output="./insecure/mock"  --outpkg="mockinsecure"
   217  	mv insecure/go2.mod insecure/go.mod
   218  	if [ -f go2.work ]; then mv go2.work go.work; fi
   219  
   220  # this ensures there is no unused dependency being added by accident
   221  .PHONY: tidy
   222  tidy:
   223  	go mod tidy -v
   224  	cd integration; go mod tidy -v
   225  	cd crypto; go mod tidy -v
   226  	cd cmd/testclient; go mod tidy -v
   227  	cd insecure; go mod tidy -v
   228  	git diff --exit-code
   229  
   230  .PHONY: lint
   231  lint: tidy
   232  	# revive -config revive.toml -exclude storage/ledger/trie ./...
   233  	golangci-lint run -v ./...
   234  
   235  .PHONY: fix-lint
   236  fix-lint:
   237  	# revive -config revive.toml -exclude storage/ledger/trie ./...
   238  	golangci-lint run -v --fix ./...
   239  
   240  # Runs unit tests with different list of packages as passed by CI so they run in parallel
   241  .PHONY: ci
   242  ci: install-tools test
   243  
   244  # Runs integration tests
   245  .PHONY: ci-integration
   246  ci-integration:
   247  	$(MAKE) -C integration integration-test
   248  
   249  # Runs benchmark tests
   250  # NOTE: we do not need `docker-native-build-flow` as this is run as a separate step
   251  # on Teamcity
   252  .PHONY: ci-benchmark
   253  ci-benchmark: install-tools
   254  	$(MAKE) -C integration ci-benchmark
   255  
   256  # Runs unit tests, test coverage, lint in Docker (for mac)
   257  .PHONY: docker-ci
   258  docker-ci:
   259  	docker run --env RACE_DETECTOR=$(RACE_DETECTOR) --env COVER=$(COVER) --env JSON_OUTPUT=$(JSON_OUTPUT) \
   260  		-v /run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock -e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock" \
   261  		-v "$(CURDIR)":/go/flow -v "/tmp/.cache":"/root/.cache" -v "/tmp/pkg":"/go/pkg" \
   262  		-w "/go/flow" "$(CONTAINER_REGISTRY)/golang-cmake:v0.0.7" \
   263  		make ci
   264  
   265  # Runs integration tests in Docker  (for mac)
   266  .PHONY: docker-ci-integration
   267  docker-ci-integration:
   268  	docker run \
   269  		--env DOCKER_API_VERSION='1.39' \
   270  		--network host \
   271  		-v "$(CURDIR)":/go/flow -v "/tmp/.cache":"/root/.cache" -v "/tmp/pkg":"/go/pkg" \
   272  		-v /tmp:/tmp \
   273  		-v /var/run/docker.sock:/var/run/docker.sock \
   274  		-v /run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock -e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock" \
   275  		-w "/go/flow" "$(CONTAINER_REGISTRY)/golang-cmake:v0.0.7" \
   276  		make ci-integration
   277  
   278  # only works on Debian
   279  .SILENT: install-cross-build-tools
   280  install-cross-build-tools:
   281  	if [ "$(UNAME)" = "Debian" ] ; then \
   282  		apt-get update && apt-get -y install apt-utils gcc-aarch64-linux-gnu ; \
   283  	elif [ "$(UNAME)" = "Linux" ] ; then \
   284  		apt-get update && apt-get -y install apt-utils gcc-aarch64-linux-gnu ; \
   285  	else \
   286  		echo "this target only works on Debian or Linux, host runs on" $(UNAME) ; \
   287  	fi
   288  
   289  .PHONY: docker-native-build-collection
   290  docker-native-build-collection:
   291  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/collection --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   292  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   293  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   294  		-t "$(CONTAINER_REGISTRY)/collection:latest" \
   295  		-t "$(CONTAINER_REGISTRY)/collection:$(IMAGE_TAG)" .
   296  
   297  .PHONY: docker-build-collection-with-adx
   298  docker-build-collection-with-adx:
   299  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/collection --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=amd64 --target production \
   300  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   301  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG)" \
   302  		-t "$(CONTAINER_REGISTRY)/collection:$(IMAGE_TAG)"  .
   303  
   304  .PHONY: docker-build-collection-without-adx
   305  docker-build-collection-without-adx:
   306  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/collection --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_NO_ADX) --build-arg GOARCH=amd64 --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   307  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   308  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_ADX)" \
   309  		-t "$(CONTAINER_REGISTRY)/collection:$(IMAGE_TAG_NO_ADX)"  .
   310  
   311  .PHONY: docker-build-collection-without-netgo-without-adx
   312  docker-build-collection-without-netgo-without-adx:
   313  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/collection --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_NO_NETGO_NO_ADX) --build-arg GOARCH=amd64 --build-arg TAGS="" --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   314  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   315  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_NETGO_NO_ADX)" \
   316  		-t "$(CONTAINER_REGISTRY)/collection:$(IMAGE_TAG_NO_NETGO_NO_ADX)"  .
   317  
   318  .PHONY: docker-cross-build-collection-arm
   319  docker-cross-build-collection-arm:
   320  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/collection --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_ARM) --build-arg CC=aarch64-linux-gnu-gcc --build-arg GOARCH=arm64 --target production \
   321  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   322  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_ARM)" \
   323  		-t "$(CONTAINER_REGISTRY)/collection:$(IMAGE_TAG_ARM)"  .
   324  
   325  .PHONY: docker-native-build-collection-debug
   326  docker-native-build-collection-debug:
   327  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/collection --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target debug \
   328  		-t "$(CONTAINER_REGISTRY)/collection-debug:latest" \
   329  		-t "$(CONTAINER_REGISTRY)/collection-debug:$(IMAGE_TAG)" .
   330  
   331  .PHONY: docker-native-build-consensus
   332  docker-native-build-consensus:
   333  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/consensus --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   334  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   335  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   336  		-t "$(CONTAINER_REGISTRY)/consensus:latest" \
   337  		-t "$(CONTAINER_REGISTRY)/consensus:$(IMAGE_TAG)"  .
   338  
   339  .PHONY: docker-build-consensus-with-adx
   340  docker-build-consensus-with-adx:
   341  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/consensus --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=amd64 --target production \
   342  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   343  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG)" \
   344  		-t "$(CONTAINER_REGISTRY)/consensus:$(IMAGE_TAG)" .
   345  
   346  .PHONY: docker-build-consensus-without-adx
   347  docker-build-consensus-without-adx:
   348  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/consensus --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG_NO_ADX) --build-arg GOARCH=amd64 --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   349  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   350  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_ADX)" \
   351  		-t "$(CONTAINER_REGISTRY)/consensus:$(IMAGE_TAG_NO_ADX)" .
   352  
   353  .PHONY: docker-build-consensus-without-netgo-without-adx
   354  docker-build-consensus-without-netgo-without-adx:
   355  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/consensus --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG_NO_NETGO_NO_ADX) --build-arg GOARCH=amd64 --build-arg TAGS="" --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   356  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   357  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_NETGO_NO_ADX)" \
   358  		-t "$(CONTAINER_REGISTRY)/consensus:$(IMAGE_TAG_NO_NETGO_NO_ADX)" .
   359  
   360  .PHONY: docker-cross-build-consensus-arm
   361  docker-cross-build-consensus-arm:
   362  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/consensus --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_ARM) --build-arg GOARCH=arm64 --build-arg CC=aarch64-linux-gnu-gcc --target production \
   363  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   364  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG_ARM}" \
   365  		-t "$(CONTAINER_REGISTRY)/consensus:$(IMAGE_TAG_ARM)"  .
   366  
   367  
   368  .PHONY: docker-native-build-consensus-debug
   369  docker-build-native-consensus-debug:
   370  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/consensus --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target debug \
   371  		-t "$(CONTAINER_REGISTRY)/consensus-debug:latest" \
   372  		-t "$(CONTAINER_REGISTRY)/consensus-debug:$(IMAGE_TAG)" .
   373  
   374  .PHONY: docker-native-build-execution
   375  docker-native-build-execution:
   376  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/execution --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   377  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   378  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   379  		-t "$(CONTAINER_REGISTRY)/execution:latest" \
   380  		-t "$(CONTAINER_REGISTRY)/execution:$(IMAGE_TAG)" .
   381  
   382  .PHONY: docker-build-execution-with-adx
   383  docker-build-execution-with-adx:
   384  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/execution --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=amd64 --target production \
   385  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   386  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG)" \
   387  		-t "$(CONTAINER_REGISTRY)/execution:$(IMAGE_TAG)" .
   388  
   389  .PHONY: docker-build-execution-without-adx
   390  docker-build-execution-without-adx:
   391  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/execution --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_NO_ADX) --build-arg GOARCH=amd64 --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   392  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   393  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_ADX)" \
   394  		-t "$(CONTAINER_REGISTRY)/execution:$(IMAGE_TAG_NO_ADX)" .
   395  
   396  .PHONY: docker-build-execution-without-netgo-without-adx
   397  docker-build-execution-without-netgo-without-adx:
   398  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/execution --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_NO_NETGO_NO_ADX) --build-arg GOARCH=amd64 --build-arg TAGS="" --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   399  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   400  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_NETGO_NO_ADX)" \
   401  		-t "$(CONTAINER_REGISTRY)/execution:$(IMAGE_TAG_NO_NETGO_NO_ADX)" .
   402  
   403  .PHONY: docker-cross-build-execution-arm
   404  docker-cross-build-execution-arm:
   405  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/execution --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_ARM) --build-arg GOARCH=arm64 --build-arg CC=aarch64-linux-gnu-gcc --target production \
   406  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   407  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG_ARM}" \
   408  		-t "$(CONTAINER_REGISTRY)/execution:$(IMAGE_TAG_ARM)" .
   409  
   410  .PHONY: docker-native-build-execution-debug
   411  docker-native-build-execution-debug:
   412  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/execution --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target debug \
   413  		-t "$(CONTAINER_REGISTRY)/execution-debug:latest" \
   414  		-t "$(CONTAINER_REGISTRY)/execution-debug:$(IMAGE_TAG)" .
   415  
   416  # build corrupt execution node for BFT testing
   417  .PHONY: docker-native-build-execution-corrupt
   418  docker-native-build-execution-corrupt:
   419  	# temporarily make insecure/ a non-module to allow Docker to use corrupt builders there
   420  	./insecure/cmd/mods_override.sh
   421  	docker build -f cmd/Dockerfile  --build-arg TARGET=./insecure/cmd/execution --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   422  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   423  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   424  		-t "$(CONTAINER_REGISTRY)/execution-corrupted:latest" \
   425  		-t "$(CONTAINER_REGISTRY)/execution-corrupted:$(IMAGE_TAG)" .
   426  	./insecure/cmd/mods_restore.sh
   427  
   428  .PHONY: docker-native-build-verification
   429  docker-native-build-verification:
   430  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/verification --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   431  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   432  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   433  		-t "$(CONTAINER_REGISTRY)/verification:latest" \
   434  		-t "$(CONTAINER_REGISTRY)/verification:$(IMAGE_TAG)" .
   435  
   436  .PHONY: docker-build-verification-with-adx
   437  docker-build-verification-with-adx:
   438  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/verification --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=amd64 --target production \
   439  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   440  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG)" \
   441  		-t "$(CONTAINER_REGISTRY)/verification:$(IMAGE_TAG)" .
   442  
   443  .PHONY: docker-build-verification-without-adx
   444  docker-build-verification-without-adx:
   445  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/verification --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_NO_ADX) --build-arg GOARCH=amd64 --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   446  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   447  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_ADX)" \
   448  		-t "$(CONTAINER_REGISTRY)/verification:$(IMAGE_TAG_NO_ADX)" .
   449  
   450  .PHONY: docker-build-verification-without-netgo-without-adx
   451  docker-build-verification-without-netgo-without-adx:
   452  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/verification --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_NO_NETGO_NO_ADX) --build-arg GOARCH=amd64 --build-arg TAGS=""  --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   453  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   454  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_NETGO_NO_ADX)" \
   455  		-t "$(CONTAINER_REGISTRY)/verification:$(IMAGE_TAG_NO_NETGO_NO_ADX)" .
   456  
   457  .PHONY: docker-cross-build-verification-arm
   458  docker-cross-build-verification-arm:
   459  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/verification --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_ARM) --build-arg GOARCH=arm64 --build-arg CC=aarch64-linux-gnu-gcc --target production \
   460  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   461  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG_ARM}" \
   462  		-t "$(CONTAINER_REGISTRY)/verification:$(IMAGE_TAG_ARM)" .
   463  
   464  .PHONY: docker-native-build-verification-debug
   465  docker-native-build-verification-debug:
   466  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/verification --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target debug \
   467  		-t "$(CONTAINER_REGISTRY)/verification-debug:latest" \
   468  		-t "$(CONTAINER_REGISTRY)/verification-debug:$(IMAGE_TAG)" .
   469  
   470  # build corrupt verification node for BFT testing
   471  .PHONY: docker-native-build-verification-corrupt
   472  docker-native-build-verification-corrupt:
   473  	# temporarily make insecure/ a non-module to allow Docker to use corrupt builders there
   474  	./insecure/cmd/mods_override.sh
   475  	docker build -f cmd/Dockerfile  --build-arg TARGET=./insecure/cmd/verification --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   476  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   477  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   478  		-t "$(CONTAINER_REGISTRY)/verification-corrupted:latest" \
   479  		-t "$(CONTAINER_REGISTRY)/verification-corrupted:$(IMAGE_TAG)" .
   480  	./insecure/cmd/mods_restore.sh
   481  
   482  .PHONY: docker-native-build-access
   483  docker-native-build-access:
   484  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/access --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   485  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   486  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   487  		-t "$(CONTAINER_REGISTRY)/access:latest" \
   488  		-t "$(CONTAINER_REGISTRY)/access:$(IMAGE_TAG)" .
   489  
   490  .PHONY: docker-build-access-with-adx
   491  docker-build-access-with-adx:
   492  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/access --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=amd64 --target production \
   493  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   494  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG)" \
   495  		-t "$(CONTAINER_REGISTRY)/access:$(IMAGE_TAG)" .
   496  
   497  .PHONY: docker-build-access-without-adx
   498  docker-build-access-without-adx:
   499  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/access --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_NO_ADX) --build-arg GOARCH=amd64 --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   500  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   501  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_ADX)" \
   502  		-t "$(CONTAINER_REGISTRY)/access:$(IMAGE_TAG_NO_ADX)" .
   503  
   504  .PHONY: docker-build-access-without-netgo-without-adx
   505  docker-build-access-without-netgo-without-adx:
   506  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/access --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_NO_NETGO_NO_ADX) --build-arg GOARCH=amd64 --build-arg TAGS="" --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   507  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   508  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_NETGO_NO_ADX)" \
   509  		-t "$(CONTAINER_REGISTRY)/access:$(IMAGE_TAG_NO_NETGO_NO_ADX)" .
   510  
   511  .PHONY: docker-cross-build-access-arm
   512  docker-cross-build-access-arm:
   513  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/access --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_ARM) --build-arg GOARCH=arm64 --build-arg CC=aarch64-linux-gnu-gcc --target production \
   514  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   515  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG_ARM}" \
   516  		-t "$(CONTAINER_REGISTRY)/access:$(IMAGE_TAG_ARM)" .
   517  
   518  
   519  .PHONY: docker-native-build-access-debug
   520  docker-native-build-access-debug:
   521  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/access  --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target debug \
   522  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   523  		-t "$(CONTAINER_REGISTRY)/access-debug:latest" \
   524  		-t "$(CONTAINER_REGISTRY)/access-debug:$(IMAGE_TAG)" .
   525  
   526  # build corrupt access node for BFT testing
   527  .PHONY: docker-native-build-access-corrupt
   528  docker-native-build-access-corrupt:
   529  	#temporarily make insecure/ a non-module to allow Docker to use corrupt builders there
   530  	./insecure/cmd/mods_override.sh
   531  	docker build -f cmd/Dockerfile  --build-arg TARGET=./insecure/cmd/access --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   532  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   533  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   534  		-t "$(CONTAINER_REGISTRY)/access-corrupted:latest" \
   535  		-t "$(CONTAINER_REGISTRY)/access-corrupted:$(IMAGE_TAG)" .
   536  	./insecure/cmd/mods_restore.sh
   537  
   538  .PHONY: docker-native-build-observer
   539  docker-native-build-observer:
   540  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/observer --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   541  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   542  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   543  		-t "$(CONTAINER_REGISTRY)/observer:latest" \
   544  		-t "$(CONTAINER_REGISTRY)/observer:$(IMAGE_TAG)" .
   545  
   546  .PHONY: docker-build-observer-with-adx
   547  docker-build-observer-with-adx:
   548  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/observer --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=amd64 --target production \
   549  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   550  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG)" \
   551  		-t "$(CONTAINER_REGISTRY)/observer:$(IMAGE_TAG)" .
   552  
   553  .PHONY: docker-build-observer-without-adx
   554  docker-build-observer-without-adx:
   555  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/observer --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_NO_ADX) --build-arg GOARCH=amd64 --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   556  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   557  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_ADX)" \
   558  		-t "$(CONTAINER_REGISTRY)/observer:$(IMAGE_TAG_NO_ADX)" .
   559  
   560  .PHONY: docker-build-observer-without-netgo-without-adx
   561  docker-build-observer-without-netgo-without-adx:
   562  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/observer --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG_NO_NETGO_NO_ADX) --build-arg GOARCH=amd64 --build-arg TAGS="" --build-arg CGO_FLAG=$(DISABLE_ADX) --target production \
   563  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   564  		--label "git_commit=${COMMIT}" --label "git_tag=$(IMAGE_TAG_NO_NETGO_NO_ADX)" \
   565  		-t "$(CONTAINER_REGISTRY)/observer:$(IMAGE_TAG_NO_NETGO_NO_ADX)" .
   566  
   567  .PHONY: docker-cross-build-observer-arm
   568  docker-cross-build-observer-arm:
   569  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/observer --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG_ARM) --build-arg GOARCH=arm64 --build-arg CC=aarch64-linux-gnu-gcc --target production \
   570  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   571  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG_ARM}" \
   572  		-t "$(CONTAINER_REGISTRY)/observer:$(IMAGE_TAG_ARM)" .
   573  
   574  
   575  .PHONY: docker-native-build-ghost
   576  docker-native-build-ghost:
   577  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/ghost --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   578  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   579  		--secret id=cadence_deploy_key,env=CADENCE_DEPLOY_KEY --build-arg GOPRIVATE=$(GOPRIVATE) \
   580  		-t "$(CONTAINER_REGISTRY)/ghost:latest" \
   581  		-t "$(CONTAINER_REGISTRY)/ghost:$(IMAGE_TAG)" .
   582  
   583  .PHONY: docker-native-build-ghost-debug
   584  docker-native-build-ghost-debug:
   585  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/ghost --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target debug \
   586  		-t "$(CONTAINER_REGISTRY)/ghost-debug:latest" \
   587  		-t "$(CONTAINER_REGISTRY)/ghost-debug:$(IMAGE_TAG)" .
   588  
   589  PHONY: docker-build-bootstrap
   590  docker-build-bootstrap:
   591  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/bootstrap --build-arg GOARCH=$(GOARCH) --build-arg VERSION=$(IMAGE_TAG) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   592  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   593  		-t "$(CONTAINER_REGISTRY)/bootstrap:latest" \
   594  		-t "$(CONTAINER_REGISTRY)/bootstrap:$(IMAGE_TAG)" .
   595  
   596  PHONY: tool-bootstrap
   597  tool-bootstrap: docker-build-bootstrap
   598  	docker container create --name bootstrap $(CONTAINER_REGISTRY)/bootstrap:latest;docker container cp bootstrap:/bin/app ./bootstrap;docker container rm bootstrap
   599  
   600  .PHONY: docker-build-bootstrap-transit
   601  docker-build-bootstrap-transit:
   602  	docker build -f cmd/Dockerfile  --build-arg TARGET=./cmd/bootstrap/transit --build-arg COMMIT=$(COMMIT)  --build-arg VERSION=$(VERSION) --build-arg GOARCH=$(GOARCH) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --no-cache \
   603  	    --target production  \
   604  		-t "$(CONTAINER_REGISTRY)/bootstrap-transit:latest" \
   605  		-t "$(CONTAINER_REGISTRY)/bootstrap-transit:$(IMAGE_TAG)" .
   606  
   607  PHONY: tool-transit
   608  tool-transit: docker-build-bootstrap-transit
   609  	docker container create --name transit $(CONTAINER_REGISTRY)/bootstrap-transit:latest;docker container cp transit:/bin/app ./transit;docker container rm transit
   610  
   611  .PHONY: docker-native-build-loader
   612  docker-native-build-loader:
   613  	docker build -f ./integration/benchmark/cmd/manual/Dockerfile --build-arg TARGET=./benchmark/cmd/manual  --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   614  		--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
   615  		-t "$(CONTAINER_REGISTRY)/loader:latest" \
   616  		-t "$(CONTAINER_REGISTRY)/loader:$(IMAGE_TAG)" .
   617  
   618  .PHONY: docker-native-build-flow
   619  docker-native-build-flow: docker-native-build-collection docker-native-build-consensus docker-native-build-execution docker-native-build-verification docker-native-build-access docker-native-build-observer docker-native-build-ghost
   620  
   621  .PHONY: docker-build-flow-with-adx
   622  docker-build-flow-with-adx: docker-build-collection-with-adx docker-build-consensus-with-adx docker-build-execution-with-adx docker-build-verification-with-adx docker-build-access-with-adx docker-build-observer-with-adx
   623  
   624  .PHONY: docker-build-flow-without-adx
   625  docker-build-flow-without-adx: docker-build-collection-without-adx docker-build-consensus-without-adx docker-build-execution-without-adx docker-build-verification-without-adx docker-build-access-without-adx docker-build-observer-without-adx
   626  
   627  .PHONY: docker-build-flow-without-netgo-without-adx
   628  docker-build-flow-without-netgo-without-adx: docker-build-collection-without-netgo-without-adx docker-build-consensus-without-netgo-without-adx docker-build-execution-without-netgo-without-adx docker-build-verification-without-netgo-without-adx docker-build-access-without-netgo-without-adx docker-build-observer-without-netgo-without-adx
   629  
   630  # in this target, images are arm64 (aarch64), are build with `netgo` and with `adx`.
   631  # other arm64 images can be built without `netgo` or without `adx`
   632  .PHONY: docker-cross-build-flow-arm
   633  docker-cross-build-flow-arm: docker-cross-build-collection-arm docker-cross-build-consensus-arm docker-cross-build-execution-arm docker-cross-build-verification-arm docker-cross-build-access-arm docker-cross-build-observer-arm
   634  
   635  .PHONY: docker-native-build-flow-corrupt
   636  docker-native-build-flow-corrupt: docker-native-build-execution-corrupt docker-native-build-verification-corrupt docker-native-build-access-corrupt
   637  
   638  .PHONY: docker-native-build-benchnet
   639  docker-native-build-benchnet: docker-native-build-flow docker-native-build-loader
   640  
   641  .PHONY: docker-push-collection-with-adx
   642  docker-push-collection-with-adx:
   643  	docker push "$(CONTAINER_REGISTRY)/collection:$(IMAGE_TAG)"
   644  
   645  .PHONY: docker-push-collection-without-adx
   646  docker-push-collection-without-adx:
   647  	docker push "$(CONTAINER_REGISTRY)/collection:$(IMAGE_TAG_NO_ADX)"
   648  
   649  .PHONY: docker-push-collection-without-netgo-without-adx
   650  docker-push-collection-without-netgo-without-adx:
   651  	docker push "$(CONTAINER_REGISTRY)/collection:$(IMAGE_TAG_NO_NETGO_NO_ADX)"
   652  
   653  .PHONY: docker-push-collection-arm 
   654  docker-push-collection-arm:
   655  	docker push "$(CONTAINER_REGISTRY)/collection:$(IMAGE_TAG_ARM)"
   656  
   657  .PHONY: docker-push-collection-latest
   658  docker-push-collection-latest: docker-push-collection
   659  	docker push "$(CONTAINER_REGISTRY)/collection:latest"
   660  
   661  .PHONY: docker-push-consensus-with-adx
   662  docker-push-consensus-with-adx:
   663  	docker push "$(CONTAINER_REGISTRY)/consensus:$(IMAGE_TAG)"
   664  
   665  .PHONY: docker-push-consensus-without-adx
   666  docker-push-consensus-without-adx:
   667  	docker push "$(CONTAINER_REGISTRY)/consensus:$(IMAGE_TAG_NO_ADX)"
   668  
   669  .PHONY: docker-push-consensus-without-netgo-without-adx
   670  docker-push-consensus-without-netgo-without-adx:
   671  	docker push "$(CONTAINER_REGISTRY)/consensus:$(IMAGE_TAG_NO_NETGO_NO_ADX)"
   672  
   673  .PHONY: docker-push-consensus-arm 
   674  docker-push-consensus-arm:
   675  	docker push "$(CONTAINER_REGISTRY)/consensus:$(IMAGE_TAG_ARM)"
   676  
   677  .PHONY: docker-push-consensus-latest
   678  docker-push-consensus-latest: docker-push-consensus
   679  	docker push "$(CONTAINER_REGISTRY)/consensus:latest"
   680  
   681  .PHONY: docker-push-execution-with-adx
   682  docker-push-execution-with-adx:
   683  	docker push "$(CONTAINER_REGISTRY)/execution:$(IMAGE_TAG)"
   684  
   685  .PHONY: docker-push-execution-corrupt
   686  docker-push-execution-corrupt:
   687  	docker push "$(CONTAINER_REGISTRY)/execution-corrupted:$(IMAGE_TAG)"
   688  
   689  .PHONY: docker-push-execution-without-adx
   690  docker-push-execution-without-adx:
   691  	docker push "$(CONTAINER_REGISTRY)/execution:$(IMAGE_TAG_NO_ADX)"
   692  
   693  .PHONY: docker-push-execution-without-netgo-without-adx
   694  docker-push-execution-without-netgo-without-adx:
   695  	docker push "$(CONTAINER_REGISTRY)/execution:$(IMAGE_TAG_NO_NETGO_NO_ADX)"
   696  
   697  .PHONY: docker-push-execution-arm 
   698  docker-push-execution-arm:
   699  	docker push "$(CONTAINER_REGISTRY)/execution:$(IMAGE_TAG_ARM)"
   700  
   701  .PHONY: docker-push-execution-latest
   702  docker-push-execution-latest: docker-push-execution
   703  	docker push "$(CONTAINER_REGISTRY)/execution:latest"
   704  
   705  .PHONY: docker-push-verification-with-adx
   706  docker-push-verification-with-adx:
   707  	docker push "$(CONTAINER_REGISTRY)/verification:$(IMAGE_TAG)"
   708  
   709  .PHONY: docker-push-verification-without-adx
   710  docker-push-verification-without-adx:
   711  	docker push "$(CONTAINER_REGISTRY)/verification:$(IMAGE_TAG_NO_ADX)"
   712  
   713  .PHONY: docker-push-verification-corrupt
   714  docker-push-verification-corrupt:
   715  	docker push "$(CONTAINER_REGISTRY)/verification-corrupted:$(IMAGE_TAG)"
   716  
   717  .PHONY: docker-push-verification-without-netgo-without-adx
   718  docker-push-verification-without-netgo-without-adx:
   719  	docker push "$(CONTAINER_REGISTRY)/verification:$(IMAGE_TAG_NO_NETGO_NO_ADX)"
   720  
   721  .PHONY: docker-push-verification-arm 
   722  docker-push-verification-arm:
   723  	docker push "$(CONTAINER_REGISTRY)/verification:$(IMAGE_TAG_ARM)"
   724  
   725  .PHONY: docker-push-verification-latest
   726  docker-push-verification-latest: docker-push-verification
   727  	docker push "$(CONTAINER_REGISTRY)/verification:latest"
   728  
   729  .PHONY: docker-push-access-with-adx
   730  docker-push-access-with-adx:
   731  	docker push "$(CONTAINER_REGISTRY)/access:$(IMAGE_TAG)"
   732  
   733  .PHONY: docker-push-access-without-adx
   734  docker-push-access-without-adx:
   735  	docker push "$(CONTAINER_REGISTRY)/access:$(IMAGE_TAG_NO_ADX)"
   736  
   737  .PHONY: docker-push-access-corrupt
   738  docker-push-access-corrupt:
   739  	docker push "$(CONTAINER_REGISTRY)/access-corrupted:$(IMAGE_TAG)"
   740  
   741  .PHONY: docker-push-access-without-netgo-without-adx
   742  docker-push-access-without-netgo-without-adx:
   743  	docker push "$(CONTAINER_REGISTRY)/access:$(IMAGE_TAG_NO_NETGO_NO_ADX)"
   744  
   745  .PHONY: docker-push-access-arm 
   746  docker-push-access-arm:
   747  	docker push "$(CONTAINER_REGISTRY)/access:$(IMAGE_TAG_ARM)"
   748  
   749  .PHONY: docker-push-access-latest
   750  docker-push-access-latest: docker-push-access
   751  	docker push "$(CONTAINER_REGISTRY)/access:latest"
   752  
   753  
   754  .PHONY: docker-push-observer-with-adx
   755  docker-push-observer-with-adx:
   756  	docker push "$(CONTAINER_REGISTRY)/observer:$(IMAGE_TAG)"
   757  
   758  .PHONY: docker-push-observer-without-adx
   759  docker-push-observer-without-adx:
   760  	docker push "$(CONTAINER_REGISTRY)/observer:$(IMAGE_TAG_NO_ADX)"
   761  
   762  .PHONY: docker-push-observer-without-netgo-without-adx
   763  docker-push-observer-without-netgo-without-adx:
   764  	docker push "$(CONTAINER_REGISTRY)/observer:$(IMAGE_TAG_NO_NETGO_NO_ADX)"
   765  
   766  .PHONY: docker-push-observer-arm 
   767  docker-push-observer-arm:
   768  	docker push "$(CONTAINER_REGISTRY)/observer:$(IMAGE_TAG_ARM)"
   769  
   770  .PHONY: docker-push-observer-latest
   771  docker-push-observer-latest: docker-push-observer
   772  	docker push "$(CONTAINER_REGISTRY)/observer:latest"
   773  
   774  .PHONY: docker-push-ghost
   775  docker-push-ghost:
   776  	docker push "$(CONTAINER_REGISTRY)/ghost:$(IMAGE_TAG)"
   777  
   778  .PHONY: docker-push-ghost-latest
   779  docker-push-ghost-latest: docker-push-ghost
   780  	docker push "$(CONTAINER_REGISTRY)/ghost:latest"
   781  
   782  .PHONY: docker-push-loader
   783  docker-push-loader:
   784  	docker push "$(CONTAINER_REGISTRY)/loader:$(IMAGE_TAG)"
   785  
   786  .PHONY: docker-push-loader-latest
   787  docker-push-loader-latest: docker-push-loader
   788  	docker push "$(CONTAINER_REGISTRY)/loader:latest"
   789  
   790  .PHONY: docker-push-flow-with-adx
   791  docker-push-flow-with-adx: docker-push-collection-with-adx docker-push-consensus-with-adx docker-push-execution-with-adx docker-push-verification-with-adx docker-push-access-with-adx docker-push-observer-with-adx
   792  
   793  .PHONY: docker-push-flow-without-adx
   794  docker-push-flow-without-adx: docker-push-collection-without-adx docker-push-consensus-without-adx docker-push-execution-without-adx docker-push-verification-without-adx docker-push-access-without-adx docker-push-observer-without-adx
   795  
   796  .PHONY: docker-push-flow-without-netgo-without-adx
   797  docker-push-flow-without-netgo-without-adx: docker-push-collection-without-netgo-without-adx docker-push-consensus-without-netgo-without-adx docker-push-execution-without-netgo-without-adx docker-push-verification-without-netgo-without-adx docker-push-access-without-netgo-without-adx docker-push-observer-without-netgo-without-adx
   798  
   799  .PHONY: docker-push-flow-arm
   800  docker-push-flow-arm: docker-push-collection-arm docker-push-consensus-arm docker-push-execution-arm docker-push-verification-arm docker-push-access-arm docker-push-observer-arm
   801  
   802  .PHONY: docker-push-flow-latest
   803  docker-push-flow-latest: docker-push-collection-latest docker-push-consensus-latest docker-push-execution-latest docker-push-verification-latest docker-push-access-latest docker-push-observer-latest
   804  
   805  .PHONY: docker-push-flow-corrupt
   806  docker-push-flow-corrupt: docker-push-access-corrupt docker-push-execution-corrupt docker-push-verification-corrupt
   807  
   808  .PHONY: docker-push-benchnet
   809  docker-push-benchnet: docker-push-flow docker-push-loader
   810  
   811  .PHONY: docker-push-benchnet-latest
   812  docker-push-benchnet-latest: docker-push-flow-latest docker-push-loader-latest
   813  
   814  .PHONY: docker-run-collection
   815  docker-run-collection:
   816  	docker run -p 8080:8080 -p 3569:3569 "$(CONTAINER_REGISTRY)/collection:latest" --nodeid 1234567890123456789012345678901234567890123456789012345678901234 --entries collection-1234567890123456789012345678901234567890123456789012345678901234@localhost:3569=1000
   817  
   818  .PHONY: docker-run-consensus
   819  docker-run-consensus:
   820  	docker run -p 8080:8080 -p 3569:3569 "$(CONTAINER_REGISTRY)/consensus:latest" --nodeid 1234567890123456789012345678901234567890123456789012345678901234 --entries consensus-1234567890123456789012345678901234567890123456789012345678901234@localhost:3569=1000
   821  
   822  .PHONY: docker-run-execution
   823  docker-run-execution:
   824  	docker run -p 8080:8080 -p 3569:3569 "$(CONTAINER_REGISTRY)/execution:latest" --nodeid 1234567890123456789012345678901234567890123456789012345678901234 --entries execution-1234567890123456789012345678901234567890123456789012345678901234@localhost:3569=1000
   825  
   826  .PHONY: docker-run-verification
   827  docker-run-verification:
   828  	docker run -p 8080:8080 -p 3569:3569 "$(CONTAINER_REGISTRY)/verification:latest" --nodeid 1234567890123456789012345678901234567890123456789012345678901234 --entries verification-1234567890123456789012345678901234567890123456789012345678901234@localhost:3569=1000
   829  
   830  .PHONY: docker-run-access
   831  docker-run-access:
   832  	docker run -p 9000:9000 -p 3569:3569 -p 8080:8080  -p 8000:8000 "$(CONTAINER_REGISTRY)/access:latest" --nodeid 1234567890123456789012345678901234567890123456789012345678901234 --entries access-1234567890123456789012345678901234567890123456789012345678901234@localhost:3569=1000
   833  
   834  .PHONY: docker-run-observer
   835  docker-run-observer:
   836  	docker run -p 9000:9000 -p 3569:3569 -p 8080:8080  -p 8000:8000 "$(CONTAINER_REGISTRY)/observer:latest" --nodeid 1234567890123456789012345678901234567890123456789012345678901234 --entries observer-1234567890123456789012345678901234567890123456789012345678901234@localhost:3569=1000
   837  
   838  .PHONY: docker-run-ghost
   839  docker-run-ghost:
   840  	docker run -p 9000:9000 -p 3569:3569 "$(CONTAINER_REGISTRY)/ghost:latest" --nodeid 1234567890123456789012345678901234567890123456789012345678901234 --entries ghost-1234567890123456789012345678901234567890123456789012345678901234@localhost:3569=1000
   841  
   842  PHONY: docker-all-tools
   843  docker-all-tools: tool-util tool-remove-execution-fork
   844  
   845  PHONY: docker-build-util
   846  docker-build-util:
   847  	docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/util --build-arg GOARCH=$(GOARCH) --build-arg VERSION=$(IMAGE_TAG) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   848  		-t "$(CONTAINER_REGISTRY)/util:latest"  \
   849  		-t "$(CONTAINER_REGISTRY)/util:$(IMAGE_TAG)" .
   850  
   851  PHONY: tool-util
   852  tool-util: docker-build-util
   853  	docker container create --name util $(CONTAINER_REGISTRY)/util:latest;docker container cp util:/bin/app ./util;docker container rm util
   854  
   855  PHONY: docker-build-remove-execution-fork
   856  docker-build-remove-execution-fork:
   857  	docker build -f cmd/Dockerfile --ssh default --build-arg TARGET=./cmd/util/cmd/remove-execution-fork --build-arg GOARCH=$(GOARCH) --build-arg VERSION=$(IMAGE_TAG) --build-arg CGO_FLAG=$(CRYPTO_FLAG) --target production \
   858  		-t "$(CONTAINER_REGISTRY)/remove-execution-fork:latest" \
   859  		-t "$(CONTAINER_REGISTRY)/remove-execution-fork:$(IMAGE_TAG)" .
   860  
   861  PHONY: tool-remove-execution-fork
   862  tool-remove-execution-fork: docker-build-remove-execution-fork
   863  	docker container create --name remove-execution-fork $(CONTAINER_REGISTRY)/remove-execution-fork:latest;docker container cp remove-execution-fork:/bin/app ./remove-execution-fork;docker container rm remove-execution-fork
   864  
   865  .PHONY: check-go-version
   866  check-go-version:
   867  	@bash -c '\
   868  		MINGOVERSION=1.18; \
   869  		function ver { printf "%d%03d%03d%03d" $$(echo "$$1" | tr . " "); }; \
   870  		GOVER=$$(go version | sed -rne "s/.* go([0-9.]+).*/\1/p" ); \
   871  		if [ "$$(ver $$GOVER)" -lt "$$(ver $$MINGOVERSION)" ]; then \
   872  			echo "go $$GOVER is too old. flow-go only supports go $$MINGOVERSION and up."; \
   873  			exit 1; \
   874  		fi; \
   875  		'
   876  
   877  #----------------------------------------------------------------------
   878  # CD COMMANDS
   879  #----------------------------------------------------------------------
   880  
   881  .PHONY: deploy-staging
   882  deploy-staging: update-deployment-image-name-staging apply-staging-files monitor-rollout
   883  
   884  # Staging YAMLs must have 'staging' in their name.
   885  .PHONY: apply-staging-files
   886  apply-staging-files:
   887  	kconfig=$$(uuidgen); \
   888  	echo "$$KUBECONFIG_STAGING" > $$kconfig; \
   889  	files=$$(find ${K8S_YAMLS_LOCATION_STAGING} -type f \( --name "*.yml" -or --name "*.yaml" \)); \
   890  	echo "$$files" | xargs -I {} kubectl --kubeconfig=$$kconfig apply -f {}
   891  
   892  # Deployment YAMLs must have 'deployment' in their name.
   893  .PHONY: update-deployment-image-name-staging
   894  update-deployment-image-name-staging: CONTAINER=flow-test-net
   895  update-deployment-image-name-staging:
   896  	@files=$$(find ${K8S_YAMLS_LOCATION_STAGING} -type f \( --name "*.yml" -or --name "*.yaml" \) | grep deployment); \
   897  	for file in $$files; do \
   898  		patched=`openssl rand -hex 8`; \
   899  		node=`echo "$$file" | grep -oP 'flow-\K\w+(?=-node-deployment.yml)'`; \
   900  		kubectl patch -f $$file -p '{"spec":{"template":{"spec":{"containers":[{"name":"${CONTAINER}","image":"$(CONTAINER_REGISTRY)/'"$$node"':${IMAGE_TAG}"}]}}}}`' --local -o yaml > $$patched; \
   901  		mv -f $$patched $$file; \
   902  	done
   903  
   904  .PHONY: monitor-rollout
   905  monitor-rollout:
   906  	kconfig=$$(uuidgen); \
   907  	echo "$$KUBECONFIG_STAGING" > $$kconfig; \
   908  	kubectl --kubeconfig=$$kconfig rollout status statefulsets.apps flow-collection-node-v1; \
   909  	kubectl --kubeconfig=$$kconfig rollout status statefulsets.apps flow-consensus-node-v1; \
   910  	kubectl --kubeconfig=$$kconfig rollout status statefulsets.apps flow-execution-node-v1; \
   911  	kubectl --kubeconfig=$$kconfig rollout status statefulsets.apps flow-verification-node-v1