Skip to content

feat: make DevPass Code installable via npm, brew, curl, and Docker - #2

Merged
steebchen merged 2 commits into
mainfrom
feat/installable-release-pipeline
Jul 2, 2026
Merged

steebchen merged 2 commits into
mainfrom
feat/installable-release-pipeline

Conversation

@smakosh

@smakosh smakosh commented Jul 1, 2026

Copy link
Copy Markdown
Member

Makes DevPass Code actually installable by end users. Until now nothing was published anywhere — no npm packages, no GitHub releases, no tap — and the inherited opencode release pipeline still pointed at anomalyco/opencode, so a release run would have failed (or pushed to someone else's channels).

Stacked on #1 — the CLI bin-shim rename in that branch is a dependency. GitHub will retarget this to main once #1 merges.

What users get

Channel Command
installer script curl -fsSL https://raw.githubusercontent.com/theopenco/devpass-code/main/install | bash
npm (also bun/pnpm/yarn) npm i -g devpass-code
Homebrew brew install theopenco/tap/devpass-code
Docker docker run -it --rm ghcr.io/theopenco/devpass-code
Arch (AUR) paru -S devpass-code-bin (only published when AUR_KEY is configured)
Windows devpass-code-windows-*.zip release assets, or npm

The npm wrapper publishes as plain devpass-code — the name is free on the registry, so no -ai suffix like upstream needed. Platform binary packages are devpass-code-{os}-{arch}[-baseline][-musl], and the compiled binary is now named devpass-code (was opencode).

Changes

  • packages/devpass-code/script/build.ts — compile to bin/devpass-code, user agent devpass-code/<version>.
  • packages/devpass-code/script/publish.ts — wrapper/platform npm packages under the new names; Docker image ghcr.io/theopenco/devpass-code; Homebrew formula devpass-code.rb (class DevpassCode) pushed to theopenco/homebrew-tap; AUR devpass-code-bin gated on AUR_KEY; checksums computed from the devpass-code-* artifacts (upstream still hashed opencode-* names, which would have crashed).
  • postinstall.mjs / bin/devpass-code shim — resolve the new platform package + binary names; shim honors DEVPASS_CODE_BIN_PATH (legacy OPENCODE_BIN_PATH still works).
  • .github/workflows/publish.yml — runs on theopenco/devpass-code; GitHub-hosted runners (was Blacksmith); GitHub-App committer replaced with RELEASE_TOKEN || github.token; Windows signing and desktop/Electron jobs are skipped automatically when their secrets are absent so a bare repo can still ship CLI releases (unsigned Windows zips are still uploaded by the build job); npm auth via NODE_AUTH_TOKEN; preview-CLI build removed.
  • script/publish.ts — stops publishing @opencode-ai/{cli,sdk,plugin,ui} (that npm scope belongs to upstream; we can't publish to it); desktop latest.yml finalization only runs when desktop artifacts exist; release version-sync pushes to the triggering branch instead of upstream's dev.
  • packages/script — release versions bump from the devpass-code npm package, falling back to the repo version (1.17.12 → first release 1.17.13) while unpublished.
  • script/version.ts — changelog generation is best-effort (needs OPENCODE_API_KEY); release notes fall back to "No notable changes".
  • install — full rebrand: installs devpass-code to ~/.devpass-code/bin from this repo's releases, new wordmark, auth login hint.
  • src/installation — devpass-code upgrade + autoupdate now point every method (curl, npm/bun/pnpm, brew tap theopenco/tap, choco, scoop, GitHub releases API) at the fork.
  • github/action.yml — the CI action installs devpass-code from this repo.
  • README — real install instructions.

Verified

  • bun test test/installation — 12/12 pass.
  • Full monorepo typecheck (29 packages) passes; oxlint clean on changed files (4 pre-existing warnings).
  • Built a real darwin-arm64 binary via build.ts --single: produces dist/devpass-code-darwin-arm64/bin/devpass-code, --version works, build's smoke test passes.
  • Simulated the npm install path end-to-end: generated wrapper layout + postinstall.mjs resolves the platform package, replaces the stub, binary runs.
  • Version fallback exercised live: registry 404 → 1.17.13 on channel latest.

One-time setup before the first release

  1. NPM_TOKEN secret — npm automation token that can create new public packages (first publish can't use OIDC trusted publishing).
  2. Create theopenco/homebrew-tap repo (can be empty) and add a RELEASE_TOKEN secret (PAT with push access to the tap). Without it the tap push fails at the end of a stable release; everything before (GitHub release, npm, Docker) still lands.
  3. Optional: AUR_KEY (AUR SSH key + devpass-code-bin package ownership), Azure Trusted Signing secrets (Windows binary signing), Apple certs (desktop builds). All are skipped cleanly when absent.

Then cut a release with ./script/release (defaults to patch) or gh workflow run publish.yml -f bump=patch. Pushes to dev/beta/ci publish preview builds to npm under matching dist-tags.

Not in this PR

  • @opencode-ai/{sdk,plugin,ui} remain unpublished — they'd need a new npm scope and coordinated rename.
  • packages/console download routes and the docs site still reference upstream URLs (separate deploy surface).
  • Nix flake, Scoop bucket, and Chocolatey publication (the upgrade paths are wired up if these are added later).
  • The desktop app's own branding/update feeds — its build stays gated off until signing secrets exist.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FQXtaZmzWzXTrEikFpfCpK

@steebchen
steebchen changed the base branch from fix/oauth-page-devpass-branding to main July 2, 2026 18:55
smakosh and others added 2 commits July 2, 2026 19:56
Rework the inherited opencode release pipeline so it publishes DevPass
Code artifacts under this fork's identity:

- build: compile binaries as bin/devpass-code (user agent devpass-code/<v>)
- npm: publish wrapper package `devpass-code` (name is free — no -ai
  suffix needed) plus devpass-code-{os}-{arch} platform packages;
  postinstall + dev shim resolve the new names
- brew: generate devpass-code.rb (class DevpassCode) and push to
  theopenco/homebrew-tap; formula installs the devpass-code binary
- curl: rebrand the install script — installs to ~/.devpass-code/bin
  from theopenco/devpass-code releases, new wordmark + outro
- docker: ghcr.io/theopenco/devpass-code, devpass-code entrypoint
- AUR: devpass-code-bin, only pushed when AUR_KEY is configured
- workflow: run on theopenco/devpass-code with GitHub-hosted runners,
  drop the GitHub-App committer (RELEASE_TOKEN || github.token), gate
  Windows signing and desktop builds on their secrets so a bare repo
  can still release CLI artifacts, add NODE_AUTH_TOKEN for npm, stop
  building/publishing the @opencode-ai-scoped packages upstream owns
- versioning: bump from the devpass-code npm package, falling back to
  the repo version for the first release; changelog is best-effort
- self-upgrade: devpass-code upgrade now points every method (curl,
  npm/bun/pnpm, brew tap, choco, scoop, GitHub releases) at the fork
- GitHub Action: install devpass-code from this repo's releases
- README: real install instructions

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FQXtaZmzWzXTrEikFpfCpK
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@steebchen
steebchen force-pushed the feat/installable-release-pipeline branch from 6d5bef2 to 5de30d3 Compare July 2, 2026 18:56
@steebchen
steebchen merged commit 32766e1 into main Jul 2, 2026
0 of 6 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.

2 participants