Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .agents/issue.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 资产,二者可见性/留存期差异易被忽视。


20 changes: 20 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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。
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`,默认随附)。

## 已知限制
Expand Down
33 changes: 32 additions & 1 deletion docs/research/04-publishing-cicd.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`(骨架)
Expand Down Expand Up @@ -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)驱动集成测试;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Loading