diff --git a/.agents/issue.md b/.agents/issue.md index b272e61..6bd7b75 100644 --- a/.agents/issue.md +++ b/.agents/issue.md @@ -54,4 +54,12 @@ - **后续防范**:消费 vscode.git 公开 API 的路径类方法(add/revert/clean/restore)一律传绝对 fsPath;已加集成测试 `tests/suite/commit-flow.test.js` 守护。 - **同类问题影响**:所有消费 vscode.git API 做 stage/revert 的扩展;git CLI 本身接受相对路径,但**公开 API 层不接受**,二者语义差异易踩。 +## #7 GitHub Release 缺少可本地安装的 `.vsix` 资产 + +- **表因**:README 指引「从 Releases 下载 `.vsix` → `Extensions: Install from VSIX`」,但 rc.1/rc.2 的 GitHub Release 页面无任何 `.vsix` 资产,用户无法手动安装。 +- **根因**:`ci.yml` 的 `package` job 只把 `.vsix` 当作 **Actions artifact**(90 天即逝、非公开下载)上传,`publish` job 仅将其发往 VS Code Marketplace / OpenVSX;**全流程无任何 step 创建 GitHub Release 或向其上传资产**(rc.1/rc.2 的 Release 实为手工 `gh release create`,本就不含 `.vsix`)。 +- **处理方式**:新增独立 `github-release` job(`softprops/action-gh-release@v2`),`needs: package` 复用 vsix artifact,对 `v*` tag 自动建 Release 并 `files: '*.vsix'` 上传;`*rc*` 自动 `prerelease`;`fail_on_unmatched_files: true` 防空资产。 +- **后续防范**:该 job 与市场 `publish` **解耦**(不 `needs: publish`、不挂 `environment: production`),保证「Release 带 `.vsix`」不被市场审批门/密钥缺失阻塞;「仅出 Release、暂不发市场」时不审批 production 即可,无需改 publish job;最小权限仅本 job 提权 `contents: write`。 +- **同类问题影响**:所有「CI 只上传 artifact + 发市场、却在 README 承诺 Release 手动下载」的 VS Code 扩展;artifact ≠ Release 资产,二者可见性/留存期差异易被忽视。 + diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c86c033..268b88a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,6 +74,26 @@ jobs: path: '*.vsix' if-no-files-found: error + # GitHub Release:仅 tag 触发,将 .vsix 作为可本地安装资产附带(与市场 publish 解耦) + github-release: + name: GitHub Release (.vsix) + needs: package + if: startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/download-artifact@v4 + with: + name: vsix + - name: 创建/更新 GitHub Release 并附带 .vsix + uses: softprops/action-gh-release@v2 + with: + files: '*.vsix' + prerelease: ${{ contains(github.ref_name, 'rc') }} + generate_release_notes: true + fail_on_unmatched_files: true + # 发布:仅 tag 触发,双市场(Marketplace + OpenVSX),生产环境审批门 publish: name: Publish diff --git a/CHANGELOG.md b/CHANGELOG.md index 6484a26..4512dd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ ## [Unreleased] +## [0.0.1-rc.3] - 2026-06-29 — 第三个预发布候选 + +> 包含 rc.2 后的全部 Parity Recovery(Batch 5-12),完成 IDEA Git 工具窗口全量对齐;并修复发布流水线,使 GitHub Release 自此自动附带「可本地安装的 `.vsix`」资产。 +> +> 版本号遵循 VS Code Marketplace 约定(`major.minor.patch` = `0.0.3`),预发布语义由 `--pre-release` 标记 + git tag `v0.0.1-rc.3` 体现。 + +### CI / 发布 + +- **GitHub Release 自动附带 `.vsix`**:CI 新增独立 `github-release` job(`softprops/action-gh-release`),对每个 `v*` tag 复用 `package` job 产出的 vsix artifact,自动创建 Release(`*rc*` tag 自动标记 prerelease)并上传 `.vsix` 资产,用户可直接「`Extensions: Install from VSIX`」本地安装。该 job 与市场 `publish` 解耦(`needs: package`、不挂 `production` 环境),即便市场发布待审批/失败亦不影响 Release 资产产出;`fail_on_unmatched_files` 杜绝「空资产 Release」。 + ### Added — Parity Recovery(Batch 5-12,IDEA 全量对齐) > 基于「IDEA Git 功能复刻全量对齐」评审(用户截图反馈 Branches 空白/工具栏缺失),经 3 路代码审计确认「功能多数已实现但被视图 bug + 工具栏未浮现掩盖」,本批次先解除可见痛感再全量补齐。共新增 **13 个 engine 纯逻辑模块 + 21 个命令**,单测 64 → 166。 diff --git a/README.md b/README.md index d9e2716..0b61fdc 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ IntelliJ IDEA 的统一 Git 工具窗口(顶部 `Commit / Shelf / Stash` 标 - **VS Code Marketplace**:搜索 `Hyper Git`(发布后)。 - **OpenVSX**(Cursor / Windsurf / Gitpod / VSCodium):同 `Hyper Git`。 -- **手动**:从 [Releases](https://github.com/ThreeFish-AI/hyper-git/releases) 下载 `.vsix` → 命令面板 `Extensions: Install from VSIX`。 +- **手动**:从 [Releases](https://github.com/ThreeFish-AI/hyper-git/releases) 下载 `.vsix`(形如 `hyper-git-0.0.3.vsix`)→ 命令面板 `Extensions: Install from VSIX`。 - **要求**:VS Code ≥ 1.85.0 + 启用内置 Git 扩展(`vscode.git`,默认随附)。 ## 已知限制 diff --git a/docs/research/04-publishing-cicd.md b/docs/research/04-publishing-cicd.md index c32c02a..76030df 100644 --- a/docs/research/04-publishing-cicd.md +++ b/docs/research/04-publishing-cicd.md @@ -88,7 +88,10 @@ ``` [ push/PR ] ──▶ lint ──▶ build ──▶ test 矩阵(ubuntu/macos/windows) ──▶ package vsix ──▶ upload artifact │ -[ tag v* ] ─────────────────────────────────────────────────────────────────▶ publish(vsce + ovsx) + ┌───────────────────────────────────┤ +[ tag v* ] ───────────────────────────────┤ │ + ├─▶ github-release(.vsix 附 Release) │ ← 与 publish 解耦,无审批门 + └─▶ publish(vsce + ovsx, production 审批门) ``` ### 3.2 `.github/workflows/ci.yml`(骨架) @@ -157,6 +160,34 @@ jobs: - **发布条件**:`startsWith(github.ref, 'refs/tags/v')`,打 tag 才发布。 - **平台特定扩展**:若引入 native node 模块(git 二进制),需 `vsce package --target win32-x64 win32-arm64 linux-x64 darwin-arm64 ...`,每 target 产独立 vsix;`--target` 自 `vsce 1.99.0` 支持([Platform-specific extensions](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#_platform-specific-extensions))。纯 TS 初期**无需**,降本。 +### 3.2.1 GitHub Release 附带 `.vsix`(已实现,本仓 `ci.yml` 现状) + +§3.2 骨架仅把 vsix 上传为 **Actions artifact** + 发双市场,**不会**把 `.vsix` 附到 GitHub Release;而 README 指引用户「从 Releases 下载 `.vsix` 手动安装」。为闭合此缺口,本仓在 `ci.yml` 增设独立 `github-release` job: + +```yaml + github-release: + name: GitHub Release (.vsix) + needs: package # 复用 package job 的 vsix artifact,不重复构建 + if: startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest + permissions: + contents: write # 仅本 job 提权;顶层保持 contents: read + steps: + - uses: actions/download-artifact@v4 + with: { name: vsix } + - uses: softprops/action-gh-release@v2 + with: + files: '*.vsix' + prerelease: ${{ contains(github.ref_name, 'rc') }} # 与 publish 的 --pre-release 判定一致 + generate_release_notes: true + fail_on_unmatched_files: true # vsix 缺失即显式失败,杜绝空资产 Release +``` + +设计要点(契合 AGENTS.md「正交分解 / 最小干预」): +- **解耦**:`needs: package` 而非 `needs: publish`,且不挂 `environment: production` → 即便市场 publish 待审批或失败,带 `.vsix` 的 Release 仍照常产出;反之「仅出 GitHub Release、暂不发市场」时,不审批 production 即可,无需改动 publish job; +- **最小权限**:仅 `github-release` 提权 `contents: write`,顶层 `permissions: contents: read` 不动; +- **复用**:消费 `package` job 既有的 `vsix` artifact,零重复打包。 + ### 3.3 关键 Action 版本 - `actions/checkout@v4`、`actions/setup-node@v4`、`actions/upload-artifact@v4`、`actions/download-artifact@v4`; - `@vscode/test-electron`(或新版 VS Code Test CLI)驱动集成测试; diff --git a/package.json b/package.json index 4a3c30a..fc5f850 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "displayName": "Hyper Git", "icon": "media/icon.png", "description": "在 VS Code 上完整复刻 IntelliJ IDEA 的 Git 工具窗口与 Commit 提交窗口,并为未来 AI Agent 自主代理预留架构接缝。", - "version": "0.0.2", + "version": "0.0.3", "publisher": "threefish-ai", "license": "MIT", "preview": true,