Skip to content

feat(release): add alpha releases from pull request branches - #626

Merged
guibeira merged 1 commit into
mainfrom
feat/alpha-worker-releases
Jul 29, 2026
Merged

guibeira merged 1 commit into
mainfrom
feat/alpha-worker-releases

Conversation

@guibeira

@guibeira guibeira commented Jul 29, 2026 •

Copy link
Copy Markdown
Collaborator

What changed

Adds an Alpha Release workflow for publishing a worker from an unmerged pull-request branch.

The workflow checks out an explicit source ref, creates an ephemeral -alpha.N version commit, and pushes only its annotated tag. The existing release pipeline then publishes the artifact as a GitHub prerelease on the experimental registry channel.

The release SOP now documents how to run the workflow with a PR branch or refs/pull/<number>/head.

Why

This enables integration testing of a PR's release artifact without modifying the PR branch, main, latest, or next.

Validation

  • actionlint .github/workflows/alpha-release.yml
  • pytest .github/scripts/tests — 158 passed (containerized)

Summary by CodeRabbit

  • New Features

    • Added a workflow for creating integration-testing alpha releases from a selected feature branch or pull request.
    • Supports choosing the worker module and alpha version bump strategy.
    • Publishes an annotated prerelease tag without modifying the source branch.
  • Documentation

    • Added instructions for creating alpha releases and clarified experimental channel behavior and source-branch restrictions.

@vercel

vercel Bot commented Jul 29, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
workers Ready Ready Preview, Comment Jul 29, 2026 5:15pm
workers-tech-spec Ready Ready Preview, Comment Jul 29, 2026 5:15pm

Request Review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026 •

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a manually triggered GitHub Actions workflow that creates worker alpha releases from non-main refs, updates and verifies versions, synchronizes Cargo.lock, pushes only an annotated tag, and documents the procedure.

Changes

Worker alpha release

Layer / File(s) Summary
Release inputs and source guard
.github/workflows/alpha-release.yml
Defines manual inputs, worker-specific concurrency, contents write permission, source checkout, and a guard rejecting refs that resolve to main.
Manifest version preparation
.github/workflows/alpha-release.yml
Discovers the worker manifest, calculates and verifies the alpha version, and synchronizes Cargo.lock.
Tag publication and operating procedure
.github/workflows/alpha-release.yml, docs/sops/release.md
Checks for tag collisions, commits version changes, pushes only the annotated tag, and documents the pull-request alpha release process.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant AlphaRelease
  participant Git
  participant GitHub
  Operator->>AlphaRelease: Select source ref, worker, and bump
  AlphaRelease->>Git: Checkout and reject main
  AlphaRelease->>Git: Calculate version and update manifest
  AlphaRelease->>Git: Commit changes and create annotated tag
  AlphaRelease->>GitHub: Push only the alpha tag
Loading

Suggested reviewers: ytallo

Poem

A rabbit taps the release-door bright,
An alpha tag hops into flight.
The branch stays still, the tag goes free,
With experimental carrots for all to see!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding alpha releases for pull request branches.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Fix failing CI checks
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/alpha-worker-releases

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@guibeira guibeira added the no-ticket PR deliberately has no Linear ticket (bump/typo/CI-only) label Jul 29, 2026
@github-actions

Copy link
Copy Markdown
Contributor

skill-check — worker

0 verified, 49 skipped (no docs/).

Layer Result
structure ✓
vale ✓
ai ✓
render ✓

Four for four. Nicely done.

@guibeira
guibeira marked this pull request as ready for review July 29, 2026 17:33
@guibeira
guibeira merged commit ac0f750 into main Jul 29, 2026
16 of 18 checks passed

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/alpha-release.yml:
- Around line 97-101: Update the Checkout source ref step to disable persisted
credentials, then explicitly fetch the trusted release tooling and _lib.py from
main before invoking manifest_version.py. Ensure release operations use those
main-sourced scripts rather than files from inputs.source_ref, and configure a
narrowly scoped push token only for the explicit git push of the release tag.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8fe745ca-5f7f-47cc-b842-dc9852363cf9

📥 Commits

Reviewing files that changed from the base of the PR and between 0cba488 and 74ff7c1.

📒 Files selected for processing (2)
  • .github/workflows/alpha-release.yml
  • docs/sops/release.md

