version: 2.1 orbs: aws-cli: circleci/aws-cli@1.3.2 docker: circleci/docker@2.1.4 executors: golang: docker: # Must match GO_VERSION_MIN in project root - image: cimg/go:1.20.7 resource_class: medium+ golang-2xl: docker: # Must match GO_VERSION_MIN in project root - image: cimg/go:1.20.7 resource_class: 2xlarge ubuntu: docker: - image: ubuntu:20.04 commands: build-platform-specific: parameters: linux: default: true description: is a linux build environment? type: boolean darwin: default: false description: is a darwin build environment? type: boolean darwin-architecture: default: "amd64" description: which darwin architecture is being used? type: string steps: - checkout - git_fetch_all_tags - run: git submodule sync - run: git submodule update --init - when: condition: <> steps: - install-ubuntu-deps - check-go-version - when: condition: <> steps: - run: name: Install Go command: | curl https://dl.google.com/go/go`cat GO_VERSION_MIN`.darwin-<>.pkg -o /tmp/go.pkg && \ sudo installer -pkg /tmp/go.pkg -target / - run: name: Export Go command: | echo 'export GOPATH="${HOME}/go"' >> $BASH_ENV - run: go version - run: name: Install dependencies with Homebrew command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config coreutils jq hwloc - run: name: Install Rust command: | curl https://sh.rustup.rs -sSf | sh -s -- -y - run: make deps download-params: steps: - restore_cache: name: Restore parameters cache keys: - 'v26-2k-lotus-params' paths: - /var/tmp/filecoin-proof-parameters/ - run: ./lotus fetch-params 2048 - save_cache: name: Save parameters cache key: 'v26-2k-lotus-params' paths: - /var/tmp/filecoin-proof-parameters/ install_ipfs: steps: - run: | curl -O https://dist.ipfs.tech/kubo/v0.16.0/kubo_v0.16.0_linux-amd64.tar.gz tar -xvzf kubo_v0.16.0_linux-amd64.tar.gz pushd kubo sudo bash install.sh popd rm -rf kubo rm kubo_v0.16.0_linux-amd64.tar.gz git_fetch_all_tags: steps: - run: name: fetch all tags command: | git fetch --all install-ubuntu-deps: steps: - run: sudo apt-get update - run: sudo apt-get install ocl-icd-opencl-dev libhwloc-dev check-go-version: steps: - run: | v=`go version | { read _ _ v _; echo ${v#go}; }` if [[ $v != `cat GO_VERSION_MIN` ]]; then echo "GO_VERSION_MIN file does not match the go version being used." echo "Please update image to cimg/go:`cat GO_VERSION_MIN` or update GO_VERSION_MIN to $v." exit 1 fi jobs: build: executor: golang working_directory: ~/lotus steps: - checkout - git_fetch_all_tags - run: git submodule sync - run: git submodule update --init - install-ubuntu-deps - check-go-version - run: make deps lotus - persist_to_workspace: root: ~/ paths: - "lotus" mod-tidy-check: executor: golang working_directory: ~/lotus steps: - install-ubuntu-deps - attach_workspace: at: ~/ - run: go mod tidy -v - run: name: Check git diff command: | git --no-pager diff go.mod go.sum git --no-pager diff --quiet go.mod go.sum test: description: | Run tests with gotestsum. working_directory: ~/lotus parameters: &test-params executor: type: executor default: golang go-test-flags: type: string default: "-timeout 20m" description: Flags passed to go test. target: type: string default: "./..." description: Import paths of packages to be tested. proofs-log-test: type: string default: "0" get-params: type: boolean default: false suite: type: string default: unit description: Test suite name to report to CircleCI. executor: << parameters.executor >> steps: - install-ubuntu-deps - attach_workspace: at: ~/ - when: condition: << parameters.get-params >> steps: - download-params - run: name: go test environment: TEST_RUSTPROOFS_LOGS: << parameters.proofs-log-test >> SKIP_CONFORMANCE: "1" LOTUS_SRC_DIR: /home/circleci/project command: | mkdir -p /tmp/test-reports/<< parameters.suite >> mkdir -p /tmp/test-artifacts gotestsum \ --format standard-verbose \ --junitfile /tmp/test-reports/<< parameters.suite >>/junit.xml \ --jsonfile /tmp/test-artifacts/<< parameters.suite >>.json \ --packages="<< parameters.target >>" \ -- << parameters.go-test-flags >> no_output_timeout: 30m - store_test_results: path: /tmp/test-reports - store_artifacts: path: /tmp/test-artifacts/<< parameters.suite >>.json test-conformance: working_directory: ~/lotus description: | Run tests using a corpus of interoperable test vectors for Filecoin implementations to test their correctness and compliance with the Filecoin specifications. parameters: <<: *test-params vectors-branch: type: string default: "" description: | Branch on github.com/filecoin-project/test-vectors to checkout and test with. If empty (the default) the commit defined by the git submodule is used. executor: << parameters.executor >> steps: - install-ubuntu-deps - attach_workspace: at: ~/ - download-params - when: condition: not: equal: [ "", << parameters.vectors-branch >> ] steps: - run: name: checkout vectors branch command: | cd extern/test-vectors git fetch git checkout origin/<< parameters.vectors-branch >> - run: name: install statediff globally command: | ## statediff is optional; we succeed even if compilation fails. mkdir -p /tmp/statediff git clone https://github.com/filecoin-project/statediff.git /tmp/statediff cd /tmp/statediff go install ./cmd/statediff || exit 0 - run: name: go test environment: SKIP_CONFORMANCE: "0" command: | mkdir -p /tmp/test-reports mkdir -p /tmp/test-artifacts gotestsum \ --format pkgname-and-test-fails \ --junitfile /tmp/test-reports/junit.xml \ -- \ -v -coverpkg ./chain/vm/,github.com/filecoin-project/specs-actors/... -coverprofile=/tmp/conformance.out ./conformance/ go tool cover -html=/tmp/conformance.out -o /tmp/test-artifacts/conformance-coverage.html no_output_timeout: 30m - store_test_results: path: /tmp/test-reports - store_artifacts: path: /tmp/test-artifacts/conformance-coverage.html build-linux-amd64: executor: golang steps: - build-platform-specific - run: make lotus lotus-miner lotus-worker - run: name: check tag and version output match command: ./scripts/version-check.sh ./lotus - run: | mkdir -p /tmp/workspace/linux_amd64_v1 && \ mv lotus lotus-miner lotus-worker /tmp/workspace/linux_amd64_v1/ - persist_to_workspace: root: /tmp/workspace paths: - linux_amd64_v1 build-darwin-amd64: description: build darwin lotus binary working_directory: ~/go/src/github.com/filecoin-project/lotus macos: xcode: "13.4.1" steps: - build-platform-specific: linux: false darwin: true darwin-architecture: amd64 - run: make lotus lotus-miner lotus-worker - run: otool -hv lotus - run: name: check tag and version output match command: ./scripts/version-check.sh ./lotus - run: | mkdir -p /tmp/workspace/darwin_amd64_v1 && \ mv lotus lotus-miner lotus-worker /tmp/workspace/darwin_amd64_v1/ - persist_to_workspace: root: /tmp/workspace paths: - darwin_amd64_v1 build-darwin-arm64: description: self-hosted m1 runner working_directory: ~/go/src/github.com/filecoin-project/lotus machine: true resource_class: filecoin-project/self-hosted-m1 steps: - run: echo 'export PATH=/opt/homebrew/bin:"$PATH"' >> "$BASH_ENV" - build-platform-specific: linux: false darwin: true darwin-architecture: arm64 - run: | export CPATH=$(brew --prefix)/include && export LIBRARY_PATH=$(brew --prefix)/lib && make lotus lotus-miner lotus-worker - run: otool -hv lotus - run: name: check tag and version output match command: ./scripts/version-check.sh ./lotus - run: | mkdir -p /tmp/workspace/darwin_arm64 && \ mv lotus lotus-miner lotus-worker /tmp/workspace/darwin_arm64/ - persist_to_workspace: root: /tmp/workspace paths: - darwin_arm64 - run: command: make clean when: always - run: name: cleanup homebrew command: HOMEBREW_NO_AUTO_UPDATE=1 brew uninstall pkg-config coreutils jq hwloc when: always release: executor: golang parameters: dry-run: default: false description: should this release actually publish it's artifacts? type: boolean steps: - checkout - run: | echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | sudo tee /etc/apt/sources.list.d/goreleaser.list sudo apt update sudo apt install goreleaser-pro - install_ipfs - attach_workspace: at: /tmp/workspace - when: condition: << parameters.dry-run >> steps: - run: goreleaser release --rm-dist --snapshot --debug - run: ./scripts/generate-checksums.sh - when: condition: not: << parameters.dry-run >> steps: - run: goreleaser release --rm-dist --debug - run: ./scripts/generate-checksums.sh - run: ./scripts/publish-checksums.sh gofmt: executor: golang working_directory: ~/lotus steps: - run: command: "! go fmt ./... 2>&1 | read" gen-check: executor: golang working_directory: ~/lotus steps: - install-ubuntu-deps - attach_workspace: at: ~/ - run: go install golang.org/x/tools/cmd/goimports - run: go install github.com/hannahhoward/cbor-gen-for - run: make gen - run: git --no-pager diff && git --no-pager diff --quiet - run: make docsgen-cli - run: git --no-pager diff && git --no-pager diff --quiet docs-check: executor: golang working_directory: ~/lotus steps: - install-ubuntu-deps - attach_workspace: at: ~/ - run: go install golang.org/x/tools/cmd/goimports - run: zcat build/openrpc/full.json.gz | jq > ../pre-openrpc-full - run: zcat build/openrpc/miner.json.gz | jq > ../pre-openrpc-miner - run: zcat build/openrpc/worker.json.gz | jq > ../pre-openrpc-worker - run: make docsgen - run: zcat build/openrpc/full.json.gz | jq > ../post-openrpc-full - run: zcat build/openrpc/miner.json.gz | jq > ../post-openrpc-miner - run: zcat build/openrpc/worker.json.gz | jq > ../post-openrpc-worker - run: diff ../pre-openrpc-full ../post-openrpc-full && diff ../pre-openrpc-miner ../post-openrpc-miner && diff ../pre-openrpc-worker ../post-openrpc-worker && git --no-pager diff && git --no-pager diff --quiet lint-all: description: | Run golangci-lint. working_directory: ~/lotus parameters: executor: type: executor default: golang args: type: string default: '' description: | Arguments to pass to golangci-lint executor: << parameters.executor >> steps: - install-ubuntu-deps - attach_workspace: at: ~/ - run: name: Lint command: | golangci-lint run -v --timeout 10m \ --concurrency 4 << parameters.args >> build-docker: description: > Publish to Dockerhub executor: docker/docker parameters: image: type: string default: lotus description: > Passed to the docker build process to determine which image in the Dockerfile should be built. Expected values are `lotus`, `lotus-all-in-one` network: type: string default: "mainnet" description: > Passed to the docker build process using GOFLAGS+=-tags=<>. Expected values are `debug`, `2k`, `calibnet`, `butterflynet`, `interopnet`. channel: type: string default: "" description: > The release channel to use for this image. push: type: boolean default: false description: > When true, pushes the image to Dockerhub steps: - setup_remote_docker - checkout - git_fetch_all_tags - run: git submodule sync - run: git submodule update --init - docker/check: docker-username: DOCKERHUB_USERNAME docker-password: DOCKERHUB_PASSWORD - when: condition: equal: [ mainnet, <> ] steps: - when: condition: <> steps: - docker/build: image: filecoin/<> extra_build_args: --target <> tag: <> - run: name: Docker push command: | docker push filecoin/<>:<> if [[ ! -z $CIRCLE_SHA ]]; then docker image tag filecoin/<>:<> filecoin/<>:"${CIRCLE_SHA:0:7}" docker push filecoin/<>:"${CIRCLE_SHA:0:7}" fi if [[ ! -z $CIRCLE_TAG ]]; then docker image tag filecoin/<>:<> filecoin/<>:"${CIRCLE_TAG}" docker push filecoin/<>:"${CIRCLE_TAG}" fi - unless: condition: <> steps: - docker/build: image: filecoin/<> extra_build_args: --target <> - when: condition: not: equal: [ mainnet, <> ] steps: - when: condition: <> steps: - docker/build: image: filecoin/<> extra_build_args: --target <> --build-arg GOFLAGS=-tags=<> tag: <>-<> - run: name: Docker push command: | docker push filecoin/<>:<>-<> if [[ ! -z $CIRCLE_SHA ]]; then docker image tag filecoin/<>:<>-<> filecoin/<>:"${CIRCLE_SHA:0:7}"-<> docker push filecoin/<>:"${CIRCLE_SHA:0:7}"-<> fi if [[ ! -z $CIRCLE_TAG ]]; then docker image tag filecoin/<>:<>-<> filecoin/<>:"${CIRCLE_TAG}"-<> docker push filecoin/<>:"${CIRCLE_TAG}"-<> fi - unless: condition: <> steps: - docker/build: image: filecoin/<> extra_build_args: --target <> --build-arg GOFLAGS=-tags=<> workflows: ci: jobs: - build - lint-all: requires: - build - mod-tidy-check: requires: - build - gofmt: requires: - build - gen-check: requires: - build - docs-check: requires: - build - test: name: test-itest-api requires: - build suite: itest-api target: "./itests/api_test.go" - test: name: test-itest-batch_deal requires: - build suite: itest-batch_deal target: "./itests/batch_deal_test.go" - test: name: test-itest-cli requires: - build suite: itest-cli target: "./itests/cli_test.go" - test: name: test-itest-deadlines requires: - build suite: itest-deadlines target: "./itests/deadlines_test.go" - test: name: test-itest-deals_512mb requires: - build suite: itest-deals_512mb target: "./itests/deals_512mb_test.go" - test: name: test-itest-deals_anycid requires: - build suite: itest-deals_anycid target: "./itests/deals_anycid_test.go" - test: name: test-itest-deals_concurrent requires: - build suite: itest-deals_concurrent target: "./itests/deals_concurrent_test.go" executor: golang-2xl - test: name: test-itest-deals_invalid_utf8_label requires: - build suite: itest-deals_invalid_utf8_label target: "./itests/deals_invalid_utf8_label_test.go" - test: name: test-itest-deals_max_staging_deals requires: - build suite: itest-deals_max_staging_deals target: "./itests/deals_max_staging_deals_test.go" - test: name: test-itest-deals_offline requires: - build suite: itest-deals_offline target: "./itests/deals_offline_test.go" - test: name: test-itest-deals_padding requires: - build suite: itest-deals_padding target: "./itests/deals_padding_test.go" - test: name: test-itest-deals_partial_retrieval_dm-level requires: - build suite: itest-deals_partial_retrieval_dm-level target: "./itests/deals_partial_retrieval_dm-level_test.go" - test: name: test-itest-deals_partial_retrieval requires: - build suite: itest-deals_partial_retrieval target: "./itests/deals_partial_retrieval_test.go" - test: name: test-itest-deals_power requires: - build suite: itest-deals_power target: "./itests/deals_power_test.go" - test: name: test-itest-deals_pricing requires: - build suite: itest-deals_pricing target: "./itests/deals_pricing_test.go" - test: name: test-itest-deals_publish requires: - build suite: itest-deals_publish target: "./itests/deals_publish_test.go" - test: name: test-itest-deals_remote_retrieval requires: - build suite: itest-deals_remote_retrieval target: "./itests/deals_remote_retrieval_test.go" - test: name: test-itest-deals_retry_deal_no_funds requires: - build suite: itest-deals_retry_deal_no_funds target: "./itests/deals_retry_deal_no_funds_test.go" - test: name: test-itest-deals requires: - build suite: itest-deals target: "./itests/deals_test.go" - test: name: test-itest-decode_params requires: - build suite: itest-decode_params target: "./itests/decode_params_test.go" - test: name: test-itest-dup_mpool_messages requires: - build suite: itest-dup_mpool_messages target: "./itests/dup_mpool_messages_test.go" - test: name: test-itest-eth_account_abstraction requires: - build suite: itest-eth_account_abstraction target: "./itests/eth_account_abstraction_test.go" - test: name: test-itest-eth_api requires: - build suite: itest-eth_api target: "./itests/eth_api_test.go" - test: name: test-itest-eth_balance requires: - build suite: itest-eth_balance target: "./itests/eth_balance_test.go" - test: name: test-itest-eth_block_hash requires: - build suite: itest-eth_block_hash target: "./itests/eth_block_hash_test.go" - test: name: test-itest-eth_bytecode requires: - build suite: itest-eth_bytecode target: "./itests/eth_bytecode_test.go" - test: name: test-itest-eth_config requires: - build suite: itest-eth_config target: "./itests/eth_config_test.go" - test: name: test-itest-eth_conformance requires: - build suite: itest-eth_conformance target: "./itests/eth_conformance_test.go" - test: name: test-itest-eth_deploy requires: - build suite: itest-eth_deploy target: "./itests/eth_deploy_test.go" - test: name: test-itest-eth_fee_history requires: - build suite: itest-eth_fee_history target: "./itests/eth_fee_history_test.go" - test: name: test-itest-eth_filter requires: - build suite: itest-eth_filter target: "./itests/eth_filter_test.go" - test: name: test-itest-eth_hash_lookup requires: - build suite: itest-eth_hash_lookup target: "./itests/eth_hash_lookup_test.go" - test: name: test-itest-eth_transactions requires: - build suite: itest-eth_transactions target: "./itests/eth_transactions_test.go" - test: name: test-itest-fevm_address requires: - build suite: itest-fevm_address target: "./itests/fevm_address_test.go" - test: name: test-itest-fevm_events requires: - build suite: itest-fevm_events target: "./itests/fevm_events_test.go" - test: name: test-itest-fevm requires: - build suite: itest-fevm target: "./itests/fevm_test.go" - test: name: test-itest-gas_estimation requires: - build suite: itest-gas_estimation target: "./itests/gas_estimation_test.go" - test: name: test-itest-gateway requires: - build suite: itest-gateway target: "./itests/gateway_test.go" - test: name: test-itest-get_messages_in_ts requires: - build suite: itest-get_messages_in_ts target: "./itests/get_messages_in_ts_test.go" - test: name: test-itest-lite_migration requires: - build suite: itest-lite_migration target: "./itests/lite_migration_test.go" - test: name: test-itest-lookup_robust_address requires: - build suite: itest-lookup_robust_address target: "./itests/lookup_robust_address_test.go" - test: name: test-itest-mempool requires: - build suite: itest-mempool target: "./itests/mempool_test.go" - test: name: test-itest-migration requires: - build suite: itest-migration target: "./itests/migration_test.go" - test: name: test-itest-mpool_msg_uuid requires: - build suite: itest-mpool_msg_uuid target: "./itests/mpool_msg_uuid_test.go" - test: name: test-itest-mpool_push_with_uuid requires: - build suite: itest-mpool_push_with_uuid target: "./itests/mpool_push_with_uuid_test.go" - test: name: test-itest-msgindex requires: - build suite: itest-msgindex target: "./itests/msgindex_test.go" - test: name: test-itest-multisig requires: - build suite: itest-multisig target: "./itests/multisig_test.go" - test: name: test-itest-net requires: - build suite: itest-net target: "./itests/net_test.go" - test: name: test-itest-nonce requires: - build suite: itest-nonce target: "./itests/nonce_test.go" - test: name: test-itest-path_detach_redeclare requires: - build suite: itest-path_detach_redeclare target: "./itests/path_detach_redeclare_test.go" - test: name: test-itest-path_type_filters requires: - build suite: itest-path_type_filters target: "./itests/path_type_filters_test.go" - test: name: test-itest-paych_api requires: - build suite: itest-paych_api target: "./itests/paych_api_test.go" - test: name: test-itest-paych_cli requires: - build suite: itest-paych_cli target: "./itests/paych_cli_test.go" - test: name: test-itest-pending_deal_allocation requires: - build suite: itest-pending_deal_allocation target: "./itests/pending_deal_allocation_test.go" - test: name: test-itest-raft_messagesigner requires: - build suite: itest-raft_messagesigner target: "./itests/raft_messagesigner_test.go" - test: name: test-itest-remove_verifreg_datacap requires: - build suite: itest-remove_verifreg_datacap target: "./itests/remove_verifreg_datacap_test.go" - test: name: test-itest-sealing_resources requires: - build suite: itest-sealing_resources target: "./itests/sealing_resources_test.go" - test: name: test-itest-sector_finalize_early requires: - build suite: itest-sector_finalize_early target: "./itests/sector_finalize_early_test.go" - test: name: test-itest-sector_import_full requires: - build suite: itest-sector_import_full target: "./itests/sector_import_full_test.go" - test: name: test-itest-sector_import_simple requires: - build suite: itest-sector_import_simple target: "./itests/sector_import_simple_test.go" - test: name: test-itest-sector_miner_collateral requires: - build suite: itest-sector_miner_collateral target: "./itests/sector_miner_collateral_test.go" - test: name: test-itest-sector_numassign requires: - build suite: itest-sector_numassign target: "./itests/sector_numassign_test.go" - test: name: test-itest-sector_pledge requires: - build suite: itest-sector_pledge target: "./itests/sector_pledge_test.go" get-params: true - test: name: test-itest-sector_terminate requires: - build suite: itest-sector_terminate target: "./itests/sector_terminate_test.go" - test: name: test-itest-sector_unseal requires: - build suite: itest-sector_unseal target: "./itests/sector_unseal_test.go" - test: name: test-itest-self_sent_txn requires: - build suite: itest-self_sent_txn target: "./itests/self_sent_txn_test.go" - test: name: test-itest-splitstore requires: - build suite: itest-splitstore target: "./itests/splitstore_test.go" - test: name: test-itest-verifreg requires: - build suite: itest-verifreg target: "./itests/verifreg_test.go" - test: name: test-itest-wdpost_config requires: - build suite: itest-wdpost_config target: "./itests/wdpost_config_test.go" - test: name: test-itest-wdpost_dispute requires: - build suite: itest-wdpost_dispute target: "./itests/wdpost_dispute_test.go" - test: name: test-itest-wdpost_no_miner_storage requires: - build suite: itest-wdpost_no_miner_storage target: "./itests/wdpost_no_miner_storage_test.go" - test: name: test-itest-wdpost requires: - build suite: itest-wdpost target: "./itests/wdpost_test.go" get-params: true - test: name: test-itest-wdpost_worker_config requires: - build suite: itest-wdpost_worker_config target: "./itests/wdpost_worker_config_test.go" executor: golang-2xl - test: name: test-itest-worker requires: - build suite: itest-worker target: "./itests/worker_test.go" executor: golang-2xl - test: name: test-itest-worker_upgrade requires: - build suite: itest-worker_upgrade target: "./itests/worker_upgrade_test.go" - test: name: test-unit-cli requires: - build suite: utest-unit-cli target: "./cli/... ./cmd/... ./api/..." get-params: true - test: name: test-unit-node requires: - build suite: utest-unit-node target: "./node/..." - test: name: test-unit-rest requires: - build suite: utest-unit-rest target: "./blockstore/... ./build/... ./chain/... ./conformance/... ./gateway/... ./journal/... ./lib/... ./markets/... ./paychmgr/... ./tools/..." executor: golang-2xl - test: name: test-unit-storage requires: - build suite: utest-unit-storage target: "./storage/... ./extern/..." - test: go-test-flags: "-run=TestMulticoreSDR" requires: - build suite: multicore-sdr-check target: "./storage/sealer/ffiwrapper" proofs-log-test: "1" - test-conformance: requires: - build suite: conformance target: "./conformance" release: jobs: - build-linux-amd64: name: "Build ( linux / amd64 )" filters: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-darwin-amd64: name: "Build ( darwin / amd64 )" filters: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-darwin-arm64: name: "Build ( darwin / arm64 )" filters: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - release: name: "Release" requires: - "Build ( darwin / amd64 )" - "Build ( linux / amd64 )" - "Build ( darwin / arm64 )" filters: branches: ignore: - /^.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - release: name: "Release (dry-run)" dry-run: true requires: - "Build ( darwin / amd64 )" - "Build ( linux / amd64 )" - "Build ( darwin / arm64 )" filters: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ - /^ci\/.*$/ - build-docker: name: "Docker push (lotus-all-in-one / stable / mainnet)" image: lotus-all-in-one channel: stable network: mainnet push: true filters: branches: ignore: - /.*/ tags: only: - /^v\d+\.\d+\.\d+$/ - build-docker: name: "Docker push (lotus-all-in-one / candidate / mainnet)" image: lotus-all-in-one channel: candidate network: mainnet push: true filters: branches: ignore: - /.*/ tags: only: - /^v\d+\.\d+\.\d+-rc\d+$/ - build-docker: name: "Docker push (lotus-all-in-one / edge / mainnet)" image: lotus-all-in-one channel: master network: mainnet push: true filters: branches: only: - master - build-docker: name: "Docker build (lotus-all-in-one / mainnet)" image: lotus-all-in-one network: mainnet push: false filters: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ - build-docker: name: "Docker push (lotus-all-in-one / stable / butterflynet)" image: lotus-all-in-one channel: stable network: butterflynet push: true filters: branches: ignore: - /.*/ tags: only: - /^v\d+\.\d+\.\d+$/ - build-docker: name: "Docker push (lotus-all-in-one / candidate / butterflynet)" image: lotus-all-in-one channel: candidate network: butterflynet push: true filters: branches: ignore: - /.*/ tags: only: - /^v\d+\.\d+\.\d+-rc\d+$/ - build-docker: name: "Docker push (lotus-all-in-one / edge / butterflynet)" image: lotus-all-in-one channel: master network: butterflynet push: true filters: branches: only: - master - build-docker: name: "Docker build (lotus-all-in-one / butterflynet)" image: lotus-all-in-one network: butterflynet push: false filters: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ - build-docker: name: "Docker push (lotus-all-in-one / stable / calibnet)" image: lotus-all-in-one channel: stable network: calibnet push: true filters: branches: ignore: - /.*/ tags: only: - /^v\d+\.\d+\.\d+$/ - build-docker: name: "Docker push (lotus-all-in-one / candidate / calibnet)" image: lotus-all-in-one channel: candidate network: calibnet push: true filters: branches: ignore: - /.*/ tags: only: - /^v\d+\.\d+\.\d+-rc\d+$/ - build-docker: name: "Docker push (lotus-all-in-one / edge / calibnet)" image: lotus-all-in-one channel: master network: calibnet push: true filters: branches: only: - master - build-docker: name: "Docker build (lotus-all-in-one / calibnet)" image: lotus-all-in-one network: calibnet push: false filters: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ - build-docker: name: "Docker push (lotus-all-in-one / stable / debug)" image: lotus-all-in-one channel: stable network: debug push: true filters: branches: ignore: - /.*/ tags: only: - /^v\d+\.\d+\.\d+$/ - build-docker: name: "Docker push (lotus-all-in-one / candidate / debug)" image: lotus-all-in-one channel: candidate network: debug push: true filters: branches: ignore: - /.*/ tags: only: - /^v\d+\.\d+\.\d+-rc\d+$/ - build-docker: name: "Docker push (lotus-all-in-one / edge / debug)" image: lotus-all-in-one channel: master network: debug push: true filters: branches: only: - master - build-docker: name: "Docker build (lotus-all-in-one / debug)" image: lotus-all-in-one network: debug push: false filters: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ - build-docker: name: "Docker push (lotus / stable / mainnet)" image: lotus channel: stable network: mainnet push: true filters: branches: ignore: - /.*/ tags: only: - /^v\d+\.\d+\.\d+$/ - build-docker: name: "Docker push (lotus / candidate / mainnet)" image: lotus channel: candidate network: mainnet push: true filters: branches: ignore: - /.*/ tags: only: - /^v\d+\.\d+\.\d+-rc\d+$/ - build-docker: name: "Docker push (lotus / master / mainnet)" image: lotus channel: master network: mainnet push: true filters: branches: only: - master - build-docker: name: "Docker build (lotus / mainnet)" image: lotus network: mainnet push: false filters: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ nightly: triggers: - schedule: cron: "0 0 * * *" filters: branches: only: - master jobs: - build-docker: name: "Docker (lotus-all-in-one / nightly / mainnet)" image: lotus-all-in-one channel: nightly network: mainnet push: true - build-docker: name: "Docker (lotus-all-in-one / nightly / butterflynet)" image: lotus-all-in-one channel: nightly network: butterflynet push: true - build-docker: name: "Docker (lotus-all-in-one / nightly / calibnet)" image: lotus-all-in-one channel: nightly network: calibnet push: true - build-docker: name: "Docker (lotus-all-in-one / nightly / debug)" image: lotus-all-in-one channel: nightly network: debug push: true