diff options
author | Ben Gamari <ben@smart-cactus.org> | 2019-02-27 23:33:12 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2019-03-17 23:17:36 -0400 |
commit | acf2129d49989071e296634711e3f4d9ebed6ee0 (patch) | |
tree | aa2a11f01b3bf015421508f579556a8720ad7aa2 | |
parent | b8326897251ebdbb896da2b28ad27a48ee8f2582 (diff) | |
download | haskell-acf2129d49989071e296634711e3f4d9ebed6ee0.tar.gz |
gitlab-ci: Implement head.hackage jobs
-rw-r--r-- | .gitlab-ci.yml | 39 | ||||
-rw-r--r-- | .gitlab/start-head.hackage.sh | 79 |
2 files changed, 118 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cca7551b0e..c135c457c3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,6 +17,7 @@ stages: - full-build - cleanup # See Note [Cleanup on Windows] - packaging + - hackage ############################################################ # Runner Tags @@ -577,3 +578,41 @@ source-tarball: - make sdist - mv sdistprep/*.xz . - make show VALUE=version > version + + +############################################################ +# Testing via head.hackage +############################################################ + +# Triggering jobs in the ghc/head.hackage project requires that we have a job +# token for that repository. Furthermore the head.hackage CI job must have +# access to an unprivileged access token with the ability to query the ghc/ghc +# project such that it can find the job ID of the fedora27 job for the current +# pipeline. + +.hackage: + stage: hackage + image: ghcci/x86_64-linux-deb9:0.2 + tags: + - x86_64-linux + dependencies: [] + variables: + HEAD_HACKAGE_PROJECT_ID: "78" + script: + - bash .gitlab/start-head.hackage.sh + +hackage: + extends: .hackage + when: manual + +hackage-label: + extends: .hackage + only: + variables: + - $CI_MERGE_REQUEST_LABELS =~ /.*user-facing.*/ + +nightly-hackage: + extends: .hackage + only: + variables: + - $NIGHTLY diff --git a/.gitlab/start-head.hackage.sh b/.gitlab/start-head.hackage.sh new file mode 100644 index 0000000000..d27045b4a2 --- /dev/null +++ b/.gitlab/start-head.hackage.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +set -e + +# Start a head.hackage job and wait for completion. Expected to be called from +# GitLab CI. + +if [ -z "$HEAD_HACKAGE_TRIGGER_TOKEN" ]; then + echo "Error: Expected head.hackage trigger token in HEAD_HACKAGE_TRIGGER_TOKEN" + exit 1 +fi + +if [ -z "$CI_PIPELINE_ID" ]; then + echo "Error: Expected pipeline id in CI_PIPELINE_ID" + exit 1 +fi + +if [ -z "$HEAD_HACKAGE_PROJECT_ID" ]; then + HEAD_HACKAGE_PROJECT_ID="78" +fi + +# Start pipeline +curl --silent --show-error \ + --request POST \ + -F "token=$HEAD_HACKAGE_TRIGGER_TOKEN" \ + -F "ref=gitlab-ci-nix" \ + -F "variables[GHC_PIPELINE_ID]=$CI_PIPELINE_ID" \ + https://gitlab.haskell.org/api/v4/projects/$HEAD_HACKAGE_PROJECT_ID/trigger/pipeline \ + | tee resp.json + +echo +pipeline_id=$(jq .id < resp.json) +url=$(jq .web_url < resp.json) +echo +echo "Started head.hackage pipeline $pipeline_id: $url" + +# Wait for completion +running= +echo "Waiting for build to complete..." +while true; do + sleep 10 + curl --silent --show-error \ + --request GET \ + -F "job_token=$CI_JOB_TOKEN" \ + https://gitlab.haskell.org/api/v4/projects/$HEAD_HACKAGE_PROJECT_ID/pipelines/$pipeline_id \ + > resp.json + status=$(jq .status < resp.json) + + case $status in + "\"pending\"") + ;; + "\"running\"") + if [ -z "$running" ]; then + echo "Pipeline $pipeline_id is now running." + running=1 + fi + ;; + "\"success\"") + echo "Pipeline $pipeline_id finished successfully." + exit 0 + ;; + "\"failed\"") + echo "Pipeline $pipeline_id failed." + exit 1 + ;; + "\"canceled\"") + echo "Pipeline $pipeline_id was canceled." + exit 1 + ;; + "\"skipped\"") + echo "Pipeline $pipeline_id was skipped." + exit 1 + ;; + *) + cat resp.json + echo "Error: Unknown pipeline status $status" + exit 2 + ;; + esac +done |