Comment on lines +97 to +101
- name: Checkout source ref
uses: actions/checkout@v5
with:
fetch-depth: 0
ref: ${{ inputs.source_ref }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🔴 Critical | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== locate workflow files =="
fd -a 'alpha-release\.yml$|.*release.*\.ya?ml$|.*workflow.*\.ya?ml$' .github/workflows | sed 's#^\./##'

echo "== relevant workflow excerpt =="
if [ -f .github/workflows/alpha-release.yml ]; then
  nl -ba .github/workflows/alpha-release.yml | sed -n '1,240p'
fi

echo "== search manifest_version.py and _lib.py =="
git ls-files | grep -E '(^|/)manifest_version\.py$|(^|/)_lib\.py$|\.github/scripts/' | sed -n '1,200p'

Repository: iii-hq/workers

Length of output: 416


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== alpha-release.yml excerpt with line numbers =="
python3 - <<'PY'
from pathlib import Path
p = Path('.github/workflows/alpha-release.yml')
for i, line in enumerate(p.read_text().splitlines(), 1):
    if 1 <= i <= 250:
        print(f"{i:4d}\t{line}")
PY

echo "== manifest_version.py candidates =="
git ls-files | grep -E '(^|/)manifest_version\.py$|(^|/)_lib\.py$|(^|/)\.github/scripts/[^/]+$' || true

echo "== all manifest_version.py locations =="
python3 - <<'PY'
from pathlib import Path
import subprocess
files = subprocess.check_output(['git', 'ls-files'], text=True).splitlines()
for f in files:
    if f.endswith('manifest_version.py') or f.endswith('_lib.py'):
        print(f)
PY

Repository: iii-hq/workers

Length of output: 7929


🌐 Web query:

actions/checkout persist-credentials default true README

💡 Result:

The persist-credentials input for the actions/checkout GitHub Action determines whether the authentication token or SSH key used for the checkout is configured in the local git configuration [1][2]. By default, persist-credentials is set to true [1][2]. When enabled, this allows subsequent steps in the same job to execute authenticated git commands using those credentials [3][4]. The action removes these credentials from the local git configuration during the post-job cleanup phase [3][5]. If you wish to prevent these credentials from being stored in the local git configuration, you can set persist-credentials to false [3][6]. This is often recommended for security purposes to ensure that subsequent steps in a workflow cannot access the repository token if they do not require it [7].

Citations:


Do not execute release tooling from the caller-selected ref.

The workflow checks out inputs.source_ref but later runs .github/scripts/manifest_version.py from actions/checkout’s default persisted GITHUB_TOKEN; after that, Git commands can push arbitrary refs before the explicit git push origin "$TAG". Keep checkout credentials disabled for the selected source, fetch the trusted release tooling/_lib.py from main, and use a scoped push token only where the tag is pushed.

🧰 Tools
🪛 zizmor (1.28.0)

[warning] 97-101: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/alpha-release.yml around lines 97 - 101, Update the
Checkout source ref step to disable persisted credentials, then explicitly fetch
the trusted release tooling and _lib.py from main before invoking
manifest_version.py. Ensure release operations use those main-sourced scripts
rather than files from inputs.source_ref, and configure a narrowly scoped push
token only for the explicit git push of the release tag.

Source: Linters/SAST tools

guibeira added a commit that referenced this pull request Jul 30, 2026
* Revert "fix(release): trigger alpha tag publish (#633)"

This reverts commit 45b212f.

* Revert "fix(release): trigger alpha publish pipeline (#632)"

This reverts commit 4f1b339.

* Revert "fix(ci): simplify alpha release inputs (#628)"

This reverts commit 72a6595.

* Revert "feat(release): add alpha releases from pull request branches (#626)"

This reverts commit ac0f750.

* Revert "fix(release): isolate alpha releases (#631)"

This reverts commit 156f5dd.

* Revert "chore(image-resize): bump to v0.1.13-alpha.1"

This reverts commit 0cba488.

* Revert "feat(release): split version suffix from registry channel (#615)"

This reverts commit d0bc06d.

This branch was successfully deployed

2 active deployments
Preview – workers-tech-spec — 74ff7c1d Deployed Jul 29, 2026 by vercel[bot]
Preview – workers — 74ff7c1d Deployed Jul 29, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-ticket PR deliberately has no Linear ticket (bump/typo/CI-only)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant