Files
pezkuwi-subxt/polkadot/.gitlab-ci.yml
T
Benjamin Kampmann 1b8211dd4f CI Regression Test for determinism of our wasm runtimes (#1372)
* deterministic build check runtime

* fix yaml

* Apply suggestions from code review

Co-authored-by: s3krit <pugh@s3kr.it>

* Update cargo.lock

Co-authored-by: s3krit <pugh@s3kr.it>
2020-07-20 10:56:28 +02:00

311 lines
11 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# .gitlab-ci.yml
#
# polkadot
#
# pipelines can be triggered manually in the web
# setting DEPLOY_TAG will only deploy the tagged image
stages:
- test
- build
- publish
- deploy
image: paritytech/ci-linux:production
variables:
GIT_STRATEGY: fetch
GIT_DEPTH: 100
CI_SERVER_NAME: "GitLab CI"
DOCKER_OS: "debian:stretch"
ARCH: "x86_64"
.collect-artifacts: &collect-artifacts
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
when: on_success
expire_in: 28 days
paths:
- artifacts/
.kubernetes-env: &kubernetes-env
tags:
- kubernetes-parity-build
environment:
name: parity-build
.docker-env: &docker-env
retry:
max: 2
when:
- runner_system_failure
- unknown_failure
- api_failure
interruptible: true
dependencies: []
tags:
- linux-docker
.compiler_info: &compiler_info
before_script:
- rustup show
- cargo --version
- sccache -s
.build-refs: &build-refs
only:
- master
- schedules
- web
- /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
.test-refs: &test-refs
only:
- master
- schedules
- web
- /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
- /^[0-9]+$/
#### stage: test
check-runtime:
stage: test
image: paritytech/tools:latest
<<: *kubernetes-env
only:
- /^[0-9]+$/
variables:
GITLAB_API: "https://gitlab.parity.io/api/v4"
GITHUB_API_PROJECT: "parity%2Finfrastructure%2Fgithub-api"
script:
- ./scripts/gitlab/check_runtime.sh
interruptible: true
allow_failure: true
check-line-width:
stage: test
image: paritytech/tools:latest
<<: *kubernetes-env
only:
- /^[0-9]+$/
script:
- ./scripts/gitlab/check_line_width.sh
interruptible: true
allow_failure: true
publish-draft-release:
stage: test
only:
- tags
- /^v[0-9]+\.[0-9]+\.[0-9]+.*$/ # i.e. v1.0.1, v2.1.0rc1
script:
- apt-get -y update; apt-get -y install jq
- ./scripts/gitlab/publish_draft_release.sh
interruptible: true
allow_failure: true
test-deterministic-wasm:
stage: test
<<: *docker-env
except:
script:
# build runtime
- WASM_BUILD_NO_COLOR=1 cargo build --verbose --release -p kusama-runtime -p polkadot-runtime -p westend-runtime
# make checksum
- sha256sum target/release/wbuild/target/wasm32-unknown-unknown/release/*.wasm > checksum.sha256
# clean up FIXME: can we reuse some of the artifacts?
- cargo clean
# build again
- WASM_BUILD_NO_COLOR=1 cargo build --verbose --release -p kusama-runtime -p polkadot-runtime -p westend-runtime
# confirm checksum
- sha256sum -c checksum.sha256
test-linux-stable: &test
stage: test
<<: *test-refs
<<: *docker-env
<<: *compiler_info
variables:
RUST_TOOLCHAIN: stable
# Enable debug assertions since we are running optimized builds for testing
# but still want to have debug assertions.
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
TARGET: native
script:
- time cargo test --all --release --verbose --locked --features runtime-benchmarks
- sccache -s
check-web-wasm: &test
stage: test
<<: *test-refs
<<: *docker-env
<<: *compiler_info
script:
# WASM support is in progress. As more and more crates support WASM, we
# should add entries here. See https://github.com/paritytech/polkadot/issues/625
- time cargo build --locked --target=wasm32-unknown-unknown --manifest-path runtime/polkadot/Cargo.toml
- time cargo build --locked --target=wasm32-unknown-unknown --manifest-path runtime/kusama/Cargo.toml
- time cargo build --locked --target=wasm32-unknown-unknown --manifest-path erasure-coding/Cargo.toml
- time cargo build --locked --target=wasm32-unknown-unknown --manifest-path parachain/Cargo.toml
- time cargo build --locked --target=wasm32-unknown-unknown --manifest-path primitives/Cargo.toml
- time cargo build --locked --target=wasm32-unknown-unknown --manifest-path rpc/Cargo.toml
- time cargo build --locked --target=wasm32-unknown-unknown --manifest-path statement-table/Cargo.toml
- time cargo build --locked --target=wasm32-unknown-unknown --manifest-path cli/Cargo.toml --no-default-features --features browser
- sccache -s
check-runtime-benchmarks: &test
stage: test
<<: *test-refs
<<: *docker-env
<<: *compiler_info
script:
# Check that the node will compile with `runtime-benchmarks` feature flag.
- time cargo check --features runtime-benchmarks
- sccache -s
build-wasm-release:
stage: build
<<: *collect-artifacts
<<: *docker-env
<<: *compiler_info
# Note: We likely only want to do this for tagged releases, hence the 'only:'
only:
- /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
script:
- time wasm-pack build --target web --out-dir wasm --release cli -- --no-default-features --features browser
- mkdir -p ./artifacts/wasm
- cd ./cli/wasm/
- for f in polkadot_cli*; do sha256sum "${f}" > "${f}.sha256"; done
- mv ./polkadot_cli* ../../artifacts/wasm/.
build-linux-release: &build
stage: build
<<: *collect-artifacts
<<: *build-refs
<<: *docker-env
<<: *compiler_info
script:
- time cargo build --release --verbose
- mkdir -p ./artifacts
- mv ./target/release/polkadot ./artifacts/.
- sha256sum ./artifacts/polkadot | tee ./artifacts/polkadot.sha256
- VERSION="${CI_COMMIT_REF_NAME}" # will be tag or branch name
- if [ "${CI_COMMIT_TAG}" ]; then
EXTRATAG="latest";
else
EXTRATAG="$(./artifacts/polkadot --version |
sed -n -r 's/^polkadot ([0-9.]+.*-[0-9a-f]{7,13})-.*$/\1/p')";
EXTRATAG="${CI_COMMIT_REF_NAME}-${EXTRATAG}-$(cut -c 1-8 ./artifacts/polkadot.sha256)";
fi
- echo "Polkadot version = ${VERSION} (EXTRATAG ${EXTRATAG})"
- echo -n ${VERSION} > ./artifacts/VERSION
- echo -n ${EXTRATAG} > ./artifacts/EXTRATAG
- cp -r scripts/docker/* ./artifacts
- sccache -s
generate-impl-guide:
stage: build
image:
name: michaelfbryan/mdbook-docker-image:latest
entrypoint: [""]
script:
- mdbook build roadmap/implementers-guide
.publish-build: &publish-build
stage: publish
dependencies:
- build-linux-release
- build-wasm-release
cache: {}
<<: *build-refs
<<: *kubernetes-env
before_script:
- test -s ./artifacts/VERSION || exit 1
- test -s ./artifacts/EXTRATAG || exit 1
- VERSION="$(cat ./artifacts/VERSION)"
- EXTRATAG="$(cat ./artifacts/EXTRATAG)"
- echo "Polkadot version = ${VERSION} (EXTRATAG ${EXTRATAG})"
publish-docker-release:
<<: *publish-build
image: docker:stable
services:
- docker:dind
<<: *collect-artifacts
variables:
DOCKER_HOST: tcp://localhost:2375
DOCKER_DRIVER: overlay2
GIT_STRATEGY: none
# DOCKERFILE: scripts/docker/Dockerfile
CONTAINER_IMAGE: parity/polkadot
script:
- test "$Docker_Hub_User_Parity" -a "$Docker_Hub_Pass_Parity"
|| ( echo "no docker credentials provided"; exit 1 )
- docker login -u "$Docker_Hub_User_Parity" -p "$Docker_Hub_Pass_Parity"
- docker info
- cd ./artifacts
- docker build
--build-arg VCS_REF="${CI_COMMIT_SHA}"
--build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
--tag $CONTAINER_IMAGE:$VERSION
--tag $CONTAINER_IMAGE:$EXTRATAG .
- docker push $CONTAINER_IMAGE:$VERSION
- docker push $CONTAINER_IMAGE:$EXTRATAG
after_script:
- docker logout
# only VERSION information is needed for the deployment
- find ./artifacts/ -depth -not -name VERSION -not -name artifacts -delete
publish-s3-release:
<<: *publish-build
image: paritytech/awscli:latest
variables:
GIT_STRATEGY: none
BUCKET: "releases.parity.io"
PREFIX: "polkadot/${ARCH}-${DOCKER_OS}"
script:
- echo "uploading objects to https://${BUCKET}/${PREFIX}/${VERSION}"
- aws s3 sync ./artifacts/ s3://${BUCKET}/${PREFIX}/${VERSION}/
- echo "update objects at https://${BUCKET}/${PREFIX}/${EXTRATAG}"
- find ./artifacts -type f | while read file; do
name="${file#./artifacts/}";
aws s3api copy-object
--copy-source ${BUCKET}/${PREFIX}/${VERSION}/${name}
--bucket ${BUCKET} --key ${PREFIX}/${EXTRATAG}/${name};
done
- |
cat <<-EOM
|
| polkadot binary paths:
|
| - https://${BUCKET}/${PREFIX}/${EXTRATAG}/polkadot
| - https://${BUCKET}/${PREFIX}/${VERSION}/polkadot
|
EOM
after_script:
- aws s3 ls s3://${BUCKET}/${PREFIX}/${EXTRATAG}/
--recursive --human-readable --summarize
deploy-polkasync-kusama:
stage: deploy
<<: *build-refs
variables:
POLKADOT_CI_COMMIT_NAME: "${CI_COMMIT_REF_NAME}"
POLKADOT_CI_COMMIT_REF: "${CI_COMMIT_REF}"
allow_failure: true
trigger: "parity/infrastructure/parity-testnet"
#### stage: .post
check-labels:
stage: .post
image: paritytech/tools:latest
<<: *kubernetes-env
only:
- /^[0-9]+$/
script:
- ./scripts/gitlab/check_labels.sh