refactor(ci,docs): gitcode 镜像仓改名 HomeAgent→HologramAgent,定义点取值对齐

gitcode 侧镜像仓已完成改名,旧名 HomeAgent 变成 301 跳转,真仓是
HologramAgent。dbb787a 里三处 GC_REPO 定义点仍取旧名(命中 301),本批只
改取值与说明,**不改变 dbb787a 已建立的「每个文件恰一个定义点」结构**,
不引入任何新字面量。

实测(2026-10-21 20:1x,直连不带代理,非推测):
  $ curl -s -o /dev/null -w '%{http_code}' https://gitcode.com/JianFeeeee/<repo>

  HologramAgent     → 200  ← 当前取值
  HomeAgent         → 301  ← 旧名,跳转到 HologramAgent
  homeagent-sdk     → 200(SDK 仓,另一对象)
  hologramagentsdk  → 200(SDK 仓,另一对象)
  homeagentsdk      → 404
  HologramAgent-sdk → 404

「301 不是另一个仓,就是同一仓改名」的判定依据:两个地址 `git ls-remote`
得到的 refs 列表 md5 相同(同一组分支与 SHA),且 curl 页面 title 一致。

三个定义点(各文件恰好 1 处,消费点全部走变量,本次只改这三行的取值):
1. .github/workflows/ci.yml   job sync-gitcode-main 的 env.GC_REPO
2. .github/workflows/release.yml job sync-gitcode   的 env.GC_REPO
3. deploy/scripts/upload_assets.py 的 os.environ.get("GITCODE_REPO", ...) 默认值
消费点未动:ci.yml 2 处、release.yml 4 处命令行,仍全部是 ${GC_REPO}。

注释同步改准(原来把 301 的仓写成「200 ← 当前用这个」,是错的):
- 两个 workflow 的取值依据清单换成上面六个仓的现状,注明实测时间与 curl 命令
- 明确 HomeAgent = 301 跳转、HologramAgent = 当前取值
- 「以后再改名只改这三行」的说明保留

docs/zh/ci-cd-runbook.md 同步:
- 总览表 gitcode 镜像改为 HologramAgent(与主仓同名)
- 「当前取值」段与六仓实测表、301 判定依据
- API 侧口径也改准:/api/v5/repos/JianFeeeee/{HomeAgent,HologramAgent}
  不带 token 均 400(需鉴权,非仓不存在);/releases/tags/v1.3.13
  两名字均 200 且响应体一致。旧文档写「HologramAgent→404 是死链」已不成立。
- §3.3 curl 验活地址、§3.4 手工上传示例的 GITCODE_REPO 同步为新值

判据(正向 14 项 + 变异 11 条,全部实跑):
- 两个 workflow yaml.safe_load 解析通过;每个 env.GC_REPO 恰好 1 处
- 三处定义点取值完全一致(P4);消费点计数 ci=2/release=4(P6)
- P8 改为「不带 -L 的 200」:这正是本次误判的根因——之前用 curl -L 测,
  301 跟随后也是 200,把「旧名跳转」误读成「旧名是真仓、新名 404」
- 变异 M11「三处一致改回旧名 HomeAgent」只被 P8 抓住(P4 仍绿),
  证明该判据能单独区分「一致但指向 301 旧名」
- 所有 step run 块过 bash -n(30 个 run 块,0 错)
- gitcode 作 import host 残留 0;工作区无 .go/.lua/go.mod/go.sum 变更

零代码改动:packaging_test.go 里「禁止历史模块路径」的反向断言未动,
third_party 未动,systemd 相关行未动。
This commit is contained in:
JianFeeeee
2026-10-21 20:15:41 +08:00
parent dbb787a658
commit ffe9bc2cff
4 changed files with 72 additions and 35 deletions

View File

