Skip to content

Release v0.1.10 - #120

Merged
droid-ash merged 3 commits into
mainfrom
release/v0.1.10
Apr 26, 2026
Merged

droid-ash merged 3 commits into
mainfrom
release/v0.1.10

Conversation

@droid-ash

@droid-ash droid-ash commented Apr 26, 2026 •

Copy link
Copy Markdown
Owner

Summary

First release that ships Windows x86_64 binaries.

  • Bumps packages/cli/package.json + root package.json from 0.1.9 → 0.1.10
  • Promotes the [Unreleased] Windows entries into [0.1.10] so the release workflow can extract them as the GitHub Release notes

What v0.1.10 adds that v0.1.9 didn't

  • finalrun-windows-x64.exe attached to the GitHub Release
  • finalrun-runtime-0.1.10-windows-x64.tar.gz attached (Android-only — iOS local execution requires macOS)
  • smoke-windows CI job that runs the cross-compiled .exe on a real windows-latest runner before the release job tags or publishes (proven on PR #119 — first dry-run logged finalrun --version and --help exit 0 on Windows Server 2022)

Total artifacts on the Release page: 20 files (5 binaries + 5 tarballs + 10 .sha256 sidecars), up from 16 in v0.1.9.

Known gaps (intentional — follow-ups)

  • No install.ps1 yet. Windows users install by downloading the .exe from the release page and adding it to PATH. The auto-generated release notes spell this out.
  • finalrun upgrade fails on Windows (upgradeCommand.ts:60-66 shells out to bash -c "curl … | bash"). Windows users re-download from the release page until install.ps1 ships.
  • install.sh continues to reject Windows hosts. Windows is supported via the standalone .exe, not via the bash installer.
  • No code signing yet. Windows users see SmartScreen on first run — "More info → Run anyway."

Trigger sequence after merge

gh workflow run release.yml -f branch=main
gh run watch

Workflow expected to take ~2-3 minutes:

  1. build (~1m30s) — cross-compile 5 binaries + 5 tarballs on ubuntu-24.04
  2. smoke-windows (~30s) — run finalrun.exe --version/--help on windows-latest
  3. release — tag v0.1.10 at the build SHA, create the GitHub Release with all 20 artifacts, mark as --latest

If any step fails the tag is never created, no public release ships, and we fix forward.

Verify after release

gh release view v0.1.10

Expected: 20 downloadable assets including finalrun-windows-x64.exe and finalrun-runtime-0.1.10-windows-x64.tar.gz, release body with install instructions and the [0.1.10] CHANGELOG section.

Test plan

  • Merge this PR
  • Trigger gh workflow run release.yml -f branch=main
  • Confirm build, smoke-windows, and release jobs all green
  • Confirm GitHub Release page shows 20 assets
  • (Optional) Download finalrun-windows-x64.exe and run on a Windows box to validate end-to-end

🤖 Generated with Claude Code

Summary by CodeRabbit

Release Notes

  • New Features

    • Added Windows x86_64 installation support with PowerShell-based installer
    • Platform-specific upgrade process adapts to operating system
  • Documentation

    • Reorganized installation guides with explicit OS-specific instructions
    • Added Windows execution guidance and setup requirements

First release that ships Windows x86_64 binaries.

  - packages/cli/package.json + package.json: 0.1.9 → 0.1.10 (the
    version embedded in the Bun-compiled binaries; root bumped for
    consistency).
  - CHANGELOG.md: new [0.1.10] section describing the Windows
    additions that landed in PR #119 (Windows binary + runtime
    tarball cross-compiled from Linux, smoke-windows CI gate).

What this release adds that v0.1.9 didn't:

  - finalrun-windows-x64.exe attached to the GitHub Release.
  - finalrun-runtime-0.1.10-windows-x64.tar.gz attached to the
    GitHub Release (Android-only, no iOS bundles — the existing
    isDarwin gate in buildRuntimeTarball.mjs handles that).
  - smoke-windows job in release.yml that runs `finalrun --version`
    and `--help` on a real windows-latest runner before tagging.
    Validates the cross-compiled .exe actually executes.

