Build the Windows Warp Agent CLI installer in dev releases - #14476
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
|
I'm starting a first review of this pull request. You can view the conversation on Warp. I completed the review and no human review was requested for this pull request. Comment Powered by Oz |
There was a problem hiding this comment.
Overview
This PR adds a dev-only Windows x64 Warp Agent CLI installer release job, including signing, install/uninstall validation, packaged ConPTY smoke coverage, and failure notification wiring. It also adjusts Windows release environment setup for channel config access and makes Windows PTY spawning retry without CREATE_BREAKAWAY_FROM_JOB when job-contained hosts reject breakaway.
Concerns
- No blocking correctness, security, or spec-alignment concerns found in the annotated diff.
Verdict
Found: 0 critical, 0 important, 0 suggestions
Approve
Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).
Powered by Oz
c4f8984 to
9c92a82
Compare
| # Load the SSH key needed to clone the private warp-channel-config repo. | ||
| # Mirrors and fork PRs do not receive the key, so this remains a no-op there. | ||
| - name: Setup SSH keys for warp-channel-config | ||
| if: ${{ github.repository == 'warpdotdev/warp-internal' && inputs.ssh_key != '' }} |
There was a problem hiding this comment.
Why are we getting rid of github.repository == 'warpdotdev/warp-internal'? This doesn't seem right?
There was a problem hiding this comment.
[Warp Agent] Agreed. Fixed in commit 758e85f78: the warpdotdev/warp-internal repository guard is restored for both SSH-key setup and the Windows channel-config installation step.
| &startup_info.StartupInfo as *const STARTUPINFOW, | ||
| &mut process_information, | ||
| ) | ||
| let create_shell_process = |creation_flags| { |
There was a problem hiding this comment.
Why are we making changes here?
There was a problem hiding this comment.
[Warp Agent] This is required by the packaged ConPTY smoke test and by job-contained hosts. GitHub Actions initially returned E_ACCESSDENIED for CREATE_BREAKAWAY_FROM_JOB; the code retries without breakaway only for that specific error, inheriting the parent job. Other errors still fail normally, and each CreateProcessW attempt gets a fresh mutable command buffer. The native Windows test exercises this path, so I kept the change in this PR.
There was a problem hiding this comment.
This is required by the packaged ConPTY smoke test
This freaks me out. I think we should delete the smoke test rather than change such a precious code path.
There was a problem hiding this comment.
[Warp Agent] Agreed and fixed in commit 90af8b1a2. I removed the ConPTY smoke test and restored app/src/terminal/local_tty/windows/mod.rs exactly to master, so this PR no longer changes the PTY process-creation path.
9c92a82 to
758e85f
Compare
758e85f to
65b336f
Compare
77b1f07 to
357274d
Compare
357274d to
73ec05c
Compare
| CodeSigningAccountName = $env:TRUSTED_SIGNING_ACCOUNT | ||
| CertificateProfileName = $env:TRUSTED_SIGNING_CERT_PROFILE | ||
| } | ConvertTo-Json | Set-Content $MetadataPath | ||
| "sign_tool_cmd=signtool.exe sign /v /fd SHA256 /tr http://timestamp.acs.microsoft.com /td SHA256 /dlib $Dlib /dmdf $MetadataPath `$f" >> $env:GITHUB_OUTPUT |
There was a problem hiding this comment.
This seems identical to the one in release_windows job. Would be nice to reuse
There was a problem hiding this comment.
[Warp Agent] Addressed in commit 90af8b1a2. I extracted the Inno signing setup into script/windows/build_inno_sign_tool_command.ps1; both release_windows_tui and the existing release_windows job now call the same helper.
| @@ -0,0 +1,126 @@ | |||
| use std::collections::HashMap; | |||
There was a problem hiding this comment.
I don't think this is a useful test. It's like an integration/smoke test dressed as a unit test. If we want to actually test round-trip from Warp to ConPTY and back to Warp, that should be an integration test. The Windows GUI doesn't do that though and so I think this is not necessary.
There was a problem hiding this comment.
[Warp Agent] Removed in commit 90af8b1a2. The packaged ConPTY test file is deleted rather than retained as a unit test.
| &startup_info.StartupInfo as *const STARTUPINFOW, | ||
| &mut process_information, | ||
| ) | ||
| let create_shell_process = |creation_flags| { |
There was a problem hiding this comment.
This is required by the packaged ConPTY smoke test
This freaks me out. I think we should delete the smoke test rather than change such a precious code path.
| GIT_RELEASE_TAG: ${{ needs.prepare_release.outputs.release_tag }} | ||
| SIGN_TOOL_CMD: ${{ steps.setup_signing.outputs.sign_tool_cmd }} | ||
|
|
||
| - name: Install and inspect signed Warp Agent CLI |
There was a problem hiding this comment.
This step is interesting. We don't do this type of validation for any other release, including the Windows GUI app. I'm not opposed to the general idea of doing more validation on the bundle after building it, but I am a little concerned about the amount of complexity it's introducing.
There was a problem hiding this comment.
[Warp Agent] Simplified in commit 90af8b1a2. The install/inspect, ConPTY smoke, and uninstall-validation steps are removed. The job now follows the existing Windows release shape: build, sign, configure shared Inno signing, bundle, and upload the installer/raw PDB.
Co-Authored-By: Warp <agent@warp.dev>
73ec05c to
90af8b1
Compare
## Description Make Windows Warp Agent CLI background updates download and execute the same signed Inno installer used for initial installation. Windows no longer parses or installs ZIP payloads in Rust. The updater verifies the installer with `WinVerifyTrust`, invokes it silently against the detected managed root, verifies the completed version and active pointer, and then performs conservative lease-aware cleanup. Unix tarball updates, polling, status, telemetry, custom-root detection, and live-version leases are unchanged. Artifact publication remains intentionally disabled. This replaces reference PR #14446 without modifying it. Depends on #14476 and warpdotdev/warp-server#13497. Implementation plan: https://staging.warp.dev/drive/notebook/BI2TyxneCNDssiTUVIF0iK ## Linked Issue - [ ] The linked issue is labeled `ready-to-spec` or `ready-to-implement`. - [ ] Where appropriate, screenshots or a short video of the implementation are included below. ## Testing - `./script/format` - Repository-prescribed split Clippy checks - `cargo test -p warp_tui --lib autoupdate --features release_bundle,standalone,crash_reporting` — 17 passed - Windows tests retain Authenticode rejection, installed-payload validation, custom-root arguments, current/previous behavior, rollback retention, and live-version garbage collection - Native Windows and cross-repository release validation will be linked after the remote branches are exercised - [ ] I have manually tested my changes locally with `./script/run` ## Agent Mode - [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode CHANGELOG-NONE Co-Authored-By: Warp <agent@warp.dev> Co-authored-by: Warp <agent@warp.dev>

Description
Add a dev-only Windows x64 release job for the Warp Agent CLI Inno installer.
The job builds the real CLI, signs the CLI and Windows runtime payloads with Azure Trusted Signing, signs the setup engine and uninstaller, and uploads the installer and raw PDB as workflow artifacts. Inno signing setup is shared with the existing Windows GUI release job.
Artifact publication remains intentionally disabled. This replaces reference PR #14445 without modifying it.
Depends on #14475.
Implementation plan: https://staging.warp.dev/drive/notebook/BI2TyxneCNDssiTUVIF0iK
Linked Issue
ready-to-specorready-to-implement.Testing
./script/formatRepository-prescribed split Clippy checks
cargo check -p warp --libRelease workflow validates the installer fixture, real signed build, shared Inno signing setup, and installer/raw-PDB artifact output
Credentialed non-publishing release validation will be linked after this branch is remotely exercised
I have manually tested my changes locally with
./script/runAgent Mode
CHANGELOG-NONE
Co-Authored-By: Warp agent@warp.dev