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 /.gitlab | |
parent | b8326897251ebdbb896da2b28ad27a48ee8f2582 (diff) | |
download | haskell-acf2129d49989071e296634711e3f4d9ebed6ee0.tar.gz |
gitlab-ci: Implement head.hackage jobs
Diffstat (limited to '.gitlab')
-rw-r--r-- | .gitlab/start-head.hackage.sh | 79 |
1 files changed, 79 insertions, 0 deletions
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 |