Skip to content
This repository has been archived by the owner on May 22, 2023. It is now read-only.

Commit

Permalink
Merge pull request #152 from Cerebellum-Network/feature/update-to-pol…
Browse files Browse the repository at this point in the history
…kadot-v0-9-5

Feature/update to polkadot v0 9 5
  • Loading branch information
MRamanenkau authored Dec 1, 2022
2 parents f0768b5 + 9fe4366 commit 7d479fc
Show file tree
Hide file tree
Showing 262 changed files with 7,782 additions and 3,440 deletions.
11 changes: 7 additions & 4 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,7 @@ test-frame-examples-compile-to-wasm:

test-linux-stable-int:
<<: *test-linux
stage: test
script:
- echo "___Logs will be partly shown at the end in case of failure.___"
- echo "___Full log will be saved to the job artifacts only in case of failure.___"
Expand Down Expand Up @@ -567,9 +568,11 @@ build-rust-doc:
- buildah push --format=v2s2 "$IMAGE_NAME:latest"
after_script:
- buildah logout "$IMAGE_NAME"
# pass artifacts to the trigger-simnet job
- echo "IMAGE_NAME=${IMAGE_NAME}" > ./artifacts/$PRODUCT/build.env
- echo "IMAGE_TAG=${VERSION}" >> ./artifacts/$PRODUCT/build.env
# pass artifacts to the trigger-simnet job
- echo "IMAGE_NAME=${IMAGE_NAME}" | tee -a ./artifacts/$PRODUCT/build.env
- IMAGE_TAG="$(cat ./artifacts/$PRODUCT/VERSION)"
- echo "IMAGE_TAG=${IMAGE_TAG}" | tee -a ./artifacts/$PRODUCT/build.env
- cat ./artifacts/$PRODUCT/build.env

publish-docker-substrate:
stage: publish
Expand Down Expand Up @@ -708,4 +711,4 @@ trigger-simnet:
DWNSTRM_ID: 332
script:
# API trigger for a simnet job
- .maintain/gitlab/trigger_pipeline.sh
- .maintain/gitlab/trigger_pipeline.sh --simnet-version=${SIMNET_REF}
230 changes: 190 additions & 40 deletions .maintain/gitlab/trigger_pipeline.sh
Original file line number Diff line number Diff line change
@@ -1,30 +1,181 @@
#!/bin/bash

set -eu

# API trigger another project's pipeline
echo "Triggering Simnet pipeline."

curl --silent \
-X POST \
-F "token=${CI_JOB_TOKEN}" \
-F "ref=v3" `# trigger the pinned version of simnet CI config` \
-F "variables[TRGR_PROJECT]=${TRGR_PROJECT}" \
-F "variables[TRGR_REF]=${TRGR_REF}" \
-F "variables[IMAGE_NAME]=${IMAGE_NAME}" \
-F "variables[IMAGE_TAG]=${IMAGE_TAG}" \
"https://${CI_SERVER_HOST}/api/v4/projects/${DWNSTRM_ID}/trigger/pipeline" | \
tee pipeline

PIPELINE_ID=$(cat pipeline | jq ".id")
PIPELINE_URL=$(cat pipeline | jq ".web_url")
echo
echo "Simnet pipeline ${PIPELINE_URL} was successfully triggered."
echo "Now we're polling it to obtain the distinguished status."

# 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.
set -eou pipefail

# This script is to trigger Simnet pipeline.
# See help article for more details.

SCRIPT_NAME="$0"
SCRIPT_PATH=$(dirname "$0") # relative
SCRIPT_PATH=$(cd "${SCRIPT_PATH}" && pwd) # absolutized and normalized
SIMNET_VERSION=""

function usage {
cat << EOF
This script is to trigger Simnet pipeline.
It's designed to be launched locally and from CI.
The required argumants for both cases are listed below.
Usage: ${SCRIPT_NAME} OPTION
OPTIONS
-h, --help Print this help message.
Mandatory in both cases:
-s, --simnet-version Simnet version to trigger.
E.g.: v4
-u, --upstream-project Triggering project.
E.g.: substrate
-r, --upstream-ref The branch or tag name for which project is built.
E.g.: master
-d, --downstream-id Downstream project's ID to trigger.
E.g.: 332 (simnet project id)
-n, --image-name Name of image to test.
E.g.: docker.io/paritypr/synth-wave
-i, --image-tag Tag of the image to test.
E.g.: master
-c, --collator-image-tag Tag of collator image. Image name is hardcoded.
E.g.: master
Required for local launch:
-g, --ci-server-fqdn FQDN of your gitlab server.
E.g.: gitlab.parity.io
-t, --trigger-token Gitlab trigger token. This must be defined in
project -> settings -> CI/CD -> Pipeline triggers
Defaults to CI_JOB_TOKEN
https://stackoverflow.com/questions/42746634/gitlab-trigger-api-returns-404
-a, --access-token Gitlab peronal access token or it defaults to
PIPELINE_TOKEN (gitlab variable)
https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html
EXAMPLES
${SCRIPT_NAME} -s v4
${SCRIPT_NAME} --simnet-version=v4
Local test example. You need to set the 2 vars before running: TR_TOKEN and PERS_TOKEN
${SCRIPT_NAME} --simnet-version=v4 \\
--upstream-project=substrate \\
--upstream-ref=master \\
--image-name=docker.io/paritypr/synth-wave \\
--image-tag=master \\
--collator-image-tag=master \\
--ci-server-fqdn=gitlab.parity.io \\
--downstream-id=332 \\
--trigger-token="\${TR_TOKEN}" \\
--access-token="\${PERS_TOKEN}"
EOF
}

