OpenClaude Studio has two deployable pieces:
- The
openclaude-studionpm package, which runs the local read-only API. - The static web app in
apps/web, which can be served from Cloudflare Pages or another static host.
The hosted web app still requires users to run the local API on their own machine.
Releases are handled by .github/workflows/release.yml when a v* tag is pushed.
The workflow:
- Installs dependencies with Node.js 22.
- Verifies the tag matches
apps/server/package.json. - Runs lint, unit tests, build, package inspection, packed-package smoke test, and e2e tests.
- Publishes
openclaude-studioto npm if that exact version is not already published. - Deploys
apps/web/distto Cloudflare Pages. - Creates a GitHub Release from the matching changelog section if one does not already exist.
Release tags must match the npm package version. For example, v0.0.4 must match apps/server/package.json version 0.0.4.
The release workflow needs:
CLOUDFLARE_ACCOUNT_IDCLOUDFLARE_API_TOKEN
The Cloudflare API token should grant account-level Cloudflare Pages:Edit permission for the target account.
The npm package should use trusted publishing through GitHub Actions. Do not add long-lived npm tokens to repository secrets.
The workflow denies default token permissions and grants GitHub token scopes only at the job level. The publish/deploy job grants contents: read, deployments: write, and id-token: write; the GitHub Release job grants contents: write so GITHUB_TOKEN can create releases for already-pushed tags.
Production deployment should be owned by the release workflow, not automatic branch pushes. Recommended Cloudflare Pages settings:
- Production branch deployments: disabled or controlled by the release workflow
- Preview branch deployments: disabled unless intentionally enabled for PR review
- Build command in Cloudflare Git integration: not required when deployment is handled by Wrangler
- Output directory in Cloudflare Git integration: not required when deployment is handled by Wrangler
The release workflow deploys with:
pages deploy apps/web/dist --project-name=openclaude-studio --branch=main --commit-hash=<sha>
Before release, run:
npm test
npm run lint
npm run build
npm run smoke:package
npm run test:e2enpm run smoke:package creates the npm tarball, installs it into a temporary project, verifies the CLI version, verifies key help output, and removes the tarball afterward.