Windows install path: PowerShell installer, winget, scoop#28
Merged
Conversation
Windows users had to download a zip from Releases and wire up PATH by hand while Linux/macOS got a one-line installer. Bring Windows to parity: - install.ps1: mirrors install.sh (checksum verify, ASOBI_VERSION / ASOBI_INSTALL_DIR, adds install dir to user PATH). Run via irm ... | iex. - goreleaser: publish scoop and winget manifests. Uploads are gated on SCOOP_TOKEN / WINGET_TOKEN being present, so releases stay green until the tap repos and PATs exist. - release.yml: pass SCOOP_TOKEN / WINGET_TOKEN through to goreleaser. - README: Windows install instructions alongside Linux/macOS.
cmd /c start re-parses the URL through the shell, so an & in a query string is read as a command separator and the open fails. Use rundll32 url.dll,FileProtocolHandler, which receives the URL as a direct argument with no shell re-parsing.
The 0600/0700 modes are a portable-looking guarantee that does not hold on Windows, where Go maps file modes only to the read-only attribute. State honestly that Windows relies on the inherited user-profile ACL and that DPAPI encryption-at-rest is tracked as a hardening enhancement.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Windows users had to download a zip from Releases and wire up PATH by hand while Linux/macOS got a one-line installer. This brings Windows to parity and hardens two Windows-specific rough edges found while verifying the binary actually runs there.
What's here
Install parity
install.ps1mirrorsinstall.sh: detects arch, resolves latest (orASOBI_VERSION), downloads the zip +checksums.txt, verifies SHA256, installs to%LOCALAPPDATA%\asobi\bin(orASOBI_INSTALL_DIR), and adds it to the user PATH. Run viairm ...install.ps1 | iex.SCOOP_TOKEN/WINGET_TOKENbeing non-empty, so a tag cut before the tap repos and PATs exist still ships binaries -- only the manifest push is skipped.release.ymlpassesSCOOP_TOKEN/WINGET_TOKENthrough to goreleaser.Windows fixes found while verifying
openBrowser: replacedcmd /c start <url>withrundll32 url.dll,FileProtocolHandler <url>.cmdre-parses the URL and treats&as a command separator, so any query string would break the login open;rundll32receives the URL as a direct argument.SECURITY.md: the credential-storage section implied a portable0600/0700guarantee that does not hold on Windows (Go maps file modes only to the read-only attribute there). Now describes protection per-platform honestly and points at the DPAPI hardening tracked in Windows: encrypt credentials at rest via DPAPI #27.Not a vulnerability
Windows creds-at-rest was assessed and is not advisory-worthy: on a default install the file inherits the user-profile ACL (owner + SYSTEM + Administrators), matching the Unix
0600guarantee for the "other unprivileged user" threat. DPAPI encryption-at-rest is defense-in-depth, tracked as enhancement #27.Follow-up before winget/scoop go live (one-time, out of this PR)
widgrensit/scoop-bucket(can be empty).microsoft/winget-pkgstowidgrensit/winget-pkgs(first submission is manually reviewed by Microsoft).SCOOP_TOKEN/WINGET_TOKENsecrets (GITHUB_TOKENcan't push cross-repo).Verification
goreleaser checkpasses.go build,go vet,go test ./internal/auth/pass.install.ps1not lint-run here (nopwshin env) -- worth a quick run on Windows before the first tagged release.