Skip to content

ci: release-artifacts workflow — Chrome zip, signed Firefox xpi, AMO source (V2-688)#10

Merged
Nic-dorman merged 1 commit into
mainfrom
ci/release-artifacts
Jul 21, 2026
Merged

ci: release-artifacts workflow — Chrome zip, signed Firefox xpi, AMO source (V2-688)#10
Nic-dorman merged 1 commit into
mainfrom
ci/release-artifacts

Conversation

@Nic-dorman

Copy link
Copy Markdown
Contributor

Implements V2-688 — the first stage of store automation: turn a version tag into the distributable artifacts, from a clean checkout, so releases stop depending on hand-zipping local dist/. Standalone (off main), independent of the i18n (#8) and CI-hardening (#9) PRs.

Trigger

Push a v* tag (git tag v0.1.3 && git push origin v0.1.3) — or Actions → Run workflow (workflow_dispatch) for an ad-hoc build without tagging.

Artifacts (attached to the GitHub Release for the tag)

File Purpose How it's made
ant-webex-chrome-vX.Y.Z.zip Chrome Web Store upload zip of dist/ (manifest at root)
ant-webex-firefox-vX.Y.Z.xpi Signed, unlisted — testers install directly web-ext sign --channel=unlisted
ant-webex-source-vX.Y.Z.zip AMO source-code submission git archive HEAD

Design notes

  • Graceful signing. Signing needs the AMO API secrets. When they're set → signed, installable .xpi. When absent → an unsigned .zip with a warning, so Chrome + source still ship and the run stays green. Add the secrets later and it upgrades automatically.
  • release Environment. The job runs in a release environment so you can (optionally) add a required reviewer to gate every release, and so secrets aren't exposed to fork-PR runs. WEB_EXT_API_KEY / WEB_EXT_API_SECRET live there (or as repo secrets).
  • Version guard. Fails unless the tag == manifest.json == package.json version — kills the "tagged v0.1.3 but manifest says 0.1.2" footgun.
  • web-ext lint before signing — so a broken build doesn't burn an AMO version number (they're one-shot).
  • Add-on ID autonomi@webex is already in the Firefox manifest; unlisted signing auto-registers it on first run.
  • RELEASING.md documents the whole flow + one-time credential setup.

Verification

Every packaging command was dry-run locally and produces valid output: Chrome zip has manifest.json at the root, source zip includes build files but excludes node_modules, web-ext build succeeds. YAML validated. The signing step and full GitHub run can't be exercised pre-merge (workflow_dispatch only runs from the default branch, and I didn't want to create throwaway tags) — first live run is the first tag, or a dispatch once this is on main.

Follow-up

Unblocks V2-689 (automated public store uploads — CWS listing + AMO listed channel), which consumes these artifacts and adds the CWS credentials.

🤖 Generated with Claude Code

…source (V2-688)

On a `v*` tag push (or manual workflow_dispatch), build from a clean checkout and
produce the distributable artifacts, then attach them to the GitHub Release:

- ant-webex-chrome-vX.Y.Z.zip  — CWS upload package (manifest at zip root).
- ant-webex-firefox-vX.Y.Z.xpi — signed, unlisted via `web-ext sign` when the
  AMO API secrets (WEB_EXT_API_KEY/SECRET) are set; installable by testers.
  Falls back to an unsigned .zip (with a warning) when creds are absent, so the
  rest of the release still succeeds.
- ant-webex-source-vX.Y.Z.zip  — `git archive` source tree for AMO's source-code
  submission requirement.

Guards: version must agree across tag / manifest.json / package.json; web-ext
lint runs before signing so a broken build doesn't burn an AMO version number.
Runs in a `release` GitHub Environment so signing can be gated behind a required
reviewer and secrets aren't exposed to fork-PR runs. RELEASING.md documents the
tag flow + one-time AMO credential setup.

Branched off main; independent of the i18n (#8) and CI-hardening (#9) PRs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Nic-dorman
Nic-dorman merged commit 8147df4 into main Jul 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant