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:
- In Google Cloud, enable the Chrome Web Store API and create a service account. Do not grant it extra project roles.
- In the Chrome Web Store developer dashboard, under Account, add that service account email. The publisher can register one service account.
- 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_ISSUERAMO_JWT_SECRET
These two optional secrets are added to the Firefox reviewer note:
EDGE_EVER_REVIEW_INSTANCE_URLEDGE_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.