VS Code插件的发布与自动化

本文档总结了如何配置 VS Code 插件的自动化发布流程,自动构建并将插件发布到 VS Code MarketplaceOpen VSX Registry 两个平台。

1. 获取发布 Token

自动化由于需要权限验证,首先需要获取两个平台的 Access Token。

1.1 VS Code Marketplace (Visual Studio Marketplace)

  1. 访问 Azure DevOps 并登录(通常使用微软账号)。
  2. 点击右上角的用户设置图标 -> Personal success tokens
  3. 点击 + New Token
    • Name : 填写描述,如 VS Code Extension
    • Organization : 选择 All accessible organizations.
    • Expiration : 建议选择 All scopes 下较长的时间,或者自定义。
    • Scopes : 找到 Marketplace ,勾选 AcquireManage (或者直接选 Full access 简单粗暴,但要注意安全)。
  4. 复制生成的 Token,它只显示一次。

1.2 Open VSX Registry

  1. 访问 Open VSX 并登录(使用 GitHub 账号)。
  2. 点击右上角头像 -> Settings
  3. Access Tokens 区域,生成一个新的 Token。
  4. 复制生成的 Token

2. 配置 GitHub Secrets

为了安全起见,不要将 Token 直接写在代码里。

  1. 进入你的 GitHub 仓库页面。

  2. 点击 Settings -> Secrets and variables -> Actions

  3. 点击 New repository secret ,添加以下两个密钥:

    Name Value 描述
    VSCE_TOKEN (Azure DevOps 生成的 Token) 用于发布到 VS Code Marketplace
    OVSX_TOKEN (Open VSX 生成的 Token) 用于发布到 Open VSX

3. 安装工具 (本地测试用)

虽然 CI 会自动安装,但在本地常用这两个工具进行验证或手动发布。

  • vsce: 微软官方的发布工具。
bash 复制代码
npm install -g @vscode/vsce
  • ovsx: Open VSX 的发布工具。
bash 复制代码
npm install -g ovsx

常用命令:

  • 打包:vsce package (生成 .vsix 文件)
  • 发布 (VS Code): vsce publish -p <TOKEN>
  • 发布 (Open VSX): ovsx publish -p <TOKEN>

4. 编写 GitHub Actions Workflow

在仓库根目录创建 .github/workflows/publish.yml

这个配置实现了:

  1. 触发条件 :当推送 v*.*.* 格式的 tag 时触发(如 git push origin v1.0.5)。
  2. 环境准备:使用 Node.js 20+ (解决部分 npm 兼容性问题)。
  3. 发布流程
    • 自动安装依赖 (vsce, ovsx)。
    • 打包插件。
    • 尝试发布到 VS Code Marketplace。
    • 尝试发布到 Open VSX。
    • 自动创建 GitHub Release 并上传 .vsix 文件。
yaml 复制代码
name: Publish Extension

on:
  push:
    tags:
      - 'v*.*.*'  # 仅在推送版本 tag 时触发
  workflow_dispatch:  # 允许手动触发

jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: write # 允许创建 Release

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      # 使用较新的 Node 版本以避免 "Exit handler never called" 等错误
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: 'npm'

      # 安装发布工具
      - name: Install tools
        run: |
          npm install -g @vscode/vsce
          npm install -g ovsx

      # 依赖安装 (如果项目有打包构建步骤)
      - name: Install dependencies
        run: npm ci

      # 打包检查
      - name: Package extension
        run: npx vsce package

      # 发布到 VS Code Marketplace
      # continue-on-error: true 防止因为版本号重复等非致命错误导致中断后后续流程
      - name: Publish to VS Code Marketplace
        run: npx vsce publish -p ${{ secrets.VSCE_TOKEN }}
        continue-on-error: true

      # 发布到 Open VSX Registry
      - name: Publish to Open VSX Registry
        run: ovsx publish -p ${{ secrets.OVSX_TOKEN }}
        continue-on-error: true

      # 获取当前版本号
      - name: Get version
        id: package-version
        # 注意:这里的引号处理很重要,避免 shell 解析错误
        run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT

      # 创建 GitHub Release
      - name: Create GitHub Release
        uses: softprops/action-gh-release@v1
        with:
          files: '*.vsix'
          generate_release_notes: true
          tag_name: ${{ github.ref_name }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

5. 发布流程总结

  1. 修改代码 并测试通过。

  2. 更新版本号 : 修改 package.json 中的 version 字段 (例如 1.0.5 -> 1.0.6)。

  3. 提交代码:

    bash 复制代码
    git add .
    git commit -m "chore: release v1.0.6"
    git push
  4. 打 Tag 并推送 (这是触发自动发布的关键):

    bash 复制代码
    git tag v1.0.6
    git push origin v1.0.6
  5. 观察 Actions: 去 GitHub 仓库的 Actions 页面查看运行状态。

整个流程大概一分钟左右(取决于你的插件复杂度),你的插件就会发布到 VS Code MarketplaceOpen VSX Registry 两个平台以及在你的Github中创建相关release

当然啦,如果你是内部仓库,这套流程可能就不太适合你,但是大体流程都是一样的,希望能帮到你

相关推荐
慕容引刀8 小时前
告别Commit信息纠结:使用Git AI Commit插件实现规范化提交
人工智能·git·github·visual studio code·visual studio
慢功夫5 天前
💡【调试】按下 F5 后,mini-vscode 到底做了什么
前端·visual studio code
慢功夫5 天前
按下 F5 后,mini-vscode 到底做了什么?
visual studio code
TT_Close12 天前
别劝退了!5秒搞定 Flutter 鸿蒙 FVM 起跑线
flutter·harmonyos·visual studio code
Flynt19 天前
装上TypeScript 7.0 RC之后,最让我意外不是10倍提速
typescript·visual studio code
golang学习记23 天前
VSCode 1.124 新特性:使用快捷键重构AI协作的“心流”
visual studio code
WonderThink24 天前
AI编程:Claude Code + VSCode + CC-Switch
visual studio code
armwind1 个月前
claude code接入deepseek报 “API Error: 400“
visual studio code
TT_Close1 个月前
别再复制旧 Flutter 工程了,真正拖慢你的不是业务代码
flutter·npm·visual studio code
初出茅庐的1 个月前
vscode 的 样式提示失效了!!!
visual studio code