{"id":50276550,"url":"https://github.com/creeperkatze/extension-publish","last_synced_at":"2026-06-28T00:00:48.466Z","repository":{"id":360751217,"uuid":"1251560565","full_name":"creeperkatze/extension-publish","owner":"creeperkatze","description":"A GitHub Action to upload and publish browser extensions to the Chrome Web Store, Firefox Add-ons, and Edge Add-ons.","archived":false,"fork":false,"pushed_at":"2026-06-20T12:43:36.000Z","size":381,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-20T14:33:09.923Z","etag":null,"topics":["actions","chrome-web-store","edge-addons","firefox-addons"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/creeperkatze.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-27T17:42:47.000Z","updated_at":"2026-06-20T12:43:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/creeperkatze/extension-publish","commit_stats":null,"previous_names":["creeperkatze/extension-publish"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/creeperkatze/extension-publish","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creeperkatze%2Fextension-publish","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creeperkatze%2Fextension-publish/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creeperkatze%2Fextension-publish/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creeperkatze%2Fextension-publish/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/creeperkatze","download_url":"https://codeload.github.com/creeperkatze/extension-publish/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creeperkatze%2Fextension-publish/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34872279,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","chrome-web-store","edge-addons","firefox-addons"],"created_at":"2026-05-27T21:00:27.750Z","updated_at":"2026-06-28T00:00:48.409Z","avatar_url":"https://github.com/creeperkatze.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Extension Publish\n\nA GitHub Action to upload and publish browser extensions to the Chrome Web Store, Firefox Add-ons, and Edge Add-ons.\n\n![GitHub Issues](https://img.shields.io/github/issues/creeperkatze/extension-publish)\n![GitHub Pull Requests](https://img.shields.io/github/issues-pr/creeperkatze/extension-publish)\n![GitHub Repo stars](https://img.shields.io/github/stars/creeperkatze/extension-publish?style=flat)\n\n## 🚀 Usage\n\n```yaml\n- uses: creeperkatze/extension-publish@v1\n  with:\n    # Chrome Web Store\n    chrome-client-id:     ${{ secrets.CHROME_CLIENT_ID }}\n    chrome-client-secret: ${{ secrets.CHROME_CLIENT_SECRET }}\n    chrome-refresh-token: ${{ secrets.CHROME_REFRESH_TOKEN }}\n    chrome-publisher-id:  ${{ secrets.CHROME_PUBLISHER_ID }}\n    chrome-extension-id:  ${{ secrets.CHROME_EXTENSION_ID }}\n    chrome-zip-path:      ./extension.zip\n\n    # Firefox Add-ons\n    firefox-api-key:      ${{ secrets.FIREFOX_API_KEY }}\n    firefox-api-secret:   ${{ secrets.FIREFOX_API_SECRET }}\n    firefox-extension-id: ${{ secrets.FIREFOX_EXTENSION_ID }}\n    firefox-xpi-path:     ./extension.zip\n    firefox-license:      mpl-2.0\n\n    # Edge Add-ons\n    edge-api-key:         ${{ secrets.EDGE_API_KEY }}\n    edge-client-id:       ${{ secrets.EDGE_CLIENT_ID }}\n    edge-product-id:      ${{ secrets.EDGE_PRODUCT_ID }}\n    edge-zip-path:        ./extension.zip\n```\n\nAll stores are optional, only the stores with provided inputs will run.\n\n## ⚙️ Store Setup\n\n### Chrome Web Store\n\n1. Go to the [Google Cloud Console](https://console.cloud.google.com) and create or open a project.\n2. Enable the **Chrome Web Store API** under APIs \u0026 Services.\n3. Go to **APIs \u0026 Services \u003e Credentials**, create an **OAuth 2.0 Client ID** (type: Web application), and add `https://developers.google.com/oauthplayground` as an authorized redirect URI.\n4. Note the **Client ID** and **Client Secret**.\n5. Open [OAuth Playground](https://developers.google.com/oauthplayground), click the settings gear, enable **Use your own OAuth credentials**, and enter your Client ID and Secret.\n6. In Step 1, enter the scope `https://www.googleapis.com/auth/chromewebstore` and authorize.\n7. In Step 2, exchange the authorization code for tokens, note the **Refresh Token**.\n8. Open the [Chrome Developer Dashboard](https://chrome.google.com/webstore/devconsole), go to **Publisher \u003e Settings** to find your **Publisher ID**, and open your extension to find its **Extension ID**.\n\n| Secret | Where to find it |\n|---|---|\n| `CHROME_CLIENT_ID` | Google Cloud Console \u003e Credentials |\n| `CHROME_CLIENT_SECRET` | Google Cloud Console \u003e Credentials |\n| `CHROME_REFRESH_TOKEN` | OAuth Playground Step 2 |\n| `CHROME_PUBLISHER_ID` | Chrome Developer Dashboard \u003e Publisher \u003e Settings |\n| `CHROME_EXTENSION_ID` | Chrome Developer Dashboard \u003e your extension's page |\n\n---\n\n### Firefox Add-ons\n\n1. Sign in to [addons.mozilla.org](https://addons.mozilla.org).\n2. Go to [API Credentials](https://addons.mozilla.org/developers/addon/api/key/).\n3. Click **Generate new credentials** - note the **JWT issuer** (API key) and **JWT secret** (API secret).\n4. Your **Extension ID** is the add-on ID, slug, or GUID shown in the add-on's developer page (e.g. `{your-addon@example.com}`).\n\n| Secret | Where to find it |\n|---|---|\n| `FIREFOX_API_KEY` | AMO \u003e API Credentials \u003e JWT issuer |\n| `FIREFOX_API_SECRET` | AMO \u003e API Credentials \u003e JWT secret |\n| `FIREFOX_EXTENSION_ID` | AMO \u003e your add-on \u003e developer page |\n\n---\n\n### Edge Add-ons\n\n1. Sign in to [Partner Center](https://partner.microsoft.com/dashboard/microsoftedge).\n2. Under **Microsoft Edge**, select **Publish API**.\n3. Click **Create API credentials** - note the **Client ID** and **API Key**.\n4. To find your **Product ID**, open your extension in Partner Center and copy the GUID from the URL or the **Extension identity** section.\n\n| Secret | Where to find it |\n|---|---|\n| `EDGE_API_KEY` | Partner Center \u003e Publish API |\n| `EDGE_CLIENT_ID` | Partner Center \u003e Publish API |\n| `EDGE_PRODUCT_ID` | Partner Center \u003e your extension \u003e Extension identity |\n\n## 📥 Inputs\n\n### Chrome Web Store\n\n| Input | Required | Default | Description |\n|---|---|---|---|\n| `chrome-client-id` | Yes | - | OAuth2 client ID |\n| `chrome-client-secret` | Yes | - | OAuth2 client secret |\n| `chrome-refresh-token` | Yes | - | Long-lived refresh token |\n| `chrome-publisher-id` | Yes | - | Publisher ID from the developer dashboard |\n| `chrome-extension-id` | Yes | - | Extension item ID |\n| `chrome-zip-path` | Yes | - | Path to the `.zip` to upload |\n| `chrome-publish` | No | `true` | Set to `false` to upload without publishing |\n| `chrome-publish-type` | No | `DEFAULT_PUBLISH` | `DEFAULT_PUBLISH` or `STAGED_PUBLISH` |\n| `chrome-deploy-percentage` | No | - | Rollout percentage for `STAGED_PUBLISH` (0–100) |\n| `chrome-skip-review` | No | `false` | Attempt to bypass review if eligible |\n\n### Firefox Add-ons\n\n| Input | Required | Default | Description |\n|---|---|---|---|\n| `firefox-api-key` | Yes | - | AMO JWT issuer (API key) |\n| `firefox-api-secret` | Yes | - | AMO JWT secret |\n| `firefox-extension-id` | Yes | - | Add-on ID, slug, or GUID |\n| `firefox-xpi-path` | Yes | - | Path to the `.xpi` or `.zip` to upload |\n| `firefox-channel` | No | `listed` | `listed` or `unlisted` |\n| `firefox-license` | No | - | License slug (e.g. `mpl-2.0`, `mit`) |\n| `firefox-approval-notes` | No | - | Internal notes for Mozilla reviewers |\n| `firefox-release-notes` | No | - | Release notes (plain string or `{\"en-US\":\"...\"}` JSON) |\n| `firefox-compatibility-firefox` | No | - | Firefox desktop compatibility: `true` (all versions), `109.0` (min only), or `109.0, 120.0` (min, max) |\n| `firefox-compatibility-android` | No | - | Firefox for Android compatibility: `true` (all versions), `113.0` (min only), or `113.0, 120.0` (min, max) |\n\n### Edge Add-ons\n\n| Input | Required | Default | Description |\n|---|---|---|---|\n| `edge-api-key` | Yes | - | API key from Partner Center |\n| `edge-client-id` | Yes | - | Client ID from Partner Center |\n| `edge-product-id` | Yes | - | Product ID GUID |\n| `edge-zip-path` | Yes | - | Path to the `.zip` to upload |\n| `edge-publish` | No | `true` | Set to `false` to upload without publishing |\n| `edge-notes` | No | - | Certification notes for Microsoft reviewers |\n\n## 📤 Outputs\n\n| Output | Store | Description |\n|---|---|---|\n| `chrome-upload-state` | Chrome | Upload state (`SUCCESS`, `FAILURE`, `IN_PROGRESS`, …) |\n| `chrome-crx-version` | Chrome | Version from the uploaded manifest |\n| `chrome-publish-state` | Chrome | Submission state after publish |\n| `chrome-item-id` | Chrome | Extension item ID echoed from the API |\n| `firefox-upload-uuid` | Firefox | UUID of the uploaded file |\n| `firefox-version-id` | Firefox | Numeric ID of the new version |\n| `firefox-version-state` | Firefox | Review state of the new version |\n| `edge-upload-operation-id` | Edge | Operation ID from the upload step |\n| `edge-upload-status` | Edge | Upload status (`Succeeded`, `Failed`, `InProgress`) |\n| `edge-publish-operation-id` | Edge | Operation ID from the publish step |\n| `edge-publish-status` | Edge | Publish status (`Succeeded`, `Failed`, `InProgress`) |\n\n## 📜 License\n\nAGPL-3.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreeperkatze%2Fextension-publish","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcreeperkatze%2Fextension-publish","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreeperkatze%2Fextension-publish/lists"}