Files
edgeever/docs/extension-store.md
T

4.7 KiB

Web Clipper store submission

Chrome, Edge, and Firefox listings are submitted by the official repository workflow Submit Web Clipper. This is separate from bun run release. A stable GitHub Release triggers the store workflow asynchronously. Store submission does not block the GitHub Release, and review does not change it.

The extension has its own version in apps/extension/package.json, independent of the main app version in the root package.json. For an extension-only release, merge the change, then run the workflow manually on main with release_tag left empty. A new GitHub Release for the main app is not required.

Edge users install the Chrome Web Store item gjadpfmanienmlofajibkfkkpfdkclgo. One Chrome submission covers that item. Firefox is a separate submission for edgeever-web-clipper. The workflow does not publish to Microsoft Edge Add-ons.

The workflow builds the packages, uploads them, and submits them for review. It does not approve the listing. Users stay on the last approved version until Chrome and Mozilla each finish review. An uploaded version number cannot be reused. Increase apps/extension/package.json before submitting changes.

Before either store is contacted, the command extracts the Firefox review source ZIP into a clean directory, installs with the frozen lockfile, and rebuilds it. Every output file must match the submission build by SHA-256; a mismatch stops the command. The archive includes the shared Web UI components the extension imports. Build CI watches these dependencies and runs the same rebuild check. Both workflows use the Bun version from the checked-out root package.json.

Run it

On https://github.com/tianma-if/edgeever/actions/workflows/extension-store.yml, choose Run workflow. Leave the Firefox notes empty for a one-line version note, or paste the notes Mozilla should show. dry_run builds the packages and stops before calling either store.

The same command runs locally after the credentials below are available in the environment:

bun run publish:extension -- --dry-run
bun run publish:extension -- --notes "What changed."

--platform chrome or --platform firefox retries one store. A Chrome version that is already awaiting review is left in place. A Firefox version that is awaiting review and has no source archive receives the source archive on the next run.

The Actions log and Summary report each store separately: submission action, API state, confirmed public version (when available), failure stage, and the API's detailed error response or warnings. submitted / already-submitted mean review submission, not publication; STAGED means approved but awaiting publication. Only an API-confirmed public version or PUBLISHED state is reported as published. The run does not wait for later review results. Diagnostics redact credentials and private review notes; large error responses are explicitly truncated. If the API returns only a generic error, use the linked developer dashboard for requirements that the API does not expose. After fixing a store-specific issue, retry only that platform.

Credentials

Add these Actions secrets to tianma-if/edgeever. Forks do not run the job.

Chrome accepts either a service account or a refresh token. The service account does not expire every few days:

  1. In Google Cloud, enable the Chrome Web Store API and create a service account. Do not grant it extra project roles.
  2. In the Chrome Web Store developer dashboard, under Account, add that service account email. The publisher can register one service account.
  3. Create a JSON key and store the whole file as CHROME_WEB_STORE_SERVICE_ACCOUNT_JSON.

The refresh-token alternative uses CHROME_WEB_STORE_CLIENT_ID, CHROME_WEB_STORE_CLIENT_SECRET, and CHROME_WEB_STORE_REFRESH_TOKEN for scope https://www.googleapis.com/auth/chromewebstore. The Google account needs 2-Step Verification. An OAuth client left in testing expires its refresh token after seven days, so publish the consent screen or use the service account.

Firefox uses an API key from https://addons.mozilla.org/developers/addon/api/key/:

  • AMO_JWT_ISSUER
  • AMO_JWT_SECRET

These two optional secrets are added to the Firefox reviewer note:

  • EDGE_EVER_REVIEW_INSTANCE_URL
  • EDGE_EVER_REVIEW_API_TOKEN

Chrome's upload API has no release-notes field. The Chrome listing text and privacy disclosure stay as they were last saved in the dashboard. Change those in the dashboard when the permissions or the public description change. Firefox receives the workflow notes as en-US release notes, plus the build steps from apps/extension/SOURCE_BUILD.md.

The current Firefox listing uses license AGPL-3.0-only. The workflow sends that license with every version.