@ -234,11 +234,21 @@ jobs:
# 因为它们是不同的 workflow —— 改的时候两个文件都要改,但每个
# 文件内部只有一个定义处)。
#
# 取值依据(实测 2026-10-21,curl 直连,非推测):
# https://gitcode.com/JianFeeeee/HomeAgent → 200 ← 当前用这个
# https://gitcode.com/JianFeeeee/HologramAgent → 404
# 取值依据(实测 2026-10-21 20:1x,直连不带代理,非推测):
# $ curl -s -o /dev/null -w '%{http_code}' \
# https://gitcode.com/JianFeeeee/<repo>
#
# 背景:GitHub 主仓已改名 HologramAgent,gitcode 侧镜像仓未改名。
# https://gitcode.com/JianFeeeee/HologramAgent → 200 ← 当前用这个
# https://gitcode.com/JianFeeeee/HomeAgent → 301 ← 旧名,跳转到上面
# https://gitcode.com/JianFeeeee/homeagent-sdk → 200(SDK 仓,另一对象)
# https://gitcode.com/JianFeeeee/hologramagentsdk → 200(SDK 仓,另一对象)
# https://gitcode.com/JianFeeeee/homeagentsdk → 404
# https://gitcode.com/JianFeeeee/HologramAgent-sdk → 404
#
# 背景:gitcode 侧镜像仓已由 HomeAgent 改名为 HologramAgent(与 GitHub
# 主仓同名)。旧地址 HomeAgent 仍 301 跳转,跟随后也能到达,但走重定向
# ⇒ 别再用它(git 侧会多一跳,且改名前的旧名随时可能被彻底释放)。
# 判定两仓同一对象:两地址 git ls-remote 的 refs 列表 md5 相同。
#
# ⚠ 失败面(与 release.yml 不同,别搞混):
# 本 job 的 needs 是 [go, race, cross, gui, csrc, docs]。前置检查
@ -246,9 +256,10 @@ jobs:
# 而 release.yml 的 sync-gitcode 只红在镜像同步这一格,GitHub 侧
# release 产物已经发出去了。
#
# 何时改回 HologramAgent:gitcode 上仓真正存在且返回 200 后,只改这一行。
# 以后再改名:gitcode 侧仓名一变,只改这一行(+ release.yml 与
# upload_assets.py 各一行,共三个定义点)。
# ══════════════════════════════════════════════════════════════════
GC_REPO: JianFeeeee/HomeAgent
GC_REPO: JianFeeeee/HologramAgent
steps:
- id: tok
name: 检查 gitcode 凭据

View File

@ -357,22 +357,25 @@ jobs:
# ★★ gitcode 镜像目标仓名 —— **本 job 的唯一定义处**。
# 改 gitcode 仓名时只改这一行;下面所有消费点都走 ${GC_REPO}。
#
# 取值依据(实测 2026-10-21,curl 直连,非推测):
# https://gitcode.com/JianFeeeee/HomeAgent → 200 ← 当前用这个
# https://gitcode.com/JianFeeeee/HologramAgent → 404
# https://gitcode.com/JianFeeeee/homeagent-sdk → 200
# https://gitcode.com/JianFeeeee/hologramagentsdk → 200
# 取值依据(实测 2026-10-21 20:1x,直连不带代理,非推测):
# $ curl -s -o /dev/null -w '%{http_code}' \
# https://gitcode.com/JianFeeeee/<repo>
#
# https://gitcode.com/JianFeeeee/HologramAgent → 200 ← 当前用这个
# https://gitcode.com/JianFeeeee/HomeAgent → 301 ← 旧名,跳转到上面
# https://gitcode.com/JianFeeeee/homeagent-sdk → 200(SDK 仓,另一对象)
# https://gitcode.com/JianFeeeee/hologramagentsdk → 200(SDK 仓,另一对象)
# https://gitcode.com/JianFeeeee/homeagentsdk → 404
# https://gitcode.com/JianFeeeee/HologramAgent-sdk → 404
#
# 背景:GitHub 主仓已由 HomeAgent 改名为 HologramAgent,但 **gitcode 侧
# 的镜像仓没有跟着改名**,gitcode 上 HologramAgent 仍是 404。因此这里
# 必须指向仍然存在的 HomeAgent,否则每次发版都会红在镜像同步这一格。
# 背景:gitcode 侧镜像仓已由 HomeAgent 改名为 HologramAgent(与 GitHub
# 主仓同名)。旧地址 HomeAgent 仍 301 跳转,跟随后也能到达,但走重定向
# ⇒ 别再用它。下面几处消费点(ls-remote 探测、push tag、POST /releases、
# upload_assets 的 GITCODE_REPO)全部走 ${GC_REPO},因此只改本行即可。
#
# 何时改回 HologramAgent:在 gitcode 上把镜像仓真正改名/新建成功、
# 且 https://gitcode.com/JianFeeeee/HologramAgent 返回 200 之后,
# **只改这一行**即可,无需再动其他文件。
# 以后再改名:只改这一行(+ ci.yml 与 upload_assets.py 各一行,共三个定义点)。
# ══════════════════════════════════════════════════════════════════
GC_REPO: JianFeeeee/HomeAgent
GC_REPO: JianFeeeee/HologramAgent
steps:
- uses: actions/checkout@v7
- id: tok

