# .gitlab-ci.yml # # polkadot # # pipelines can be triggered manually in the web # setting DEPLOY_TAG will only deploy the tagged image # # please do not add new jobs without "rules:" and "*-env". There are &rules-test for everything, # &rules-pr-only preset. And "kubernetes-env" with "docker-env" to set a runner # which executes the job. stages: - test - build - publish - deploy image: paritytech/ci-linux:production workflow: rules: - if: $CI_COMMIT_TAG - if: $CI_COMMIT_BRANCH variables: GIT_STRATEGY: fetch GIT_DEPTH: 100 CI_SERVER_NAME: "GitLab CI" DOCKER_OS: "debian:stretch" ARCH: "x86_64" default: cache: {} .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 interruptible: true .docker-env: &docker-env retry: max: 2 when: - runner_system_failure - unknown_failure - api_failure interruptible: true tags: - linux-docker .compiler-info: &compiler-info before_script: - rustup show - cargo --version - sccache -s .rules-test: &rules-test # these jobs run always* rules: - if: $CI_COMMIT_REF_NAME == "rococo-v1" when: never - when: always .pr-only: &rules-pr-only # these jobs run only on PRs rules: - if: $CI_COMMIT_REF_NAME == "rococo-v1" when: never - if: $CI_PIPELINE_SOURCE == "schedule" when: never - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs #### stage: test check-runtime: stage: test image: paritytech/tools:latest <<: *kubernetes-env <<: *rules-pr-only variables: GITLAB_API: "https://gitlab.parity.io/api/v4" GITHUB_API_PROJECT: "parity%2Finfrastructure%2Fgithub-api" script: - ./scripts/gitlab/check_runtime.sh allow_failure: true check-line-width: stage: test image: paritytech/tools:latest <<: *kubernetes-env <<: *rules-pr-only script: - ./scripts/gitlab/check_line_width.sh allow_failure: true test-deterministic-wasm: stage: test <<: *rules-test <<: *docker-env <<: *compiler-info script: - ./scripts/gitlab/test_deterministic_wasm.sh test-build-linux-stable: stage: test <<: *docker-env <<: *compiler-info <<: *collect-artifacts 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" rules: - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_REF_NAME == "master" - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - if: $CI_COMMIT_REF_NAME == "rococo-v1" script: - ./scripts/gitlab/test_linux_stable.sh # we're using the bin built here, instead of having a parallel `build-linux-release` - time cargo build --release --verbose --bin polkadot - sccache -s # pack-artifacts - mkdir -p ./artifacts - VERSION="${CI_COMMIT_REF_NAME}" # will be tag or branch name - mv ./target/release/polkadot ./artifacts/. - sha256sum ./artifacts/polkadot | tee ./artifacts/polkadot.sha256 - 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)" - echo "Polkadot version = ${VERSION} (EXTRATAG = ${EXTRATAG})" - echo -n ${VERSION} > ./artifacts/VERSION - echo -n ${EXTRATAG} > ./artifacts/EXTRATAG - cp -r scripts/docker/* ./artifacts check-web-wasm: stage: test <<: *rules-test <<: *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 - ./scripts/gitlab/check_web_wasm.sh - sccache -s check-runtime-benchmarks: stage: test <<: *rules-test <<: *docker-env <<: *compiler-info script: # Check that the node will compile with `runtime-benchmarks` feature flag. - ./scripts/gitlab/check_runtime_benchmarks.sh - sccache -s build-adder-collator: stage: test <<: *collect-artifacts <<: *docker-env <<: *compiler-info rules: - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_REF_NAME == "master" - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - if: $CI_COMMIT_REF_NAME == "rococo-v1" script: - time cargo build --release --verbose -p test-parachain-adder-collator - sccache -s # pack artifacts - mkdir -p ./artifacts - mv ./target/release/adder-collator ./artifacts/. - echo -n "${CI_COMMIT_REF_NAME}" > ./artifacts/VERSION - echo -n "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" > ./artifacts/EXTRATAG - echo "adder-collator version = $(cat ./artifacts/VERSION) (EXTRATAG = $(cat ./artifacts/EXTRATAG))" - cp -r scripts/docker/* ./artifacts #### stage: build check-transaction-versions: image: node:15 stage: build <<: *rules-test <<: *docker-env needs: - job: test-build-linux-stable artifacts: true before_script: - apt-get -y update; apt-get -y install jq lsof - npm install --ignore-scripts -g @polkadot/metadata-cmp - git fetch origin release script: - scripts/gitlab/check_extrinsics_ordering.sh generate-impl-guide: stage: build <<: *rules-test <<: *docker-env image: name: michaelfbryan/mdbook-docker-image:v0.4.4 entrypoint: [""] script: - mdbook build roadmap/implementers-guide .build-push-image: &build-push-image <<: *kubernetes-env image: quay.io/buildah/stable variables: &image-variables GIT_STRATEGY: none DOCKER_USER: ${PARITYPR_USER} DOCKER_PASS: ${PARITYPR_PASS} before_script: &check-versions - 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})" script: - test "$DOCKER_USER" -a "$DOCKER_PASS" || ( echo "no docker credentials provided"; exit 1 ) - cd ./artifacts - buildah bud --format=docker --build-arg VCS_REF="${CI_COMMIT_SHA}" --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" --build-arg IMAGE_NAME="${IMAGE_NAME}" --tag "$IMAGE_NAME:$VERSION" --tag "$IMAGE_NAME:$EXTRATAG" --file ${DOCKERFILE} . # The job will success only on the protected branch - echo "$DOCKER_PASS" | buildah login --username "$DOCKER_USER" --password-stdin docker.io - buildah info - buildah push --format=v2s2 "$IMAGE_NAME:$VERSION" - buildah push --format=v2s2 "$IMAGE_NAME:$EXTRATAG" after_script: - buildah logout "$IMAGE_NAME" # pass artifacts to the trigger-simnet job - echo "IMAGE_NAME=${IMAGE_NAME}" > ./artifacts/build.env - echo "IMAGE_TAG=$(cat ./artifacts/EXTRATAG)" >> ./artifacts/build.env artifacts: reports: # this artifact is used in trigger-simnet job # https://docs.gitlab.com/ee/ci/multi_project_pipelines.html#with-variable-inheritance dotenv: ./artifacts/build.env publish-polkadot-image: stage: build <<: *build-push-image # variables: # <<: *image-variables # # scripts/docker/Dockerfile # DOCKERFILE: Dockerfile # IMAGE_NAME: docker.io/paritypr/synth-wave rules: # Don't run on releases - this is handled by the Github Action here: # .github/workflows/publish-docker-release.yml # - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 # when: never # - if: $CI_PIPELINE_SOURCE == "schedule" # - if: $CI_COMMIT_REF_NAME == "master" # - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - if: $CI_COMMIT_REF_NAME == "rococo-v1" variables: <<: *image-variables IMAGE_NAME: docker.io/parity/rococo DOCKER_USER: ${Docker_Hub_User_Parity} DOCKER_PASS: ${Docker_Hub_Pass_Parity} needs: - job: test-build-linux-stable artifacts: true # publish-adder-collator-image: # # service image for Simnet # stage: build # <<: *build-push-image # variables: # <<: *image-variables # # scripts/docker/collator.Dockerfile # DOCKERFILE: collator.Dockerfile # IMAGE_NAME: docker.io/paritypr/colander # rules: # - if: $CI_PIPELINE_SOURCE == "schedule" # - if: $CI_COMMIT_REF_NAME == "master" # - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs # - if: $CI_COMMIT_REF_NAME == "rococo-v1" # needs: # - job: build-adder-collator # artifacts: true # after_script: # - buildah logout "$IMAGE_NAME" # # pass artifacts to the trigger-simnet job # - echo "COLLATOR_IMAGE=$IMAGE_NAME" > ./artifacts/collator.env # - echo "COLLATOR_IMAGE_TAG=$(cat ./artifacts/EXTRATAG)" >> ./artifacts/collator.env # artifacts: # reports: # # this artifact is used in trigger-simnet job # dotenv: ./artifacts/collator.env #### stage: publish publish-s3-release: &publish-s3 stage: publish needs: - job: test-build-linux-stable artifacts: true <<: *kubernetes-env image: paritytech/awscli:latest variables: GIT_STRATEGY: none PREFIX: "builds/polkadot/${ARCH}-${DOCKER_OS}" rules: # publishing binaries nightly - if: $CI_PIPELINE_SOURCE == "schedule" before_script: - *check-versions script: - echo "uploading objects to https://releases.parity.io/${PREFIX}/${VERSION}" - aws s3 sync --acl public-read ./artifacts/ s3://${AWS_BUCKET}/${PREFIX}/${VERSION}/ - echo "update objects at https://releases.parity.io/${PREFIX}/${EXTRATAG}" - find ./artifacts -type f | while read file; do name="${file#./artifacts/}"; aws s3api copy-object --copy-source ${AWS_BUCKET}/${PREFIX}/${VERSION}/${name} --bucket ${AWS_BUCKET} --key ${PREFIX}/${EXTRATAG}/${name}; done - | cat <<-EOM | | polkadot binary paths: | | - https://releases.parity.io/${PREFIX}/${EXTRATAG}/polkadot | - https://releases.parity.io/${PREFIX}/${VERSION}/polkadot | EOM after_script: - aws s3 ls s3://${AWS_BUCKET}/${PREFIX}/${EXTRATAG}/ --recursive --human-readable --summarize #### stage: deploy deploy-polkasync-kusama: stage: deploy rules: # former .rules-build - if: $CI_COMMIT_REF_NAME == "rococo-v1" when: never - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_REF_NAME == "master" variables: POLKADOT_CI_COMMIT_NAME: "${CI_COMMIT_REF_NAME}" POLKADOT_CI_COMMIT_REF: "${CI_COMMIT_SHORT_SHA}" allow_failure: true trigger: "parity/infrastructure/parity-testnet" # trigger-simnet: # stage: deploy # image: paritytech/tools:latest # rules: # - if: $CI_PIPELINE_SOURCE == "schedule" # - if: $CI_COMMIT_REF_NAME == "master" # - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs # - if: $CI_COMMIT_REF_NAME == "rococo-v1" # needs: # - job: publish-polkadot-image # - job: publish-adder-collator-image # # `build.env` brings here `$IMAGE_NAME` and `$IMAGE_TAG` (`$EXTRATAG` here, # # i.e. `2643-0.8.29-5f689e0a-6b24dc54`). # # `collator.env` bears adder-collator unique build tag. In non-triggered builds it # # can be called by `master` tag. # # Simnet uses an image published on PRs with this exact version for triggered runs # # on commits. And parity/rococo:rococo-v1 for the runs not launched by this job. # variables: # TRGR_PROJECT: ${CI_PROJECT_NAME} # TRGR_REF: ${CI_COMMIT_REF_NAME} # # simnet project ID # DWNSTRM_ID: 332 # script: # # API trigger for a simnet job # - ./scripts/gitlab/trigger_pipeline.sh # allow_failure: true