2021-06-22 19:52:14 +00:00
|
|
|
version: 2.1
|
|
|
|
orbs:
|
|
|
|
aws-cli: circleci/aws-cli@1.3.2
|
|
|
|
|
|
|
|
executors:
|
|
|
|
golang:
|
|
|
|
docker:
|
2022-10-21 02:31:24 +00:00
|
|
|
# Must match GO_VERSION_MIN in project root
|
2022-08-17 19:21:03 +00:00
|
|
|
- image: cimg/go:1.18.1
|
2021-06-22 19:52:14 +00:00
|
|
|
resource_class: 2xlarge
|
|
|
|
ubuntu:
|
|
|
|
docker:
|
|
|
|
- image: ubuntu:20.04
|
2022-03-31 05:57:02 +00:00
|
|
|
packer:
|
|
|
|
description: |
|
|
|
|
The HashiCorp provided Packer container
|
|
|
|
parameters:
|
|
|
|
packer-version:
|
|
|
|
type: string
|
|
|
|
default: "1.8"
|
|
|
|
docker:
|
|
|
|
- image: hashicorp/packer:<< parameters.packer-version >>
|
|
|
|
|
2021-06-22 19:52:14 +00:00
|
|
|
|
|
|
|
commands:
|
|
|
|
install-deps:
|
|
|
|
steps:
|
2022-04-19 16:40:16 +00:00
|
|
|
- run: |
|
|
|
|
sudo apt update
|
|
|
|
sudo apt install python-is-python3
|
2021-06-22 19:52:14 +00:00
|
|
|
prepare:
|
|
|
|
parameters:
|
|
|
|
linux:
|
|
|
|
default: true
|
|
|
|
description: is a linux build environment?
|
|
|
|
type: boolean
|
|
|
|
darwin:
|
|
|
|
default: false
|
|
|
|
description: is a darwin build environment?
|
|
|
|
type: boolean
|
|
|
|
steps:
|
|
|
|
- checkout
|
|
|
|
- git_fetch_all_tags
|
|
|
|
- checkout
|
|
|
|
- when:
|
|
|
|
condition: << parameters.linux >>
|
|
|
|
steps:
|
2022-10-21 02:31:24 +00:00
|
|
|
- run:
|
|
|
|
name: Check Go Version
|
|
|
|
command: |
|
|
|
|
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
|
2021-06-22 19:52:14 +00:00
|
|
|
- run: sudo apt-get update
|
|
|
|
- run: sudo apt-get install ocl-icd-opencl-dev libhwloc-dev
|
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-10-21 02:31:24 +00:00
|
|
|
curl https://dl.google.com/go/go`cat GO_VERSION_MIN`.darwin-amd64.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:
|
|
|
|
name: Install pkg-config, goreleaser, and sha512sum
|
|
|
|
command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config goreleaser/tap/goreleaser coreutils
|
|
|
|
- run:
|
|
|
|
name: Install Rust
|
|
|
|
command: |
|
|
|
|
curl https://sh.rustup.rs -sSf | sh -s -- -y
|
|
|
|
- run:
|
|
|
|
name: Install hwloc
|
|
|
|
command: |
|
|
|
|
mkdir ~/hwloc
|
|
|
|
curl --location https://download.open-mpi.org/release/hwloc/v2.4/hwloc-2.4.1.tar.gz --output ~/hwloc/hwloc-2.4.1.tar.gz
|
|
|
|
cd ~/hwloc
|
|
|
|
tar -xvzpf hwloc-2.4.1.tar.gz
|
|
|
|
cd hwloc-2.4.1
|
|
|
|
./configure && make && sudo make install
|
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: |
|
|
|
|
apt update
|
|
|
|
apt install -y wget
|
2022-04-19 16:40:16 +00:00
|
|
|
wget https://github.com/ipfs/go-ipfs/releases/download/v0.12.2/go-ipfs_v0.12.2_linux-amd64.tar.gz
|
|
|
|
wget https://github.com/ipfs/go-ipfs/releases/download/v0.12.2/go-ipfs_v0.12.2_linux-amd64.tar.gz.sha512
|
|
|
|
if [ "$(sha512sum go-ipfs_v0.12.2_linux-amd64.tar.gz)" != "$(cat go-ipfs_v0.12.2_linux-amd64.tar.gz.sha512)" ]
|
2021-06-22 19:52:14 +00:00
|
|
|
then
|
|
|
|
echo "ipfs failed checksum check"
|
|
|
|
exit 1
|
|
|
|
fi
|
2022-04-19 16:40:16 +00:00
|
|
|
tar -xf go-ipfs_v0.12.2_linux-amd64.tar.gz
|
2021-06-22 19:52:14 +00:00
|
|
|
mv go-ipfs/ipfs /usr/local/bin/ipfs
|
|
|
|
chmod +x /usr/local/bin/ipfs
|
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
|
|
|
install_ipfs_macos:
|
|
|
|
steps:
|
|
|
|
- run: |
|
|
|
|
curl -O https://dist.ipfs.io/kubo/v0.14.0/kubo_v0.14.0_darwin-amd64.tar.gz
|
|
|
|
tar -xvzf kubo_v0.14.0_darwin-amd64.tar.gz
|
|
|
|
pushd kubo
|
|
|
|
sudo bash install.sh
|
|
|
|
popd
|
|
|
|
rm -rf kubo/
|
|
|
|
rm kubo_v0.14.0_darwin-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
|
|
|
packer_build:
|
|
|
|
description: "Run a packer build"
|
|
|
|
parameters:
|
|
|
|
template:
|
|
|
|
description: |
|
|
|
|
The name of the packer template file
|
|
|
|
type: string
|
|
|
|
default: packer.json
|
|
|
|
args:
|
|
|
|
description: |
|
|
|
|
Arguments to pass to the packer build command
|
|
|
|
type: string
|
|
|
|
default: ""
|
|
|
|
|
|
|
|
steps:
|
|
|
|
- run:
|
|
|
|
name: "Run a packer build"
|
|
|
|
command: packer build << parameters.args >> << parameters.template >>
|
|
|
|
no_output_timeout: 30m
|
|
|
|
|
2021-06-22 19:52:14 +00:00
|
|
|
jobs:
|
|
|
|
mod-tidy-check:
|
|
|
|
executor: golang
|
|
|
|
steps:
|
|
|
|
- install-deps
|
|
|
|
- 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
|
2022-07-25 05:16:16 +00:00
|
|
|
build-linux:
|
2021-06-22 19:52:14 +00:00
|
|
|
executor: golang
|
|
|
|
steps:
|
|
|
|
- install-deps
|
|
|
|
- prepare
|
|
|
|
- run: sudo apt-get update
|
|
|
|
- run: sudo apt-get install npm
|
|
|
|
- run:
|
|
|
|
command: make buildall
|
2021-09-14 23:31:28 +00:00
|
|
|
- run:
|
|
|
|
name: check tag and version output match
|
|
|
|
command: ./scripts/version-check.sh ./lotus
|
2021-06-22 19:52:14 +00:00
|
|
|
- store_artifacts:
|
|
|
|
path: lotus
|
|
|
|
- store_artifacts:
|
|
|
|
path: lotus-miner
|
|
|
|
- store_artifacts:
|
|
|
|
path: lotus-worker
|
|
|
|
- run: mkdir linux && mv lotus lotus-miner lotus-worker linux/
|
|
|
|
- persist_to_workspace:
|
|
|
|
root: "."
|
|
|
|
paths:
|
|
|
|
- linux
|
|
|
|
|
|
|
|
build-debug:
|
|
|
|
executor: golang
|
|
|
|
steps:
|
|
|
|
- install-deps
|
|
|
|
- prepare
|
|
|
|
- run:
|
|
|
|
command: make debug
|
|
|
|
|
|
|
|
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:
|
|
|
|
- install-deps
|
|
|
|
- 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:
|
|
|
|
- install-deps
|
|
|
|
- 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
|
|
|
|
build-ntwk-calibration:
|
|
|
|
description: |
|
|
|
|
Compile lotus binaries for the calibration network
|
|
|
|
parameters:
|
|
|
|
<<: *test-params
|
|
|
|
executor: << parameters.executor >>
|
|
|
|
steps:
|
|
|
|
- install-deps
|
|
|
|
- prepare
|
|
|
|
- run: make calibnet
|
|
|
|
- run: mkdir linux-calibrationnet && mv lotus lotus-miner lotus-worker linux-calibrationnet
|
|
|
|
- persist_to_workspace:
|
|
|
|
root: "."
|
|
|
|
paths:
|
|
|
|
- linux-calibrationnet
|
|
|
|
build-ntwk-butterfly:
|
|
|
|
description: |
|
|
|
|
Compile lotus binaries for the butterfly network
|
|
|
|
parameters:
|
|
|
|
<<: *test-params
|
|
|
|
executor: << parameters.executor >>
|
|
|
|
steps:
|
|
|
|
- install-deps
|
|
|
|
- prepare
|
|
|
|
- run: make butterflynet
|
|
|
|
- run: mkdir linux-butterflynet && mv lotus lotus-miner lotus-worker linux-butterflynet
|
|
|
|
- persist_to_workspace:
|
|
|
|
root: "."
|
|
|
|
paths:
|
|
|
|
- linux-butterflynet
|
|
|
|
build-lotus-soup:
|
|
|
|
description: |
|
|
|
|
Compile `lotus-soup` Testground test plan
|
|
|
|
parameters:
|
|
|
|
<<: *test-params
|
|
|
|
executor: << parameters.executor >>
|
|
|
|
steps:
|
|
|
|
- install-deps
|
|
|
|
- prepare
|
|
|
|
- run: cd extern/filecoin-ffi && make
|
|
|
|
- run:
|
|
|
|
name: "go get lotus@master"
|
|
|
|
command: cd testplans/lotus-soup && go mod edit -replace=github.com/filecoin-project/lotus=../.. && go mod tidy
|
|
|
|
- run:
|
|
|
|
name: "build lotus-soup testplan"
|
|
|
|
command: pushd testplans/lotus-soup && go build -tags=testground .
|
|
|
|
trigger-testplans:
|
|
|
|
description: |
|
|
|
|
Trigger `lotus-soup` test cases on TaaS
|
|
|
|
parameters:
|
|
|
|
<<: *test-params
|
|
|
|
executor: << parameters.executor >>
|
|
|
|
steps:
|
|
|
|
- install-deps
|
|
|
|
- prepare
|
|
|
|
- run:
|
|
|
|
name: "download testground"
|
|
|
|
command: wget https://gist.github.com/nonsense/5fbf3167cac79945f658771aed32fc44/raw/2e17eb0debf7ec6bdf027c1bdafc2c92dd97273b/testground-d3e9603 -O ~/testground-cli && chmod +x ~/testground-cli
|
|
|
|
- run:
|
|
|
|
name: "prepare .env.toml"
|
|
|
|
command: pushd testplans/lotus-soup && mkdir -p $HOME/testground && cp env-ci.toml $HOME/testground/.env.toml && echo 'endpoint="https://ci.testground.ipfs.team"' >> $HOME/testground/.env.toml && echo 'user="circleci"' >> $HOME/testground/.env.toml
|
|
|
|
- run:
|
|
|
|
name: "prepare testground home dir and link test plans"
|
2021-10-07 10:23:43 +00:00
|
|
|
command: mkdir -p $HOME/testground/plans && ln -s $(pwd)/testplans/lotus-soup $HOME/testground/plans/lotus-soup
|
2021-06-22 19:52:14 +00:00
|
|
|
- run:
|
|
|
|
name: "go get lotus@master"
|
|
|
|
command: cd testplans/lotus-soup && go get github.com/filecoin-project/lotus@master
|
|
|
|
- run:
|
|
|
|
name: "trigger deals baseline testplan on taas"
|
|
|
|
command: ~/testground-cli run composition -f $HOME/testground/plans/lotus-soup/_compositions/baseline-k8s-3-1.toml --metadata-commit=$CIRCLE_SHA1 --metadata-repo=filecoin-project/lotus --metadata-branch=$CIRCLE_BRANCH
|
|
|
|
- run:
|
|
|
|
name: "trigger payment channel stress testplan on taas"
|
|
|
|
command: ~/testground-cli run composition -f $HOME/testground/plans/lotus-soup/_compositions/paych-stress-k8s.toml --metadata-commit=$CIRCLE_SHA1 --metadata-repo=filecoin-project/lotus --metadata-branch=$CIRCLE_BRANCH
|
|
|
|
build-macos:
|
|
|
|
description: build darwin lotus binary
|
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
|
|
|
parameters:
|
|
|
|
publish:
|
|
|
|
default: false
|
|
|
|
description: publish github release and homebrew?
|
|
|
|
type: boolean
|
2021-06-22 19:52:14 +00:00
|
|
|
macos:
|
2022-08-12 14:56:43 +00:00
|
|
|
xcode: "13.4.1"
|
2021-06-22 19:52:14 +00:00
|
|
|
working_directory: ~/go/src/github.com/filecoin-project/lotus
|
|
|
|
steps:
|
|
|
|
- prepare:
|
|
|
|
linux: false
|
|
|
|
darwin: true
|
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
|
|
|
- install_ipfs_macos
|
2021-06-22 19:52:14 +00:00
|
|
|
- restore_cache:
|
|
|
|
name: restore cargo cache
|
|
|
|
key: v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }}
|
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.publish >>
|
|
|
|
steps:
|
|
|
|
- run: goreleaser release --rm-dist
|
|
|
|
- run: ./scripts/generate-checksums.sh
|
|
|
|
- run: ./scripts/publish-checksums.sh
|
|
|
|
- when:
|
|
|
|
condition:
|
|
|
|
not: << parameters.publish >>
|
|
|
|
steps:
|
|
|
|
- run: goreleaser release --rm-dist --snapshot
|
|
|
|
- run: ./scripts/generate-checksums.sh
|
2021-06-22 19:52:14 +00:00
|
|
|
- store_artifacts:
|
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
|
|
|
path: dist
|
2021-06-22 19:52:14 +00:00
|
|
|
- persist_to_workspace:
|
|
|
|
root: "."
|
|
|
|
paths:
|
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
|
|
|
- dist
|
2021-06-22 19:52:14 +00:00
|
|
|
- save_cache:
|
|
|
|
name: save cargo cache
|
|
|
|
key: v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }}
|
|
|
|
paths:
|
|
|
|
- "~/.rustup"
|
|
|
|
- "~/.cargo"
|
|
|
|
|
|
|
|
build-appimage:
|
|
|
|
machine:
|
2022-01-14 11:07:20 +00:00
|
|
|
image: ubuntu-2004:202111-02
|
2021-06-22 19:52:14 +00:00
|
|
|
steps:
|
|
|
|
- checkout
|
|
|
|
- attach_workspace:
|
|
|
|
at: "."
|
2022-09-27 19:59:11 +00:00
|
|
|
- run:
|
|
|
|
name: Update Go
|
|
|
|
command: |
|
2022-10-21 02:31:24 +00:00
|
|
|
sudo rm -rf /usr/local/go && \
|
|
|
|
curl -L https://golang.org/dl/go`cat GO_VERSION_MIN`.linux-amd64.tar.gz -o /tmp/go.tar.gz && \
|
2022-09-27 19:59:11 +00:00
|
|
|
sudo tar -C /usr/local -xvf /tmp/go.tar.gz
|
|
|
|
- run: go version
|
2021-06-22 19:52:14 +00:00
|
|
|
- run:
|
|
|
|
name: install appimage-builder
|
|
|
|
command: |
|
2022-01-14 11:07:20 +00:00
|
|
|
# appimage-builder requires /dev/snd to exist. It creates containers during the testing phase
|
|
|
|
# that pass sound devices from the host to the testing container. (hard coded!)
|
|
|
|
# https://github.com/AppImageCrafters/appimage-builder/blob/master/appimagebuilder/modules/test/execution_test.py#L54
|
|
|
|
# Circleci doesn't provide a working sound device; this is enough to fake it.
|
|
|
|
if [ ! -e /dev/snd ]
|
|
|
|
then
|
|
|
|
sudo mkdir /dev/snd
|
|
|
|
sudo mknod /dev/snd/ControlC0 c 1 2
|
|
|
|
fi
|
|
|
|
|
2021-06-22 19:52:14 +00:00
|
|
|
# docs: https://appimage-builder.readthedocs.io/en/latest/intro/install.html
|
|
|
|
sudo apt update
|
|
|
|
sudo apt install -y python3-pip python3-setuptools patchelf desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace
|
|
|
|
sudo curl -Lo /usr/local/bin/appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
|
|
|
|
sudo chmod +x /usr/local/bin/appimagetool
|
|
|
|
sudo pip3 install appimage-builder
|
|
|
|
- run:
|
|
|
|
name: install lotus dependencies
|
|
|
|
command: sudo apt install ocl-icd-opencl-dev libhwloc-dev
|
|
|
|
- run:
|
|
|
|
name: build appimage
|
|
|
|
command: |
|
|
|
|
sed -i "s/version: latest/version: ${CIRCLE_TAG:-latest}/" AppImageBuilder.yml
|
|
|
|
make appimage
|
|
|
|
- run:
|
|
|
|
name: prepare workspace
|
|
|
|
command: |
|
|
|
|
mkdir appimage
|
2021-06-24 16:48:12 +00:00
|
|
|
mv Lotus-*.AppImage appimage
|
2021-06-22 19:52:14 +00:00
|
|
|
- persist_to_workspace:
|
|
|
|
root: "."
|
|
|
|
paths:
|
|
|
|
- appimage
|
|
|
|
|
|
|
|
|
|
|
|
gofmt:
|
|
|
|
executor: golang
|
|
|
|
steps:
|
|
|
|
- install-deps
|
|
|
|
- prepare
|
|
|
|
- run:
|
|
|
|
command: "! go fmt ./... 2>&1 | read"
|
|
|
|
|
|
|
|
gen-check:
|
|
|
|
executor: golang
|
|
|
|
steps:
|
|
|
|
- install-deps
|
|
|
|
- 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
|
|
|
|
- run: git --no-pager diff
|
|
|
|
- run: git --no-pager diff --quiet
|
|
|
|
- run: make docsgen-cli
|
|
|
|
- run: git --no-pager diff
|
|
|
|
- run: git --no-pager diff --quiet
|
|
|
|
|
|
|
|
docs-check:
|
|
|
|
executor: golang
|
|
|
|
steps:
|
|
|
|
- install-deps
|
|
|
|
- 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
|
|
|
|
- run: git --no-pager diff
|
|
|
|
- run: diff ../pre-openrpc-full ../post-openrpc-full
|
|
|
|
- run: diff ../pre-openrpc-miner ../post-openrpc-miner
|
|
|
|
- run: diff ../pre-openrpc-worker ../post-openrpc-worker
|
|
|
|
- run: git --no-pager diff --quiet
|
|
|
|
|
|
|
|
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:
|
|
|
|
- install-deps
|
|
|
|
- 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
|
|
|
|
|
|
|
|
publish:
|
|
|
|
description: publish binary artifacts
|
|
|
|
executor: ubuntu
|
2022-07-25 05:16:16 +00:00
|
|
|
parameters:
|
|
|
|
linux:
|
|
|
|
default: false
|
|
|
|
description: publish linux binaries?
|
|
|
|
type: boolean
|
|
|
|
appimage:
|
|
|
|
default: false
|
|
|
|
description: publish appimage binaries?
|
|
|
|
type: boolean
|
2021-06-22 19:52:14 +00:00
|
|
|
steps:
|
|
|
|
- run:
|
|
|
|
name: Install git jq curl
|
|
|
|
command: apt update && apt install -y git jq curl
|
|
|
|
- checkout
|
|
|
|
- git_fetch_all_tags
|
|
|
|
- checkout
|
|
|
|
- install_ipfs
|
|
|
|
- attach_workspace:
|
|
|
|
at: "."
|
2022-07-25 05:16:16 +00:00
|
|
|
- when:
|
|
|
|
condition: << parameters.linux >>
|
|
|
|
steps:
|
|
|
|
- run: ./scripts/build-arch-bundle.sh linux
|
|
|
|
- run: ./scripts/publish-arch-release.sh linux
|
|
|
|
- when:
|
|
|
|
condition: << parameters.appimage >>
|
|
|
|
steps:
|
|
|
|
- run: ./scripts/build-appimage-bundle.sh
|
|
|
|
- run: ./scripts/publish-arch-release.sh appimage
|
2021-06-22 19:52:14 +00:00
|
|
|
|
|
|
|
publish-snapcraft:
|
|
|
|
description: build and push snapcraft
|
|
|
|
machine:
|
|
|
|
image: ubuntu-2004:202104-01
|
|
|
|
resource_class: 2xlarge
|
|
|
|
parameters:
|
|
|
|
channel:
|
|
|
|
type: string
|
|
|
|
default: "edge"
|
|
|
|
description: snapcraft channel
|
2022-08-05 22:13:29 +00:00
|
|
|
snap-name:
|
|
|
|
type: string
|
|
|
|
default: 'lotus-filecoin'
|
|
|
|
description: name of snap in snap store
|
2021-06-22 19:52:14 +00:00
|
|
|
steps:
|
|
|
|
- checkout
|
|
|
|
- run:
|
2022-08-05 22:13:29 +00:00
|
|
|
name: Install snapcraft
|
2021-06-22 19:52:14 +00:00
|
|
|
command: sudo snap install snapcraft --classic
|
|
|
|
- run:
|
2022-08-05 22:13:29 +00:00
|
|
|
name: Build << parameters.snap-name >> snap
|
2022-07-27 20:15:01 +00:00
|
|
|
command: |
|
2022-08-05 22:13:29 +00:00
|
|
|
if [ "<< parameters.snap-name >>" != 'lotus-filecoin' ]; then
|
|
|
|
cat snap/snapcraft.yaml | sed 's/lotus-filecoin/lotus/' > edited-snapcraft.yaml
|
|
|
|
mv edited-snapcraft.yaml snap/snapcraft.yaml
|
|
|
|
fi
|
|
|
|
|
|
|
|
snapcraft --use-lxd --debug
|
2022-08-03 19:15:53 +00:00
|
|
|
- run:
|
2022-08-05 22:13:29 +00:00
|
|
|
name: Publish snap to << parameters.channel >> channel
|
2022-08-04 04:29:35 +00:00
|
|
|
shell: /bin/bash -o pipefail
|
2022-08-03 19:15:53 +00:00
|
|
|
command: |
|
2022-08-05 22:13:29 +00:00
|
|
|
snapcraft upload *.snap --release << parameters.channel >>
|
2021-06-22 19:52:14 +00:00
|
|
|
|
|
|
|
build-and-push-image:
|
|
|
|
description: build and push docker images to public AWS ECR registry
|
|
|
|
executor: aws-cli/default
|
|
|
|
parameters:
|
|
|
|
profile-name:
|
|
|
|
type: string
|
|
|
|
default: "default"
|
|
|
|
description: AWS profile name to be configured.
|
|
|
|
|
|
|
|
aws-access-key-id:
|
|
|
|
type: env_var_name
|
|
|
|
default: AWS_ACCESS_KEY_ID
|
|
|
|
description: >
|
|
|
|
AWS access key id for IAM role. Set this to the name of
|
|
|
|
the environment variable you will set to hold this
|
|
|
|
value, i.e. AWS_ACCESS_KEY.
|
|
|
|
|
|
|
|
aws-secret-access-key:
|
|
|
|
type: env_var_name
|
|
|
|
default: AWS_SECRET_ACCESS_KEY
|
|
|
|
description: >
|
|
|
|
AWS secret key for IAM role. Set this to the name of
|
|
|
|
the environment variable you will set to hold this
|
|
|
|
value, i.e. AWS_SECRET_ACCESS_KEY.
|
|
|
|
|
|
|
|
region:
|
|
|
|
type: env_var_name
|
|
|
|
default: AWS_REGION
|
|
|
|
description: >
|
|
|
|
Name of env var storing your AWS region information,
|
|
|
|
defaults to AWS_REGION
|
|
|
|
|
|
|
|
account-url:
|
|
|
|
type: env_var_name
|
|
|
|
default: AWS_ECR_ACCOUNT_URL
|
|
|
|
description: >
|
|
|
|
Env var storing Amazon ECR account URL that maps to an AWS account,
|
|
|
|
e.g. {awsAccountNum}.dkr.ecr.us-west-2.amazonaws.com
|
|
|
|
defaults to AWS_ECR_ACCOUNT_URL
|
|
|
|
|
|
|
|
dockerfile:
|
|
|
|
type: string
|
|
|
|
default: Dockerfile
|
|
|
|
description: Name of dockerfile to use. Defaults to Dockerfile.
|
|
|
|
|
|
|
|
path:
|
|
|
|
type: string
|
|
|
|
default: .
|
|
|
|
description: Path to the directory containing your Dockerfile and build context. Defaults to . (working directory).
|
|
|
|
|
|
|
|
extra-build-args:
|
|
|
|
type: string
|
|
|
|
default: ""
|
|
|
|
description: >
|
|
|
|
Extra flags to pass to docker build. For examples, see
|
|
|
|
https://docs.docker.com/engine/reference/commandline/build
|
|
|
|
|
|
|
|
repo:
|
|
|
|
type: string
|
|
|
|
description: Name of an Amazon ECR repository
|
|
|
|
|
|
|
|
tag:
|
|
|
|
type: string
|
|
|
|
default: "latest"
|
|
|
|
description: A comma-separated string containing docker image tags to build and push (default = latest)
|
|
|
|
|
2022-04-01 04:10:06 +00:00
|
|
|
target:
|
|
|
|
type: string
|
|
|
|
default: "lotus-all-in-one"
|
|
|
|
description: Docker target to build
|
|
|
|
|
2021-06-22 19:52:14 +00:00
|
|
|
steps:
|
|
|
|
- run:
|
|
|
|
name: Confirm that environment variables are set
|
|
|
|
command: |
|
|
|
|
if [ -z "$AWS_ACCESS_KEY_ID" ]; then
|
|
|
|
echo "No AWS_ACCESS_KEY_ID is set. Skipping build-and-push job ..."
|
|
|
|
circleci-agent step halt
|
|
|
|
fi
|
|
|
|
|
|
|
|
- aws-cli/setup:
|
|
|
|
profile-name: <<parameters.profile-name>>
|
|
|
|
aws-access-key-id: <<parameters.aws-access-key-id>>
|
|
|
|
aws-secret-access-key: <<parameters.aws-secret-access-key>>
|
|
|
|
aws-region: <<parameters.region>>
|
|
|
|
|
|
|
|
- run:
|
|
|
|
name: Log into Amazon ECR
|
|
|
|
command: |
|
|
|
|
aws ecr-public get-login-password --region $<<parameters.region>> --profile <<parameters.profile-name>> | docker login --username AWS --password-stdin $<<parameters.account-url>>
|
|
|
|
|
|
|
|
- checkout
|
|
|
|
|
|
|
|
- setup_remote_docker:
|
|
|
|
version: 19.03.13
|
|
|
|
docker_layer_caching: false
|
|
|
|
|
|
|
|
- run:
|
|
|
|
name: Build docker image
|
|
|
|
command: |
|
|
|
|
registry_id=$(echo $<<parameters.account-url>> | sed "s;\..*;;g")
|
|
|
|
|
|
|
|
docker_tag_args=""
|
|
|
|
IFS="," read -ra DOCKER_TAGS \<<< "<< parameters.tag >>"
|
|
|
|
for tag in "${DOCKER_TAGS[@]}"; do
|
|
|
|
docker_tag_args="$docker_tag_args -t $<<parameters.account-url>>/<<parameters.repo>>:$tag"
|
|
|
|
done
|
|
|
|
|
|
|
|
docker build \
|
|
|
|
<<#parameters.extra-build-args>><<parameters.extra-build-args>><</parameters.extra-build-args>> \
|
2022-04-01 04:10:06 +00:00
|
|
|
--target <<parameters.target>> \
|
2021-06-22 19:52:14 +00:00
|
|
|
-f <<parameters.path>>/<<parameters.dockerfile>> \
|
|
|
|
$docker_tag_args \
|
|
|
|
<<parameters.path>>
|
|
|
|
|
|
|
|
- run:
|
|
|
|
name: Push image to Amazon ECR
|
|
|
|
command: |
|
|
|
|
IFS="," read -ra DOCKER_TAGS \<<< "<< parameters.tag >>"
|
|
|
|
for tag in "${DOCKER_TAGS[@]}"; do
|
|
|
|
docker push $<<parameters.account-url>>/<<parameters.repo>>:${tag}
|
|
|
|
done
|
|
|
|
|
2022-02-18 23:37:53 +00:00
|
|
|
publish-packer-snap:
|
|
|
|
description: build packer image with snap. mainnet only.
|
|
|
|
executor:
|
2022-03-31 05:57:02 +00:00
|
|
|
name: packer
|
2022-02-18 23:37:53 +00:00
|
|
|
steps:
|
|
|
|
- checkout
|
|
|
|
- attach_workspace:
|
|
|
|
at: "."
|
2022-03-31 05:57:02 +00:00
|
|
|
- packer_build:
|
2022-02-18 23:37:53 +00:00
|
|
|
template: tools/packer/lotus-snap.pkr.hcl
|
2021-07-22 21:15:27 +00:00
|
|
|
publish-dockerhub:
|
|
|
|
description: publish to dockerhub
|
|
|
|
machine:
|
|
|
|
image: ubuntu-2004:202010-01
|
|
|
|
parameters:
|
|
|
|
tag:
|
|
|
|
type: string
|
|
|
|
default: latest
|
|
|
|
steps:
|
|
|
|
- checkout
|
|
|
|
- run:
|
|
|
|
name: dockerhub login
|
|
|
|
command: echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin
|
|
|
|
- run:
|
|
|
|
name: docker build
|
|
|
|
command: |
|
|
|
|
docker build --target lotus -t filecoin/lotus:<< parameters.tag >> -f Dockerfile.lotus .
|
2022-07-05 18:42:24 +00:00
|
|
|
docker build --target lotus-gateway -t filecoin/lotus-gateway:<< parameters.tag >> -f Dockerfile.lotus .
|
2021-07-22 21:15:27 +00:00
|
|
|
docker build --target lotus-all-in-one -t filecoin/lotus-all-in-one:<< parameters.tag >> -f Dockerfile.lotus .
|
|
|
|
if [["[[ ! -z $CIRCLE_SHA1 ]]"]]; then
|
|
|
|
docker build --target lotus -t filecoin/lotus:$CIRCLE_SHA1 -f Dockerfile.lotus .
|
2022-07-05 18:42:24 +00:00
|
|
|
docker build --target lotus-gateway -t filecoin/lotus-gateway:$CIRCLE_SHA1 -f Dockerfile.lotus .
|
2021-07-22 21:15:27 +00:00
|
|
|
docker build --target lotus-all-in-one -t filecoin/lotus-all-in-one:$CIRCLE_SHA1 -f Dockerfile.lotus .
|
|
|
|
fi
|
|
|
|
if [["[[ ! -z $CIRCLE_TAG ]]"]]; then
|
|
|
|
docker build --target lotus -t filecoin/lotus:$CIRCLE_TAG -f Dockerfile.lotus .
|
2022-07-05 18:42:24 +00:00
|
|
|
docker build --target lotus-gateway -t filecoin/lotus-gateway:$CIRCLE_TAG -f Dockerfile.lotus .
|
2021-07-22 21:15:27 +00:00
|
|
|
docker build --target lotus-all-in-one -t filecoin/lotus-all-in-one:$CIRCLE_TAG -f Dockerfile.lotus .
|
|
|
|
fi
|
|
|
|
- run:
|
|
|
|
name: docker push
|
|
|
|
command: |
|
|
|
|
docker push filecoin/lotus:<< parameters.tag >>
|
2022-08-03 09:14:53 +00:00
|
|
|
docker push filecoin/lotus-gateway:<< parameters.tag >>
|
2021-07-22 21:15:27 +00:00
|
|
|
docker push filecoin/lotus-all-in-one:<< parameters.tag >>
|
|
|
|
if [["[[ ! -z $CIRCLE_SHA1 ]]"]]; then
|
|
|
|
docker push filecoin/lotus:$CIRCLE_SHA1
|
2022-08-03 09:14:53 +00:00
|
|
|
docker push filecoin/lotus-gateway:$CIRCLE_SHA1
|
2021-07-22 21:15:27 +00:00
|
|
|
docker push filecoin/lotus-all-in-one:$CIRCLE_SHA1
|
|
|
|
fi
|
|
|
|
if [["[[ ! -z $CIRCLE_TAG ]]"]]; then
|
|
|
|
docker push filecoin/lotus:$CIRCLE_TAG
|
2022-08-03 09:14:53 +00:00
|
|
|
docker push filecoin/lotus-gateway:$CIRCLE_TAG
|
2021-07-22 21:15:27 +00:00
|
|
|
docker push filecoin/lotus-all-in-one:$CIRCLE_TAG
|
|
|
|
fi
|
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"
|
|
|
|
- test-conformance:
|
|
|
|
name: test-conformance-bleeding-edge
|
|
|
|
suite: conformance-bleeding-edge
|
|
|
|
target: "./conformance"
|
2022-01-09 04:11:53 +00:00
|
|
|
vectors-branch: specs-actors-v7
|
2021-06-22 19:52:14 +00:00
|
|
|
- trigger-testplans:
|
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
only:
|
|
|
|
- master
|
|
|
|
- build-debug
|
2022-07-25 05:16:16 +00:00
|
|
|
- build-linux:
|
2021-06-22 19:52:14 +00:00
|
|
|
filters:
|
|
|
|
tags:
|
|
|
|
only:
|
|
|
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
|
|
- build-ntwk-calibration:
|
|
|
|
filters:
|
|
|
|
tags:
|
|
|
|
only:
|
|
|
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
|
|
- build-ntwk-butterfly:
|
|
|
|
filters:
|
|
|
|
tags:
|
|
|
|
only:
|
|
|
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
|
|
- build-lotus-soup
|
2021-10-06 20:40:44 +00:00
|
|
|
- build-macos:
|
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
|
|
|
name: publish-macos
|
|
|
|
publish: true
|
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:
|
|
|
|
ignore:
|
|
|
|
- /.*/
|
2021-10-06 20:40:44 +00:00
|
|
|
tags:
|
|
|
|
only:
|
2022-09-21 16:20:26 +00:00
|
|
|
- /^v\d+\.\d+\.\d+$/
|
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
|
|
|
- build-macos:
|
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:
|
|
|
|
- /^v\d+\.\d+\.\d+-rc\d+$/
|
2022-01-14 11:01:12 +00:00
|
|
|
- build-appimage:
|
|
|
|
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+)?$/
|
2022-01-14 11:01:12 +00:00
|
|
|
tags:
|
|
|
|
only:
|
|
|
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
2021-06-22 19:52:14 +00:00
|
|
|
- publish:
|
2022-07-25 05:16:16 +00:00
|
|
|
name: publish-linux
|
|
|
|
linux: true
|
|
|
|
requires:
|
|
|
|
- build-linux
|
2022-01-14 11:01:12 +00:00
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
ignore:
|
|
|
|
- /.*/
|
|
|
|
tags:
|
|
|
|
only:
|
|
|
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
2021-06-22 19:52:14 +00:00
|
|
|
- publish:
|
2022-07-25 05:16:16 +00:00
|
|
|
name: publish-appimage
|
|
|
|
appimage: true
|
2021-06-22 19:52:14 +00:00
|
|
|
requires:
|
2022-01-14 11:01:12 +00:00
|
|
|
- build-appimage
|
2021-06-22 19:52:14 +00:00
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
ignore:
|
|
|
|
- /.*/
|
|
|
|
tags:
|
|
|
|
only:
|
|
|
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
|
|
- build-and-push-image:
|
2022-07-29 03:24:50 +00:00
|
|
|
name: build-and-push/lotus-all-in-one
|
2021-06-22 19:52:14 +00:00
|
|
|
dockerfile: Dockerfile.lotus
|
|
|
|
path: .
|
|
|
|
repo: lotus-dev
|
|
|
|
tag: '${CIRCLE_SHA1:0:8}'
|
2022-04-01 04:10:06 +00:00
|
|
|
target: lotus-all-in-one
|
|
|
|
- build-and-push-image:
|
2022-07-29 03:24:50 +00:00
|
|
|
name: build-and-push/lotus-test
|
2022-04-01 04:10:06 +00:00
|
|
|
dockerfile: Dockerfile.lotus
|
|
|
|
path: .
|
|
|
|
repo: lotus-test
|
|
|
|
tag: '${CIRCLE_SHA1:0:8}'
|
|
|
|
target: lotus-test
|
2021-06-22 19:52:14 +00:00
|
|
|
- publish-snapcraft:
|
2022-08-05 22:13:29 +00:00
|
|
|
name: "Publish Snapcraft (lotus-filecoin / candidate)"
|
2021-06-22 19:52:14 +00:00
|
|
|
channel: stable
|
2022-08-05 22:13:29 +00:00
|
|
|
snap-name: lotus-filecoin
|
2021-06-22 19:52:14 +00:00
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
ignore:
|
|
|
|
- /.*/
|
|
|
|
tags:
|
|
|
|
only:
|
2022-07-27 20:06:35 +00:00
|
|
|
- /^v\d+\.\d+\.\d+$/
|
|
|
|
- publish-snapcraft:
|
2022-08-05 22:13:29 +00:00
|
|
|
name: "Publish Snapcraft (lotus-filecoin / candidate)"
|
2022-07-27 20:06:35 +00:00
|
|
|
channel: candidate
|
2022-08-05 22:13:29 +00:00
|
|
|
snap-name: lotus-filecoin
|
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
ignore:
|
|
|
|
- /.*/
|
|
|
|
tags:
|
|
|
|
only:
|
|
|
|
- /^v\d+\.\d+\.\d+-rc\d+$/
|
|
|
|
- publish-snapcraft:
|
|
|
|
name: "Publish Snapcraft (lotus / stable)"
|
|
|
|
channel: stable
|
|
|
|
snap-name: lotus
|
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
ignore:
|
|
|
|
- /.*/
|
|
|
|
tags:
|
|
|
|
only:
|
|
|
|
- /^v\d+\.\d+\.\d+$/
|
|
|
|
- publish-snapcraft:
|
|
|
|
name: "Publish Snapcraft (lotus / candidate)"
|
|
|
|
channel: candidate
|
|
|
|
snap-name: lotus
|
2022-07-27 20:06:35 +00:00
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
ignore:
|
|
|
|
- /.*/
|
|
|
|
tags:
|
|
|
|
only:
|
|
|
|
- /^v\d+\.\d+\.\d+-rc\d+$/
|
2021-07-22 21:15:27 +00:00
|
|
|
- publish-dockerhub:
|
|
|
|
name: publish-dockerhub
|
|
|
|
tag: stable
|
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
ignore:
|
|
|
|
- /.*/
|
|
|
|
tags:
|
|
|
|
only:
|
|
|
|
- /^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:
|
|
|
|
- publish-snapcraft:
|
2022-08-05 22:13:29 +00:00
|
|
|
name: "Publish Snapcraft Nightly (lotus-filecoin / edge)"
|
|
|
|
channel: edge
|
|
|
|
snap-name: lotus-filecoin
|
|
|
|
- publish-snapcraft:
|
|
|
|
name: "Publish Snapcraft Nightly (lotus / edge)"
|
2021-06-22 19:52:14 +00:00
|
|
|
channel: edge
|
2022-08-05 22:13:29 +00:00
|
|
|
snap-name: lotus
|
2021-07-22 21:15:27 +00:00
|
|
|
- publish-dockerhub:
|
|
|
|
name: publish-dockerhub-nightly
|
|
|
|
tag: nightly
|
2022-02-18 23:37:53 +00:00
|
|
|
monthly:
|
|
|
|
triggers:
|
|
|
|
- schedule:
|
|
|
|
cron: "0 0 1 * *"
|
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
only:
|
|
|
|
- master
|
|
|
|
jobs:
|
2022-09-21 16:20:26 +00:00
|
|
|
- publish-packer-snap
|