mirror of
https://github.com/tendermint/tendermint.git
synced 2026-09-25 09:24:30 +00:00
To achieve faster feedback cycles for our feature PRs this change reduces the average buildtime from 35 to ~6min by utilising their new 2.0 offering based on docker and nomad. We make use of parallel build steps wherever possible so that the duration is determined by the slowest test suite (p2p). This is an intermediate step until we move our CI/CD completely on-premise for more control and added security.
223 lines
5.7 KiB
YAML
223 lines
5.7 KiB
YAML
version: 2
|
|
|
|
defaults: &defaults
|
|
working_directory: /go/src/github.com/tendermint/tendermint
|
|
docker:
|
|
- image: circleci/golang:1.10.0
|
|
environment:
|
|
GOBIN: /tmp/workspace/bin
|
|
|
|
jobs:
|
|
setup_dependencies:
|
|
<<: *defaults
|
|
steps:
|
|
- run: mkdir -p /tmp/workspace/bin
|
|
- run: mkdir -p /tmp/workspace/profiles
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- v1-pkg-cache
|
|
- run:
|
|
name: tools
|
|
command: |
|
|
export PATH="$GOBIN:$PATH"
|
|
make get_tools
|
|
- run:
|
|
name: dependencies
|
|
command: |
|
|
export PATH="$GOBIN:$PATH"
|
|
make get_vendor_deps
|
|
- run:
|
|
name: binaries
|
|
command: |
|
|
export PATH="$GOBIN:$PATH"
|
|
make install
|
|
- persist_to_workspace:
|
|
root: /tmp/workspace
|
|
paths:
|
|
- bin
|
|
- profiles
|
|
- save_cache:
|
|
key: v1-pkg-cache
|
|
paths:
|
|
- /go/pkg
|
|
- save_cache:
|
|
key: v1-tree-{{ .Environment.CIRCLE_SHA1 }}
|
|
paths:
|
|
- /go/src/github.com/tendermint/tendermint
|
|
|
|
setup_abci:
|
|
<<: *defaults
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- restore_cache:
|
|
key: v1-pkg-cache
|
|
- restore_cache:
|
|
key: v1-tree-{{ .Environment.CIRCLE_SHA1 }}
|
|
- run:
|
|
name: Checkout abci
|
|
command: |
|
|
commit=$(bash scripts/dep_utils/parse.sh abci)
|
|
go get -v -u -d github.com/tendermint/abci/...
|
|
cd /go/src/github.com/tendermint/abci
|
|
git checkout "$commit"
|
|
- run:
|
|
working_directory: /go/src/github.com/tendermint/abci
|
|
name: Install abci
|
|
command: |
|
|
set -ex
|
|
export PATH="$GOBIN:$PATH"
|
|
make get_tools
|
|
make get_vendor_deps
|
|
make install
|
|
- run: ls -lah /tmp/workspace/bin
|
|
- persist_to_workspace:
|
|
root: /tmp/workspace
|
|
paths:
|
|
- "bin/abci*"
|
|
|
|
lint:
|
|
<<: *defaults
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- restore_cache:
|
|
key: v1-pkg-cache
|
|
- restore_cache:
|
|
key: v1-tree-{{ .Environment.CIRCLE_SHA1 }}
|
|
- run:
|
|
name: metalinter
|
|
command: |
|
|
set -ex
|
|
export PATH="$GOBIN:$PATH"
|
|
make metalinter
|
|
|
|
test_apps:
|
|
<<: *defaults
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- restore_cache:
|
|
key: v1-pkg-cache
|
|
- restore_cache:
|
|
key: v1-tree-{{ .Environment.CIRCLE_SHA1 }}
|
|
- run: sudo apt-get update && sudo apt-get install -y --no-install-recommends bsdmainutils
|
|
- run:
|
|
name: Run tests
|
|
command: bash test/app/test.sh
|
|
|
|
test_cover:
|
|
<<: *defaults
|
|
parallelism: 4
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- restore_cache:
|
|
key: v1-pkg-cache
|
|
- restore_cache:
|
|
key: v1-tree-{{ .Environment.CIRCLE_SHA1 }}
|
|
- run:
|
|
name: Run tests
|
|
command: |
|
|
for pkg in $(go list github.com/tendermint/tendermint/... | grep -v /vendor/ | circleci tests split --split-by=timings); do
|
|
id=$(basename "$pkg")
|
|
|
|
go test -timeout 5m -race -coverprofile=/tmp/workspace/profiles/$id.out -covermode=atomic "$pkg"
|
|
done
|
|
- persist_to_workspace:
|
|
root: /tmp/workspace
|
|
paths:
|
|
- "profiles/*"
|
|
|
|
test_libs:
|
|
<<: *defaults
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- restore_cache:
|
|
key: v1-pkg-cache
|
|
- restore_cache:
|
|
key: v1-tree-{{ .Environment.CIRCLE_SHA1 }}
|
|
- run:
|
|
name: Run tests
|
|
command: bash test/test_libs.sh
|
|
|
|
test_persistence:
|
|
<<: *defaults
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- restore_cache:
|
|
key: v1-pkg-cache
|
|
- restore_cache:
|
|
key: v1-tree-{{ .Environment.CIRCLE_SHA1 }}
|
|
- run:
|
|
name: Run tests
|
|
command: bash test/persist/test_failure_indices.sh
|
|
|
|
test_p2p:
|
|
environment:
|
|
GOBIN: /home/circleci/.go_workspace/bin
|
|
GOPATH: /home/circleci/.go_workspace
|
|
machine:
|
|
image: circleci/classic:latest
|
|
steps:
|
|
- checkout
|
|
- run: mkdir -p $GOPATH/src/github.com/tendermint
|
|
- run: ln -sf /home/circleci/project $GOPATH/src/github.com/tendermint/tendermint
|
|
- run: bash test/circleci/p2p.sh
|
|
|
|
upload_coverage:
|
|
<<: *defaults
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- restore_cache:
|
|
key: v1-tree-{{ .Environment.CIRCLE_SHA1 }}
|
|
- run:
|
|
name: gather
|
|
command: |
|
|
set -ex
|
|
|
|
echo "mode: atomic" > coverage.txt
|
|
for prof in $(ls /tmp/workspace/profiles/); do
|
|
tail -n +2 /tmp/workspace/profiles/"$prof" >> coverage.txt
|
|
done
|
|
- run:
|
|
name: upload
|
|
command: bash <(curl -s https://codecov.io/bash) -f coverage.txt
|
|
|
|
workflows:
|
|
version: 2
|
|
test-suite:
|
|
jobs:
|
|
- setup_dependencies
|
|
- setup_abci:
|
|
requires:
|
|
- setup_dependencies
|
|
- lint:
|
|
requires:
|
|
- setup_dependencies
|
|
- test_apps:
|
|
requires:
|
|
- setup_abci
|
|
- test_cover:
|
|
requires:
|
|
- setup_dependencies
|
|
- test_libs:
|
|
filters:
|
|
branches:
|
|
only:
|
|
- develop
|
|
- master
|
|
requires:
|
|
- setup_dependencies
|
|
- test_persistence:
|
|
requires:
|
|
- setup_abci
|
|
- test_p2p
|
|
- upload_coverage:
|
|
requires:
|
|
- test_cover
|