Owner decision 2026-11-08 (Q3): port the full release pipeline, including Homebrew and Scoop.
.gitea/workflows/release.yaml (on v* tags; the tag must equal packages/cli/package.json):
linux (container-build, node 22.23.4, Bun 1.4.4 sha256-pinned): scripts/release.mjs --skip-binaries as the gate (npm ci, generate drift, build, readiness for finals, tests, lint, TUI tests + typecheck, pack dry runs); binaries linux-x64/arm64 (+musl) and darwin-x64 (cross); verify-binary.sh; draft Gitea release with those binaries.
macos (qqq-macos-arm64) and windows (qqq-windows-vm6218): pinned Node (SHASUMS256) + Bun (pinned sha256), npm ci/build/test/lint, native --host binary, verify-binary smoke, upload to the draft. (Inline: the shared macos.yaml/windows.yaml were not on ci-workflows main yet.)
publish: SHA256SUMS from the jobs' checksums; publish the release, then download every asset and sha256sum --check; npm publish the four packages to the QRun-IO Gitea npm registry with PACKAGES_TOKEN (skip a version that already exists; prerelease -> next); update-packaging.mjs; for final versions push to QRun-IO/homebrew-tap and QRun-IO/scoop-bucket when PACKAGES_TOKEN can write them, else attach qqq.rb/qqq.json to the release for a PR.
Also: release.mjs accepts its own tag at HEAD and prints the new path; install.sh, update-packaging(+test), formula and manifest now download from Gitea v<version> releases (Scoop checkver uses the Gitea API); publishConfig -> Gitea; build.yaml branches only; docs/release-runbook.md rewritten. Not automated: macOS/Windows signing (no credentials on runners); no Gitea attestation equivalent.
Versions for the proof tag v1.0.1-rc.1: cli/core 1.0.1-rc.1, client 1.8.1-rc.1 (content changed since 1.0.0), conformance 1.6.0 unchanged. Does not touch the owner's release/1.1.0 branch.
Owner decision 2026-11-08 (Q3): port the full release pipeline, including Homebrew and Scoop.
**`.gitea/workflows/release.yaml`** (on `v*` tags; the tag must equal `packages/cli/package.json`):
1. `linux` (container-build, node 22.23.4, Bun 1.4.4 sha256-pinned): `scripts/release.mjs --skip-binaries` as the gate (npm ci, generate drift, build, readiness for finals, tests, lint, TUI tests + typecheck, pack dry runs); binaries linux-x64/arm64 (+musl) and darwin-x64 (cross); `verify-binary.sh`; **draft** Gitea release with those binaries.
2. `macos` (`qqq-macos-arm64`) and `windows` (`qqq-windows-vm6218`): pinned Node (SHASUMS256) + Bun (pinned sha256), npm ci/build/test/lint, native `--host` binary, verify-binary smoke, upload to the draft. (Inline: the shared macos.yaml/windows.yaml were not on ci-workflows main yet.)
3. `publish`: SHA256SUMS from the jobs' checksums; publish the release, then download every asset and `sha256sum --check`; npm publish the four packages to the QRun-IO Gitea npm registry with PACKAGES_TOKEN (skip a version that already exists; prerelease -> `next`); `update-packaging.mjs`; for final versions push to QRun-IO/homebrew-tap and QRun-IO/scoop-bucket when PACKAGES_TOKEN can write them, else attach `qqq.rb`/`qqq.json` to the release for a PR.
Also: release.mjs accepts its own tag at HEAD and prints the new path; install.sh, update-packaging(+test), formula and manifest now download from Gitea `v<version>` releases (Scoop checkver uses the Gitea API); publishConfig -> Gitea; build.yaml branches only; `docs/release-runbook.md` rewritten. Not automated: macOS/Windows signing (no credentials on runners); no Gitea attestation equivalent.
Versions for the proof tag `v1.0.1-rc.1`: cli/core 1.0.1-rc.1, client 1.8.1-rc.1 (content changed since 1.0.0), conformance 1.6.0 unchanged. Does not touch the owner's `release/1.1.0` branch.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
.gitea/workflows/release.yaml replaces the orb publish and the GitHub release:
the scripts/release.mjs gate, Linux + darwin-x64 binaries in the container,
darwin-arm64 and windows-x64 built and smoke-tested on the native runners, a
draft Gitea release, SHA256SUMS checked against the published downloads, the
four packages to the QRun-IO Gitea npm registry (an existing version is
skipped, each package's own version picks next/latest), and for final versions
the Homebrew tap and Scoop bucket (pushed when PACKAGES_TOKEN can write them,
else the filled files are attached to the release).
release.mjs accepts its tag when it points at HEAD and prints the new path;
install.sh, update-packaging, the formula and the manifest use Gitea
downloads under v<version>; publishConfig points at the Gitea registry;
build.yaml now runs on branches only; the runbook describes the new path.
Versions: cli and core 1.0.1-rc.1, client 1.8.1-rc.1 (content changed since
1.0.0), conformance 1.6.0 unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The footer assertion only accepted X.Y.Z, so any -rc.N version failed it.
It now compares against CLI_VERSION exactly (port masked), which is stricter.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Owner decision 2026-11-08 (Q3): port the full release pipeline, including Homebrew and Scoop.
.gitea/workflows/release.yaml(onv*tags; the tag must equalpackages/cli/package.json):linux(container-build, node 22.23.4, Bun 1.4.4 sha256-pinned):scripts/release.mjs --skip-binariesas the gate (npm ci, generate drift, build, readiness for finals, tests, lint, TUI tests + typecheck, pack dry runs); binaries linux-x64/arm64 (+musl) and darwin-x64 (cross);verify-binary.sh; draft Gitea release with those binaries.macos(qqq-macos-arm64) andwindows(qqq-windows-vm6218): pinned Node (SHASUMS256) + Bun (pinned sha256), npm ci/build/test/lint, native--hostbinary, verify-binary smoke, upload to the draft. (Inline: the shared macos.yaml/windows.yaml were not on ci-workflows main yet.)publish: SHA256SUMS from the jobs' checksums; publish the release, then download every asset andsha256sum --check; npm publish the four packages to the QRun-IO Gitea npm registry with PACKAGES_TOKEN (skip a version that already exists; prerelease ->next);update-packaging.mjs; for final versions push to QRun-IO/homebrew-tap and QRun-IO/scoop-bucket when PACKAGES_TOKEN can write them, else attachqqq.rb/qqq.jsonto the release for a PR.Also: release.mjs accepts its own tag at HEAD and prints the new path; install.sh, update-packaging(+test), formula and manifest now download from Gitea
v<version>releases (Scoop checkver uses the Gitea API); publishConfig -> Gitea; build.yaml branches only;docs/release-runbook.mdrewritten. Not automated: macOS/Windows signing (no credentials on runners); no Gitea attestation equivalent.Versions for the proof tag
v1.0.1-rc.1: cli/core 1.0.1-rc.1, client 1.8.1-rc.1 (content changed since 1.0.0), conformance 1.6.0 unchanged. Does not touch the owner'srelease/1.1.0branch.🤖 Generated with Claude Code