View File

@ -5,13 +5,19 @@
不传 file 时上传 dist/release/ 下全部发布产物。
环境变量:
GITCODE_REPO 目标仓库,默认 JianFeeeee/HomeAgent(SDK 仓传 JianFeeeee/homeagent-sdk)
GITCODE_REPO 目标仓库,默认 JianFeeeee/HologramAgent(SDK 仓传 JianFeeeee/homeagent-sdk)
这是 gitcode 镜像仓名的**唯一定义处**(workflow 里通过 job 级
env.GC_REPO 传入同一个值)。改 gitcode 仓名时改这里 + 两个
workflow 的 GC_REPO,共三处(每个文件各一个定义点)。
取值依据(实测 2026-10-21):gitcode 上 JianFeeeee/HomeAgent
返回 200,JianFeeeee/HologramAgent 返回 404 —— GitHub 主仓
已改名 HologramAgent,但 gitcode 侧镜像仓未跟着改。
取值依据(实测 2026-10-21 20:1x,直连不带代理):
JianFeeeee/HologramAgent → 200 ← 当前取值
JianFeeeee/HomeAgent → 301 ← 旧名,跳转到上面
JianFeeeee/homeagent-sdk → 200(SDK 仓,另一对象)
JianFeeeee/hologramagentsdk → 200(SDK 仓,另一对象)
JianFeeeee/homeagentsdk → 404
JianFeeeee/HologramAgent-sdk → 404
gitcode 侧镜像仓已由 HomeAgent 改名为 HologramAgent(与 GitHub
主仓同名),旧地址仍 301,别再写旧名。
ASSET_DIR 资产目录,默认 <repo>/dist/release
为何两步:gitcode 的 release 附件不走 API 直传,而是先向
@ -26,7 +32,7 @@ import urllib.error
import urllib.parse
import urllib.request
REPO = os.environ.get("GITCODE_REPO", "JianFeeeee/HomeAgent")
REPO = os.environ.get("GITCODE_REPO", "JianFeeeee/HologramAgent")
API = "https://gitcode.com/api/v5/repos"
# 发布产物后缀。注意 Windows 安装器是 HomeAgent_v*_win64.exe,

View File

