Skip to content

Commit fbe0aa4

Browse files
committed
docs(skills): fix three reviewer-flagged errors — source-verified
All three issues found by code review, fixed against actual workflow files: 1. docs/ci.md: remove all references to retired weekly-testing-promotion.yml, wrong Sunday 06:00 UTC schedule, daily 13:00 UTC schedule (no such trigger), and nightly :testing model. Replace with current execute-release.yml flow and correct Tuesday 04:00 UTC promotion cadence. 2. execute-release.yml commit message gate was wrong in both ci.md skill and workflow-map.md — said 'ci: promote testing images to stable' but actual regex is '^ci\(promote\): dakota testing|^chore: promote testing to main' (verified from execute-release.yml:31-33). 3. workflow-map.md Pipeline Map said 'nightly' for promote-testing-to-main.yml schedule — corrected to 'weekly Tuesday 04:00 UTC' (matches actual cron '0 4 * * 2' and release-promotion.md). Assisted-by: Claude Sonnet 4.6 via GitHub Copilot
1 parent d9f159f commit fbe0aa4

3 files changed

Lines changed: 25 additions & 35 deletions

File tree

docs/ci.md

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -28,34 +28,30 @@ build.yml (main|testing|next) → [workflow_run] → publish.yml
2828

2929
`promote` depends only on `publish-image`, not on SBOM — saves 10–15 min on the critical path.
3030

31-
After every successful publish, `execute-release.yml` auto-fires and creates a GitHub Release.
31+
**`execute-release.yml`** fires on `push: main` and `workflow_dispatch`. A `check-trigger` job reads the commit message — proceeds only when it matches `^ci\(promote\): dakota testing` or `^chore: promote testing to main`. `workflow_dispatch` bypasses the gate. On success: copies `:testing``:stable`/`:latest`, then generates a GitHub Release with SBOM diff.
3232

33-
After every successful publish, `release.yml` auto-fires (via `workflow_run`) and creates a GitHub Release with a card image, SBOM diff, and package changelog.
33+
**Critical ordering:** `publish.yml` pulls the OCI artifact from CAS. The artifact is only in CAS if `build.yml` ran first for that SHA. Always dispatch `build.yml --ref testing` (or let push trigger it) before manually dispatching `publish.yml`.
3434

35-
**Critical ordering:** `publish.yml` pulls the OCI artifact from CAS. The artifact
36-
is only in CAS if `build.yml` ran on `main` first. If `build.yml` has only run on
37-
feature branches, CAS will not have the artifact for main's SHA and publish will
38-
fail with `"No artifacts to stage"`. Always dispatch `build.yml --ref main` before
39-
manually dispatching `publish.yml`.
35+
## Stable promotion (execute-release.yml)
4036

41-
## Weekly promotion (weekly-testing-promotion.yml)
42-
43-
Runs **Sunday 06:00 UTC**. Promotes `:testing``:latest` + `:stable` via digest-pinned re-tagging, then fast-forwards the `latest` and `stable` git branches to the promoted source SHA.
37+
Triggered by a push to `main` whose commit message matches the promotion pattern. The normal path is:
4438

4539
```
46-
resolve → check-diff → promote → update-branches
40+
push to testing (BST-affecting)
41+
→ build.yml → publish.yml → :testing
42+
→ promote-testing-to-main.yml → auto/promote-testing-to-main PR
43+
→ pr-release-gate.yml (cosign verify)
44+
→ auto-merge → push to main (commit: "ci(promote): dakota testing ...")
45+
→ execute-release.yml (check-trigger passes)
46+
→ :testing copied to :stable / :latest
47+
→ GitHub Release created
4748
```
4849

49-
| Job | What |
50-
|---|---|
51-
| `resolve` | Pins `:testing` digest, verifies default + NVIDIA share same source SHA |
52-
| `check-diff` | Skips if `:testing` == `:latest` (nothing new to promote) |
53-
| `promote` | Re-tags both variants as `:latest` + `:stable` (requires `production` environment approval) |
54-
| `update-branches` | Fast-forwards `latest` and `stable` branches to promoted source SHA |
50+
Schedule: `promote-testing-to-main.yml` runs `cron: '0 4 * * 2'` (Tuesday 04:00 UTC). That is the only automated promotion cadence.
5551

5652
## Schedule
5753

58-
**13:00 UTC** daily — runs after GBM nightly (~08:00 UTC finish).
54+
No daily build schedule. Builds fire on push, merge_group, or workflow_dispatch only.
5955

6056
## Remote cache
6157

@@ -66,11 +62,8 @@ resolve → check-diff → promote → update-branches
6662
`ghcr.io/projectbluefin/dakota:{testing,latest,stable}` and `ghcr.io/projectbluefin/dakota:<sha>`
6763

