Skip to content

feat: install via Scoop and Homebrew straight from this repo - #8

Merged
NotAProgrammer187 merged 2 commits into
mainfrom
feat/package-manifests
Aug 21, 2026
Merged

NotAProgrammer187 merged 2 commits into
mainfrom
feat/package-manifests

Conversation

@NotAProgrammer187

Copy link
Copy Markdown
Owner

What

  • Scoop: scoop/ccswitch.json, installable by raw URL with no bucket needed — scoop install https://raw.githubusercontent.com/NotAProgrammer187/claude-code-profiles/main/scoop/ccswitch.json; scoop update ccswitch handles updates, and the autoupdate block keeps any bucket that copies the manifest in step.
  • Homebrew: Formula/ccswitch.rb makes this repo itself a tap — brew tap notaprogrammer187/ccswitch <repo URL> then brew install notaprogrammer187/ccswitch/ccswitch. Picks the right binary for Apple Silicon / Intel macOS / Linux.
  • Single source of shape: both files are generated by packaging/update-manifests.sh; a new manifests job in release.yml regenerates them from the just-published assets and commits to main on every version tag, so they can never lag a release.
  • ccswitch upgrade defers to the owning manager: a binary living under scoop/apps/ or a Homebrew Cellar/ is refused with the right command (scoop update ccswitch / brew upgrade ccswitch), and the update nudge names that command instead of ccswitch upgrade.

Notes

  • v0.1.7 predates the SHA256SUMS manifest, so the initial pinned hashes were computed directly from the v0.1.7 release assets.
  • The manifests job commits to main from CI (github-actions bot) — that's the one automated exception to the PR-only flow, same category as the release publish itself.

🤖 Generated with Claude Code

A Scoop manifest (scoop/ccswitch.json) installable by raw URL with no
bucket, and a Homebrew formula (Formula/ccswitch.rb) that makes the repo
itself a tap. Both pin the same hashes the release publishes;
packaging/update-manifests.sh is their single source of shape, and a new
release.yml job regenerates and commits them whenever a version tag ships.

A binary that a package manager installed is that manager's to update, so
ccswitch upgrade now detects Scoop/Homebrew install layouts and defers
with the right command — and the update nudge names that command too.
Review follow-ups: hashes are now looked up in SHA256SUMS by asset name
and validated as full SHA-256s, so a missing or renamed asset fails the
release instead of committing an empty hash; the manifest commit lives in
the release job (one runner, one hash pass), refuses to downgrade what
main serves when an old tag is re-run, and rebases-and-retries instead of
dying non-fast-forward; a tag that doesn't match the compiled version
constant fails the build before anything publishes.

managedInstaller is anchored to this app's own directory (no more locking
out anyone with a folder named cellar), honours relocated Scoop roots via
SCOOP/SCOOP_GLOBAL, and shares one selfPath() resolver with the nudge so
the two can't disagree; the nudge computes the hint lazily, keeping the
common up-to-date exit path free of symlink walks. Both generated files
now say what generates them.
@NotAProgrammer187
NotAProgrammer187 merged commit 2ded490 into main Aug 21, 2026
2 checks passed
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