You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: AGENTS.md
+7-5Lines changed: 7 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -121,7 +121,7 @@ This section is the authoritative reference for all CI/CD behavior. Read it comp
121
121
|`build-dx-hwe.yml`| Caller — builds `bluefin-dx` with HWE kernel |
122
122
|`reusable-build-image.yml`| Reusable workflow — all 5 callers invoke this |
123
123
|`scheduled-lts-release.yml`| Dispatcher — owns the weekly Sunday production release |
124
-
|`promote-to-lts.yml`|Creates a PR to merge `main` → `lts` (see below) |
124
+
|`promote-to-lts.yml`|Squash-pushes `main` → `lts` with pre-flight divergence check (see below) |
125
125
|`generate-release.yml`| Creates a GitHub Release when `build-gdx.yml` completes on `lts`|
126
126
127
127
### Two Branches, Two Tag Namespaces
@@ -139,9 +139,9 @@ Promotion and production release are **intentionally decoupled**. There are two
139
139
140
140
**Phase 1 — Promotion (manual, no publishing):**
141
141
1. A maintainer triggers `promote-to-lts.yml` via `workflow_dispatch`
142
-
2. The workflow opens a PR from `main` targeting `lts` directly (no intermediate branch)
143
-
3.A maintainer reviews and merges the PR
144
-
4. The merge triggers a `push` event on `lts` — all 5 build workflows run as **validation builds** (`publish=false`). No images are published. This is intentional: it confirms that the merged code builds cleanly on `lts` before the next production release.
142
+
2. The workflow runs a **pre-flight check**: fails immediately if `lts` has any commits not reachable from `main`, printing those commits with instructions to land them in `main` first.
143
+
3.The workflow performs a **squash merge** (`git merge --squash origin/main`) and pushes one clean commit to `lts`. There is no PR. Triggering `workflow_dispatch` is the human approval step.
144
+
4. The push triggers a `push` event on `lts` — all 5 build workflows run as **validation builds** (`publish=false`). No images are published. This confirms the promoted code builds cleanly on `lts` before the next production release.
145
145
146
146
**Phase 2 — Production release (automated or manual publishing):**
147
147
1.`scheduled-lts-release.yml` fires at `0 2 * * 0` (Sunday 2am UTC), OR a maintainer manually triggers it
@@ -153,6 +153,8 @@ Promotion and production release are **intentionally decoupled**. There are two
153
153
154
154
**NEVER merge `lts` into `main`.** The flow is always one-way: `main` → `lts`.
155
155
156
+
**NEVER commit directly to `lts`.** All changes — including CI hotfixes — must land in `main` first. Direct commits to `lts` create divergence that causes the pre-flight check to fail and blocks future promotions.
157
+
156
158
### `publish` Input — How It Is Evaluated
157
159
158
160
All 5 caller workflows pass the same `publish:` expression:
@@ -263,7 +265,7 @@ If you see `schedule:` in any of the 5 build callers, remove it entirely. Do not
263
265
-`build-regular-hwe.yml` — HWE kernel variant of `bluefin`
264
266
-`build-dx-hwe.yml` — HWE kernel variant of `bluefin-dx`
265
267
-`scheduled-lts-release.yml` — Weekly production release dispatcher (sole owner of Sunday builds)
266
-
-`promote-to-lts.yml` — Opens a one-way`main`→`lts`promotion PR
0 commit comments