diff --git a/polkadot/.gitlab-ci.yml b/polkadot/.gitlab-ci.yml index 31bea94204..a977ea02a6 100644 --- a/polkadot/.gitlab-ci.yml +++ b/polkadot/.gitlab-ci.yml @@ -6,6 +6,7 @@ stages: + - merge-test - test - build - publish @@ -24,11 +25,7 @@ variables: -cache: - key: "${CI_JOB_NAME}" - paths: - - ./.cargo/ - +cache: {} .collect_artifacts: &collect_artifacts artifacts: @@ -40,17 +37,49 @@ cache: +.kubernetes_build: &kubernetes_build + tags: + - kubernetes-parity-build + environment: + name: gke-build + + + + # disabled as there are bugs # before_script: # - ./scripts/build.sh +#### stage: merge-test + +check:merge:conflict: + stage: merge-test + image: parity/tools:latest + cache: {} + <<: *kubernetes_build + only: + - /^[0-9]+$/ + variables: + GITHUB_API: "https://api.github.com" + GITLAB_API: "https://gitlab.parity.io/api/v4" + GITHUB_API_PROJECT: "parity%2Finfrastructure%2Fgithub-api" + script: + - ./scripts/gitlab/check_merge_conflict.sh + + + # test will be run for ci on the current repo # for version v0.2 branch tests are located in substrate repository and # therefore not generically testable test:rust:release: stage: test + cache: + key: "${CI_JOB_NAME}-test" + paths: + - ${CARGO_HOME} + - ./target only: - triggers - tags @@ -71,6 +100,11 @@ test:rust:release: build:rust:linux:release: stage: build + cache: + key: "${CI_JOB_NAME}-build" + paths: + - ${CARGO_HOME} + - ./target <<: *collect_artifacts only: - master @@ -146,13 +180,14 @@ dockerize:release: when: manual cache: {} retry: 1 - image: dtzar/helm-kubectl:$HELM_VERSION + image: dtzar/helm-kubectl:$HELM_VERSION only: - master - tags - web tags: - - kubernetes + # this is the runner that is used to deploy it + - kubernetes-parity-build before_script: - test -z "${DEPLOY_TAG}" && test -f ./target/release/VERSION && @@ -181,11 +216,11 @@ dockerize:release: deploy:ew3: <<: *deploy environment: - name: gke-beta-ew3 + name: parity-prod-ew3 deploy:ue1: <<: *deploy environment: - name: gke-beta-ue1 + name: parity-prod-ue1 diff --git a/polkadot/scripts/gitlab/check_merge_conflict.sh b/polkadot/scripts/gitlab/check_merge_conflict.sh new file mode 100755 index 0000000000..8738340e71 --- /dev/null +++ b/polkadot/scripts/gitlab/check_merge_conflict.sh @@ -0,0 +1,110 @@ +#!/bin/sh +# +# check if there is a merge conflict with this pull request only about wasm +# binary blobs. if so trigger a rebuild of it and push it on the feature +# branch if owned by paritytech +# + +set -e # fail on any error + +NODE_RUNTIME_COMPACT="runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm" +NODE_RUNTIME="runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm" + + + +jsonfile="$(mktemp)" + +attemptno="1" +while ( ! test -s ${jsonfile} ) \ + || ( [ "$(jq -r .mergeable ${jsonfile})" = "null" ] \ + && [ "${attemptno}" -lt 5 ] ) +do + echo "| checking pull request status (attempt no ${attemptno})" + curl -sS -o ${jsonfile} -H "Accept: application/vnd.github.v3+json" \ + "${GITHUB_API}/repos/paritytech/polkadot/pulls/${CI_COMMIT_REF_NAME}" + sleep 3 + attemptno="$(( ${attemptno} + 1 ))" +done + + + +baseref="$(jq -r .head.ref ${jsonfile})" +baserepo="$(jq -r .head.repo.full_name ${jsonfile})" +mergeable="$(jq -r .mergeable ${jsonfile})" + +rm -f ${jsonfile} + + +cat <<-EOT +| +| pr is of feature branch ${baseref} on ${baserepo} +| +| tell me github is this branch mergeable into the master branch? +| +EOT + +test "${mergeable}" = "true" && echo "| yes, it is." && exit 0 + +if [ "${baseref}" = "null" -a "${baserepo}" = "null" ] +then + echo "| either connectivity issues with github or pull request not existant" + exit 3 +fi + +cat <<-EOT +| not mergeable +| +| github sees a conflict - check if it's only about the following wasm blobs +| +| - ${NODE_RUNTIME_COMPACT} +| - ${NODE_RUNTIME} +| +EOT + +git fetch origin master +git config --global user.email "devops-team+polkadot-ci-merge-conflict@parity.io" +git config --global user.name "I shall never commit to anything" + +cat <<-EOT +| +| trying to merge with the master branch to see if there is a conflict about +| the wasm files only +| +EOT + +if git merge --no-commit --no-ff origin/master | grep '^CONFLICT ' \ + | grep -v -e ${NODE_RUNTIME_COMPACT} -e ${NODE_RUNTIME} +then + git merge --abort + echo "| there are more conflicting files than the wasm blobs" + exit 1 +fi +git merge --abort + + +cat <<-EOT +| +| only wasm blobs block the merge. +| +| triggering rebuild of wasm blobs which will be pushed onto the feature +| branch of this pull request upon success. +| +| see: +| +EOT + + + +curl -sS -X POST \ + -F "token=${CI_JOB_TOKEN}" \ + -F "ref=master" \ + -F "variables[REBUILD_WASM]=\"${baserepo}:${baseref}\"" \ + ${GITLAB_API}/projects/${GITHUB_API_PROJECT}/trigger/pipeline \ + | jq -r .web_url + +# fail as there will be another commit on top of that feature branch that will +# be tested anyway. +exit 1 + + +# vim: noexpandtab