101 lines
4.7 KiB
Markdown
101 lines
4.7 KiB
Markdown
# 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:
|
|
|
|
```sh
|
|
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.
|