Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions .github/workflows/canary-rollout-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Quality gates for the canary-rollout release engine and its pure gate core.
#
# The engine + its bats suite were relocated into this repo by #613/#624 but no
# CI runner came with them, so tests/canary_rollout.bats went unenforced. This
# workflow closes that gap.
#
# Triggered on any PR (or push to main) that touches:
# - scripts/canary-rollout.sh (orchestrator)
# - scripts/lib/canary-rollout.sh (pure gate core)
# - tests/canary_rollout.bats (the suite)
# - .github/workflows/canary-rollout-tests.yml (this file)
#
# Gates (all must pass before merge):
# 1. shellcheck — static analysis for the orchestrator + pure core
# 2. bats — the full canary_rollout unit/behaviour suite
#
# Standard: the pure core (scripts/lib/canary-rollout.sh) is side-effect-free so
# the suite can pin gate behaviour without network — the house pattern this
# engine itself exemplifies.

name: Canary-rollout Tests

on:
pull_request:
paths:
- 'scripts/canary-rollout.sh'
- 'scripts/lib/canary-rollout.sh'
- 'tests/canary_rollout.bats'
- '.github/workflows/canary-rollout-tests.yml'
Comment on lines +25 to +29

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Include registry changes in the canary test trigger

This paths list leaves out standards/canary-rings.json, even though tests/canary_rollout.bats reads that file as RINGS and contains dedicated assertions for its ring/gate shape. A PR that changes only the registry or gate knobs will therefore skip the workflow entirely, letting broken rollout metadata merge without the bats suite this workflow is meant to enforce; add the registry file to both the pull_request and push path filters.

Useful? React with 👍 / 👎.

push:
branches:
- main
paths:
- 'scripts/canary-rollout.sh'
- 'scripts/lib/canary-rollout.sh'
- 'tests/canary_rollout.bats'
- '.github/workflows/canary-rollout-tests.yml'

permissions:
contents: read

concurrency:
group: canary-rollout-tests-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
name: Lint and bats
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 1
Comment thread
coderabbitai[bot] marked this conversation as resolved.
persist-credentials: false

- name: Install bats, shellcheck, and jq
run: |
set -euo pipefail
sudo apt-get update -qq
sudo apt-get install -y --no-install-recommends bats shellcheck jq

- name: shellcheck
run: |
set -euo pipefail
shellcheck --severity=warning -x scripts/canary-rollout.sh scripts/lib/canary-rollout.sh

- name: Run bats suite
# The suite stubs gh/git via PATH; a dummy token satisfies the
# orchestrator's token precondition without any real API access.
env:
GH_TOKEN: dummy-token-for-stubbed-tests
run: bats --print-output-on-failure tests/canary_rollout.bats
Loading