about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ops/ci/README.org3
-rw-r--r--ops/ci/default.nix3
-rw-r--r--ops/ci/pipeline.yml25
3 files changed, 28 insertions, 3 deletions
diff --git a/ops/ci/README.org b/ops/ci/README.org
new file mode 100644
index 0000000..0754937
--- /dev/null
+++ b/ops/ci/README.org
@@ -0,0 +1,3 @@
+The default pipeline is managed by [[file:~/workspace/world/ops/buildkite/][ops/buildkite]]. When a new build starts, the buildkite agent uploads the pipeline defined in this directory.
+
+The configuration for the repository is managed with [[file+emacs:pipeline.yml][pipeline.yml]]. All the steps are executed in parallel except for the last one, which wait on the completion of all the previous steps. If one of the previous steps has failed, the build is marked as failed, otherwise we consider it to pass.
diff --git a/ops/ci/default.nix b/ops/ci/default.nix
deleted file mode 100644
index 1638b53..0000000
--- a/ops/ci/default.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{ pkgs }:
-
-{ }
diff --git a/ops/ci/pipeline.yml b/ops/ci/pipeline.yml
new file mode 100644
index 0000000..4308f6a
--- /dev/null
+++ b/ops/ci/pipeline.yml
@@ -0,0 +1,25 @@
+env:
+  BUILDKITE_TOKEN_PATH: /run/agenix/buildkite/graphql
+steps:
+  - label: ":shell:"
+    command: "nix develop -c pre-commit run --all-files"
+
+  # wait for all previous steps to complete.
+  - wait: null
+    continue_on_failure: true
+
+  - label: ":hammer:"
+    command: |
+      set -ueo pipefail
+
+      readonly FAILED_JOBS=$(curl 'https://graphql.buildkite.com/v1' \
+        --silent \
+        -H "Authorization: Bearer $(cat ${BUILDKITE_TOKEN_PATH})" \
+        -d "{\"query\": \"query BuildStatusQuery { build(uuid: \\\"$BUILDKITE_BUILD_ID\\\") { jobs(passed: false) { count } } }\"}" | \
+        jq -r '.data.build.jobs.count')
+
+      echo "$$FAILED_JOBS build jobs failed."
+
+      if (( $$FAILED_JOBS > 0 )); then
+        exit 1
+      fi