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
{{ message }}
Repository navigation
Commit 4365d12
Browse filesBrowse the repository at this point in the historyBrowse files
redline pin bump: redline-post.yml is a caller (#153)
* redline pin bump: redline-post.yml is a caller
redline-post.yml pins redline-post-verdict.yml and passes the same sha as
redline-ref, the shape of the other three callers. pin.mjs lists it in
CALLERS, and the bump wave reads it, checks its grants against
redline-post-verdict.yml and moves both lines with the others. A change to
redline-post-verdict.yml now moves the pins.
* redline: name the ops tick, not forge
body="Moves the pinned ${SOURCE} calls and their redline-ref inputs, and every ${SOURCE} action pin (drift-report, checkout-with-retry, fleet-status, fleet-status-check), to ${SOURCE}@${SHA}, the main commit that last changed the review, the fix or an action (${note}). The scripts are fetched at that same commit. The pins are the only change."
# In this repository the called workflows sit beside its own callers, and public-text.yml
@@ -323,7 +327,7 @@ jobs:
323
327
echo "::error::${repo}: ${path} does not grant $(printf '%s' "$missing" | paste -sd, -), which $(basename "$called") at ${short} asks for, so every run there fails at startup; grant it in ${path} first"
324
328
bad=1; continue
325
329
fi
326
-
if grep -Eq "(redline-review|redline-fix-run|public-text).yml@${SHA}" <<< "$current" && grep -q "redline-ref: ${SHA}" <<< "$current"; then
330
+
if grep -Eq "(redline-review|redline-fix-run|public-text|redline-post-verdict).yml@${SHA}" <<< "$current" && grep -q "redline-ref: ${SHA}" <<< "$current"; then
327
331
echo "${path} already at ${short}"; continue
328
332
fi
329
333
todo+=("$path")
@@ -383,7 +387,7 @@ jobs:
383
387
for path in "${todo[@]}"; do
384
388
at="$(uri "$path")"
385
389
if ! current="$(gh api "repos/${repo}/contents/${at}?ref=${BRANCH}" --jq .content 2>/dev/null | base64 -d)"; then carried=0; break; fi
386
-
if ! grep -Eq "(redline-review|redline-fix-run|public-text).yml@${SHA}" <<< "$current" || ! grep -q "redline-ref: ${SHA}" <<< "$current"; then carried=0; break; fi
390
+
if ! grep -Eq "(redline-review|redline-fix-run|public-text|redline-post-verdict).yml@${SHA}" <<< "$current" || ! grep -q "redline-ref: ${SHA}" <<< "$current"; then carried=0; break; fi
Copy file name to clipboardExpand all lines: .github/workflows/redline.yml
+4-4Lines changed: 4 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,10 @@
1
1
# Redline, the gating code review, as this repo's CI check. The review itself is this repo's own redline-review.yml, called at a pinned commit like every other caller does:
2
-
# read-only tools, verdict = pass or fail. On pull_request it reviews same-repo PRs. Forge also
2
+
# read-only tools, verdict = pass or fail. On pull_request it reviews same-repo PRs. The ops tick also
3
3
# dispatches it on the default branch for a head the pull_request run cannot vouch for (a PR that
4
-
# changes CI, a verdict forge refused, a re-read after a description edit); that run executes the
4
+
# changes CI, a verdict the ops tick refused, a re-read after a description edit); that run executes the
5
5
# default branch's workflow files, not the PR's, and reviews the head it is given.
6
6
name: Redline
7
-
#Forge finds its dispatch by this title; keep it exact.
7
+
#The ops tick finds its dispatch by this title; keep it exact.
Copy file name to clipboardExpand all lines: README.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,7 +36,7 @@ full commit sha of `main`, so a change here reaches it only through a reviewed b
36
36
37
37
| This repository's own | What it does |
38
38
|---|---|
39
-
|`redline.yml`, `redline-fix.yml`| This repository's callers of the reviewand the fix, pinned and bumped like every other caller's. |
39
+
|`redline.yml`, `redline-fix.yml`, `redline-post.yml`| This repository's callers of the review, the fix and the post, pinned and bumped like every other caller's. |
40
40
|`redline-pin-bump.yml`| Hourly, moves every caller's pins to the newest `main` commit that changed what a caller runs, one pull request per repository. |
41
41
|`redline-self-test.yml`| The Redline, public-text, drift-report, fleet-status and pin-bump tests on every pull request: a required check. |
42
42
|`checkout-with-retry-self-test.yml`| Proves the retry action on a runner: a healthy checkout, the retry paths through a stub, and the act path under act. |
@@ -104,8 +104,8 @@ Next to the prompts the hosts hold the credential files the scripts read (`/etc/
104
104
what a caller runs: the scripts the reusable workflows and actions fetch (their tests, test fixtures
105
105
and READMEs aside), one of the four actions, or one of the reusable workflows. It rewrites, in every
106
106
repository in its `CALLERS` list,
107
-
the reusable-workflow pins in `redline.yml`, `redline-fix.yml` and `public-text.yml` where the
108
-
repository has them, and every pin of one of the four actions in any workflow file there, through
107
+
the reusable-workflow pins in `redline.yml`, `redline-fix.yml`, `public-text.yml` and
108
+
`redline-post.yml`where the repository has them, and every pin of one of the four actions in any workflow file there, through
109
109
`pin.mjs`: one commit per file on `bot/redline-pin`, one pull request per repository. Each
110
110
repository's own gate reviews and merges the bump. This repository is in the list: its own callers
111
111
move the same way. A repository with no pin of any kind is reported as wrong.
Copy file name to clipboardExpand all lines: scripts/redline/README.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -81,12 +81,12 @@ through the API (no checkout) and fails when an added line, the title, the descr
81
81
message carries an em or en dash, or when the title, the description or a commit message credits a
82
82
model or an AI tool (a co-author trailer, a "generated with" footer, a session link), naming every
83
83
one. Credits are read in that text only, since code and docs may name these tools for other
84
-
reasons. Context and removed lines are never read, and captured data is skipped. It is a workflow of its own because forge posts a review only when the
84
+
reasons. Context and removed lines are never read, and captured data is skipped. It is a workflow of its own because a review is posted only when the
85
85
review run's conclusion agrees with the verdict.
86
86
87
87
## The fix: `redline-fix-run.yml` and `fix.mjs`
88
88
89
-
When a review requests changes, forge dispatches the repository's `.github/workflows/redline-fix.yml`
89
+
When a review requests changes, the ops tick dispatches the repository's `.github/workflows/redline-fix.yml`
90
90
(`workflow_dispatch`: `pr`, `head`, `review`, `dry_run`), which calls `redline-fix-run.yml` at the
91
91
same pinned commit on `[self-hosted, <repo>-exec]`, the repository's non-root exec runner. The job
92
92
checks that the checkout is exactly the reviewed head, then `fix.mjs`:
@@ -128,7 +128,7 @@ job killed at its 60-minute timeout still uploads a `fix.json` that says so. The
128
128
`fixed`, and for `no_change` with `description: true` (the fix was a new description, which the
129
129
caller applies); 1 for anything else. `fix-tools.json` is the fixer's `TOOLS` as a file, pinned in `truecopy.lock` like the
130
130
reviewer's. The artifact is `redline-fix`. Nothing on the runner can push:
131
-
forge verifies the artifact and pushes the commit to the PR branch with its own token, then
131
+
the ops tick verifies the artifact and pushes the commit to the PR branch with its own token, then
132
132
comments with the notes. The model is reached through a dario key socket named by `DARIO_SOCKET`
133
133
in the env file, so no runner holds the key itself: the socket is the credential, and only the
134
134
exec accounts can connect to it, never an account that runs untrusted code. `DARIO_API_KEY` in
0 commit comments