Ship a prebuilt Homebrew bottle on release; drop install.sh#69
Merged
Conversation
Tag-triggered release.yml that builds the Python wheel/sdist + an arm64 macOS bottle, publishes them to the GitHub Release, and finalizes the Homebrew formula (url + sha256 + bottle block) so `brew install assembly` stops compiling the Rust deps from source. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drop release wheels/sdist, the moving stable tag, and the PEP 503 index; pipx/uv stay on git+https. Add install.sh removal. Reframe around the goal: simplest install/upgrade for Mac devs, minimal CI. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Homebrew (bottle) + pipx/uv git+https are the supported install paths; drop the curl|sh installer, its unit + smoke tests, the install_script marker, and the install-smoke CI job. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The .pre-commit-config.yaml was missed by the removal grep (.yaml vs .yml); align its pytest -m filter with check.sh (exclude e2e + install) and fix the stale install.sh comments. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
release.yml builds an arm64 macOS bottle on a vX.Y.Z tag, publishes it to the GitHub Release, and opens a formula PR (url+sha256+bottle block) for a maintainer to merge. Built-in GITHUB_TOKEN only; no special secret. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Match ci.yml's convention (monorepo subpath, no vX tag). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- sha256 pin now consumes the whole placeholder line (matches formula-install); the old [0-9a-f]* regex left '* 64 # ...' dangling on the first release. - guard for exactly one bottle tarball before merge. - gh release create/upload and the formula branch/PR are now idempotent so a retried publish job doesn't die on 'already exists'. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Release is now: version-bump PR -> tag push -> release.yml builds the bottle + opens the formula PR -> admin-merge. Drop the install.sh smoke step and the squatted-PyPI install.sh caveat. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Minor markdown style (MD032). Not gate-enforced (.claude/ is outside the markdownlint glob), just consistent list formatting. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
cut_release.sh derives the version from pyproject.toml and tags/pushes only when the tree is clean, on main, and in sync with origin (gated by shellcheck). README's Development section gains a Releasing runbook (and fixes the stale `uv sync --extra dev`, which errors — dev is a dependency-group); release-prep step 3 now calls the script. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
alexkroman
added a commit
that referenced
this pull request
Jun 11, 2026
DX improvements mined from recent sessions: - Add a PreToolUse(Bash) hook that blocks `git commit` unless ./scripts/check.sh passed for the current working tree. check.sh now records a tree signature (scripts/gate_marker.py) into .git/aai-gate-pass on success; the hook (.claude/hooks/require-gate-before-commit.sh) re-verifies it. The signature is staging-invariant but edit-sensitive, so any change after the gate re-requires a green run. Escape hatch for deliberate WIP commits: AAI_ALLOW_COMMIT=1. - Document the tag-triggered release/Homebrew-bottle pipeline in AGENTS.md (release.yml, cut_release.sh, bump_minor.sh, update_check.py) — it was committed in #69/#70 but undocumented. gate_marker.py is stdlib-only (runs from the hook and from check.sh without uv); both new shell paths are added to check.sh's shellcheck list. Co-authored-by: Alex Kroman <alex@assemblyai.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Make
brew install assembly/brew upgrade assemblya fast prebuilt install for Mac developers, and simplify the install story to two paths..github/workflows/release.yml— a tag-triggered pipeline. On avX.Y.Ztag push: thebottlejob (macOS arm64,arm64_sonoma) pins the formula to the tag source, builds a Homebrew bottle, and merges thebottle doblock intoFormula/assembly.rb; thepublishjob creates the GitHub Release with the bottle attached and opens arelease/<tag>-formulaPR. Uses only the built-inGITHUB_TOKEN(no special secret) — a maintainer merges the formula PR with the admin override (aGITHUB_TOKENPR doesn't trigger CI). Release-create + branch/PR steps are idempotent so a retried run doesn't fail.brew installdrags inrust→llvm/z3/libgit2and a secondpython@3.14just to compilepydantic-core/jiter/cryptography. A bottle skips all of that. (pipx/uv were never affected — they pull prebuilt dependency wheels from PyPI.)install.shone-liner and everything supporting it: the script, its unit + smoke tests, theinstall_scriptpytest marker, theinstall-smokeCI job, and the.pre-commit-config.yaml/doc references. Install is now Homebrew bottle (primary) + pipx/uvgit+https(fallback).release-prepskill for the tag→bottle→formula-PR flow; note the bottle in the README; addbrew trust assemblyai/cliand drop--HEADfrom the Homebrew instructions. Design spec + implementation plan underdocs/superpowers/.Scope is deliberately lean: arm64 macOS bottle only (Apple Silicon is the dominant
brewaudience; Intel Mac + Linux fall back to source or pipx/uv), GitHub Releases hosting, no release wheels / moving tag / PEP 503 index.Test Plan
./scripts/check.sh→All checks passed.(1536 tests, 99.45% coverage; diff-cover + mutation gate have no changedaai_clilines)actionlint+zizmorclean onrelease.yml; all fouruses:SHA-pinned; no${{ }}interpolated inrun:bodiessha256 "0" * 64placeholder (replaces the whole line, leaves resource sha256s untouched)install.sh/install_scriptreferences remainv0.1.0tag): push the tag, confirmrelease.ymlbuilds the bottle + opens the formula PR, merge it, thenbrew install assemblyon a clean arm64 Mac pulls the bottle with norust/llvminbrew deps🤖 Generated with Claude Code