From 393c4062e4e737b2c60fbeb13fec7bbed399239d Mon Sep 17 00:00:00 2001 From: Paul Mulligan Date: Fri, 21 Aug 2026 13:41:13 -0400 Subject: [PATCH] build(release): strip the manifest key from the store zip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Chrome Web Store upload rejects manifests containing "key" ("key field is not allowed in manifest") — it is a local-dev mechanism for pinning the extension ID. The repo manifest keeps it so unpacked dev installs stay on the stable ID; the store artifact drops it (the store assigns the real ID at first upload; update the backend ALLOWED_ORIGINS to that ID before publishing). Co-Authored-By: Claude Fable 5 --- .github/workflows/release-please.yml | 4 ++++ .github/workflows/release-zip.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 61fb1b9..c4e1239 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -62,6 +62,10 @@ jobs: run: | VERSION=$(node -p "require('./manifest.json').version") cd dist + # The Chrome Web Store rejects manifests containing "key" ("key field + # is not allowed in manifest") — it is a local-dev ID pin only. Strip + # it from the store artifact; the repo manifest keeps it for dev. + node -e "const fs=require('fs');const m=JSON.parse(fs.readFileSync('manifest.json'));delete m.key;fs.writeFileSync('manifest.json',JSON.stringify(m,null,2))" zip -r "../optia-${VERSION}.zip" . cd .. gh release upload "${{ needs.release-please.outputs.tag_name }}" "optia-${VERSION}.zip" --clobber diff --git a/.github/workflows/release-zip.yml b/.github/workflows/release-zip.yml index 02c123a..e1cba4c 100644 --- a/.github/workflows/release-zip.yml +++ b/.github/workflows/release-zip.yml @@ -43,6 +43,10 @@ jobs: run: | VERSION=$(node -p "require('./manifest.json').version") cd dist + # The Chrome Web Store rejects manifests containing "key" ("key field + # is not allowed in manifest") — it is a local-dev ID pin only. Strip + # it from the store artifact; the repo manifest keeps it for dev. + node -e "const fs=require('fs');const m=JSON.parse(fs.readFileSync('manifest.json'));delete m.key;fs.writeFileSync('manifest.json',JSON.stringify(m,null,2))" zip -r "../optia-${VERSION}.zip" . cd .. unzip -l "optia-${VERSION}.zip" | head -10