Simnet triggers and images (#2714)

* CI: new image for simnet

* CI: chore

* CI: separate image for collator

* dockerfile: it's bad upgrading in the images

* CI: correct links to Dockerfiles

* CI: right dotenv usage

* CI: workaround GitLab's bug that failed trigger status is not reported and 'job runs forever'

* CI: debug: need instead of rules to avoid the bug

* dockerfile: fix storage

* CI: workaround sending the status when the trigger is failed

* CI: fix needed job

* CI: edit comments

* CI: trigger simnet with API

* CI: triggering script

* CI: remove real-overseer

* CI: trigger real simnet
This commit is contained in:
Denis Pisarev
2021-04-14 11:31:46 +02:00
committed by GitHub
parent 0a66e4b853
commit 00812ac9bb
6 changed files with 201 additions and 52 deletions
+101 -45
View File
@@ -38,7 +38,7 @@ default:
when: on_success when: on_success
expire_in: 28 days expire_in: 28 days
paths: paths:
- artifacts/ - ./artifacts/
.kubernetes-env: &kubernetes-env .kubernetes-env: &kubernetes-env
tags: tags:
@@ -160,7 +160,7 @@ check-runtime-benchmarks:
sed -n -r 's/^polkadot ([0-9.]+.*-[0-9a-f]{7,13})-.*$/\1/p')"; 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)"; EXTRATAG="${CI_COMMIT_REF_NAME}-${EXTRATAG}-$(cut -c 1-8 ./artifacts/polkadot.sha256)";
fi fi
- echo "Polkadot version = ${VERSION} (EXTRATAG ${EXTRATAG})" - echo "Polkadot version = ${VERSION} (EXTRATAG = ${EXTRATAG})"
- echo -n ${VERSION} > ./artifacts/VERSION - echo -n ${VERSION} > ./artifacts/VERSION
- echo -n ${EXTRATAG} > ./artifacts/EXTRATAG - echo -n ${EXTRATAG} > ./artifacts/EXTRATAG
- cp -r scripts/docker/* ./artifacts - cp -r scripts/docker/* ./artifacts
@@ -170,22 +170,41 @@ build-linux-release:
<<: *collect-artifacts <<: *collect-artifacts
<<: *docker-env <<: *docker-env
<<: *compiler-info <<: *compiler-info
variables:
EXTRA_FLAGS: ""
rules: rules:
# extra features when building on `rococo-v1` branch and manual build on PRs - if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_REF_NAME == "rococo-v1" - if: $CI_COMMIT_REF_NAME == "master"
variables: - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
RUSTFLAGS: "-Cdebug-assertions=y"
- if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
variables: variables:
RUSTFLAGS: "-Cdebug-assertions=y" RUSTFLAGS: "-Cdebug-assertions=y"
- when: always - if: $CI_COMMIT_REF_NAME == "rococo-v1"
variables:
RUSTFLAGS: "-Cdebug-assertions=y"
script: script:
- time cargo build --release --verbose ${EXTRA_FLAGS} - time cargo build --release --verbose
- sccache -s - sccache -s
- *pack-artifacts - *pack-artifacts
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
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 #### stage: build
check-transaction-versions: check-transaction-versions:
@@ -213,12 +232,13 @@ generate-impl-guide:
script: script:
- mdbook build roadmap/implementers-guide - mdbook build roadmap/implementers-guide
.build-push-docker-image: &build-push-docker-image .build-push-image: &build-push-image
<<: *kubernetes-env <<: *kubernetes-env
image: quay.io/buildah/stable image: quay.io/buildah/stable
variables: variables:
GIT_STRATEGY: none GIT_STRATEGY: none
# DOCKERFILE: scripts/docker/Dockerfile # scripts/docker/Dockerfile
DOCKERFILE: Dockerfile
IMAGE_NAME: docker.io/parity/polkadot IMAGE_NAME: docker.io/parity/polkadot
DOCKER_USER: ${Docker_Hub_User_Parity} DOCKER_USER: ${Docker_Hub_User_Parity}
DOCKER_PASS: ${Docker_Hub_Pass_Parity} DOCKER_PASS: ${Docker_Hub_Pass_Parity}
@@ -236,54 +256,79 @@ generate-impl-guide:
--format=docker --format=docker
--build-arg VCS_REF="${CI_COMMIT_SHA}" --build-arg VCS_REF="${CI_COMMIT_SHA}"
--build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" --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:$VERSION"
--tag "$IMAGE_NAME:$EXTRATAG" . --tag "$IMAGE_NAME:$EXTRATAG"
--file ${DOCKERFILE} .
# The job will success only on the protected branch # The job will success only on the protected branch
- echo "$DOCKER_PASS" | - echo "$DOCKER_PASS" |
buildah login --username "$DOCKER_USER" --password-stdin docker.io buildah login --username "$DOCKER_USER" --password-stdin docker.io
- buildah info - buildah info
- buildah push --format=v2s2 "$IMAGE_NAME:$VERSION" - buildah push --format=v2s2 "$IMAGE_NAME:$VERSION"
- buildah push --format=v2s2 "$IMAGE_NAME:$EXTRATAG" - buildah push --format=v2s2 "$IMAGE_NAME:$EXTRATAG"
# pass artifacts to the trigget-simnet job
# this twist is to match the similar logic in substrate
- echo "IMAGE_NAME=${IMAGE_NAME}" > build.env
- echo "VERSION=${EXTRATAG}" >> build.env
after_script: after_script:
- buildah logout "$IMAGE_NAME" - 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: artifacts:
reports: reports:
# this artifact is used in trigger-simnet job # this artifact is used in trigger-simnet job
# https://docs.gitlab.com/ee/ci/multi_project_pipelines.html#with-variable-inheritance # https://docs.gitlab.com/ee/ci/multi_project_pipelines.html#with-variable-inheritance
dotenv: artifacts/build.env dotenv: ./artifacts/build.env
publish-polkadot-image:
publish-dockerhub:
stage: build stage: build
<<: *build-push-docker-image <<: *build-push-image
rules: rules:
# Don't run on releases - this is handled by the Github Action here: # Don't run on releases - this is handled by the Github Action here:
# .github/workflows/publish-docker-release.yml # .github/workflows/publish-docker-release.yml
- if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
when: never when: never
- if: $CI_COMMIT_REF_NAME == "rococo-v1" - if: $CI_PIPELINE_SOURCE == "schedule"
variables: - if: $CI_COMMIT_REF_NAME == "master"
IMAGE_NAME: docker.io/parity/rococo
- if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
variables: variables:
# image to be tested with Simnet
IMAGE_NAME: docker.io/paritypr/synth-wave IMAGE_NAME: docker.io/paritypr/synth-wave
DOCKER_USER: ${PARITYPR_USER} DOCKER_USER: ${PARITYPR_USER}
DOCKER_PASS: ${PARITYPR_PASS} DOCKER_PASS: ${PARITYPR_PASS}
- if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_REF_NAME == "rococo-v1"
- if: $CI_PIPELINE_SOURCE == "web" variables:
- if: $CI_COMMIT_REF_NAME == "master" IMAGE_NAME: docker.io/parity/rococo
needs: needs:
- job: build-linux-release - job: build-linux-release
artifacts: true artifacts: true
publish-adder-collator-image:
# service image for Simnet
stage: build
<<: *build-push-image
variables:
# scripts/docker/collator.Dockerfile
DOCKERFILE: collator.Dockerfile
IMAGE_NAME: docker.io/paritypr/colander
DOCKER_USER: ${PARITYPR_USER}
DOCKER_PASS: ${PARITYPR_PASS}
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_REF_NAME == "master"
# FIXME: remove me after merging
- if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
needs:
- job: build-adder-collator
artifacts: true
after_script:
- buildah logout "$IMAGE_NAME"
# pass artifacts to the trigger-simnet job
- 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 #### stage: publish
publish-s3-release: publish-s3-release: &publish-s3
stage: publish stage: publish
needs: needs:
- job: build-linux-release - job: build-linux-release
@@ -295,10 +340,6 @@ publish-s3-release:
BUCKET: "releases.parity.io" BUCKET: "releases.parity.io"
PREFIX: "polkadot/${ARCH}-${DOCKER_OS}" PREFIX: "polkadot/${ARCH}-${DOCKER_OS}"
rules: rules:
- if: $CI_COMMIT_REF_NAME == "rococo-v1"
variables:
PREFIX: "rococo/${ARCH}-${DOCKER_OS}"
- if: $CI_PIPELINE_SOURCE == "web"
- if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_REF_NAME == "master" - 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 =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
@@ -327,6 +368,14 @@ publish-s3-release:
- aws s3 ls s3://${BUCKET}/${PREFIX}/${EXTRATAG}/ - aws s3 ls s3://${BUCKET}/${PREFIX}/${EXTRATAG}/
--recursive --human-readable --summarize --recursive --human-readable --summarize
publish-s3-adder-collator:
<<: *publish-s3
variables:
PREFIX: "rococo/${ARCH}-${DOCKER_OS}"
needs:
- job: build-adder-collator
artifacts: true
#### stage: deploy #### stage: deploy
deploy-polkasync-kusama: deploy-polkasync-kusama:
@@ -335,29 +384,36 @@ deploy-polkasync-kusama:
# former .rules-build # former .rules-build
- if: $CI_COMMIT_REF_NAME == "rococo-v1" - if: $CI_COMMIT_REF_NAME == "rococo-v1"
when: never when: never
- if: $CI_PIPELINE_SOURCE == "web"
- if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_REF_NAME == "master" - if: $CI_COMMIT_REF_NAME == "master"
- if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
variables: variables:
POLKADOT_CI_COMMIT_NAME: "${CI_COMMIT_REF_NAME}" POLKADOT_CI_COMMIT_NAME: "${CI_COMMIT_REF_NAME}"
POLKADOT_CI_COMMIT_REF: "${CI_COMMIT_REF}" POLKADOT_CI_COMMIT_REF: "${CI_COMMIT_SHORT_SHA}"
allow_failure: true allow_failure: true
trigger: "parity/infrastructure/parity-testnet" trigger: "parity/infrastructure/parity-testnet"
trigger-simnet: trigger-simnet:
stage: deploy stage: deploy
<<: *rules-test 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: needs:
- job: publish-dockerhub - job: publish-polkadot-image
# `build.env` is taken by the triggered job from `publish-dockerhub` job with an - job: publish-adder-collator-image
# exact `$VERSION` (`$EXTRATAG` here, i.e. `2643-0.8.29-5f689e0a-6b24dc54`) # `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 # Simnet uses an image published on PRs with this exact version for triggered runs
# on commits. And parity/rococo:rococo-v1 for runs not launched by this job. # on commits. And parity/rococo:rococo-v1 for the runs not launched by this job.
trigger:
project: parity/simnet
branch: master
strategy: depend
variables: variables:
TRGR_PROJECT: ${CI_PROJECT_NAME} TRGR_PROJECT: ${CI_PROJECT_NAME}
TRGR_REF: ${CI_COMMIT_REF_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
@@ -12,6 +12,7 @@
- [Runtime Architecture](runtime/README.md) - [Runtime Architecture](runtime/README.md)
- [Initializer Module](runtime/initializer.md) - [Initializer Module](runtime/initializer.md)
- [Configuration Module](runtime/configuration.md) - [Configuration Module](runtime/configuration.md)
- [Shared](runtime/shared.md)
- [Disputes Module](runtime/disputes.md) - [Disputes Module](runtime/disputes.md)
- [Paras Module](runtime/paras.md) - [Paras Module](runtime/paras.md)
- [Scheduler Module](runtime/scheduler.md) - [Scheduler Module](runtime/scheduler.md)
@@ -30,7 +30,7 @@ The other parachains modules are initialized in this order:
1. UMP 1. UMP
1. HRMP 1. HRMP
The [Configuration Module](configuration.md) is first, since all other modules need to operate under the same configuration as each other. Then the [Shared][shared.md] module is invoked, which determines the set of active validators. It would lead to inconsistency if, for example, the scheduler ran first and then the configuration was updated before the Inclusion module. The [Configuration Module](configuration.md) is first, since all other modules need to operate under the same configuration as each other. Then the [Shared](shared.md) module is invoked, which determines the set of active validators. It would lead to inconsistency if, for example, the scheduler ran first and then the configuration was updated before the Inclusion module.
Set `HasInitialized` to true. Set `HasInitialized` to true.
+2 -3
View File
@@ -3,10 +3,11 @@ FROM debian:buster-slim
# metadata # metadata
ARG VCS_REF ARG VCS_REF
ARG BUILD_DATE ARG BUILD_DATE
ARG IMAGE_NAME
LABEL io.parity.image.authors="devops-team@parity.io" \ LABEL io.parity.image.authors="devops-team@parity.io" \
io.parity.image.vendor="Parity Technologies" \ io.parity.image.vendor="Parity Technologies" \
io.parity.image.title="parity/polkadot" \ io.parity.image.title="${IMAGE_NAME}" \
io.parity.image.description="polkadot: a platform for web3" \ io.parity.image.description="polkadot: a platform for web3" \
io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/Dockerfile" \ io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/Dockerfile" \
io.parity.image.revision="${VCS_REF}" \ io.parity.image.revision="${VCS_REF}" \
@@ -18,7 +19,6 @@ ENV RUST_BACKTRACE 1
# install tools and dependencies # install tools and dependencies
RUN apt-get update && \ RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade -y && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \ DEBIAN_FRONTEND=noninteractive apt-get install -y \
libssl1.1 \ libssl1.1 \
ca-certificates \ ca-certificates \
@@ -45,4 +45,3 @@ EXPOSE 30333 9933 9944
VOLUME ["/polkadot"] VOLUME ["/polkadot"]
ENTRYPOINT ["/usr/local/bin/polkadot"] ENTRYPOINT ["/usr/local/bin/polkadot"]
@@ -0,0 +1,47 @@
FROM debian:buster-slim
# metadata
ARG VCS_REF
ARG BUILD_DATE
ARG IMAGE_NAME
LABEL io.parity.image.authors="devops-team@parity.io" \
io.parity.image.vendor="Parity Technologies" \
io.parity.image.title="${IMAGE_NAME}" \
io.parity.image.description="polkadot: a platform for web3" \
io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/Dockerfile" \
io.parity.image.revision="${VCS_REF}" \
io.parity.image.created="${BUILD_DATE}" \
io.parity.image.documentation="https://github.com/paritytech/polkadot/"
# show backtraces
ENV RUST_BACKTRACE 1
# install tools and dependencies
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
libssl1.1 \
ca-certificates \
curl && \
# apt cleanup
apt-get autoremove -y && \
apt-get clean && \
find /var/lib/apt/lists/ -type f -not -name lock -delete; \
# add user and link ~/.local/share/adder-collator to /data
useradd -m -u 1000 -U -s /bin/sh -d /adder-collator adder-collator && \
mkdir -p /data /adder-collator/.local/share && \
chown -R adder-collator:adder-collator /data && \
ln -s /data /adder-collator/.local/share/polkadot
# add adder-collator binary to docker image
COPY ./adder-collator /usr/local/bin
USER adder-collator
# check if executable works in this container
RUN /usr/local/bin/adder-collator --version
EXPOSE 30333 9933 9944
VOLUME ["/adder-collator"]
ENTRYPOINT ["/usr/local/bin/adder-collator"]
+46
View File
@@ -0,0 +1,46 @@
#!/bin/bash
set -eu
# API trigger another project's pipeline
curl --silent \
-X POST \
-F "token=${CI_JOB_TOKEN}" \
-F "ref=master" \
-F "variables[TRGR_PROJECT]=${TRGR_PROJECT}" \
-F "variables[TRGR_REF]=${TRGR_REF}" \
-F "variables[IMAGE_NAME]=${IMAGE_NAME}" \
-F "variables[IMAGE_TAG]=${IMAGE_TAG}" \
-F "variables[COLLATOR_IMAGE_TAG]=${COLLATOR_IMAGE_TAG}" \
"https://${CI_SERVER_HOST}/api/v4/projects/${DWNSTRM_ID}/trigger/pipeline" | \
tee pipeline
PIPELINE_ID=$(cat pipeline | jq ".id")
echo "\nWaiting on ${PIPELINE_ID} status..."
# This part polls for the triggered pipeline status, the native
# `trigger` job does not return this status via API.
# This is a workaround for a Gitlab bug, waits here until
# https://gitlab.com/gitlab-org/gitlab/-/issues/326137 gets fixed.
# The timeout is 360 curls with 8 sec interval, roughly an hour.
function get_status() {
curl --silent \
--header "PRIVATE-TOKEN: ${PIPELINE_TOKEN}" \
"https://${CI_SERVER_HOST}/api/v4/projects/${DWNSTRM_ID}/pipelines/${PIPELINE_ID}" | \
jq --raw-output ".status";
}
for i in $(seq 1 360); do
STATUS=$(get_status);
echo "Triggered pipeline status is ${STATUS}";
if [[ ${STATUS} =~ ^(pending|running|created)$ ]]; then
echo "Busy...";
elif [[ ${STATUS} =~ ^(failed|canceled|skipped|manual)$ ]]; then
exit 1;
elif [[ ${STATUS} =~ ^(success)$ ]]; then
exit 0;
else
exit 1;
fi
sleep 8;
done