Skip to content

ci(repo): re-pin codex-action to v1.11, block future auto-bumps - #6538

Merged
Coly010 merged 2 commits into
developfrom
ci/ai-review-repin-codex-action
Sep 9, 2026
Merged

ci(repo): re-pin codex-action to v1.11, block future auto-bumps#6538
Coly010 merged 2 commits into
developfrom
ci/ai-review-repin-codex-action

Conversation

@Coly010

@Coly010 Coly010 commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

What kind of change does this PR introduce?

CI reliability fix.

What is the current behavior?

AI Review's Codex jobs (codex-review, adjudicate) intermittently hang and get killed on job timeout, discarding a completed review. Most recently: run 34323125644 on #6535 died at ~55 minutes against a 45-minute timeout.

This is a regression. #6380 deliberately pinned openai/codex-action to v1.11 because v1.12 had a confirmed hang bug (openai/codex-action#150). #6484 — a Dependabot actions-major group bump bundling 6 unrelated action updates — silently reverted that pin back to v1.12; the workflow's own comments (still saying "pinned to v1.11, NOT v1.12") went stale rather than catching the drift, since nothing diffed them against the actual uses: line.

Checking upstream today turned up two separate, still-open v1.12 regressions, both matching this workflow's exact config (safety-strategy: drop-sudo, sandbox: read-only, output-schema-file):

Neither has a released fix. Both are action-level bugs independent of the pinned Codex CLI version (reproduced across CLI versions 0.147.0-0.150.1 in the upstream threads). This is not a diff-size or token-limit problem: #6535's diff was only ~2200 lines, and v1.11 has cleanly handled 130k-270k-token diffs in under 15 minutes per the upstream reports and our own prior testing.

What is the new behavior?

A Dependabot actions-major group bump (#6484) silently reverted the
deliberate v1.11 pin from #6380 back to v1.12, reintroducing a job hang:
AI Review run 34323125644 on PR #6535 died at ~55 minutes against a
45-minute timeout. Upstream confirms two still-open v1.12 regressions
matching our exact config (drop-sudo + read-only sandbox) — openai/codex-action#151
(wrapper hangs after Codex's turn completes if a descendant keeps stdio
open) and #160 (drop-sudo's v1.12 rewrite chmods /run service sockets,
breaking systemd-resolved on the runner itself). Re-pin both Codex jobs
to v1.11 and add a dependabot.yml ignore entry so this can't be silently
regressed again.
@Coly010
Coly010 requested a review from a team as a code owner September 9, 2026 08:48
@Coly010 Coly010 self-assigned this Sep 9, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 AI Review

The v1.11 re-pin is internally consistent, but all three Claude findings are confirmed: the blanket Dependabot ignore creates a minor dependency-maintenance risk, while duplicated rationale and inconsistent terminology are documentation nits. Codex reported no findings.

Findings

Severity Location Category Sources Claim
🟡 MINOR .github/dependabot.yml:18 dependency-management claude The unqualified ignore suppresses automated Dependabot update PRs for every future openai/codex-action release, leaving discovery of fixed or security-relevant releases dependent on an untracked manual check.
⚪ NIT .github/workflows/ai-review.yml:509 maintainability claude The same 17-line version rationale is duplicated across both Codex steps, while the expected SHA is repeated in four locations without an automated consistency check, allowing a future manual update to leave stale comments or pins.
⚪ NIT .github/dependabot.yml:20 documentation claude The Dependabot comment calls both upstream regressions hangs, although the workflow's detailed rationale describes issue #160 as a runner-level failure that kills the job.

Stats

Claude findings: 3 · Codex findings: 0 · Confirmed: 3 · Refuted: 0 · Uncertain: 0


Models: claude-opus-5 + gpt-5.6-sol · Trigger: auto · Workflow run

This review runs once per PR. A maintainer can request another with a /ai-review comment.

Comment thread .github/dependabot.yml Outdated
Comment thread .github/workflows/ai-review.yml Outdated
Comment thread .github/dependabot.yml Outdated
Scope the dependabot.yml ignore to 1.12.x (not a blanket forever-ignore) so
Dependabot still proposes v1.13+ once a fix ships, exclude the action from
the actions-major group so it can't be silently bundled again, disambiguate
the #151/#160 wording (hang vs. runner-killing failure), and dedupe the
duplicated pin/rationale across both Codex steps with a YAML anchor/alias.
@Coly010
Coly010 added this pull request to the merge queue Sep 9, 2026
Merged via the queue into develop with commit c9696cc Sep 9, 2026
47 checks passed
@Coly010
Coly010 deleted the ci/ai-review-repin-codex-action branch September 9, 2026 09:22
pull Bot pushed a commit to chizee/cli that referenced this pull request Sep 9, 2026
…ase#6542)

## What kind of change does this PR introduce?

CI reliability fix (follow-up to supabase#6538).

## What is the current behavior?

supabase#6538 re-pinned `openai/codex-action` to v1.11 and added a Dependabot
ignore entry scoped to `versions: ["1.12.x"]`, intending to still let
Dependabot propose v1.13+ once the upstream hang bugs
(openai/codex-action#151, supabase#160) are fixed, while blocking the known-bad
v1.12 line specifically.

That scoping never actually worked. 9 minutes after supabase#6538 merged,
Dependabot opened supabase#6541 proposing the exact v1.12 bump we were trying to
block — config propagation wasn't the issue; the `versions` syntax was.
The `github-actions` ecosystem's `ignore.versions` strings are parsed as
Ruby `Gem::Requirement` (RubyGems comparator syntax: `>= x`, `~> x`,
etc.), not npm-style semver ranges. `"1.12.x"` isn't a wildcard in that
grammar — it parses as a literal version string with an implicit `=`
operator, which never equals the real dependency version (`"1.12"`), so
the ignore condition silently never matched anything.

Verified directly against the actual parsing logic dependabot-core uses
(`Dependabot::GithubActions::Requirement`, a thin wrapper around
`Gem::Requirement`):
```
GithubActionsRequirement.new("1.12.x").satisfied_by?(Gem::Version.new("1.12"))   # => false (bug)
GithubActionsRequirement.new(">= 1.12, < 1.13").satisfied_by?(Gem::Version.new("1.12"))    # => true
GithubActionsRequirement.new(">= 1.12, < 1.13").satisfied_by?(Gem::Version.new("1.12.5"))  # => true
GithubActionsRequirement.new(">= 1.12, < 1.13").satisfied_by?(Gem::Version.new("1.11"))    # => false
GithubActionsRequirement.new(">= 1.12, < 1.13").satisfied_by?(Gem::Version.new("1.13"))    # => false
```

## What is the new behavior?

Replace `versions: ["1.12.x"]` with `versions: [">= 1.12, < 1.13"]` — a
real Gem::Requirement comparator range, confirmed to correctly match the
1.12 line (including any 1.12.x patch) while excluding v1.11 and v1.13+.
supabase#6541 should be closed as superseded once this merges.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants