2021-06-22 19:52:14 +00:00
version : 2.1
orbs :
aws-cli : circleci/aws-cli@1.3.2
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
docker : circleci/docker@2.1.4
2021-06-22 19:52:14 +00:00
executors :
golang :
docker :
2022-10-18 15:19:49 +00:00
# Must match GO_VERSION_MIN in project root
2022-11-23 18:51:48 +00:00
- image : cimg/go:1.18.8
2021-06-22 19:52:14 +00:00
resource_class : 2xlarge
ubuntu :
docker :
- image : ubuntu:20.04
commands :
prepare :
parameters :
linux :
default : true
description : is a linux build environment?
type : boolean
darwin :
default : false
description : is a darwin build environment?
type : boolean
2022-12-13 23:49:23 +00:00
darwin-architecture :
default : "amd64"
description : which darwin architecture is being used?
type : string
2021-06-22 19:52:14 +00:00
steps :
- checkout
- git_fetch_all_tags
- when :
2022-10-04 00:17:52 +00:00
condition : <<parameters.linux>>
2021-06-22 19:52:14 +00:00
steps :
2022-10-14 14:13:11 +00:00
- run :
name : Check Go Version
command : |
v=`go version | { read _ _ v _; echo ${v#go}; }`
2022-10-18 15:19:49 +00:00
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."
2022-10-14 14:13:11 +00:00
exit 1
fi
2021-06-22 19:52:14 +00:00
- run : sudo apt-get update
- run : sudo apt-get install ocl-icd-opencl-dev libhwloc-dev
2022-10-04 00:17:52 +00:00
- run : sudo apt-get install python-is-python3
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
- when :
condition : <<parameters.darwin>>
steps :
- run :
2022-08-09 17:23:02 +00:00
name : Install Go
command : |
2022-12-13 23:49:23 +00:00
curl https://dl.google.com/go/go`cat GO_VERSION_MIN`.darwin-<<parameters.darwin-architecture>>.pkg -o /tmp/go.pkg && \
2022-08-09 17:23:02 +00:00
sudo installer -pkg /tmp/go.pkg -target /
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
- run :
name : Export Go
command : |
2022-08-09 17:23:02 +00:00
echo 'export GOPATH="${HOME}/go"' >> $BASH_ENV
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
- run : go version
- run :
2022-10-04 00:17:52 +00:00
name : Install dependencies with Homebrew
2022-11-03 14:51:20 +00:00
command : HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config coreutils jq hwloc
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
- run :
name : Install Rust
command : |
curl https://sh.rustup.rs -sSf | sh -s -- -y
2021-06-22 19:52:14 +00:00
- run : git submodule sync
- run : git submodule update --init
download-params :
steps :
- restore_cache :
name : Restore parameters cache
keys :
2022-02-03 18:49:22 +00:00
- 'v26-2k-lotus-params'
2021-06-22 19:52:14 +00:00
paths :
- /var/tmp/filecoin-proof-parameters/
- run : ./lotus fetch-params 2048
- save_cache :
name : Save parameters cache
2022-02-03 18:49:22 +00:00
key : 'v26-2k-lotus-params'
2021-06-22 19:52:14 +00:00
paths :
- /var/tmp/filecoin-proof-parameters/
install_ipfs :
steps :
- run : |
2022-11-03 14:51:20 +00:00
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
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
pushd kubo
sudo bash install.sh
popd
2022-11-03 14:51:20 +00:00
rm -rf kubo
2022-11-18 16:08:13 +00:00
rm kubo_v0.16.0_linux-amd64.tar.gz
2021-06-22 19:52:14 +00:00
git_fetch_all_tags :
steps :
- run :
name : fetch all tags
command : |
git fetch --all
2022-03-31 05:57:02 +00:00
2021-06-22 19:52:14 +00:00
jobs :
mod-tidy-check :
executor : golang
steps :
- prepare
2022-04-19 16:40:16 +00:00
- 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
2021-06-22 19:52:14 +00:00
test :
description : |
Run tests with gotestsum.
parameters : &test-params
executor :
type : executor
default : golang
go-test-flags :
type : string
default : "-timeout 30m"
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"
suite :
type : string
default : unit
description : Test suite name to report to CircleCI.
gotestsum-format :
type : string
2021-06-22 20:32:10 +00:00
default : standard-verbose
2021-06-22 19:52:14 +00:00
description : gotestsum format. https://github.com/gotestyourself/gotestsum#format
executor : << parameters.executor >>
steps :
- prepare
- run :
command : make deps lotus
no_output_timeout : 30m
- download-params
- run :
name : go test
environment :
TEST_RUSTPROOFS_LOGS : << parameters.proofs-log-test >>
SKIP_CONFORMANCE : "1"
2022-04-19 15:21:16 +00:00
LOTUS_SRC_DIR : /home/circleci/project
2021-06-22 19:52:14 +00:00
command : |
mkdir -p /tmp/test-reports/<< parameters.suite >>
mkdir -p /tmp/test-artifacts
gotestsum \
--format << parameters.gotestsum-format >> \
--junitfile /tmp/test-reports/<< parameters.suite >>/junit.xml \
--jsonfile /tmp/test-artifacts/<< parameters.suite >>.json \
-- \
<< parameters.go-test-flags >> \
2021-06-22 20:03:05 +00:00
<< parameters.target >>
2021-06-22 19:52:14 +00:00
no_output_timeout : 30m
- store_test_results :
path : /tmp/test-reports
- store_artifacts :
path : /tmp/test-artifacts/<< parameters.suite >>.json
test-conformance :
description : |
2022-04-07 17:54:23 +00:00
Run tests using a corpus of interoperable test vectors for Filecoin
2021-06-22 19:52:14 +00:00
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 :
- prepare
- run :
command : make deps lotus
no_output_timeout : 30m
- 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
2022-10-04 00:17:52 +00:00
build-linux-amd64 :
executor : golang
steps :
- prepare
- 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 :
2021-06-22 19:52:14 +00:00
description : build darwin lotus binary
2022-10-04 00:17:52 +00:00
working_directory : ~/go/src/github.com/filecoin-project/lotus
2021-06-22 19:52:14 +00:00
macos :
2022-08-12 14:56:43 +00:00
xcode : "13.4.1"
2022-10-04 00:17:52 +00:00
steps :
- prepare :
linux : false
darwin : true
2022-12-13 23:49:23 +00:00
darwin-architecture : amd64
2022-10-04 00:17:52 +00:00
- run : make lotus lotus-miner lotus-worker
2022-12-13 23:53:01 +00:00
- run : otool -hv lotus
2022-11-07 16:13:00 +00:00
- run :
name : check tag and version output match
command : ./scripts/version-check.sh ./lotus
2022-10-04 00:17:52 +00:00
- 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
2021-06-22 19:52:14 +00:00
working_directory : ~/go/src/github.com/filecoin-project/lotus
2022-10-04 00:17:52 +00:00
machine : true
resource_class : filecoin-project/self-hosted-m1
2021-06-22 19:52:14 +00:00
steps :
2022-10-04 00:17:52 +00:00
- run : echo 'export PATH=/opt/homebrew/bin:"$PATH"' >> "$BASH_ENV"
2021-06-22 19:52:14 +00:00
- prepare :
linux : false
darwin : true
2022-12-13 23:49:23 +00:00
darwin-architecture : arm64
2022-10-27 10:15:29 +00:00
- run : |
export CPATH=$(brew --prefix)/include
export LIBRARY_PATH=$(brew --prefix)/lib
make lotus lotus-miner lotus-worker
2022-12-13 23:53:01 +00:00
- run : otool -hv lotus
2022-11-07 16:13:00 +00:00
- run :
name : check tag and version output match
command : ./scripts/version-check.sh ./lotus
2022-10-04 00:17:52 +00:00
- run : |
mkdir -p /tmp/workspace/darwin_arm64 && \
mv lotus lotus-miner lotus-worker /tmp/workspace/darwin_arm64/
2021-06-22 19:52:14 +00:00
- persist_to_workspace :
2022-10-04 00:17:52 +00:00
root : /tmp/workspace
2021-06-22 19:52:14 +00:00
paths :
2022-10-04 00:17:52 +00:00
- darwin_arm64
- run :
command : make clean
when : always
2022-10-27 10:15:29 +00:00
- run :
name : cleanup homebrew
2022-11-03 14:51:20 +00:00
command : HOMEBREW_NO_AUTO_UPDATE=1 brew uninstall pkg-config coreutils jq hwloc
2022-10-27 10:15:29 +00:00
when : always
2022-10-04 00:17:52 +00:00
release :
executor : golang
2022-10-27 10:15:29 +00:00
parameters :
dry-run :
default : false
description : should this release actually publish it's artifacts?
type : boolean
2022-10-04 00:17:52 +00:00
steps :
2022-11-03 14:51:20 +00:00
- 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
2022-10-04 00:17:52 +00:00
- attach_workspace :
at : /tmp/workspace
2022-10-27 10:15:29 +00:00
- when :
condition : << parameters.dry-run >>
steps :
2022-11-18 16:32:27 +00:00
- run : goreleaser release --rm-dist --snapshot --debug
2022-10-27 10:15:29 +00:00
- run : ./scripts/generate-checksums.sh
- when :
condition :
not : << parameters.dry-run >>
steps :
2022-11-18 16:32:27 +00:00
- run : goreleaser release --rm-dist --debug
2022-10-27 10:15:29 +00:00
- run : ./scripts/generate-checksums.sh
- run : ./scripts/publish-checksums.sh
2021-06-22 19:52:14 +00:00
gofmt :
executor : golang
steps :
- prepare
- run :
command : "! go fmt ./... 2>&1 | read"
gen-check :
executor : golang
steps :
- prepare
- run : make deps
- run : go install golang.org/x/tools/cmd/goimports
- run : go install github.com/hannahhoward/cbor-gen-for
- run : make gen
2023-01-04 14:16:40 +00:00
- run : git --no-pager diff && git --no-pager diff --quiet
2021-06-22 19:52:14 +00:00
- run : make docsgen-cli
2023-01-04 14:16:40 +00:00
- run : git --no-pager diff && git --no-pager diff --quiet
2021-06-22 19:52:14 +00:00
docs-check :
executor : golang
steps :
- prepare
- 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 deps
- 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
2023-01-04 14:16:40 +00:00
- 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
2021-06-22 19:52:14 +00:00
lint : &lint
description : |
Run golangci-lint.
parameters :
executor :
type : executor
default : golang
concurrency :
type : string
default : '2'
description : |
Concurrency used to run linters. Defaults to 2 because NumCPU is not
aware of container CPU limits.
args :
type : string
default : ''
description : |
Arguments to pass to golangci-lint
executor : << parameters.executor >>
steps :
- prepare
- run :
command : make deps
no_output_timeout : 30m
- run :
name : Lint
command : |
2022-04-19 16:40:16 +00:00
golangci-lint run -v --timeout 2m \
2021-06-22 19:52:14 +00:00
--concurrency << parameters.concurrency >> << parameters.args >>
lint-all :
<< : *lint
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
build-docker :
description : >
Publish to Dockerhub
executor : docker/docker
2021-06-22 19:52:14 +00:00
parameters :
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
image :
2021-06-22 19:52:14 +00:00
type : string
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
default : lotus
2021-06-22 19:52:14 +00:00
description : >
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
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 :
2021-06-22 19:52:14 +00:00
type : string
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
default : "mainnet"
description : >
Passed to the docker build process using GOFLAGS+=-tags=<<network>>.
Expected values are `debug`, `2k`, `calibnet`, `butterflynet`,
`interopnet`.
channel :
2021-06-22 19:52:14 +00:00
type : string
default : ""
description : >
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
The release channel to use for this image.
push :
type : boolean
default : false
description : >
When true, pushes the image to Dockerhub
2021-06-22 19:52:14 +00:00
steps :
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
- setup_remote_docker
2021-06-22 19:52:14 +00:00
- checkout
2023-01-26 10:59:00 +00:00
- git_fetch_all_tags
- run : git submodule sync
- run : git submodule update --init
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
- docker/check :
docker-username : DOCKERHUB_USERNAME
docker-password : DOCKERHUB_PASSWORD
- when :
condition :
equal : [ mainnet, <<parameters.network>> ]
steps :
- when :
2023-01-20 19:12:22 +00:00
condition : <<parameters.push>>
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
steps :
- docker/build :
image : filecoin/<<parameters.image>>
extra_build_args : --target <<parameters.image>>
tag : <<parameters.channel>>
- run :
name : Docker push
command : |
2022-12-09 18:18:08 +00:00
docker push filecoin/<<parameters.image>>:<<parameters.channel>>
2022-12-09 18:35:29 +00:00
if [["[[ ! -z $CIRCLE_SHA ]]"]]; then
2023-01-20 19:12:22 +00:00
docker image tag filecoin/<<parameters.image>>:<<parameters.channel>> filecoin/<<parameters.image>>:"${CIRCLE_SHA:0:7}"
2022-12-16 00:51:03 +00:00
docker push filecoin/<<parameters.image>>:"${CIRCLE_SHA:0:7}"
2022-12-09 18:35:29 +00:00
fi
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
if [["[[ ! -z $CIRCLE_TAG ]]"]]; then
docker image tag filecoin/<<parameters.image>>:<<parameters.channel>> filecoin/<<parameters.image>>:"${CIRCLE_TAG}"
2022-12-09 18:18:08 +00:00
docker push filecoin/<<parameters.image>>:"${CIRCLE_TAG}"
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
fi
- unless :
condition : <<parameters.push>>
steps :
- docker/build :
image : filecoin/<<parameters.image>>
extra_build_args : --target <<parameters.image>>
- when :
condition :
not :
equal : [ mainnet, <<parameters.network>> ]
steps :
- when :
condition : <<parameters.push>>
steps :
- docker/build :
image : filecoin/<<parameters.image>>
extra_build_args : --target <<parameters.image>> --build-arg GOFLAGS=-tags=<<parameters.network>>
tag : <<parameters.channel>>-<<parameters.network>>
- run :
name : Docker push
command : |
2023-01-22 16:39:40 +00:00
docker push filecoin/<<parameters.image>>:<<parameters.channel>>-<<parameters.network>>
2022-12-09 18:35:29 +00:00
if [["[[ ! -z $CIRCLE_SHA ]]"]]; then
2022-12-16 00:51:03 +00:00
docker image tag filecoin/<<parameters.image>>:<<parameters.channel>>-<<parameters.network>> filecoin/<<parameters.image>>:"${CIRCLE_SHA:0:7}"-<<parameters.network>>
docker push filecoin/<<parameters.image>>:"${CIRCLE_SHA:0:7}"-<<parameters.network>>
2022-12-09 18:35:29 +00:00
fi
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
if [["[[ ! -z $CIRCLE_TAG ]]"]]; then
docker image tag filecoin/<<parameters.image>>:<<parameters.channel>>-<<parameters.network>> filecoin/<<parameters.image>>:"${CIRCLE_TAG}"-<<parameters.network>>
2022-12-09 18:18:08 +00:00
docker push filecoin/<<parameters.image>>:"${CIRCLE_TAG}"-<<parameters.network>>
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
fi
- unless :
condition : <<parameters.push>>
steps :
- docker/build :
image : filecoin/<<parameters.image>>
extra_build_args : --target <<parameters.image>> --build-arg GOFLAGS=-tags=<<parameters.network>>
2021-06-22 19:52:14 +00:00
workflows :
version : 2.1
ci :
jobs :
- lint-all :
concurrency : "16" # expend all docker 2xlarge CPUs.
- mod-tidy-check
- gofmt
- gen-check
- docs-check
[ [ - range $file := .ItestFiles -]]
[ [ with $name := $file | stripSuffix ]]
- test :
name : test-itest-[[ $name ]]
suite : itest-[[ $name ]]
target : "./itests/[[ $file ]]"
[ [ end ]]
[ [ - end -]]
[ [ range $suite, $pkgs := .UnitSuites]]
- test :
name : test-[[ $suite ]]
suite : utest-[[ $suite ]]
target : "[[ $pkgs ]]"
[ [ - end]]
2021-06-22 20:03:05 +00:00
- test :
2021-06-22 19:52:14 +00:00
go-test-flags : "-run=TestMulticoreSDR"
suite : multicore-sdr-check
2022-06-14 18:08:10 +00:00
target : "./storage/sealer/ffiwrapper"
2021-06-22 19:52:14 +00:00
proofs-log-test : "1"
- test-conformance :
suite : conformance
target : "./conformance"
2022-10-04 00:17:52 +00:00
2022-11-07 14:39:45 +00:00
release :
jobs :
2022-10-04 00:17:52 +00:00
- build-linux-amd64 :
name : "Build ( linux / amd64 )"
2021-06-22 19:52:14 +00:00
filters :
2022-10-04 00:17:52 +00:00
branches :
2021-06-22 19:52:14 +00:00
only :
2022-10-04 00:17:52 +00:00
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
2021-06-22 19:52:14 +00:00
tags :
only :
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
2022-10-04 00:17:52 +00:00
- build-darwin-amd64 :
name : "Build ( darwin / amd64 )"
2021-10-06 20:40:44 +00:00
filters :
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
branches :
2022-10-04 00:17:52 +00:00
only :
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
2021-10-06 20:40:44 +00:00
tags :
only :
2022-10-04 00:17:52 +00:00
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
- build-darwin-arm64 :
name : "Build ( darwin / arm64 )"
2022-07-25 05:16:16 +00:00
filters :
branches :
only :
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
2022-09-21 16:20:26 +00:00
tags :
only :
2022-10-04 00:17:52 +00:00
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
2022-11-07 14:39:45 +00:00
- release :
name : "Release"
requires :
- "Build ( darwin / amd64 )"
- "Build ( linux / amd64 )"
- "Build ( darwin / arm64 )"
filters :
branches :
ignore :
- /.*/
tags :
only :
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
2022-10-04 00:17:52 +00:00
- release :
2022-10-27 10:15:29 +00:00
name : "Release (dry-run)"
dry-run : true
2022-10-04 00:17:52 +00:00
requires :
- "Build ( darwin / amd64 )"
- "Build ( linux / amd64 )"
- "Build ( darwin / arm64 )"
2022-01-14 11:01:12 +00:00
filters :
branches :
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
only :
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
[ [ - range .Networks]]
- build-docker :
name : "Docker push (lotus-all-in-one / stable / [[.]])"
image : lotus-all-in-one
2022-08-05 22:13:29 +00:00
channel : stable
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
network : [ [ .]]
push : true
2022-08-05 22:13:29 +00:00
filters :
branches :
ignore :
- /.*/
tags :
only :
- /^v\d+\.\d+\.\d+$/
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
- build-docker :
name : "Docker push (lotus-all-in-one / candidate / [[.]])"
image : lotus-all-in-one
2022-08-05 22:13:29 +00:00
channel : candidate
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
network : [ [ .]]
push : true
2022-07-27 20:06:35 +00:00
filters :
branches :
ignore :
- /.*/
tags :
only :
- /^v\d+\.\d+\.\d+-rc\d+$/
2022-12-09 18:18:25 +00:00
- build-docker :
name : "Docker push (lotus-all-in-one / edge / [[.]])"
image : lotus-all-in-one
channel : master
network : [ [ .]]
push : true
filters :
branches :
only :
- master
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
- build-docker :
name : "Docker build (lotus-all-in-one / [[.]])"
image : lotus-all-in-one
network : [ [ .]]
push : false
2022-10-04 00:17:52 +00:00
filters :
branches :
only :
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
[ [ - end]]
2022-12-09 18:27:31 +00:00
- 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+)?$/
2021-06-22 19:52:14 +00:00
nightly :
triggers :
- schedule :
cron : "0 0 * * *"
filters :
branches :
only :
- master
jobs :
Refactor Lotus Dockerfile
This is a major refactor of our dockerfile to support the following
- The lotus image will remain as is.
- The lotus-test image will be deprecated.
- The lotus-all-in-one image will also ship with the lotus-seed and lotus-fountain binaries, which it currently does not.
- The lotus-all-in-one image will be built in debug, calibnet, and butterflynet modes in addition to the (current) mainnet mode.
- The lotus-all-in-one image will now be published regularly using the following tags:
- 1.18.0-rc1 , 1.18.0-rc1-debug, 1.18.0-rc1-calibnet, 1.18.0-rc1-butterflynet . This pattern will be used for all lotus releases, including RC releases.
- nightly, nightly-debug, nightly-calibnet, nightly-butterflynet
- stable, stable-debug, stable-calibnet, stable-butterflynet
2022-10-20 20:15:13 +00:00
[ [ - range .Networks]]
- build-docker :
name : "Docker (lotus-all-in-one / nightly / [[.]])"
image : lotus-all-in-one
channel : nightly
network : [ [ .]]
push : true
[ [ - end]]