refactor(ci,docs): gitcode 镜像仓名收为单一定义点,取值 HomeAgent(实测 200)

gitcode 镜像目标仓名此前在 3 个文件里各写死多份字面量,改名时要遍改且极
易漏(漏一处 = 一个静默死链,而且失败面在 release 里只有一格)。本批只做
「收成单点」,不改任何取值、不碰代码。

三个定义点(每个文件恰好 1 处,消费点全部走变量):
1. .github/workflows/ci.yml → job `sync-gitcode-main` 的 env.GC_REPO:232
   消费点 2 处命令行:git ls-remote 探测、git push main。
2. .github/workflows/release.yml → job `sync-gitcode` 的 env.GC_REPO:375
   消费点 4 处命令行:git ls-remote 探测、push tag、POST /releases、
   upload_assets.py 的 GITCODE_REPO 传入。
   (两个 workflow 是独立文件,不能共享 env,故各自一处定义。)
3. deploy/scripts/upload_assets.py → os.environ.get("GITCODE_REPO", ...) 默认值。
   手工跑脚本时的兜底,与两个 workflow 同值。

为什么取值 JianFeeeee/HomeAgent 而不是 HologramAgent:
GitHub 主仓已改名 HologramAgent,但 **gitcode 侧镜像仓没有跟着改名**。
curl 直连实测(2026-10-21):
  https://gitcode.com/JianFeeeee/HomeAgent      → 200   ← 当前取值
  https://gitcode.com/JianFeeeee/HologramAgent  → 404
指向 HologramAgent 会让每次发版/推 main 都在镜像同步这步红掉,且国内镜像
停止更新。

两个 job 的失败面不同(容易搞混,此处写明):
- release.yml 的 sync-gitcode:needs [prepare, publish]。探测 exit 1 ⇒
  **只红「镜像同步」这一格**;GitHub 侧 release 产物已经发出去了。
- ci.yml 的 sync-gitcode-main:needs [go, race, cross, gui, csrc, docs] 全绿
  后才跑。探测 exit 1 ⇒ **main 的整条 CI 红**(不是一格)。
所以仓名写错的真实后果是「必红一格 + 国内镜像不更新」,不是「发不出包」。

何时切回 HologramAgent:等 gitcode 上把镜像仓真正改名/新建成功、
https://gitcode.com/JianFeeeee/HologramAgent 返回 200 之后,
**只改上面这三行**即可,两个 workflow 的消费点与 runbook 均无需再动。

docs/zh/ci-cd-runbook.md 同步三节:单点化表格(定义处/消费点)、当前取值与
200/404 实测依据、两个 job 的失败面差异;并把 §3.4 的 curl 验活地址与
upload_assets 手工调用示例同步到 HomeAgent(原写法是已 404 的死链)。

判据(含变异,全部实跑):
- 两个 workflow 可被 yaml.safe_load 解析;每个 jobs[..].env.GC_REPO 恰好 1 处
- 每个 step 的 run 块抽出来喂 bash -n,全部无语法错
- 可执行形态里的 gitcode 目标仓名不含 HologramAgent(注释行豁免)
- 变异:把任一 GC_REPO 定义改回 HologramAgent、或把某消费点还原成字面量,
  判据均报红
- 零代码改动:git status 无 .go/.lua/go.mod/go.sum;go build ./... 通过
This commit is contained in:
JianFeeeee
2026-10-21 19:55:59 +08:00
parent aafd971b7a
commit dbb787a658
4 changed files with 93 additions and 10 deletions

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 镜像 | 同名仓库 | 无(由主仓 Release 的 sync job 同步) | — |
| gitcode 镜像 | `gitcode.com/JianFeeeee/HomeAgent`(**不与主仓同名**) | 无(由主仓 Release 的 sync job 同步) | — |
**分支保护**(main,公开仓免费):10 项必须检查(Go build/vet/test、Race、
cross×5、GUI、C gates、Docs)+ `strict`(必须与 main 同步)+ 禁 force push。
@ -19,6 +19,34 @@ cross×5、GUI、C gates、Docs)+ `strict`(必须与 main 同步)+ 禁 for
**gitcode 的角色**:只读镜像(git push 同步)。Release 附件由 sync job 自动
补传,或手工跑 `deploy/scripts/upload_assets.py`(见 §3.4)。
**gitcode 仓名的单点化**(2026-10-21 加):gitcode 镜像目标仓名曾在多处写死,
改名时要遍改且易漏(漏一处就是一个小死链)。现在收继到**每文件一个定义处**,
消费点全部走变量:
| 定义处 | 形式 | 消费点 |
| --- | --- | --- |
| `.github/workflows/release.yml` | `env.GC_REPO`(job 级) | `${GC_REPO}` ×4 |
| `.github/workflows/ci.yml` | `env.GC_REPO`(job 级) | `${GC_REPO}` ×2 |
| `deploy/scripts/upload_assets.py` | `GITCODE_REPO` 环境变量默认值 | 脚本自身 |
两个 workflow 是独立 workflow,因此各自一个定义(不能跨文件共享 env)。
**gitcode 侧真正把仓改名成 HologramAgent 之后,只改这三个定义点即可**。
**当前取值 `JianFeeeee/HomeAgent`**,而不是 `HologramAgent`。实测(2026-10-21,
curl 直连):`gitcode.com/JianFeeeee/HomeAgent` → **200**,
`gitcode.com/JianFeeeee/HologramAgent` → **404**。GitHub 主仓已改名,
gitcode 侧镜像仓没跟着改。指向 HologramAgent 会让每次发版都红在镜像同步。
**失败面(两个 job 不一样,别搞混)**:
- `release.yml` 的 `sync-gitcode`:`needs: [prepare, publish]`。前置检查 `exit 1`
⇒ **只红镜像同步这一格**;GitHub 侧 release 产物已经发出去了。
- `ci.yml` 的 `sync-gitcode-main`:`needs` 全绿(go/race/cross/gui/csrc/docs)后才跑。
前置检查 `exit 1` ⇒ 该 job 红 ⇒ **main 的整条 CI 红**。
所以仓名写错的实际后果是「每次 release/main CI 必红一格 + 国内镜像不更新」,
**不是**「发不出包」。
## 1. CI(ci.yml)—— 每次推送到 main / release/** / PR 都跑
六个 job,**全部命令均本地实测过**(原则:不写"应该有用"的未验证步骤):
@ -181,8 +209,11 @@ 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 是死链。
curl -s -H "private-token: $TOKEN" \
"https://gitcode.com/api/v5/repos/JianFeeeee/HologramAgent/releases/tags/v1.3.13"
"https://gitcode.com/api/v5/repos/JianFeeeee/HomeAgent/releases/tags/v1.3.13"
```
★ **token 是宽范围的个人令牌**(可读 92 仓/48 私有、有写权限),而 CI 只需要这两个仓。
@ -193,7 +224,8 @@ curl -s -H "private-token: $TOKEN" \
```bash
# token 放 ~/.git-credentials(https://JianFeeeee:<token>@gitcode.com)
ASSET_DIR=<产物目录> GITCODE_REPO=JianFeeeee/HologramAgent \
# GITCODE_REPO 是 gitcode 镜像仓名(当前 HomeAgent),与 GitHub 侧仓名无关。
ASSET_DIR=<产物目录> GITCODE_REPO=JianFeeeee/HomeAgent \
python3 deploy/scripts/upload_assets.py <tag> <token>
# release 条目必须先存在(脚本向 releases/<tag>/upload_url 取 OBS 签名 URL)
```