Releasing
Spice for GitHub uses a keyless GitHub Actions release pipeline. A version tag is the only release trigger. The workflow verifies the exact tagged tree, creates the deterministic extension ZIP, exchanges GitHub’s short-lived OIDC identity for a five-minute Google access token, uploads and submits the package through Chrome Web Store API v2, and creates the matching GitHub Release with its checksum and dark product screenshot.
No Google service-account key, OAuth client secret, or refresh token is stored in GitHub.
One-time Chrome Web Store bootstrap
Chrome Web Store API v2 cannot create the first Store item or edit listing metadata. Complete these steps once in the Developer Dashboard:
- Under Account, add
chrome-web-store-publisher@spice-framework-cws.iam.gserviceaccount.comas the publisher service account. - Choose Add new item and upload
build/spice-for-github-v0.1.1.zip. - Complete the Store listing, privacy, distribution, and reviewer fields using
store/listing.mdand its artwork. - Set visibility to Public and submit the first version manually. Google requires the first publication after a visibility change to be manual.
- Record the Publisher ID from Account and the extension Item ID from the new item’s dashboard URL.
The one-time manual publication establishes the item and its visibility. Every higher version can then be shipped from GitHub.
GitHub environment
The chrome-web-store GitHub environment provides four non-secret variables:
CWS_EXTENSION_IDCWS_PUBLISHER_IDGCP_SERVICE_ACCOUNTGCP_WORKLOAD_IDENTITY_PROVIDER
Google Workload Identity Federation admits only spice-framework/chrome workflows running from main or a v* tag, and only that identity may impersonate the Store publisher service account.
Cut a release
- Increase
versioninpackage.json,package-lock.json, andextension/manifest.json. - Add
docs/releases/vX.Y.Z.mdwith real Markdown and the dark screenshot URL for that tag. - Run
npm run verifyandnpm run test:liveusing Node.js 24. - Commit and push the green tree to
mainafter fetching and confirming thatorigin/mainhas not moved. - Create and push the signed release tag
vX.Y.Z.
The Release workflow refuses mismatched versions, missing notes, escaped newline prose, verification failures, active review conflicts, Store warnings, or failed uploads. Rerunning a tag whose version is already submitted or published is safe.
The same workflow has manual status and publish-existing-draft operations for Store bootstrap and diagnosis. Normal releases use the tag path only.