Expand release platforms to Linux and Windows ARM - #99
Conversation
Ship aarch64-unknown-linux-gnu and aarch64-pc-windows-msvc from native ARM runners, map them in update --self, and teach Homebrew and winget to consume the new archives on the next tagged release. Co-authored-by: Anthony Thompson <github@trackdub.com>
📝 WalkthroughWalkthroughThe release matrix now builds Linux and Windows ARM64 artifacts. Self-update, Homebrew, WinGet, release workflows, manifests, and documentation now reference the new archives. ChangesARM64 release support
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 7 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (7 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
✨ Simplify code
Warning Review ran into problems🔥 ProblemsLinked repositories: Public OSS repositories can only analyze public repositories installed in this organization. Analyzed 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. Comment |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Sorry @tonythethompson, you have reached your weekly rate limit of 500000 diff characters.
Please try again later or upgrade to continue using Sourcery
Resolve Homebrew formula test conflict by keeping Linux aarch64 assertions with the staged-archive bin.install "numan" checks. Co-authored-by: Anthony Thompson <github@trackdub.com>
PR Summary by QodoExpand release builds and packaging to Linux and Windows ARM64
AI Description
Diagram
High-Level Assessment
Files changed (15)
|
Greptile SummaryThe PR expands release and package-manager support to native Linux and Windows ARM builds.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| .github/workflows/release.yml | Adds native Linux and Windows ARM build targets using archive names consistent with downstream consumers. |
| src/cmd/self_update.rs | Maps the new ARM platform triples to their corresponding signed release archives and adds focused tests. |
| scripts/render_homebrew_formula.py | Requires Linux ARM for current formulas while retaining an explicit two-asset legacy rendering mode. |
| .github/workflows/homebrew.yml | Publishes ARM-aware formulas and fails closed on automated releases missing the Linux ARM archive. |
| .github/workflows/winget.yml | Verifies both Windows architectures and limits the releaser to Windows MSVC archives. |
| scripts/test_render_homebrew_formula.py | Covers current and legacy digest parsing, formula rendering, and CLI output paths. |
| packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml | Scopes the historical x64 nested executable metadata to its installer entry without adding nonexistent ARM64 artifacts. |
Reviews (6): Last reviewed commit: "Fail closed when Linux ARM archive missi..." | Re-trigger Greptile
Code Review by Qodo
1.
|
Qodo FixerNo findings are within the configured fix scope. To change which findings are fixed, adjust the setting on your Qodo configuration page. |
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 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 `@CHANGELOG.md`:
- Line 13: Update the changelog entry to describe this as “Homebrew Linux ARM
archive support” rather than “Homebrew Linux ARM bottle URLs,” preserving the
existing winget text.
In `@packaging/homebrew/README.md`:
- Line 38: Update the manual dry-run example in the README to use a release that
includes all three Homebrew archives, including
numan-<version>-aarch64-unknown-linux-gnu.tar.gz; alternatively, clearly label
the existing v0.1.5 example as future-only.
In
`@packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml`:
- Around line 18-24: Remove the ARM64 installer entries, including their
NestedInstallerFiles, InstallerUrl, placeholder InstallerSha256, and
Architecture fields, from
packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml
(18-24),
packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml
(18-24),
packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml
(18-24), and
packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml
(18-24); retain the supported installer entries.</code>
In `@README.md`:
- Around line 96-98: Update the Windows PowerShell installation example to use
the architecture-neutral archive pattern numan-VERSION-TARGET.zip instead of
hard-coding x86_64-pc-windows-msvc. Keep the command valid for both
x86_64-pc-windows-msvc and aarch64-pc-windows-msvc targets.
In `@scripts/render_homebrew_formula.py`:
- Around line 25-30: Make the Homebrew release flow backward-compatible with
pre-ARM releases: in scripts/render_homebrew_formula.py at lines 25-30, add an
explicit legacy mode that accepts the historical three-asset contract; in
.github/workflows/homebrew.yml at line 121, avoid requiring the Linux ARM asset
when recovering a pre-ARM release; and in packaging/homebrew/README.md at line
38, replace the v0.1.5 example with an ARM-enabled release or clearly mark it as
future-only.
🪄 Autofix
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: ASSERTIVE
Plan: Pro Plus
Run ID: 740b5231-dc73-42b3-a97f-0c043b28904b
📒 Files selected for processing (15)
.github/workflows/homebrew.yml.github/workflows/release.yml.github/workflows/winget.ymlCHANGELOG.mdREADME.mddocs/PACKAGING.mddocs/RELEASING.mdpackaging/homebrew/README.mdpackaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yamlpackaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yamlpackaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yamlpackaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yamlscripts/render_homebrew_formula.pyscripts/test_render_homebrew_formula.pysrc/cmd/self_update.rs
🔗 Linked repositories identified
CodeRabbit considers these linked repositories for cross-repo context during reviews:
tonythethompson/QuickShell(manual)tonythethompson/numan(manual)tonythethompson/dependency-chain-substrate(manual)
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
- GitHub Check: Greptile Review
🧰 Additional context used
📓 Path-based instructions (11)
!**/.env,!**/credentials.json,!**/*.pem
📄 CodeRabbit inference engine (CLAUDE.md)
Do not commit files that appear to contain secrets, including .env, credentials.json, and PEM files; warn before doing so even if explicitly requested.
Files:
.github/workflows/homebrew.ymldocs/PACKAGING.mdCHANGELOG.md.github/workflows/winget.ymlscripts/test_render_homebrew_formula.pypackaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yamlsrc/cmd/self_update.rsdocs/RELEASING.mdpackaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yamlpackaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yamlpackaging/homebrew/README.mdpackaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yamlREADME.mdscripts/render_homebrew_formula.py.github/workflows/release.yml
**/*
📄 CodeRabbit inference engine (CLAUDE.md)
**/*: Use Serena's semantic, symbol-aware tools as the primary tools for reading and editing code; use built-in Read, Glob, Grep, and Edit only under the stated exceptions.
Before editing a code file, inspect its symbol overview, read the specific symbols being changed, and edit them with Serena's symbol-aware tools.
Understand the existing code before changing it and make the smallest change that satisfies the request; avoid unrelated cleanup, premature abstractions, unnecessary error handling, feature flags, and compatibility shims.
Prefer editing existing files over creating new ones, and never create Markdown or README files unless explicitly requested.
For exploratory questions, provide a 2–3 sentence recommendation with the main tradeoff and do not implement until the user agrees.
For UI or frontend changes that cannot be tested in a browser, explicitly state that browser testing was not performed rather than claiming success.
Address security issues when discovered, including injection, XSS, SQL injection, path traversal, and secret leaks.
Pause and obtain confirmation before destructive, hard-to-reverse, externally visible, or third-party-upload actions, including deleting files or branches, dropping tables, force-pushing, modifying CI/CD, posting externally, or uploading content.
When blocked, investigate the root cause instead of bypassing it with --no-verify, --force, or deletion; investigate unfamiliar files, branches, and configuration before deleting them.
Only commit when explicitly asked; do not proactively update git configuration or push changes.
Do not skip Git hooks unless explicitly asked; if a pre-commit hook fails, fix the issue, re-stage, and create a new commit rather than amending.
Stage files by name rather than using git add -A or git add ., to avoid accidentally including secrets or large binaries.
Use a HEREDOC for commit messages, and add co-author attribution only when the user explicitly requests the exact trailer.
Do not force-pus...
Files:
docs/PACKAGING.mdCHANGELOG.mdscripts/test_render_homebrew_formula.pypackaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yamlsrc/cmd/self_update.rsdocs/RELEASING.mdpackaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yamlpackaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yamlpackaging/homebrew/README.mdpackaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yamlREADME.mdscripts/render_homebrew_formula.py
**/*.{rs,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Match existing naming, module layout, and documentation level in the file being edited; update
AGENTS.md,docs/, or command help when structure, conventions, or user-visible behavior changes.Tests must cover failure modes, not only successful execution.
Files:
docs/PACKAGING.mdCHANGELOG.mdsrc/cmd/self_update.rsdocs/RELEASING.mdpackaging/homebrew/README.mdREADME.md
**/*.{rs,md,toml}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Use the repository's established serialization and module conventions rather than introducing unrelated refactors.
Files:
docs/PACKAGING.mdCHANGELOG.mdsrc/cmd/self_update.rsdocs/RELEASING.mdpackaging/homebrew/README.mdREADME.md
**/*.md
📄 CodeRabbit inference engine (REVIEW.md)
Update documentation and
AGENTS.mdwhen project structure or conventions change.
Files:
docs/PACKAGING.mdCHANGELOG.mddocs/RELEASING.mdpackaging/homebrew/README.mdREADME.md
**/*.{cs,py}
📄 CodeRabbit inference engine (Custom checks)
**/*.{cs,py}: When modifying managed host or containerized readiness components, never callStopTrackedHost,RestartAsync, or equivalent host-kill methods unless active request leases are confirmed to be zero. Busy hosts reportingbusy_reasonoractive_requests > 0must not be restarted, and a ready/available provider must not be downgraded solely because a background probe refresh began.
ForSessionWorkflowStage, preserve strictly ascending order:Foundation < MediaLoaded < Transcribed < Diarized < Translated < TtsGenerated. Comparisons must use enum members rather than raw integer literals. New or renumbered members require a legacy-compatible JSON converter, and reordered enums require checking every solution-wide inequality comparison for preserved semantic meaning.
Files:
scripts/test_render_homebrew_formula.pyscripts/render_homebrew_formula.py
**/*.{js,jsx,ts,tsx,py,java,go,rs,rb,php,c,cpp,h,hpp,cs,swift,kt,kts}
📄 CodeRabbit inference engine (CLAUDE.md)
Add comments only when the WHY is non-obvious; do not narrate what the code does, reference the current task, or reference the PR in comments.
Files:
scripts/test_render_homebrew_formula.pysrc/cmd/self_update.rsscripts/render_homebrew_formula.py
**/*.rs
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.rs: Use the Rust 2021 edition.
Useanyhow::Resultwith.context(...)in application code; usethiserrorfor library error types that callers match on.
Useclapderive macros for CLI definitions.
Useserdewithserde_jsonortomlfor serialization.
Function parameters must use&Path, not&PathBuf.
Library code must not panic; error paths should returnanyhow::Resultwith context where appropriate.
Add or update tests for behavior changes, including relevant failure paths.
New mutating code paths must acquire the mutation lock viaacquire_mutation_lock(root)and snapshot the lockfile before writes.
Lockfile, journal, and state-file JSON writes must usewrite_json_atomic.
numan installmust write only to$NUMAN_ROOT; it must not invoke Nu or register plugins/autoloads.
Onlyactivateanddeactivatemay modify Nu integration state.
Treat the lockfile as the authoritative source of truth; derived projections such as autoload state must not be authoritative.
Install payloads under versioned, content-addressed paths and never overwrite them in place.
Never overwrite foreign autoload files; respectOWNERSHIP_MARKER.
Pass plugin paths through environment variables only; do not use runtime interpolation in Nu program strings.
**/*.rs: All CI gates must pass:cargo test,cargo clippy -- -D warnings, andcargo fmt --check.
Every mutating command—includinginstall,remove,update,gc, and futurenupm import—must callacquire_mutation_lock(root).
Lockfiles, journals, and state files must usewrite_json_atomic; partial writes are not allowed.
Pending activation, autoload, and lifecycle journals must be stored under$NUMAN_ROOT/state/.
Module autoload identity must match all four fields: Nu executable hash, Nu version, vendor autoload directory, and managed file path; the lockfilemodule_activationvalue is authoritative.
Never overwrite foreign autoload files; respectOWNERSHIP_MARKER.
Pass paths to Nu only throu...
Files:
src/cmd/self_update.rs
**/*.{rs,toml}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Run and keep
cargo fmt/rustfmtclean, and ensurecargo clippy -- -D warningspasses.
Files:
src/cmd/self_update.rs
**/*.{rs,nu}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.{rs,nu}: Real-Nu acceptance tests must be marked#[ignore]and should be run when changes affect activation or nupm import; unit tests must not spawn realnuand should use injectable seams such asFakeCandidateRunneror registrars.
The nupm integration must be read-only towardNUPM_HOME, must not executebuild.nu, and must not perform bidirectional synchronization.Unit tests must use
FakeCandidateRunneror injectable registrars and must not spawn a realnuprocess.
Files:
src/cmd/self_update.rs
src/**/*.rs
📄 CodeRabbit inference engine (AGENTS.md)
Use
anyhow::Resultfor application code,thiserrorfor library error types, add context with.context(...)or?, and never panic in library code.
Files:
src/cmd/self_update.rs
🔍 Remote MCP GitHub Copilot
Additional review context
- PR
#99is open, non-draft, and currently blocked. ARM release builds have not yet run; existing checks cover only Ubuntu, Windows, and macOS test jobs. - The latest published release, v0.2.1, contains only three platform archives: Linux x86_64, Windows x86_64, and macOS ARM64. The new ARM archives therefore remain unvalidated until the next tagged release.
- The modified 0.1.3/0.1.4 WinGet sample manifests point to ARM64 assets that do not exist in the corresponding v0.1.4 release and use an all-zero SHA256 placeholder. The WinGet README also documents installing from these local manifests, so ARM64 local installation will not work until these are clearly treated as examples or updated with real release data.
- The checked-in Homebrew formula remains at version 0.1.5 and has no Linux ARM stanza; only the renderer and publishing workflow add Linux ARM support. The formula will not reflect ARM support until a subsequent release-triggered Homebrew update runs.
🔇 Additional comments (7)
.github/workflows/release.yml (1)
103-111: 🩺 Stability & AvailabilityValidate both ARM release jobs before release.
The supplied status shows that no ARM release build has run. Run both native ARM jobs through the normal release validation path. Verify build, packaging, archive layout, and signed checksum publication before marking ARM64 support ready.
Source: MCP tools
src/cmd/self_update.rs (1)
95-104: 📐 Maintainability & Code QualityRun the required Rust gates before merge.
Run
cargo fmt --check,cargo clippy -- -D warnings, andcargo test. The supplied status does not establish that these gates passed for this change.As per coding guidelines, “All CI gates must pass:
cargo test,cargo clippy -- -D warnings, andcargo fmt --check.”Also applies to: 653-665, 681-693
Sources: Coding guidelines, MCP tools
.github/workflows/winget.yml (1)
69-81: LGTM!Also applies to: 83-88
scripts/render_homebrew_formula.py (1)
61-61: LGTM!Also applies to: 96-99
scripts/test_render_homebrew_formula.py (1)
34-54: LGTM!Also applies to: 67-77, 88-101, 111-118, 142-142
docs/PACKAGING.md (1)
54-55: 🗄️ Data Integrity & IntegrationVerify the ARM package readiness claims before marking these rows
yes.The current Homebrew formula is still v0.1.5 without a Linux ARM branch. The versioned WinGet ARM manifests reference missing assets and all-zero hashes. If this matrix describes current availability, mark these channels pending or example-only. If it describes post-release support, state that explicitly and update the artifacts after the first five-archive release.
Source: MCP tools
docs/RELEASING.md (1)
50-50: LGTM!
Clarify changelog and README wording, use TARGET.zip in Windows install examples, drop placeholder ARM64 from historical winget samples, and add --legacy-pre-linux-arm for pre-ARM Homebrew recovery. Co-authored-by: Anthony Thompson <github@trackdub.com>
No published release ships Linux ARM digests yet, so keep numan.rb as the last pre-ARM snapshot and clarify shape vs digest ownership. Co-authored-by: Anthony Thompson <github@trackdub.com>
There was a problem hiding this comment.
Pull request overview
This PR expands Numan’s release/publishing surface to include Linux aarch64 and Windows ARM64 archives, and wires those new targets through self-update, Homebrew, and WinGet release automation.
Changes:
- Add Linux aarch64 + Windows ARM64 triples to the GitHub Release build matrix and to
numan update --selfasset naming/tests. - Extend Homebrew formula rendering + Homebrew publish workflow verification to require Linux ARM release archives.
- Extend WinGet publish workflow verification and asset selection to include both Windows x64 and ARM64 release zips; update sample manifests to show dual-arch
NestedInstallerFileslayouts.
Reviewed changes
Copilot reviewed 16 out of 16 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
src/cmd/self_update.rs |
Adds Linux aarch64 + Windows ARM64 release asset naming support and unit tests. |
scripts/render_homebrew_formula.py |
Requires Linux ARM release archive in SHA256SUMS and renders on_linux/on_arm stanza. |
scripts/test_render_homebrew_formula.py |
Updates unit tests to include Linux ARM digest parsing/rendering assertions. |
README.md |
Documents the new release archive names for Linux aarch64 and Windows ARM64. |
packaging/homebrew/README.md |
Updates required release assets list to include Linux aarch64 archive. |
docs/RELEASING.md |
Updates release checklist to enumerate all five expected platform archives. |
docs/PACKAGING.md |
Updates installation coverage matrix to include Linux aarch64 + Windows ARM64 coverage. |
CHANGELOG.md |
Notes new ARM release assets and packaging workflow updates. |
.github/workflows/release.yml |
Extends release build matrix with ARM runners/targets (Linux aarch64, Windows ARM64). |
.github/workflows/homebrew.yml |
Extends release-asset verification to include Linux aarch64 tarball. |
.github/workflows/winget.yml |
Verifies both Windows x64 + ARM64 assets and tightens the asset selection regex. |
packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml |
Updates sample manifest to show dual-arch nested portable layout. |
packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml |
Same as above (sample dual-arch layout). |
packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml |
Updates sample manifest to show dual-arch nested portable layout. |
packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml |
Same as above (sample dual-arch layout). |
Suppressed comments (4)
packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml:22
- This versioned “sample” manifest for 0.1.3 includes an ARM64 installer entry with a placeholder SHA256 and an URL that implies a 0.1.3 ARM64 asset exists. For historical versions this is likely incorrect and can lead to broken copy/paste manifests; consider commenting out the ARM64 stanza until a real tagged release provides that asset (or move the sample out of versioned manifests).
ManifestType: installer
ManifestVersion: 1.12.0
packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml:22
- This versioned “sample” manifest for 0.1.4 includes an ARM64 installer entry with a placeholder SHA256 and an URL that implies a 0.1.4 ARM64 asset exists. For historical versions this is likely incorrect and can lead to broken copy/paste manifests; consider commenting out the ARM64 stanza until a real tagged release provides that asset (or move the sample out of versioned manifests).
ManifestType: installer
ManifestVersion: 1.12.0
packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml:22
- This versioned “sample” manifest for 0.1.4 includes an ARM64 installer entry with a placeholder SHA256 and an URL that implies a 0.1.4 ARM64 asset exists. For historical versions this is likely incorrect and can lead to broken copy/paste manifests; consider commenting out the ARM64 stanza until a real tagged release provides that asset (or move the sample out of versioned manifests).
ManifestType: installer
ManifestVersion: 1.12.0
packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml:22
- This versioned “sample” manifest for 0.1.3 includes an ARM64 installer entry with a placeholder SHA256 and an URL that implies a 0.1.3 ARM64 asset exists. For historical versions this is likely incorrect and can lead to broken copy/paste manifests; consider commenting out the ARM64 stanza until a real tagged release provides that asset (or move the sample out of versioned manifests).
ManifestType: installer
ManifestVersion: 1.12.0
39ecc64
Co-authored-by: Anthony Thompson <github@trackdub.com>
00eac6d
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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/homebrew.yml:
- Around line 139-149: The Linux ARM asset check in the release-rendering
workflow currently treats any missing archive as a legacy release. Update the
logic around linux_arm_ok and RENDER_ARGS so workflow_run releases fail when
numan-${VERSION}-aarch64-unknown-linux-gnu.tar.gz is absent, while
--legacy-pre-linux-arm is applied only through an explicit recovery action.
In
`@packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml`:
- Around line 3-4: Remove the narrative publishing comments at lines 3-4 from
packaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yaml,
packaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yaml,
packaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yaml,
and
packaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yaml;
leave the manifest data unchanged.
🪄 Autofix
✅ Autofix completed
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: eeb2897f-0c46-496e-bfbb-99e2b8f0d3fa
📒 Files selected for processing (11)
.github/workflows/homebrew.ymlCHANGELOG.mdREADME.mdpackaging/homebrew/README.mdpackaging/homebrew/numan.rbpackaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yamlpackaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yamlpackaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yamlpackaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yamlscripts/render_homebrew_formula.pyscripts/test_render_homebrew_formula.py
🔗 Linked repositories identified
CodeRabbit considers these linked repositories for cross-repo context during reviews:
tonythethompson/QuickShell(manual)tonythethompson/numan(manual)tonythethompson/dependency-chain-substrate(manual)
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
- GitHub Check: Greptile Review
- GitHub Check: Real-Nu acceptance (windows-latest)
- GitHub Check: Test (windows-latest)
- GitHub Check: Analyze (rust)
🧰 Additional context used
📓 Path-based instructions (7)
**/*
📄 CodeRabbit inference engine (CLAUDE.md)
**/*: Use Serena's semantic, symbol-aware tools as the primary tools for reading and editing code; use built-in Read, Glob, Grep, and Edit only under the stated exceptions.
Before editing a code file, inspect its symbol overview, read the specific symbols being changed, and edit them with Serena's symbol-aware tools.
Understand the existing code before changing it and make the smallest change that satisfies the request; avoid unrelated cleanup, premature abstractions, unnecessary error handling, feature flags, and compatibility shims.
Prefer editing existing files over creating new ones, and never create Markdown or README files unless explicitly requested.
For exploratory questions, provide a 2–3 sentence recommendation with the main tradeoff and do not implement until the user agrees.
For UI or frontend changes that cannot be tested in a browser, explicitly state that browser testing was not performed rather than claiming success.
Address security issues when discovered, including injection, XSS, SQL injection, path traversal, and secret leaks.
Pause and obtain confirmation before destructive, hard-to-reverse, externally visible, or third-party-upload actions, including deleting files or branches, dropping tables, force-pushing, modifying CI/CD, posting externally, or uploading content.
When blocked, investigate the root cause instead of bypassing it with --no-verify, --force, or deletion; investigate unfamiliar files, branches, and configuration before deleting them.
Only commit when explicitly asked; do not proactively update git configuration or push changes.
Do not skip Git hooks unless explicitly asked; if a pre-commit hook fails, fix the issue, re-stage, and create a new commit rather than amending.
Stage files by name rather than using git add -A or git add ., to avoid accidentally including secrets or large binaries.
Use a HEREDOC for commit messages, and add co-author attribution only when the user explicitly requests the exact trailer.
Do not force-pus...
Files:
packaging/homebrew/numan.rbpackaging/homebrew/README.mdpackaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yamlCHANGELOG.mdpackaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yamlscripts/render_homebrew_formula.pyscripts/test_render_homebrew_formula.pypackaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yamlpackaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yamlREADME.md
**/*.{js,jsx,ts,tsx,py,java,go,rs,rb,php,c,cpp,h,hpp,cs,swift,kt,kts}
📄 CodeRabbit inference engine (CLAUDE.md)
Add comments only when the WHY is non-obvious; do not narrate what the code does, reference the current task, or reference the PR in comments.
Files:
packaging/homebrew/numan.rbscripts/render_homebrew_formula.pyscripts/test_render_homebrew_formula.py
!**/.env,!**/credentials.json,!**/*.pem
📄 CodeRabbit inference engine (CLAUDE.md)
Do not commit files that appear to contain secrets, including .env, credentials.json, and PEM files; warn before doing so even if explicitly requested.
Files:
packaging/homebrew/numan.rbpackaging/homebrew/README.md.github/workflows/homebrew.ymlpackaging/winget/manifests/t/tonythethompson/numan/0.1.3/tonythethompson.numan.installer.yamlCHANGELOG.mdpackaging/winget/manifests/t/tonythethompson/Numan/0.1.4/tonythethompson.Numan.installer.yamlscripts/render_homebrew_formula.pyscripts/test_render_homebrew_formula.pypackaging/winget/manifests/t/tonythethompson/numan/0.1.4/tonythethompson.numan.installer.yamlpackaging/winget/manifests/t/tonythethompson/Numan/0.1.3/tonythethompson.Numan.installer.yamlREADME.md
**/*.{rs,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Match existing naming, module layout, and documentation level in the file being edited; update
AGENTS.md,docs/, or command help when structure, conventions, or user-visible behavior changes.Tests must cover failure modes, not only successful execution.
Files:
packaging/homebrew/README.mdCHANGELOG.mdREADME.md
**/*.{rs,md,toml}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Use the repository's established serialization and module conventions rather than introducing unrelated refactors.
Files:
packaging/homebrew/README.mdCHANGELOG.mdREADME.md
**/*.md
📄 CodeRabbit inference engine (REVIEW.md)
Update documentation and
AGENTS.mdwhen project structure or conventions change.
Files:
packaging/homebrew/README.mdCHANGELOG.mdREADME.md
**/*.{cs,py}
📄 CodeRabbit inference engine (Custom checks)
**/*.{cs,py}: When modifying managed host or containerized readiness components, never callStopTrackedHost,RestartAsync, or equivalent host-kill methods unless active request leases are confirmed to be zero. Busy hosts reportingbusy_reasonoractive_requests > 0must not be restarted, and a ready/available provider must not be downgraded solely because a background probe refresh began.
ForSessionWorkflowStage, preserve strictly ascending order:Foundation < MediaLoaded < Transcribed < Diarized < Translated < TtsGenerated. Comparisons must use enum members rather than raw integer literals. New or renumbered members require a legacy-compatible JSON converter, and reordered enums require checking every solution-wide inequality comparison for preserved semantic meaning.
Files:
scripts/render_homebrew_formula.pyscripts/test_render_homebrew_formula.py
🪛 Ruff (0.16.1)
scripts/render_homebrew_formula.py
[warning] 64-66: Avoid specifying long messages outside the exception class
(TRY003)
scripts/test_render_homebrew_formula.py
[warning] 102-102: Use pytest.raises instead of unittest-style assertRaises
Replace assertRaises with pytest.raises
(PT027)
🔍 Remote MCP GitHub Copilot
Relevant review context
- PR
#99is open, non-draft, and markedmergeable_state: blocked; all currently reported CI checks pass, but no ARM-specific release build checks are present. - The release matrix now depends on GitHub-hosted
ubuntu-24.04-armandwindows-11-armrunners. These targets are not exercised by the PR’s listed CI checks; validation will occur only during a tagged release. - Release publication now fails if
NUMAN_RELEASE_SIGNING_KEYis unset, because self-update requiresSHA256SUMS.sig. This is stricter than merely omitting the signature and should be verified against repository secret configuration before merging. - The package declares Rust 1.88 as its MSRV and uses
reqwest 0.12,ed25519-dalek 2, andbase64 0.22; the PR’s existing MSRV and Clippy checks pass. - The self-update implementation explicitly requires HTTPS release URLs, verifies the signed checksum file before checking the archive digest, and supports the new Linux and Windows AArch64 asset names.
🔇 Additional comments (6)
CHANGELOG.md (1)
13-14: LGTM!Also applies to: 15-22
README.md (1)
96-98: LGTM!Also applies to: 111-111
scripts/render_homebrew_formula.py (1)
21-34: LGTM!Also applies to: 44-67, 70-80, 114-114, 149-180
scripts/test_render_homebrew_formula.py (1)
34-54: LGTM!Also applies to: 63-74, 80-90, 97-103, 109-122, 132-140, 164-192
packaging/homebrew/README.md (1)
3-12: LGTM!Also applies to: 31-60
packaging/homebrew/numan.rb (1)
13-16: LGTM!
Fixes Applied SuccessfullyFixed 4 file(s) based on 2 unresolved review comments. Files modified:
Commit: The changes have been pushed to the Time taken:
Lines 112–117 env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ steps.tag.outputs.tag }}
+ EVENT_NAME: ${{ github.event_name }}
shell: bash
run: |
set -euo pipefailLines 145–152 if [[ "$linux_arm_ok" == "true" ]]; then
echo "Found Linux ARM archive ${linux_arm_asset}"
else
- echo "No Linux ARM archive on ${RELEASE_TAG}; using --legacy-pre-linux-arm"
- RENDER_ARGS+=(--legacy-pre-linux-arm)
+ # Missing Linux ARM asset is only acceptable during explicit manual recovery.
+ if [[ "$EVENT_NAME" == "workflow_dispatch" ]]; then
+ echo "No Linux ARM archive on ${RELEASE_TAG}; using --legacy-pre-linux-arm for manual recovery"
+ RENDER_ARGS+=(--legacy-pre-linux-arm)
+ else
+ echo "::error::Release ${RELEASE_TAG} is missing required Linux ARM asset ${linux_arm_asset}; automated releases must include all platform assets"
+ exit 1
+ fi
fi
python3 scripts/render_homebrew_formula.py "${RENDER_ARGS[@]}"
cp /tmp/numan.rb packaging/homebrew/numan.rb |
Fixed 4 file(s) based on 2 unresolved review comments. Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
workflow_run releases now error if aarch64-unknown-linux-gnu is absent. --legacy-pre-linux-arm is only applied on explicit workflow_dispatch recovery. Co-authored-by: Anthony Thompson <github@trackdub.com>
Summary
Adds Linux aarch64 and Windows ARM64 GitHub Release archives, wires them into
numan update --self, then extends Homebrew and winget so those channels consume the new assets on the next tagged release.Changes
Release + self-update
ubuntu-24.04-arm→aarch64-unknown-linux-gnu;windows-11-arm→aarch64-pc-windows-msvcrelease_asset_namematch arms + tests for both triplesHomebrew
aarch64-unknown-linux-gnuand emitson_linux/on_arm--legacy-pre-linux-armrecovers pre-ARM releases via explicitworkflow_dispatchonly; automatedworkflow_runpublish fails closed if Linux ARM is missingpackaging/homebrew/numan.rbmay lag until the next ARM-enabled tag (documented)winget
installers-regexto Windows MSVC zips onlyReview status
Copilot’s overview is stale relative to later commits. Already addressed:
TARGET.zipexampleworkflow_run(legacy only onworkflow_dispatch)After merge
Tag the next release and confirm five platform archives plus signed
SHA256SUMS, then confirm Homebrew and winget publish jobs succeed against that tag.Test plan