Skip to content

Canary — plugin vs Codex main #77

Canary — plugin vs Codex main

Canary — plugin vs Codex main #77

Workflow file for this run

name: Canary — plugin vs Codex main
# Codex main moves fast and ships a prerelease cut (@alpha) near-daily, so the
# host can break us even when we don't push. Run the host-interface contract
# tests against the freshest main prerelease twice a day and alert on failure.
# The live channel suite chains off this run, so the canary leads and live
# follows on the same cadence.
on:
schedule:
# 2x/day at 6 AM and 6 PM America/Los_Angeles (PDT/UTC-7 basis; cron is UTC).
- cron: "13 13 * * *" # 06:13 PT
- cron: "13 1 * * *" # 18:13 PT
workflow_dispatch: {}
permissions:
contents: read
jobs:
canary:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- uses: actions/setup-node@v7
with:
node-version: "22"
- name: Install bridge + test deps
run: |
pip install \
"inkbox==0.5.9" \
-e . pytest
# @alpha is the prerelease channel cut from codex main near-daily — the
# freshest main build available without compiling the host from source.
- name: Install Codex (freshest main prerelease)
run: bash "$GITHUB_WORKSPACE/tests/ci/install_codex.sh"
# Live tests self-skip without credentials; the complete live stack runs
# only after this latest-host canary succeeds.
- name: Full offline suite vs real Codex
run: pytest -q
notify:
needs: canary
if: always() && github.event_name == 'schedule' && needs.canary.result != 'success'
runs-on: ubuntu-latest
timeout-minutes: 2
steps:
- name: Notify Google Chat
env:
WEBHOOK_URL: ${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }}
run: |
[ -n "$WEBHOOK_URL" ] || { echo "GOOGLE_CHAT_WEBHOOK_URL is missing"; exit 1; }
curl --fail-with-body --retry 3 --retry-all-errors --max-time 20 \
-sS -X POST -H 'Content-Type: application/json' \
-d "{\"text\": \"🚨 codex-plugin canary FAILED against Codex main: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}\"}" \
"$WEBHOOK_URL"