- Published on
利用 github actions 发布谷歌插件
今天有时间维护一下之前开发的sync-storage插件,临了要发布了我就在想:要是和第一次发布插件一样,那也太折磨人了吧,
能不能有CI/CD来帮我简化一下这个操作呢?最好连浏览器我都不用打开那种,查了一下还真有,借助 github actions 我们就可以轻松地实现自动化发布谷歌插件。
准备工作
谷歌开发者账号、github账号、🪜咱就不说了,没有就自己想想办法~
想要顺利使用 github actions 发布谷歌插件,需要一下几个关键点:
- 第一次发布一定是自己老老实实在谷歌开发者网站上发布的,没有捷径可言
- 插件 ID:chrome webstore Developer Dashboard 中对应的插件点进去后左上角就能看到插件ID
核心步骤
- 启用chromewebstore API,访问 https://console.developers.google.com/apis/library/chromewebstore.googleapis.com
- 在 API 和服务中创建 Oauth Client ID, 选择 「桌面应用」,然后就会得到 client_id 和 client_secret,下载JSON 另存为 `key.json`
- 在 `key.json` 目录下使用 `pnpm dlx gcp-refresh-token` 会打开浏览器谷歌验证授权,然后`refresh_token` 就会被写入到 `key.json` 中了。
- 把 `key.json` 中的关键字段复制到插件仓库的 `Repository secrets` 中即可, 类似
- 注意:需要访问 https://console.cloud.google.com/auth/audience,点击 `PUBLISH APP`把发布状态改为正式!
{
"chrome": {
"extId": "xxxxx",
"clientId": "132343390930-abcdefg.apps.googleusercontent.com",
"clientSecret": "GOCSPX-MsUWO5NtOSGki4Fx_aasdfgsdfa",
"refreshToken": "1//06ha_Wx7pk_jkCgYIARAAGAYSNwF-L9IrqP_BnJfqXuNmrMiRkhJkqr83bb3BmU8mrO3Nnp-cZgj5PjXFOIsdfmbILbeGcBPU"
}
}
完整教程看这里 https://github.com/PlasmoHQ/chrome-webstore-api/blob/main/token.md
编写 publish.yaml
这里使用了 `PlasmoHQ/bpp@v3` 这个库。
# .github/workflows/publish.yml
name: Publish to Chrome Web Store
on:
push:
tags:
- "v*" # 当推送 v1.0.0 这样的 tag 时触发
jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm build
- name: Get version
id: version
run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
- name: Upload & Publish to Chrome Web Store
uses: PlasmoHQ/bpp@v3
with:
keys: ${{ secrets.BPP_KEYS }}
artifact: "release/crx-sync-storage-${{ steps.version.outputs.version }}.zip"
大功告成
此时我们只需要执行以下命令就可以触发 github actions 自动发布插件到 chrome web store 了。
npm version [patch|minor|major]
git push origin main --tags

锦上添花
基本整完了,但每次要我自己这么输入命令发布也太low了,就是觉得:麻烦!不如交给AI给我写个 Makefile 吧,这样就可以一键发布啦!
# Sync Storage - Chrome Extension Makefile
# ==========================================
.PHONY: help dev build release release-patch release-minor release-major clean
# 默认目标:显示帮助
help:
@echo ""
@echo "📦 Sync Storage 发布命令"
@echo "========================"
@echo ""
@echo " make dev - 启动开发模式"
@echo " make build - 构建生产版本"
@echo ""
@echo " make release-patch - 发布补丁版本 (0.0.x)"
@echo " make release-minor - 发布次要版本 (0.x.0)"
@echo " make release-major - 发布主要版本 (x.0.0)"
@echo ""
@echo " make release v=1.2.3 - 发布指定版本"
@echo ""
@echo " make clean - 清理构建产物"
@echo ""
# 开发模式
dev:
pnpm dev
# 构建
build:
pnpm build
# 发布补丁版本 (0.0.1 -> 0.0.2)
release-patch:
@echo "🚀 发布补丁版本..."
npm version patch -m "chore(release): v%s"
git push origin main --tags
@echo "✅ 发布完成!GitHub Actions 将自动发布到 Chrome Web Store"
# 发布次要版本 (0.1.0 -> 0.2.0)
release-minor:
@echo "🚀 发布次要版本..."
npm version minor -m "chore(release): v%s"
git push origin main --tags
@echo "✅ 发布完成!GitHub Actions 将自动发布到 Chrome Web Store"
# 发布主要版本 (1.0.0 -> 2.0.0)
release-major:
@echo "🚀 发布主要版本..."
npm version major -m "chore(release): v%s"
git push origin main --tags
@echo "✅ 发布完成!GitHub Actions 将自动发布到 Chrome Web Store"
# 发布指定版本 (make release v=1.2.3)
release:
ifndef v
@echo "❌ 请指定版本号: make release v=1.2.3"
@exit 1
endif
@echo "🚀 发布版本 v$(v)..."
npm version $(v) -m "chore(release): v%s"
git push origin main --tags
@echo "✅ 发布完成!GitHub Actions 将自动发布到 Chrome Web Store"
# 清理
clean:
rm -rf dist
rm -rf node_modules/.vite
@echo "🧹 清理完成"
它使用起来像是这样:

全文结束,希望能帮到你。