Known gaps (deliberate, follow-up PRs):

  - No install.ps1 yet. Windows users install by manually downloading
    finalrun-windows-x64.exe from the release page and adding it to
    PATH. The release notes (auto-assembled from the template) tell
    them this.
  - finalrun upgrade fails on Windows because upgradeCommand.ts
    shells out to `bash -c "curl … | bash"`. Windows users re-
    download from the release page until install.ps1 ships.
  - install.sh still rejects Windows hosts. Windows is supported via
    the standalone .exe, not via the bash installer.
  - No code signing — Windows users will see SmartScreen on first run.

After this PR merges:
  Actions tab → Release → Run workflow → branch=main → Run
trigger publishes finalrun v0.1.10 with all 20 release artifacts
(5 binaries + 5 runtime tarballs + 10 .sha256 sidecars).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Apr 26, 2026 •

Copy link
Copy Markdown

Warning

Rate limit exceeded

@droid-ash has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 42 minutes and 39 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 42 minutes and 39 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 3772341b-9245-4d16-8109-c4dd53b78ed8

📥 Commits

Reviewing files that changed from the base of the PR and between 9d5b78e and a50a556.

📒 Files selected for processing (1)
  • scripts/install.ps1
📝 Walkthrough

Walkthrough

This release (0.1.10) introduces Windows x86_64 support with a new PowerShell-based installer script. The upgrade command is updated to dispatch platform-specifically: PowerShell on Windows with FINALRUN_NON_INTERACTIVE env var, bash/curl on other platforms. Package versions are bumped, and release notes and changelog are updated with Windows-specific installation and upgrade guidance.

Changes

Cohort / File(s) Summary
Version Bumps
package.json, packages/cli/package.json
Bump root and CLI package versions from 0.1.9 to 0.1.10.
Release Documentation
.github/release-notes-template.md, CHANGELOG.md
Update release notes template with OS-specific install sections (macOS/Linux, Windows PowerShell-based flow with install.ps1). Add v0.1.10 changelog entry documenting Windows x86_64 support, installer behavior, and platform-specific upgrade mechanics.
Windows Installer
scripts/install.ps1
New PowerShell installer script for Windows with TLS 1.2 enforcement, version resolution from GitHub, binary download/unblock, PATH updates, optional runtime extraction, Android SDK checks, and scrcpy/skill installation flows.
Upgrade Command
packages/cli/src/upgradeCommand.ts
Platform-aware installer dispatch: Windows uses PowerShell with FINALRUN_NON_INTERACTIVE env var; non-Windows uses bash/curl with --ci flag. Removes hardcoded bash path; defines separate URLs for install.sh and install.ps1.

Sequence Diagram

sequenceDiagram
    participant CLI as CLI User
    participant Upgrade as upgradeCommand
    participant Shell as Shell (bash/PowerShell)
    participant GitHub as GitHub API
    participant Filesystem as Filesystem

    CLI->>Upgrade: Run upgrade (--ci flag)
    Upgrade->>Upgrade: Detect platform (win32 vs other)
    
    alt Windows Platform
        Upgrade->>Shell: Invoke PowerShell with install.ps1<br/>FINALRUN_NON_INTERACTIVE=1
        Shell->>GitHub: HEAD request to latest release
        GitHub-->>Shell: Redirect to release tag
        Shell->>GitHub: Download finalrun.exe + runtime.tar.gz
        GitHub-->>Shell: Binary + tarball
        Shell->>Filesystem: Unblock file, move to bin/, extract runtime
        Filesystem-->>Shell: File operations complete
        Shell-->>CLI: Install summary (binary-only)
    else Non-Windows Platform
        Upgrade->>Shell: bash -c "curl ... | bash -- --ci"
        Shell->>GitHub: Fetch install.sh
        GitHub-->>Shell: Install script
        Shell->>GitHub: Download binary
        GitHub-->>Shell: Binary
        Shell->>Filesystem: Install to path
        Filesystem-->>Shell: Complete
        Shell-->>CLI: Install summary
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

