summaryrefslogtreecommitdiff
path: root/.gitlab
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-02-27 23:33:12 -0500
committerBen Gamari <ben@smart-cactus.org>2019-03-17 23:17:36 -0400
commitacf2129d49989071e296634711e3f4d9ebed6ee0 (patch)
treeaa2a11f01b3bf015421508f579556a8720ad7aa2 /.gitlab
parentb8326897251ebdbb896da2b28ad27a48ee8f2582 (diff)
downloadhaskell-acf2129d49989071e296634711e3f4d9ebed6ee0.tar.gz
gitlab-ci: Implement head.hackage jobs
Diffstat (limited to '.gitlab')
-rw-r--r--.gitlab/start-head.hackage.sh79
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