@ -10,7 +10,7 @@
| --- | --- | --- | --- |
| 主仓 HologramAgent | `github.com/JianFeeeee/HologramAgent`(公开) | `ci.yml` + `release.yml` | push / PR、`release/**` push |
| SDK 仓 homeagentsdk | `github.com/JianFeeeee/homeagentsdk`(公开) | `release.yml` | `release/**` push |
| gitcode 镜像 | `gitcode.com/JianFeeeee/HomeAgent`(**不与主仓同名**) | 无(由主仓 Release 的 sync job 同步) | — |
| gitcode 镜像 | `gitcode.com/JianFeeeee/HologramAgent`(与主仓同名) | 无(由主仓 Release 的 sync job 同步) | — |
**分支保护**(main,公开仓免费):10 项必须检查(Go build/vet/test、Race、
cross×5、GUI、C gates、Docs)+ `strict`(必须与 main 同步)+ 禁 force push。
@ -30,12 +30,28 @@ cross×5、GUI、C gates、Docs)+ `strict`(必须与 main 同步)+ 禁 for
| `deploy/scripts/upload_assets.py` | `GITCODE_REPO` 环境变量默认值 | 脚本自身 |
两个 workflow 是独立 workflow,因此各自一个定义(不能跨文件共享 env)。
**gitcode 侧真正把仓改名成 HologramAgent 之后,只改这三个定义点即可**。
**gitcode 侧以后再改仓名,只改这三个定义点即可**,消费点无需动。
**当前取值 `JianFeeeee/HomeAgent`**,而不是 `HologramAgent`。实测(2026-10-21,
curl 直连):`gitcode.com/JianFeeeee/HomeAgent` → **200**,
`gitcode.com/JianFeeeee/HologramAgent` → **404**。GitHub 主仓已改名,
gitcode 侧镜像仓没跟着改。指向 HologramAgent 会让每次发版都红在镜像同步。
**当前取值 `JianFeeeee/HologramAgent`**(与 GitHub 主仓同名)。gitcode 侧镜像仓
**已由 `HomeAgent` 改名为 `HologramAgent`**;旧地址仍 301 跳转,跟随后也能到,
但走重定向,不应再用。实测(2026-10-21 20:1x,直连不带代理,
`curl -s -o /dev/null -w '%{http_code}' https://gitcode.com/JianFeeeee/<repo>`):
| 仓名 | HTTP | 说明 |
| --- | --- | --- |
| `HologramAgent` | **200** | 当前取值(主仓镜像) |
| `HomeAgent` | 301 | 旧名,跳转到 `HologramAgent` |
| `homeagent-sdk` | 200 | SDK 仓,另一对象 |
| `hologramagentsdk` | 200 | SDK 仓,另一对象 |
| `homeagentsdk` | 404 | 不存在 |
| `HologramAgent-sdk` | 404 | 不存在 |
判定「301 不是另一个仓、就是同一仓改名」的依据:两个地址 `git ls-remote`
得到的 refs 列表 md5 相同(同一组分支与 SHA)。
API 侧同样兼容两个名字:`/api/v5/repos/JianFeeeee/{HomeAgent,HologramAgent}`
不带 token 都返回 **400**(需要鉴权,不是仓不存在),
`/releases/tags/v1.3.13` 都返回 **200** 且响应体一致。
**失败面(两个 job 不一样,别搞混)**:
@ -209,11 +225,12 @@ gh secret list --repo JianFeeeee/HologramAgent | grep GITCODE_TOKEN
# ② token 有效
curl -s "https://gitcode.com/api/v5/user?access_token=$TOKEN"
# ③ job 用的 private-token 头可读 release(两仓都测)
# ⚠ gitcode 侧主仓镜像名是 HomeAgent(不是 HologramAgent)——
# 实测 2026-10-21:/repos/JianFeeeee/HomeAgent→400(带 token 可读)、
# /repos/JianFeeeee/HologramAgent→404。写成 HologramAgent 是死链。
# ⚠ gitcode 侧主仓镜像现已改名为 HologramAgent(与 GitHub 同名),
# 旧名 HomeAgent 仍 301 跳转。实测 2026-10-21 20:1x(直连不带代理):
# /api/v5/repos/JianFeeeee/{HomeAgent,HologramAgent} 不带 token 均 400
# (需鉴权,非仓不存在);/releases/tags/v1.3.13 两名字均 200 且响应一致。
curl -s -H "private-token: $TOKEN" \
"https://gitcode.com/api/v5/repos/JianFeeeee/HomeAgent/releases/tags/v1.3.13"
"https://gitcode.com/api/v5/repos/JianFeeeee/HologramAgent/releases/tags/v1.3.13"
```
★ **token 是宽范围的个人令牌**(可读 92 仓/48 私有、有写权限),而 CI 只需要这两个仓。
@ -224,8 +241,8 @@ curl -s -H "private-token: $TOKEN" \
```bash
# token 放 ~/.git-credentials(https://JianFeeeee:<token>@gitcode.com)
# GITCODE_REPO 是 gitcode 镜像仓名(当前 HomeAgent),与 GitHub 侧仓名无关。
ASSET_DIR=<产物目录> GITCODE_REPO=JianFeeeee/HomeAgent \
# GITCODE_REPO 是 gitcode 镜像仓名(当前 HologramAgent,旧名 HomeAgent 为 301)。
ASSET_DIR=<产物目录> GITCODE_REPO=JianFeeeee/HologramAgent \
python3 deploy/scripts/upload_assets.py <tag> <token>
# release 条目必须先存在(脚本向 releases/<tag>/upload_url 取 OBS 签名 URL)
```