release, enhancement

Suggested reviewers

  • arnoldlaishram
  • srinidhi-lwt

Poem

🐰 A PowerShell spring arrives at last,
Windows joins the upgrade cast,
Version 0.1.10 takes its leap,
With scripts so grand, the promises we keep,
From bash to ps1, the path divides—
finalrun now runs on every side! 🚀

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Release v0.1.10' clearly and directly describes the main change: a version bump release from 0.1.9 to 0.1.10 with Windows support additions.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/v0.1.10

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 and usage tips.

@droid-ash droid-ash self-assigned this Apr 26, 2026
Lifts Windows out of "manual download" and into one-liner install
parity with macOS/Linux:

  irm https://raw.githubusercontent.com/final-run/finalrun-agent/main/scripts/install.ps1 | iex

scripts/install.ps1 mirrors install.sh structurally, with the
Windows-shaped divergences from earlier design discussion baked in:

  - TLS 1.2 set explicitly as line 1 of executable code. PS 5.1
    defaults to TLS 1.0/1.1, which GitHub rejects with a cryptic
    "underlying connection was closed" error otherwise.
  - Architecture check: AMD64 only. Rejects ARM64 with a specific
    message ("Bun does not currently provide a bun-windows-arm64
    cross-compile target") so a future Surface user knows it's a
    build-side limitation, not a CLI runtime gap.
  - PATH wiring via [Environment]::SetEnvironmentVariable User
    scope, not rc-file munging. Idempotent split-and-contains check.
  - Net.WebClient.DownloadFile for the binary, not Invoke-WebRequest
    (PS 5.1's IWR buffers ~120MB into memory and is much slower).
  - Unblock-File post-download to strip the NTFS Zone.Identifier ADS
    so users skip the "this file came from another computer" prompt.
  - tar.exe for runtime tarball extraction (Windows 10 1803+).
  - Single Y/n Android prompt — no 1/2/3 menu, no iOS option. iOS
    local execution requires xcodebuild (macOS-only); the prompt
    text points users at `finalrun cloud` for iOS testing instead.
  - scrcpy install: winget → Chocolatey → manual instructions.
  - HttpWebRequest (not Invoke-WebRequest) for the version-redirect
    follow because the response-uri property name differs between
    PS 5.1 and PS 7.

upgradeCommand.ts gains a process.platform === 'win32' branch that
spawns powershell.exe -NoProfile -NoLogo -Command "irm <url> | iex"
instead of `bash -c "curl <url> | bash"`. The --ci flag travels via
FINALRUN_NON_INTERACTIVE env var on Windows because PowerShell's
irm|iex can't forward args to the in-memory script (no equivalent of
bash's `-s --`). install.ps1 already honors that env var, the same
way install.sh does.

Public install commands ride along on the existing
release-notes-template.md, which is auto-included on every GitHub
Release page. The template now has separate macOS/Linux and Windows
sections; the previous "PowerShell installer is in the works" line
is gone.

Note: the workspace dist (packages/cli/dist) is regenerated from
source in CI, so the upgradeCommand.ts change reaches end users via
the v0.1.10 binary (which incorporates this commit). The .ps1 file
is hosted from main on raw.githubusercontent.com — install.ps1
URLs in the binary will work as soon as this lands on main.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@droid-ash droid-ash added the release Marking releases label Apr 26, 2026

@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: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@scripts/install.ps1`:
- Around line 142-160: The idempotency check in Update-UserPath uses a
case-sensitive membership test ($segments -contains $BinDir) which causes
duplicate PATH entries on Windows; change the check to use a case-insensitive
comparison (e.g., use -icontains or compare upper/lower-cased values) so
$segments reliably matches $BinDir regardless of casing, and ensure the rest of
the function (trimming and SetEnvironmentVariable) remains unchanged.
- Around line 106-140: Install-Binary fails on Windows because Move-Item -Force
cannot replace a running finalrun.exe; change the replace logic in
Install-Binary to a stash-then-replace pattern: after downloading to $tmpPath
and Unblock-File, attempt Move-Item; if it throws a sharing violation, rename
the existing $binPath to a unique stash name (e.g., "$binPath.old.{Get-Date
-Format yyyyMMddHHmmss}" or include the process ID), then Move-Item $tmpPath to
$binPath; finally attempt to remove the stashed file asynchronously (or
Remove-Item with -ErrorAction SilentlyContinue) so the running process can
continue and the new binary is installed. Ensure references to $binPath,
$tmpPath and the Install-Binary function are updated and error cases still exit
with code 1.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b6ac5fcd-908a-48db-86ba-b8a77b88e0b2

📥 Commits

Reviewing files that changed from the base of the PR and between 3fe8346 and 9d5b78e.

📒 Files selected for processing (6)
  • .github/release-notes-template.md
  • CHANGELOG.md
  • package.json
  • packages/cli/package.json
  • packages/cli/src/upgradeCommand.ts
  • scripts/install.ps1

Comment thread scripts/install.ps1
Comment thread scripts/install.ps1
1. (Critical) Move-Item over a running finalrun.exe fails on Windows.
   Windows holds an exclusive image-section lock on the live .exe, so
   `Move-Item -Force $tmpPath $binPath` would fail with a sharing
   violation any time `finalrun upgrade` ran (which spawns powershell
   to run this script while the parent finalrun.exe is still loaded).
   Fresh installs were unaffected because there was no existing
   finalrun.exe to lock.

   Fix: stash the existing binary as finalrun.exe.old via Rename-Item
   first, then Move-Item the new binary into place. Renaming a running
   .exe IS allowed — it only updates the directory entry, not the open
   image. The stash file becomes deletable on the next upgrade once
   the parent process has exited; subsequent installs clean it up.

2. (Minor) Update-UserPath idempotency check was case-sensitive.
   `$segments -contains $BinDir` does an ordinal comparison, but
   Windows paths are case-insensitive. A user whose existing PATH
   already contained `C:\Users\foo\.finalrun\Bin` (any other casing)
   would get a duplicate appended on every install, eventually growing
   the user PATH unbounded.

   Fix: switch to `-icontains` for case-insensitive comparison.

Both fixes from CodeRabbit comments on PR #120:
  - r3144242527 (exe locking)
  - r3144242530 (path casing)

Cannot validate locally without a Windows host. Will surface in
post-release manual testing or follow-up `finalrun upgrade` runs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@droid-ash
droid-ash merged commit 89fcbb4 into main Apr 26, 2026
2 checks passed
zikani03 pushed a commit to golang-malawi/finalrun-agent that referenced this pull request May 29, 2026
The install section was carrying details that belong elsewhere:

  - "Downloads a self-contained finalrun binary into ~/.finalrun/bin/,
    adds it to your PATH, downloads the per-platform runtime tarball,
    prompts for Android/iOS, installs host tools..." — internals of
    install.sh, already documented in the script's header comment and
    in the auto-generated release notes (.github/release-notes-template.md).
  - "For CI / non-interactive environments..." — CI flag and env-var
    documentation, already in release notes and install.sh's --help.
  - "After install, run finalrun doctor..." — diagnostic guidance that
    fits better in finalrun --help / docs/troubleshooting.md.

A README install block should answer "how do I get this on my machine"
in one or two commands, not document the installer's behavior. Trimmed
to just the install one-liners per platform plus a single sentence on
the iOS-on-Windows constraint (preempts the most common support
question without expanding the section).

Adds Windows install instructions for the first time. Until v0.1.10,
the .ps1 installer didn't exist; v0.1.10 shipped it (commit 9d5b78e on
PR droid-ash#120) and the .exe / runtime tarball are now on every release. The
README continues to point only at install.sh and ignores Windows —
this catches it up.

Net: 14 lines → 6 lines, +1 platform.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release Marking releases

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant