Skip to content

Windows releases and install.ps1, with installers tested in CI - #75

Open
op-q wants to merge 4 commits into
feat/windows-senderfrom
feat/windows-release
Open

op-q wants to merge 4 commits into
feat/windows-senderfrom
feat/windows-release

Conversation

@op-q

@op-q op-q commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Cross-platform plan, phase 3. It changes the release workflow, so it needs your review. Stacked on #74.

Release

  • New targets x86_64-pc-windows-msvc (windows-2025) and aarch64-pc-windows-msvc (windows-11-arm), packaged as drop-<target>.zip containing drop.exe, LICENSE and README.md.
  • Static C runtime (RUSTFLAGS=-C target-feature=+crt-static, Windows build step only), so drop.exe runs without the VC++ redistributable.
  • Arm Windows is continue-on-error. ring has needed clang there before, and this can't block a release. Without that zip, Windows 11 on Arm runs the x86_64 build under emulation.
  • checksums.txt covers the zips; install.ps1 is published beside install.sh.

install.ps1

  • irm https://github.com/op-q/drop/releases/latest/download/install.ps1 | iex
  • It supports the same DROP_VERSION, DROP_INSTALL_DIR and DROP_RELEASE_BASE variables as install.sh.
  • It verifies SHA-256, installs to %LOCALAPPDATA%\Programs\drop, and adds that to the user PATH, without admin rights.
  • Everything runs inside & { } and errors use throw. Under iex, a bare exit would close the user's window, and preference variables would leak into their session.
  • If drop.exe is already there and running, the old one is renamed aside first, so an upgrade still works.
  • install.sh under Git Bash/MSYS now points to the PowerShell installer instead of reporting an unsupported OS.

Tested in CI (new Installer job)

It builds the CLI, lays out packages exactly as a release does, serves them on loopback, and runs the real installers:

  • Linux: install.sh installs a binary that runs, and a tampered checksum is refused and installs nothing. This half was also run locally and passes.
  • Windows: install.ps1 under both pwsh 7 and Windows PowerShell 5, plus the same tamper check.

Not verified

  • A real tagged release. The publish job can't be run without creating one.
  • That drop.exe imports no VCRUNTIME140.dll. There's no reliable dumpbin on the runner's PATH; your clean-machine install during phase 5 will show it.

README gains Windows install instructions, a platform table, and the known Windows limitations (renamed names, skipped symlinks, no executable bit, the firewall prompt).

🤖 Generated with Claude Code

https://claude.ai/code/session_01G7Fy45hUvna94cd79WKG8S

The release workflow builds x86_64-pc-windows-msvc, and aarch64 on an Arm
runner, as zips holding drop.exe. The C runtime is linked statically, so it
starts on a machine without the Visual C++ redistributable. The Arm build is
marked continue-on-error, since a toolchain problem there must not hold back a
release. Checksums cover the zips, and install.ps1 is published beside
install.sh.

install.ps1 is the Windows counterpart of install.sh, with the same three
variables. It verifies the checksum, installs to %LOCALAPPDATA%\Programs\drop,
and adds that directory to the user's own PATH, without elevation. It runs in
its own script block and fails with `throw`, because through `irm | iex` a bare
`exit` would close the user's PowerShell window. install.sh run from Git Bash
now points at it instead of saying the OS is unsupported.

A new Installer CI job runs both installers for real on every pull request.
It serves locally built packages laid out like a release, checks the installed
binary runs, and checks that a tampered checksum is refused and installs
nothing. install.ps1 runs under both pwsh 7 and Windows PowerShell 5. The Linux
half was run locally.

Cross-platform plan, phase 3.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7Fy45hUvna94cd79WKG8S
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

op-q and others added 2 commits September 15, 2026 12:47
One Windows run of the installer job started install.ps1 before the local
Python server was listening, and the download failed. Both halves of the
job now poll the server until it answers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7Fy45hUvna94cd79WKG8S

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant