Skip to content

CleanBench full suite #24

CleanBench full suite

CleanBench full suite #24

name: CleanBench full suite
on:
schedule:
- cron: "30 4 * * *"
workflow_dispatch:
jobs:
cleanbench:
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
issues: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install
run: |
python -m pip install -U pip
pip install -e ".[bench,cli]"
- name: Restore perf baseline
uses: actions/cache@v4
with:
path: benchmarks/cleanbench/results/baseline_v1.json
key: cleanbench-baseline-${{ runner.os }}-v1
- name: Full CleanBench T1-T5 (release gates + baselines)
run: python -m benchmarks.cleanbench --tracks T1,T2,T3,T4,T5 --report site --reproduce-headline
- name: Verify committed result is reproducible
if: always()
run: python -m benchmarks.cleanbench --verify-results benchmarks/cleanbench/results/latest.json
- name: Audit README trust claims
if: always()
run: python -m benchmarks.cleanbench.reproducibility audit-readme
- name: Upload results
if: always()
uses: actions/upload-artifact@v4
with:
name: cleanbench-results
path: benchmarks/cleanbench/results/latest.*
retention-days: 30
- name: Open/refresh alert issue on failure
if: failure()
uses: actions/github-script@v7
with:
script: |
const title = "nightly CleanBench suite failing";
const body = `The scheduled CleanBench full suite failed.\n\n` +
`Run: ${context.serverUrl}/${context.repo.owner}/${context.repo.repo}` +
`/actions/runs/${context.runId}`;
const open = await github.rest.issues.listForRepo({
...context.repo, state: "open", labels: "nightly-failure",
});
const existing = open.data.find(i => i.title === title);
if (existing) {
await github.rest.issues.createComment({
...context.repo, issue_number: existing.number, body,
});
} else {
await github.rest.issues.create({
...context.repo, title, body, labels: ["nightly-failure"],
});
}