Skip to content

Wait up to 5.5 hours for reviewer-approved publishes before the GitHub Release - #264

Merged
jeremy merged 4 commits into
mainfrom
release-wait-for-approvals
Oct 21, 2026
Merged

jeremy merged 4 commits into
mainfrom
release-wait-for-approvals

Conversation

@jeremy

@jeremy jeremy commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Held: don't merge until Jeremy says so. This is the hey-sdk equivalent of basecamp/fizzy-sdk#201.

release-github.yml now waits up to 5.5 hours for the release workflows, instead of the shared orchestrator's 30 minutes, because release-crates and release-npm require a reviewer from sip or cli. It ports basecamp/fizzy-sdk#201's approach (at 8896f5e).

Why: release-crates (and release-npm, once TypeScript publishes) require approval now (sip or cli, with self-review prevented), but release-github.yml called basecamp/sdk/actions/release-orchestrate with its default timeout: 1800. An approval that came after 30 minutes failed the GitHub release even though the crate published.

What changes

  • A new "Wait for release workflows" step does the waiting:
    • It makes one request per poll: actions/runs?head_sha=<tagged commit>&event=push. The shared action makes one or two gh run list requests per language per poll. Over hours that outruns GITHUB_TOKEN's 1,000 requests an hour.
    • Each language's run is matched by path with any @ref suffix stripped, plus head_branch == <tag>, newest first.
    • Long wait: it waits up to 19,800s (5.5 hours), and the job gets timeout-minutes: 340.
    • Transient-error retry: a failed listing logs a warning and retries on the next poll instead of ending the wait.
    • It stops early on the first failed run.
  • The shared action still creates the release, now with timeout: '1' and poll-interval: '1', so it takes a single pass after the wait. Release creation (--generate-notes --latest), the failure summary and the recovery advice stay shared with the other SDK repos. Nothing else about it changes.
  • Manual dispatch still works. The step polls the commit the tag was checked out at, not GITHUB_SHA. That keeps gh workflow run release-github.yml -f tag=vX.Y.Z working as the recovery path. fizzy-sdk#201 skips the wait on dispatch; hey-sdk's dispatch already relies on the shared action seeing the tag's push runs, so this keeps that.
  • CONTRIBUTING.md and the release-rust.yml comment said release-crates has "no required reviewers". They now say what it is: approval by sip or cli, not by whoever pushed the tag, and that a late approval needs a re-run of the orchestrator.

Not in this PR

  • release-go, release-npm and release-github-packages already exist with the same reviewers and the same v* policy, but no workflow references release-go or release-github-packages yet. Gating the Go module tag and the Kotlin publish the way fizzy-sdk does is a separate change. release-npm is used, but TypeScript publishing is off (.github/typescript-publish-enabled is false).
  • The shared action's own polling. Fixing its per-language loop in basecamp/sdk would cover every SDK repo at once and would make the inline step unnecessary. That's a cross-repo call, so I left it for whoever owns basecamp/sdk.

Verified

  • actionlint and zizmor --offline find nothing in release-github.yml.
  • I ran the run-matching jq against the real runs for v0.32.1. All five release workflows matched as success, and the main push runs on the same commit were ignored.
  • typescript/tests/release-workflow.test.ts's assertions on release-github.yml still hold: workflow_sha, release-languages.sh and the languages: input are unchanged.
  • The wait step only runs on a tag push or a dispatch, so this PR's CI can't exercise it. The first real exercise is the next tag.

History

The first two commits raised the shared action's timeout to 19800 and its poll-interval to 60. The third commit replaces those two settings with the single-request wait above and fixes the docs. It also supersedes #265, which I've closed.

Copilot AI balanced review requested due to automatic review settings October 20, 2026 05:49
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-20T20:26:28.097497Z f26a09b Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔵 Needs a closer look

No defects were identified, but the explicit merge hold awaits Jeremy’s clearance.

No open issues 🎉

What changed in this PR

Extends the GitHub Release wait to accommodate reviewer-approved registry publishes.