6864
Streams:
69-
- `:testing` — nightly build, promoted after e2e passes
70-
- `:latest` — weekly promotion from testing (Tuesday 06:00 UTC)
71-
- `:stable` — weekly promotion from testing (same cadence as latest)
72-
73-
Build triggers: `merge_group`, `schedule`, `workflow_dispatch`**not** `pull_request`.
65+
- `:testing` — published on every BST-affecting push to `testing` or `main` branch
66+
- `:latest` / `:stable` — promoted from `:testing` via `execute-release.yml` after promotion PR merges to main (Tuesday 04:00 UTC scheduled path, or manual dispatch)
7467

7568
Never bypass the merge queue with `--admin`.
7669

@@ -79,19 +72,16 @@ Never bypass the merge queue with `--admin`.
7972
To manually cut a `:stable` and `:latest` release:
8073

8174
```bash
82-
# 1. Ensure :testing exists and is healthy
83-
gh run list --repo projectbluefin/dakota --workflow "Publish Bluefin dakota" --limit 5
75+
# 1. Ensure :testing exists and promotion PR is open
76+
gh pr list --repo projectbluefin/dakota --search 'head:auto/promote-testing-to-main state:open'
8477

85-
# 2. Dispatch the weekly promotion workflow
86-
gh workflow run weekly-testing-promotion.yml \
87-
--repo projectbluefin/dakota
78+
# 2. If the promotion PR gate has passed, dispatch execute-release directly
79+
gh workflow run execute-release.yml --repo projectbluefin/dakota --ref main
8880

89-
# 3. Approve the deployment at the production environment gate
90-
# Approval URL: https://github.com/projectbluefin/dakota/deployments
81+
# OR: dispatch promote-testing-to-main to open/update the promotion PR
82+
gh workflow run promote-testing-to-main.yml --repo projectbluefin/dakota
9183
```
9284

93-
The `promote` job requires approval via the `production` GitHub Environment before it runs. The number of required approvals is configured in the environment settings.
94-
9585
## Restarting the factory (publish pipeline has been idle)
9686

9787
When the publish pipeline has been paused intentionally (e.g., post-refactor),

docs/skills/ci.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ The rationalizations that have caused real production failures:
9898
| `publish.yml` | `workflow_run` from `build.yml` (branches: main, next, testing, + their gh-readonly-queue/* paths) | Export from CAS → push `:$sha` → sign/attest → promote to `:testing`/`:next`. No build happens here. |
9999
| `promote-testing-to-main.yml` | `push: testing`, `schedule: Tue 04:00 UTC`, `workflow_dispatch` | Opens/updates promotion PR from testing into main. |
100100
| `pr-release-gate.yml` | `pull_request` to `main` | Gates the promotion PR via cosign verify of `:testing`. |
101-
| `execute-release.yml` | `push: main`, `workflow_dispatch` | Reads commit message — proceeds only when it starts with `ci: promote testing images to stable`. Copies tags to `:latest`/`:stable`, creates GitHub Release. |
101+
| `execute-release.yml` | `push: main`, `workflow_dispatch` | `check-trigger` job gates on commit message matching `^ci\(promote\): dakota testing` or `^chore: promote testing to main`. `workflow_dispatch` bypasses the gate. Copies `:testing` `:stable`/`:latest`, creates GitHub Release. |
102102
| `cache-warm.yml` | `schedule: Mon/Thu 06:00 UTC`, `workflow_dispatch` | Pre-warms remote CAS. Two parallel jobs (x86_64, aarch64), `continue-on-error: true`. **Not exempt from pre-flight — cancel before any real build.** |
103103

104104
## Trigger Behavior

docs/skills/workflow-map.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ Successful publish.yml
5858
└─ publish-smoke.yml
5959
└─ smoke suite [observational only]
6060
61-
push: testing / nightly / manual
61+
push: testing / weekly Tuesday 04:00 UTC / manual
6262
└─ promote-testing-to-main.yml
6363
└─ opens or updates promotion PR
6464
└─ pr-release-gate.yml on that PR
@@ -78,7 +78,7 @@ merge promotion PR to main
7878
| `.github/workflows/e2e.yml` | PR-facing testsuite check | `pull_request` |
7979
| `.github/workflows/promote-testing-to-main.yml` | open/update promotion PR | `push: testing`, schedule, manual |
8080
| `.github/workflows/pr-release-gate.yml` | promotion PR gate | `pull_request` to `main` |
81-
| `.github/workflows/execute-release.yml` | stable release execution | `push: main`, manual |
81+
| `.github/workflows/execute-release.yml` | stable release execution | `push: main`, `workflow_dispatch`. `check-trigger` job gates on commit message matching `^ci\(promote\): dakota testing` or `^chore: promote testing to main`; `workflow_dispatch` bypasses the gate. |
8282
| `.github/workflows/sync-next-from-main.yml` | merge main into next (preserve junction refs) | `push: main`, `workflow_dispatch` |
8383

8484
## Branch / Tag Map

0 commit comments

Comments
 (0)