feat(webext): dual MV2/MV3 manifest + Chrome Web Store deploy
Contexte
Le support Chrome de l'extension navigateur a été perdu lors de la migration Cesium v1 → v2. Cesium v1 maintenait deux manifests (web-ext/manifest.json MV2 + chrome-ext/manifest.json MV3) via gulp ; cesium² ne gardait que MV2 Firefox. Le Chrome Web Store refuse les MV2 depuis janvier 2022, donc impossible d'y publier en l'état.
Cette MR rétablit le support Chrome en s'inspirant du pattern de duniter-connect (qui fonctionne en prod).
Architecture
Dual manifest avec swap pré-build
resources/webext/
├── manifest_firefox.json # MV2 (commit, listing AMO existant)
├── manifest_chrome.json # MV3 (commit, nouveau pour CWS)
└── manifest.json # gitignored, généré par scripts/swap-webext-manifest.sh
Le script scripts/swap-webext-manifest.sh {firefox|chrome} copie le bon manifest comme manifest.json actif avant chaque ng build --configuration webext. angular.json ignore les manifest_*.json dans les assets du build webext, seul le manifest.json actif est embarqué.
Scripts ajoutés
-
scripts/swap-webext-manifest.sh— choix du manifest actif -
scripts/chrome-zip.sh— zip dewebext/→release/cesium-{version}-chrome.zip(vérifie que le manifest est bien MV3) -
scripts/chrome-publish.sh— OAuth refresh + upload + publish CWS (adapté de duniter-connect/scripts/publish.sh)
npm scripts
Nouveaux:
-
webext:build:firefox/webext:build:chrome -
webext:package:firefox/webext:package:chrome -
webext:deploy:firefox:{test,prod}/webext:deploy:chrome:{test,prod}
Les anciens (webext:build:prod, webext:package:prod, webext:deploy:test/prod) restent en alias Firefox pour compatibilité.
CI
6 nouveaux jobs:
-
package:webext:chrome(+:feature) -
deploy:webext:chrome:prerelease(+:feature,:tags) —DEPLOY_ENVIRONMENT=test, upload draft sans review -
deploy:webext:chrome:release(+:feature,:tags) —DEPLOY_ENVIRONMENT=prod, upload + soumet pour review (CHROME_PUBLISH=1)
Tous en when: manual. Les jobs Firefox existants ne sont pas touchés (juste leurs scripts internes utilisent les noms :firefox: explicites).
Variables CI à ajouter (Settings → CI/CD → Variables, masked + protected)
-
CHROME_CLIENT_ID— OAuth2 client ID (Google Cloud Console) -
CHROME_CLIENT_SECRET— OAuth2 client secret -
CHROME_REFRESH_TOKEN— refresh token long-lived (procédure:scripts/publish.sh:71-94de duniter-connect) -
CHROME_EXTENSION_ID— ID 32 caractères de l'extension sur le Chrome Web Store
Testing
- Configurer les 4 variables CI ci-dessus
- Trigger manuellement
deploy:webext:chrome:prerelease:sur develop → upload draft sur CWS, vérifier dans la Developer Dashboard - Si OK : trigger
deploy:webext:chrome:release:→ soumet pour review Google
Notes
- Firefox reste en MV2 (le listing AMO 2.2.1 est déjà publié et marche, pas de risque de re-validation). Migration MV3 Firefox = chantier séparé si souhaité.
-
background.jsest déjà polyglot (browser.browserAction || chrome.action), aucun changement code. - L'image Docker CI doit avoir
jqetzip; ajout deapt-get installaubefore_scriptdu job Chrome par sécurité.