Changes:

  • Raises the orchestrator timeout to 5.5 hours.
  • Sets the job timeout to 340 minutes, leaving 10 minutes for setup and completion.

[!TIP]
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or run gh pr ready --undo.
Click "Ready for review" or run gh pr ready to reengage.

File Description
.github/​workflows/​release-github.yml Extends orchestrator and job timeouts for approval-gated publishes.

Review effort: Balanced

@jeremy

jeremy commented Oct 20, 2026

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: 1d08ed6310

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Nice work!

Reviewed commit: 1d08ed6310

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…se-crates' docs

The shared orchestrator lists each language's runs separately, one or two
requests apiece per poll; over a 5.5-hour approval wait that outruns
GITHUB_TOKEN's quota. A step ahead of it now waits with one
actions/runs?head_sha= request per poll, matched by workflow path with any
@ref suffix stripped, retrying a failed listing on the next poll. The
shared action then takes one pass to report and create the release.

CONTRIBUTING.md and release-rust.yml said release-crates has no required
reviewers; it requires sip or cli.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Changes recommended

The polling counter excludes processing time, allowing the job to expire before shared failure reporting runs.

1 open issue

Review effort: Balanced

Comment thread .github/workflows/release-github.yml Outdated
Each poll's request and jq add to the 30s sleep, so a counter of sleeps
alone ran past 5.5 hours and could reach the job's 340-minute limit before
the shared action reported. SECONDS measures the wall clock.
@jeremy

jeremy commented Oct 20, 2026

Copy link
Copy Markdown
Member Author

@codex review

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The release-critical polling handoff remains unverified end to end, and merging is explicitly held pending Jeremy’s clearance.

No open issues 🎉

1 resolved since last review

Review effort: Balanced

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: f26a09b95e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jeremy
jeremy merged commit f8cbeaf into main Oct 21, 2026
36 checks passed
@jeremy
jeremy deleted the release-wait-for-approvals branch October 21, 2026 03:47
jeremy added a commit that referenced this pull request Oct 21, 2026
#264 landed a 5.5-hour wait step ahead of release-orchestrate and gave
the orchestrator timeout '1'. Rebased onto it, this branch's
timeout: '19800' became a second timeout key in the same with: block,
which actionlint (GitHub Actions audit) rejects.

release-github.yml is now main's copy. actionlint passes on the three
release workflows.
jeremy added a commit that referenced this pull request Oct 21, 2026
#264 landed a 5.5-hour wait step ahead of release-orchestrate and gave
the orchestrator timeout '1'. Rebased onto it, this branch's
timeout: '19800' became a second timeout key in the same with: block,
which actionlint (GitHub Actions audit) rejects.

release-github.yml is now main's copy. actionlint passes on the three
release workflows.
jeremy added a commit that referenced this pull request Oct 21, 2026
#246)

* Wait for a reviewer before tagging the Go module and publishing Kotlin

* Leave the go/ module tag to the approved release job

make release tagged and pushed go/vX.Y.Z beside vX.Y.Z, so the module
was resolvable through proxy.golang.org before the release-go reviewer
approved, and release-go.yml's tag job found the tag already there.

make release now pushes vX.Y.Z alone; release-go.yml's tag job, behind
the release-go environment, creates go/vX.Y.Z. CONTRIBUTING says so.

The release workflow test now asserts no go/ tag and a push of vX.Y.Z
alone; it failed on that assertion against the old Makefile and passes
now (run with #266's PATH fix applied locally, which macOS needs).

Keeping the local go/ tag and moving the approval elsewhere was
rejected: the proxy serves a tag the moment it exists.

* Drop the orchestrator timeout that main's wait step already covers

#264 landed a 5.5-hour wait step ahead of release-orchestrate and gave
the orchestrator timeout '1'. Rebased onto it, this branch's
timeout: '19800' became a second timeout key in the same with: block,
which actionlint (GitHub Actions audit) rejects.

release-github.yml is now main's copy. actionlint passes on the three
release workflows.
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.

2 participants