2019-07-01 20:17:00 +00:00
version : 2.1
orbs :
2020-06-02 21:02:37 +00:00
go : gotest/tools@0.0.13
2019-07-01 20:17:00 +00:00
2019-09-23 11:43:32 +00:00
executors :
golang :
docker :
2020-07-20 23:07:08 +00:00
- image : circleci/golang:1.14.6
2019-12-04 01:13:27 +00:00
resource_class : 2xlarge
2020-02-12 21:28:37 +00:00
ubuntu :
docker :
- image : ubuntu:19.10
2019-07-01 20:17:00 +00:00
2019-07-08 14:31:43 +00:00
commands :
2019-07-08 14:45:47 +00:00
install-deps :
steps :
- go/install-ssh
- go/install : {package : git}
2019-07-08 14:31:43 +00:00
prepare :
2019-12-04 01:13:27 +00:00
parameters :
linux :
default : true
description : is a linux build environment?
type : boolean
darwin :
default : false
description : is a darwin build environment?
type : boolean
2019-07-08 14:31:43 +00:00
steps :
2020-02-12 21:28:37 +00:00
- checkout
- git_fetch_all_tags
2019-07-08 14:31:43 +00:00
- checkout
2019-12-04 01:13:27 +00:00
- when :
condition : << parameters.linux >>
steps :
- run : sudo apt-get update
2020-10-28 14:35:40 +00:00
- run : sudo apt-get install ocl-icd-opencl-dev libhwloc-dev
2019-07-08 14:31:43 +00:00
- run : git submodule sync
- run : git submodule update --init
2019-09-06 23:27:16 +00:00
download-params :
steps :
- restore_cache :
name : Restore parameters cache
2019-12-04 01:13:27 +00:00
keys :
2020-04-27 18:06:56 +00:00
- 'v25-2k-lotus-params'
2019-09-06 23:27:16 +00:00
paths :
- /var/tmp/filecoin-proof-parameters/
2020-06-12 05:13:11 +00:00
- run : ./lotus fetch-params 2048
2019-09-06 23:27:16 +00:00
- save_cache :
name : Save parameters cache
2020-04-27 18:06:56 +00:00
key : 'v25-2k-lotus-params'
2019-09-06 23:27:16 +00:00
paths :
- /var/tmp/filecoin-proof-parameters/
2020-02-12 21:28:37 +00:00
install_ipfs :
steps :
- run : |
apt update
apt install -y wget
wget https://github.com/ipfs/go-ipfs/releases/download/v0.4.22/go-ipfs_v0.4.22_linux-amd64.tar.gz
wget https://github.com/ipfs/go-ipfs/releases/download/v0.4.22/go-ipfs_v0.4.22_linux-amd64.tar.gz.sha512
if [ "$(sha512sum go-ipfs_v0.4.22_linux-amd64.tar.gz)" != "$(cat go-ipfs_v0.4.22_linux-amd64.tar.gz.sha512)" ]
then
echo "ipfs failed checksum check"
exit 1
fi
tar -xf go-ipfs_v0.4.22_linux-amd64.tar.gz
mv go-ipfs/ipfs /usr/local/bin/ipfs
chmod +x /usr/local/bin/ipfs
git_fetch_all_tags :
steps :
- run :
name : fetch all tags
command : |
git fetch --all
2019-07-08 14:31:43 +00:00
2019-07-02 09:19:48 +00:00
jobs :
mod-tidy-check :
2019-09-23 11:43:32 +00:00
executor : golang
2019-07-02 09:19:48 +00:00
steps :
2019-07-08 14:47:19 +00:00
- install-deps
- prepare
2019-07-02 09:19:48 +00:00
- go/mod-tidy-check
2019-11-30 08:21:01 +00:00
build-all :
executor : golang
steps :
- install-deps
- prepare
2019-12-02 20:05:38 +00:00
- run : sudo apt-get update
- run : sudo apt-get install npm
2019-11-30 08:21:01 +00:00
- run :
command : make buildall
2019-12-04 01:13:27 +00:00
- store_artifacts :
path : lotus
- store_artifacts :
2020-07-08 10:38:59 +00:00
path : lotus-miner
2020-02-12 21:28:37 +00:00
- store_artifacts :
2020-07-09 03:04:45 +00:00
path : lotus-worker
- run : mkdir linux && mv lotus lotus-miner lotus-worker linux/
2020-02-12 21:28:37 +00:00
- persist_to_workspace :
root : "."
paths :
- linux
2019-11-30 08:21:01 +00:00
2020-03-09 06:56:11 +00:00
build-debug :
executor : golang
steps :
- install-deps
- prepare
- run :
command : make debug
2019-12-09 15:49:46 +00:00
test : &test
2019-07-08 14:31:43 +00:00
description : |
Run tests with gotestsum.
2020-08-26 15:03:44 +00:00
parameters : &test-params
2019-07-08 14:31:43 +00:00
executor :
type : executor
2019-09-23 11:43:32 +00:00
default : golang
2019-07-08 14:31:43 +00:00
go-test-flags :
type : string
2019-12-05 12:28:44 +00:00
default : "-timeout 30m"
2019-07-08 14:31:43 +00:00
description : Flags passed to go test.
packages :
type : string
default : "./..."
description : Import paths of packages to be tested.
2020-06-01 12:59:51 +00:00
winpost-test :
type : string
default : "0"
2019-07-08 14:31:43 +00:00
test-suite-name :
type : string
default : unit
description : Test suite name to report to CircleCI.
gotestsum-format :
type : string
2020-07-20 23:07:08 +00:00
default : pkgname-and-test-fails
2019-07-08 14:31:43 +00:00
description : gotestsum format. https://github.com/gotestyourself/gotestsum#format
coverage :
type : string
2020-01-09 21:53:41 +00:00
default : -coverprofile=coverage.txt -coverpkg=github.com/filecoin-project/lotus/...
2019-07-08 14:31:43 +00:00
description : Coverage flag. Set to the empty string to disable.
codecov-upload :
type : boolean
default : false
description : |
Upload coverage report to https://codecov.io/. Requires the codecov API token to be
set as an environment variable for private projects.
executor : << parameters.executor >>
steps :
2019-07-08 14:45:47 +00:00
- install-deps
2019-07-08 14:31:43 +00:00
- prepare
2019-08-29 19:08:12 +00:00
- run :
2019-10-04 20:10:49 +00:00
command : make deps lotus
2019-08-29 19:08:12 +00:00
no_output_timeout : 30m
2019-10-04 20:10:49 +00:00
- download-params
2019-07-08 14:56:06 +00:00
- go/install-gotestsum :
2019-07-08 14:55:01 +00:00
gobin : $HOME/.local/bin
2020-07-20 23:07:08 +00:00
version : 0.5 .2
2019-07-08 14:31:43 +00:00
- run :
name : go test
environment :
2020-06-01 12:59:51 +00:00
LOTUS_TEST_WINDOW_POST : << parameters.winpost-test >>
2020-08-21 15:41:35 +00:00
SKIP_CONFORMANCE : "1"
2019-07-08 14:31:43 +00:00
command : |
mkdir -p /tmp/test-reports/<< parameters.test-suite-name >>
2020-07-20 23:07:08 +00:00
mkdir -p /tmp/test-artifacts
gotestsum \
--format << parameters.gotestsum-format >> \
--junitfile /tmp/test-reports/<< parameters.test-suite-name >>/junit.xml \
--jsonfile /tmp/test-artifacts/<< parameters.test-suite-name >>.json \
-- \
2019-07-08 14:31:43 +00:00
<< parameters.coverage >> \
<< parameters.go-test-flags >> \
<< parameters.packages >>
2019-12-05 12:04:34 +00:00
no_output_timeout : 30m
2019-07-08 14:31:43 +00:00
- store_test_results :
path : /tmp/test-reports
2020-07-20 23:07:08 +00:00
- store_artifacts :
path : /tmp/test-artifacts/<< parameters.test-suite-name >>.json
2019-07-08 14:31:43 +00:00
- when :
condition : << parameters.codecov-upload >>
steps :
- go/install : {package : bash}
- go/install : {package : curl}
- run :
shell : /bin/bash -eo pipefail
command : |
bash <(curl -s https://codecov.io/bash)
2019-12-04 01:13:27 +00:00
2020-10-20 10:52:52 +00:00
test-chain :
<< : *test
test-node :
<< : *test
test-storage :
<< : *test
test-cli :
<< : *test
2020-02-12 21:28:37 +00:00
test-short :
2019-12-09 15:49:46 +00:00
<< : *test
2020-06-01 12:59:51 +00:00
test-window-post :
<< : *test
2020-08-16 21:22:12 +00:00
test-conformance :
2020-08-26 15:03:44 +00:00
description : |
Run tests using a corpus of interoperable test vectors for Filecoin
implementations to test their correctness and compliance with the Filecoin
specifications.
parameters :
<< : *test-params
vectors-branch :
type : string
default : ""
description : |
Branch on github.com/filecoin-project/test-vectors to checkout and
test with. If empty (the default) the commit defined by the git
submodule is used.
executor : << parameters.executor >>
2020-08-21 15:41:35 +00:00
steps :
- install-deps
- prepare
- run :
command : make deps lotus
no_output_timeout : 30m
- download-params
2020-08-26 15:03:44 +00:00
- 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 >>
2020-08-26 20:55:06 +00:00
- go/install-gotestsum :
gobin : $HOME/.local/bin
version : 0.5 .2
2020-09-09 12:03:43 +00:00
- run :
name : install statediff globally
command : |
2020-09-10 09:41:18 +00:00
## statediff is optional; we succeed even if compilation fails.
2020-09-09 12:03:43 +00:00
mkdir -p /tmp/statediff
git clone https://github.com/filecoin-project/statediff.git /tmp/statediff
cd /tmp/statediff
2020-09-10 09:41:18 +00:00
go install ./cmd/statediff || exit 0
2020-08-21 15:41:35 +00:00
- run :
name : go test
environment :
SKIP_CONFORMANCE : "0"
command : |
2020-08-26 20:55:06 +00:00
mkdir -p /tmp/test-reports
2020-08-21 15:41:35 +00:00
mkdir -p /tmp/test-artifacts
2020-08-26 20:55:06 +00:00
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/
2020-08-21 15:41:35 +00:00
go tool cover -html=/tmp/conformance.out -o /tmp/test-artifacts/conformance-coverage.html
no_output_timeout : 30m
2020-08-26 20:55:06 +00:00
- store_test_results :
path : /tmp/test-reports
2020-08-21 15:41:35 +00:00
- store_artifacts :
path : /tmp/test-artifacts/conformance-coverage.html
2020-09-16 20:47:06 +00:00
build-lotus-soup :
2020-09-15 09:42:52 +00:00
description : |
Compile `lotus-soup` Testground test plan using the current version of Lotus.
parameters :
<< : *test-params
executor : << parameters.executor >>
steps :
- install-deps
- prepare
- run : cd extern/oni && git submodule sync
- run : cd extern/oni && git submodule update --init
2020-09-16 10:49:45 +00:00
- run : cd extern/filecoin-ffi && make
2020-09-15 09:42:52 +00:00
- run :
2020-09-16 13:16:15 +00:00
name : "replace lotus, filecoin-ffi, blst and fil-blst deps"
2020-11-03 10:29:54 +00:00
command : cd extern/oni/lotus-soup && go mod edit -replace github.com/filecoin-project/lotus=../../../ && go mod edit -replace github.com/filecoin-project/filecoin-ffi=../../filecoin-ffi && go mod edit -replace github.com/supranational/blst=../../blst
2020-09-15 09:42:52 +00:00
- run :
name : "build lotus-soup testplan"
command : pushd extern/oni/lotus-soup && go build -tags=testground .
2019-12-09 15:49:46 +00:00
2019-12-17 13:47:26 +00:00
build-macos :
2019-12-04 01:13:27 +00:00
description : build darwin lotus binary
macos :
xcode : "10.0.0"
working_directory : ~/go/src/github.com/filecoin-project/lotus
steps :
- prepare :
linux : false
darwin : true
- run :
name : Install go
command : |
2020-05-11 21:13:02 +00:00
curl -O https://dl.google.com/go/go1.14.2.darwin-amd64.pkg && \
sudo installer -pkg go1.14.2.darwin-amd64.pkg -target /
2019-12-04 01:13:27 +00:00
- run :
name : Install pkg-config
command : HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config
- run : go version
- run :
name : Install Rust
command : |
curl https://sh.rustup.rs -sSf | sh -s -- -y
- run :
name : Install jq
command : |
2020-05-14 21:25:22 +00:00
curl --location https://github.com/stedolan/jq/releases/download/jq-1.6/jq-osx-amd64 --output /usr/local/bin/jq
chmod +x /usr/local/bin/jq
2019-12-04 01:13:27 +00:00
- restore_cache :
2020-06-02 21:02:37 +00:00
name : restore cargo cache
2019-12-19 21:00:41 +00:00
key : v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }}
2019-12-04 01:13:27 +00:00
- install-deps
- run :
2020-01-09 22:13:07 +00:00
command : make build
2019-12-04 01:13:27 +00:00
no_output_timeout : 30m
- store_artifacts :
path : lotus
- store_artifacts :
2020-07-08 10:38:59 +00:00
path : lotus-miner
2020-02-12 21:28:37 +00:00
- store_artifacts :
2020-07-09 03:04:45 +00:00
path : lotus-worker
- run : mkdir darwin && mv lotus lotus-miner lotus-worker darwin/
2020-02-12 21:28:37 +00:00
- persist_to_workspace :
root : "."
paths :
- darwin
2019-12-04 01:13:27 +00:00
- save_cache :
2019-12-19 21:00:41 +00:00
name : save cargo cache
key : v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }}
2019-12-04 01:13:27 +00:00
paths :
- "~/.rustup"
- "~/.cargo"
2019-07-08 14:31:43 +00:00
2020-03-09 06:56:11 +00:00
gofmt :
executor : golang
steps :
- install-deps
- prepare
- run :
command : "! go fmt ./... 2>&1 | read"
2020-08-24 10:20:23 +00:00
cbor-gen-check :
executor : golang
steps :
- install-deps
- prepare
2020-08-24 10:28:22 +00:00
- run : make deps
2020-08-24 10:20:23 +00:00
- run : go install golang.org/x/tools/cmd/goimports
- run : go install github.com/hannahhoward/cbor-gen-for
- run : go generate ./...
- run : git --no-pager diff
- run : git --no-pager diff --quiet
docs-check :
executor : golang
steps :
- install-deps
- prepare
2020-11-12 09:42:06 +00:00
- run : make deps
2020-08-24 10:20:23 +00:00
- run : make docsgen
- run : git --no-pager diff
- run : git --no-pager diff --quiet
2019-07-10 13:35:00 +00:00
lint : &lint
2019-07-08 14:31:43 +00:00
description : |
Run golangci-lint.
parameters :
executor :
type : executor
2019-09-23 11:43:32 +00:00
default : golang
2019-07-08 14:31:43 +00:00
golangci-lint-version :
type : string
2020-06-02 21:07:48 +00:00
default : 1.27 .0
2019-07-08 14:31:43 +00:00
concurrency :
type : string
default : '2'
description : |
Concurrency used to run linters. Defaults to 2 because NumCPU is not
aware of container CPU limits.
2019-07-08 15:36:24 +00:00
args :
type : string
default : ''
description : |
Arguments to pass to golangci-lint
2019-07-08 14:31:43 +00:00
executor : << parameters.executor >>
steps :
2019-07-08 14:45:47 +00:00
- install-deps
2019-07-08 14:31:43 +00:00
- prepare
2019-08-29 19:08:12 +00:00
- run :
2019-08-30 11:26:20 +00:00
command : make deps
no_output_timeout : 30m
2019-07-08 14:31:43 +00:00
- go/install-golangci-lint :
2019-07-08 14:55:01 +00:00
gobin : $HOME/.local/bin
2019-07-08 14:31:43 +00:00
version : << parameters.golangci-lint-version >>
- run :
name : Lint
command : |
2020-06-02 21:07:48 +00:00
$HOME/.local/bin/golangci-lint run -v --timeout 2m \
2019-07-08 15:36:24 +00:00
--concurrency << parameters.concurrency >> << parameters.args >>
2019-07-10 13:35:00 +00:00
lint-all :
<< : *lint
2019-07-08 14:31:43 +00:00
2020-02-12 21:28:37 +00:00
publish :
description : publish binary artifacts
executor : ubuntu
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 : "."
- run :
name : Create bundles
command : ./scripts/build-bundle.sh
- run :
name : Publish release
command : ./scripts/publish-release.sh
2019-07-08 14:31:43 +00:00
2019-07-01 20:17:00 +00:00
workflows :
2019-11-08 20:39:40 +00:00
version : 2.1
2019-07-01 20:17:00 +00:00
ci :
jobs :
2020-09-14 12:18:53 +00:00
- lint-all :
concurrency : "16" # expend all docker 2xlarge CPUs.
2020-02-12 21:28:37 +00:00
- mod-tidy-check
2020-03-09 06:56:11 +00:00
- gofmt
2020-08-24 10:20:23 +00:00
- cbor-gen-check
- docs-check
2020-06-01 12:59:51 +00:00
- test :
codecov-upload : true
2020-07-20 23:07:08 +00:00
test-suite-name : full
2020-10-20 10:52:52 +00:00
- test-chain :
codecov-upload : true
test-suite-name : chain
packages : "./chain/..."
- test-node :
codecov-upload : true
test-suite-name : node
packages : "./node/..."
- test-storage :
codecov-upload : true
test-suite-name : storage
packages : "./storage/... ./extern/..."
- test-cli :
codecov-upload : true
test-suite-name : cli
packages : "./cli/... ./cmd/... ./api/..."
2020-06-01 12:59:51 +00:00
- test-window-post :
go-test-flags : "-run=TestWindowedPost"
winpost-test : "1"
2020-07-20 23:07:08 +00:00
test-suite-name : window-post
2019-12-09 15:49:46 +00:00
- test-short :
go-test-flags : "--timeout 10m --short"
2020-07-20 23:07:08 +00:00
test-suite-name : short
2020-02-12 21:28:37 +00:00
filters :
tags :
only :
- /^v\d+\.\d+\.\d+$/
2020-08-16 21:22:12 +00:00
- test-conformance :
test-suite-name : conformance
packages : "./conformance"
2020-08-26 15:03:44 +00:00
- test-conformance :
name : test-conformance-bleeding-edge
test-suite-name : conformance-bleeding-edge
packages : "./conformance"
vectors-branch : master
2020-09-16 20:47:06 +00:00
- build-lotus-soup
2020-03-09 06:56:11 +00:00
- build-debug
2020-02-12 21:28:37 +00:00
- build-all :
requires :
- test-short
filters :
tags :
only :
- /^v\d+\.\d+\.\d+$/
- build-macos :
requires :
- test-short
filters :
branches :
ignore :
- /.*/
tags :
only :
- /^v\d+\.\d+\.\d+$/
- publish :
requires :
- build-all
- build-macos
filters :
branches :
ignore :
- /.*/
tags :
only :
- /^v\d+\.\d+\.\d+$/