300 lines
8.3 KiB
YAML
300 lines
8.3 KiB
YAML
version: 2
|
|
|
|
defaults: &linux_defaults
|
|
working_directory: /go/src/github.com/cosmos/cosmos-sdk
|
|
docker:
|
|
- image: circleci/golang:1.12.5
|
|
|
|
############
|
|
#
|
|
# Configure docs deployment
|
|
|
|
docs_update: &docs_deploy
|
|
working_directory: ~/repo
|
|
docker:
|
|
- image: tendermintdev/jq_curl
|
|
environment:
|
|
AWS_REGION: us-east-1
|
|
|
|
jobs:
|
|
setup_dependencies:
|
|
<<: *linux_defaults
|
|
steps:
|
|
- run: mkdir -p /tmp/workspace/bin
|
|
- run: mkdir -p /tmp/workspace/profiles
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- go-mod-v1-{{ checksum "go.sum" }}
|
|
- run:
|
|
name: tools
|
|
command: |
|
|
make runsim tools TOOLS_DESTDIR=/tmp/workspace/bin
|
|
cp $GOPATH/bin/runsim /tmp/workspace/bin
|
|
cp $GOPATH/bin/statik /tmp/workspace/bin
|
|
- run:
|
|
name: cache go modules
|
|
command: |
|
|
make go-mod-cache
|
|
- save_cache:
|
|
key: go-mod-v1-{{ checksum "go.sum" }}
|
|
paths:
|
|
- "/go/pkg/mod"
|
|
- run:
|
|
name: build
|
|
command: |
|
|
make build
|
|
- persist_to_workspace:
|
|
root: /tmp/workspace
|
|
paths:
|
|
- bin
|
|
- profiles
|
|
|
|
test_sim_app_nondeterminism:
|
|
<<: *linux_defaults
|
|
parallelism: 1
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- go-mod-v1-{{ checksum "go.sum" }}
|
|
- run:
|
|
name: Test individual module simulations
|
|
command: |
|
|
make test_sim_app_nondeterminism
|
|
|
|
test_sim_app_fast:
|
|
<<: *linux_defaults
|
|
parallelism: 1
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- go-mod-v1-{{ checksum "go.sum" }}
|
|
- run:
|
|
name: Test full application simulation
|
|
command: |
|
|
make test_sim_app_fast
|
|
|
|
test_sim_app_import_export:
|
|
<<: *linux_defaults
|
|
parallelism: 1
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- go-mod-v1-{{ checksum "go.sum" }}
|
|
- run:
|
|
name: Test application import/export simulation
|
|
command: |
|
|
export GO111MODULE=on
|
|
/tmp/workspace/bin/runsim -j 4 github.com/cosmos/cosmos-sdk/simapp 50 5 TestAppImportExport
|
|
|
|
test_sim_app_simulation_after_import:
|
|
<<: *linux_defaults
|
|
parallelism: 1
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- go-mod-v1-{{ checksum "go.sum" }}
|
|
- run:
|
|
name: Test application import/export simulation
|
|
command: |
|
|
export GO111MODULE=on
|
|
/tmp/workspace/bin/runsim -j 4 github.com/cosmos/cosmos-sdk/simapp 50 5 TestAppSimulationAfterImport
|
|
|
|
test_sim_app_multi_seed_long:
|
|
<<: *linux_defaults
|
|
parallelism: 1
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- go-mod-v1-{{ checksum "go.sum" }}
|
|
- run:
|
|
name: Test multi-seed application simulation long
|
|
command: |
|
|
export GO111MODULE=on
|
|
/tmp/workspace/bin/runsim -j 4 github.com/cosmos/cosmos-sdk/simapp 500 50 TestFullAppSimulation
|
|
|
|
test_sim_app_multi_seed:
|
|
<<: *linux_defaults
|
|
parallelism: 1
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- go-mod-v1-{{ checksum "go.sum" }}
|
|
- run:
|
|
name: Test multi-seed application simulation short
|
|
command: |
|
|
export GO111MODULE=on
|
|
/tmp/workspace/bin/runsim -j 4 github.com/cosmos/cosmos-sdk/simapp 50 10 TestFullAppSimulation
|
|
|
|
test_cover:
|
|
<<: *linux_defaults
|
|
parallelism: 4
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- checkout
|
|
- run: mkdir -p /tmp/logs
|
|
- restore_cache:
|
|
keys:
|
|
- go-mod-v1-{{ checksum "go.sum" }}
|
|
- run:
|
|
name: Run tests
|
|
command: |
|
|
export VERSION="$(git describe --tags --long | sed 's/v\(.*\)/\1/')"
|
|
export GO111MODULE=on
|
|
for pkg in $(go list ./... | grep -v '/simulation' | circleci tests split --split-by=timings); do
|
|
id=$(echo "$pkg" | sed 's|[/.]|_|g')
|
|
go test -mod=readonly -timeout 8m -race -coverprofile=/tmp/workspace/profiles/$id.out -covermode=atomic -tags='ledger test_ledger_mock' "$pkg" | tee "/tmp/logs/$id-$RANDOM.log"
|
|
done
|
|
- persist_to_workspace:
|
|
root: /tmp/workspace
|
|
paths:
|
|
- "profiles/*"
|
|
- store_artifacts:
|
|
path: /tmp/logs
|
|
|
|
upload_coverage:
|
|
<<: *linux_defaults
|
|
parallelism: 1
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- checkout
|
|
- run:
|
|
name: gather
|
|
command: |
|
|
set -ex
|
|
|
|
echo "--> Concatenating profiles:"
|
|
ls /tmp/workspace/profiles/
|
|
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: filter out DONTCOVER
|
|
command: |
|
|
excludelist="$(find ./ -type f -name '*.go' | xargs grep -l 'DONTCOVER' | xargs realpath --relative-to=$GOPATH/src)"
|
|
for filename in ${excludelist}; do
|
|
echo "Excluding ${filename} ..."
|
|
sed -i "\%${filename}:%d" coverage.txt
|
|
done
|
|
- run:
|
|
name: upload
|
|
command: bash <(curl -s https://codecov.io/bash) -f coverage.txt
|
|
|
|
deploy_docs:
|
|
<<: *docs_deploy
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Trigger website build
|
|
command: |
|
|
curl --silent \
|
|
--show-error \
|
|
-X POST \
|
|
--header "Content-Type: application/json" \
|
|
-d "{\"branch\": \"$CIRCLE_BRANCH\"}" \
|
|
"https://circleci.com/api/v1.1/project/github/$CIRCLE_PROJECT_USERNAME/$WEBSITE_REPO_NAME/build?circle-token=$TENDERBOT_API_TOKEN" > response.json
|
|
|
|
RESULT=`jq -r '.status' response.json`
|
|
MESSAGE=`jq -r '.message' response.json`
|
|
|
|
if [[ ${RESULT} == "null" ]] || [[ ${RESULT} -ne "200" ]]; then
|
|
echo "CircleCI API call failed: $MESSAGE"
|
|
exit 1
|
|
else
|
|
echo "Website build started"
|
|
fi
|
|
|
|
check_statik:
|
|
<<: *linux_defaults
|
|
parallelism: 1
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- go-mod-v1-{{ checksum "go.sum" }}
|
|
- run:
|
|
name: check if statik.go is up-to-date
|
|
command: |
|
|
set -ex
|
|
export PATH=/tmp/workspace/bin:$PATH
|
|
|
|
make update-swagger-docs
|
|
if [ -n "$(git status --porcelain)" ]; then
|
|
echo "swagger docs out of sync";
|
|
exit 1
|
|
else
|
|
echo "swagger docs are in sync";
|
|
fi
|
|
|
|
workflows:
|
|
version: 2
|
|
test-suite:
|
|
jobs:
|
|
- check_statik:
|
|
requires:
|
|
- setup_dependencies
|
|
- deploy_docs:
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- develop
|
|
- setup_dependencies:
|
|
# filters here are needed to enable this job also for tags
|
|
filters:
|
|
tags:
|
|
only:
|
|
- /^v.*/
|
|
- test_sim_app_nondeterminism:
|
|
requires:
|
|
- setup_dependencies
|
|
- test_sim_app_fast:
|
|
requires:
|
|
- setup_dependencies
|
|
- test_sim_app_import_export:
|
|
requires:
|
|
- setup_dependencies
|
|
- test_sim_app_simulation_after_import:
|
|
requires:
|
|
- setup_dependencies
|
|
- test_sim_app_multi_seed:
|
|
requires:
|
|
- setup_dependencies
|
|
- test_sim_app_multi_seed_long:
|
|
requires:
|
|
- setup_dependencies
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- develop
|
|
- test_cover:
|
|
requires:
|
|
- setup_dependencies
|
|
- upload_coverage:
|
|
requires:
|
|
- test_cover
|