diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 792598fa..eac1218a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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/ # - # 背景: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 凭据 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b083db55..cc7999e3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -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/ + # + # 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 diff --git a/deploy/scripts/upload_assets.py b/deploy/scripts/upload_assets.py index 163e1f13..6a11b13a 100755 --- a/deploy/scripts/upload_assets.py +++ b/deploy/scripts/upload_assets.py @@ -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 资产目录,默认 /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, diff --git a/docs/zh/ci-cd-runbook.md b/docs/zh/ci-cd-runbook.md index c7f629c0..11fe0c69 100644 --- a/docs/zh/ci-cd-runbook.md +++ b/docs/zh/ci-cd-runbook.md @@ -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/`): + +| 仓名 | 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:@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 # release 条目必须先存在(脚本向 releases//upload_url 取 OBS 签名 URL) ```