function main {
# Main entry point for the script.
parse_args "$@"
check_args
trigger_pipeline
check_pipeline
poll_pipeline
}

function parse_args {
# shellcheck disable=SC2214
while getopts c:u:r:i:n:g:t:r:a:s:h-: OPT; do
# support long options: https://stackoverflow.com/a/28466267/519360
if [ "${OPT}" = "-" ]; then # long option: reformulate OPT and OPTARG
OPT="${OPTARG%%=*}" # extract long option name
OPTARG="${OPTARG#$OPT}" # extract long option argument (may be empty)
OPTARG="${OPTARG#=}" # if long option argument, remove assigning `=`
fi
case "${OPT}" in
h | help ) usage ; exit 0 ;;
s | simnet-version ) needs_arg ; SIMNET_VERSION="${OPTARG}" ;;
u | upstream-project ) needs_arg ; TRGR_PROJECT="${OPTARG}" ;;
r | upstream-ref ) needs_arg ; TRGR_REF="${OPTARG}" ;;
n | image-name ) needs_arg ; IMAGE_NAME="${OPTARG}" ;;
i | image-tag ) needs_arg ; IMAGE_TAG="${OPTARG}" ;;
c | collator-image-tag ) needs_arg ; COLLATOR_IMAGE_TAG="${OPTARG}" ;;
g | ci-server-fqdn ) needs_arg ; CI_SERVER_HOST="${OPTARG}" ;;
d | downstream-id ) needs_arg ; DWNSTRM_ID="${OPTARG}" ;;
t | trigger-token ) needs_arg ; CI_JOB_TOKEN="${OPTARG}" ;;
a | access-token ) needs_arg ; PIPELINE_TOKEN="${OPTARG}" ;;
??* ) log DIE "Illegal option --${OPT}" ;; # bad long option
? ) exit 2 ;; # bad short option (error reported via getopts)
esac
done
shift $((OPTIND-1)) # remove parsed options and args from $@ list

}

function check_args {
if [[ -z "${SIMNET_VERSION}" ]] ; then
log DIE "Must specify value for mandatory argument -s,--simnet-version
$(usage)"
fi
}

function needs_arg {
if [ -z "${OPTARG}" ]; then
log DIE "No arg for --${OPT} option"
fi
}

function trigger_pipeline {
# API trigger another project's pipeline.
log INFO "Triggering Simnet pipeline."

curl --silent \
-X POST \
-F "token=${CI_JOB_TOKEN}" \
-F "ref=${SIMNET_VERSION}" \
-F "variables[TRGR_PROJECT]=${TRGR_PROJECT}" \
-F "variables[TRGR_REF]=${TRGR_REF}" \
-F "variables[IMAGE_NAME]=${IMAGE_NAME}" \
-F "variables[IMAGE_TAG]=${IMAGE_TAG}" \
"https://${CI_SERVER_HOST}/api/v4/projects/${DWNSTRM_ID}/trigger/pipeline" | \
tee pipeline;
}

function check_pipeline {
PIPELINE_ID=$(jq ".id" pipeline)
PIPELINE_URL=$(jq ".web_url" pipeline)
echo
log INFO "Simnet pipeline ${PIPELINE_URL} was successfully triggered."
log INFO "Now we're polling it to obtain the distinguished status."
}

function poll_pipeline {
# 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.
log INFO "Waiting on ${PIPELINE_ID} status..."

# shellcheck disable=SC2034
for i in {1..360}; do
STATUS=$(get_status);
log INFO "Triggered pipeline status is ${STATUS}";
if [[ ${STATUS} =~ ^(pending|running|created)$ ]]; then
echo;
elif [[ ${STATUS} =~ ^(failed|canceled|skipped|manual)$ ]]; then
log DIE "Something's broken in: ${PIPELINE_URL}";
elif [[ ${STATUS} =~ ^(success)$ ]]; then
log INFO "Look how green it is: ${PIPELINE_URL}"
exit 0
else
log DIE "Something else has happened in ${PIPELINE_URL}"
fi
sleep 8;
done
}

function get_status() {
curl --silent \
Expand All @@ -33,19 +184,18 @@ function get_status() {
jq --raw-output ".status";
}

echo "Waiting on ${PIPELINE_ID} status..."
function log {
local lvl msg fmt
lvl=$1 msg=$2
fmt='+%Y-%m-%d %H:%M:%S'
lg_date=$(date "${fmt}")
if [[ "${lvl}" = "DIE" ]] ; then
lvl="ERROR"
echo "${lg_date} - ${lvl} - ${msg}"
exit 1
else
echo "${lg_date} - ${lvl} - ${msg}"
fi
}

for i in $(seq 1 360); do
STATUS=$(get_status);
echo "Triggered pipeline status is ${STATUS}";
if [[ ${STATUS} =~ ^(pending|running|created)$ ]]; then
echo;
elif [[ ${STATUS} =~ ^(failed|canceled|skipped|manual)$ ]]; then
echo "Something's broken in: ${PIPELINE_URL}"; exit 1;
elif [[ ${STATUS} =~ ^(success)$ ]]; then
echo "Look how green it is: ${PIPELINE_URL}"; exit 0;
else
echo "Something else has happened in ${PIPELINE_URL}"; exit 1;
fi
sleep 8;
done
main "$@"
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.21.0]
### Changed
- Updated Substrate to polkadot-v0.9.5

## [2.20.0]
### Changed
- Updated Substrate to polkadot-v0.9.4
Expand Down
Loading

0 comments on commit 7d479fc

Please sign in to comment.