Releasing Skeeditor
This guide provides a complete, step-by-step release process for:
- Chrome Web Store (Chrome)
- Firefox Add-ons (AMO)
- Microsoft Edge Add-ons
- Apple App Store (Safari extension via Xcode wrapper app)
This repository builds browser targets with WXT to
dist/chrome,dist/firefox, anddist/safari.
1) Release prerequisites
Before touching any store dashboard:
- Ensure you are on
mainand up to date. - Confirm CI is green for your release commit.
- Bump version (single source of truth in
package.json). - Run local quality checks:
task lint
task typecheck
task test
task test:e2e:chromium:devnet- Build distributables:
task build:chrome
task build:firefox
task build:safari- Validate Firefox package shape:
task webext:lint:firefox- Verify required public URLs are live:
- Privacy policy
- Support URL / issue tracker
- Homepage (optional but recommended)
2) Prepare store artifacts
Most stores expect a ZIP/XPI package with manifest.json at archive root.
Create release artifacts from build outputs:
mkdir -p release-artifacts
# Chrome
cd dist/chrome && zip -r ../../release-artifacts/skeeditor-chrome.zip . && cd -
# Firefox (AMO accepts ZIP or XPI upload)
cd dist/firefox && zip -r ../../release-artifacts/skeeditor-firefox.zip . && cd -
# Edge (same package style as Chrome)
cp release-artifacts/skeeditor-chrome.zip release-artifacts/skeeditor-edge.zipSafari uses the Xcode/App Store flow (no direct “upload extension zip” path).
3) Chrome Web Store release
- Open Chrome Web Store Developer Dashboard.
- Select existing listing (or create a new one once).
- Upload
release-artifacts/skeeditor-chrome.zip. - Complete/update listing metadata:
- Description
- Category
- Screenshots and promo assets
- Privacy policy URL
- Complete data use disclosures accurately.
- Submit for review.
- Publish (immediate or staged rollout).
Chrome checklist
- [ ] ZIP uploads successfully
- [ ] Permissions are justified in listing copy
- [ ] Privacy and support URLs are valid
- [ ] Published version matches
package.json
4) Firefox Add-ons (AMO) release
- Open AMO Developer Hub.
- Select existing add-on.
- Upload
release-artifacts/skeeditor-firefox.zip. - Confirm metadata and policy fields:
- Summary / description
- Privacy policy
- Permission rationale
- Submit for review and signing.
Firefox checklist
- [ ]
browser_specific_settings.gecko.idis stable - [ ] Upload passes AMO validation
- [ ] Any warnings are reviewed and accepted or resolved
- [ ] Signed version is published to the correct channel
5) Microsoft Edge Add-ons release
- Open Microsoft Partner Center → Edge Add-ons.
- Select existing product.
- Upload
release-artifacts/skeeditor-edge.zip. - Update metadata (can mirror Chrome listing copy).
- Confirm privacy/compliance fields.
- Submit and publish.
Edge checklist
- [ ] Package upload succeeds
- [ ] Listing metadata matches current release
- [ ] Privacy disclosures complete
- [ ] Published version matches Chrome release number
6) Apple App Store release (Safari extension)
Safari extensions are distributed via a signed app bundle submitted through App Store Connect.
Because you have a paid Apple Developer account, you can complete signing and distribution.
6.1 Build and convert
task build:safari
task build:safari:swiftThe first command builds the Safari web extension to dist/safari/. The second runs xcrun safari-web-extension-converter and generates the Xcode project under xcode/.
To run the converter manually instead:
xcrun safari-web-extension-converter dist/safari \
--project-location ./xcode \
--app-name skeeditor \
--bundle-identifier agency.self.skeeditor \
--swift6.2 Configure in Xcode
- Open generated Xcode project/workspace.
- Set Team for all targets (app + extension).
- Set version and build numbers.
- Ensure signing certificates/profiles are valid.
- Archive (
Product→Archive). - Upload to App Store Connect.
6.3 App Store Connect submission
- Open uploaded build in App Store Connect.
- Fill app metadata, screenshots, categories.
- Complete privacy nutrition labels.
- Add release notes (“What’s New”).
- Submit for review.
Apple checklist
- [ ] Extension target included in app bundle
- [ ] Signing valid for app + extension
- [ ] Build processed in App Store Connect
- [ ] Privacy labels and export compliance completed
- [ ] Version/build match repository release
7) Recommended release order
To reduce risk and rollback complexity:
- Chrome Web Store
- Microsoft Edge Add-ons
- Firefox AMO
- Apple App Store
This order gives quick feedback from Chromium stores first, then Mozilla review, then the longer Apple review path.
8) Post-release verification
After all stores are live:
- Install from each store in a clean profile.
- Verify popup opens and auth flow starts.
- Verify edit button appears on own posts.
- Verify edit save succeeds.
- Verify no new critical errors in console/logs.
Optional release note template:
- Version:
x.y.z - Date:
YYYY-MM-DD - Highlights: Item 1; Item 2; Item 3
9) Troubleshooting quick references
- Chrome upload errors: validate ZIP root contains
manifest.json. - AMO warnings: run
task webext:lint:firefoxlocally first. - Edge import mismatch: re-upload fresh Chrome ZIP.
- Apple signing failures: re-check Team, bundle IDs, and provisioning profiles in Xcode.
10) Scripted release automation
This repository includes a release script at scripts/release.mjs and a manual GitHub Actions workflow at .github/workflows/release.yml.
Local scripted commands
# Full dry-run (quality gates + build + package, no store publish)
task release:dry-run
# Faster dry-run (skip tests)
task release:prepare
# Publish mode (requires secrets in environment)
task release:publishGenerated artifacts go to release-artifacts/ and include:
- Chrome ZIP
- Firefox ZIP
- Edge ZIP (copied from Chrome ZIP)
release-manifest.jsonwith file checksums
Release script flags
node scripts/release.mjs [options]
--dry-run
--publish-chrome
--publish-firefox
--publish-edge
--skip-checks
--skip-tests
--skip-safari
--artifacts-dir <path>
--version <x.y.z>Required environment variables for publish
- Chrome publish (
--publish-chrome)CHROME_EXTENSION_IDCHROME_CLIENT_IDCHROME_CLIENT_SECRETCHROME_REFRESH_TOKEN
- Firefox publish (
--publish-firefox)FIREFOX_API_KEYFIREFOX_API_SECRET
- Edge publish (
--publish-edge)EDGE_PUBLISH_COMMAND(custom command run by the workflow/script)EDGE_PACKAGE_PATHis injected automatically when command runs
GitHub Actions workflow
Use Actions → Release → Run workflow with inputs:
dry_runpublish_chromepublish_firefoxpublish_edgeskip_checksskip_testsskip_safari
The workflow always uploads release-artifacts as a run artifact.
CI coverage for release automation
The main CI workflow now includes a Release automation smoke test job that runs:
task release:smokeThis verifies packaging and artifact generation on every PR/push without publishing to any store.