dev-manager-tauri/.blueprint/modules/github-decommission.md
lanrtop 289b558278 refactor(github): GitHub 全面退役——免登录 + 发布/导入/同步链路移除 + 凭据去 GitHub 化
D1 免登录改造:App 启动直接进主界面,删 LoginPage/github.rs/OAuth 全套命令、
   Sidebar 账户区与 GitHub OAuth 设置弹窗、健康检查 GitHub Token 项
D2 移除发布/导入/PR/CI 入口:删 PublishModal/ImportRepoModal、ProjectCard 的
   PR compare 链接与 Actions 状态灯、RepoRegistryModal 同步 tab、CicdModal runs tab、
   publish.rs 的 github_create_repo/git_push_to_github
D3 spacesSync 单机化:删 spacesSync/useSpacesSync/SpacesPage/DiscoveryPanel,
   拆除 App→Dashboard→ProjectCard 的 spacesJson 链
D4 git_ops 凭据链重写:ssh agent → git credential helper → gitea_instances token
   前缀匹配 → default,不再依赖 github_token

保留:server_software GitHub 镜像(Releases 下载加速)、gitea_migrate 迁移入口、
cicd.rs(待 Gitea Actions 改造卡);DB 表不删(R05 migration 兼容)

顺带:修复 servers.rs 两个存量测试的 schema 漂移(测试建表缺 deploy_type 列);
      包含会话前未提交的 agent-infra F3(get_agent_health 健康诊断,与 lib.rs/
      commands.ts 物理耦合无法拆分提交)

验证:cargo test 53 passed / typecheck 全绿 / vitest passWithNoTests
2026-07-02 13:15:56 +09:00

4.9 KiB
Raw Blame History

GitHub 退役清理

围绕自建 Gitea 的战略确定后(见 gitea-integration移除 GitHub 作为 git 后端的全部纠缠。 排查发现纠缠比蓝图标记的深GitHub OAuth 是应用登录门槛App.tsx 无账号连界面都进不去), spaces.json 每 5 分钟同步 GitHub 仓库git_ops 所有凭据硬依赖 github_token。

边界(保留项)

  • server_software.rs 的 GitHub 镜像管理:用途是 Releases 下载加速,与 git 后端无关,保留
  • gitea_migrate_repo 对 GitHub 的引用:迁移功能需要读旧家,保留
  • cicd.rs 后端命令:保留,待 gitea-integration「Gitea Actions workflow 生成」卡改造
  • DB 表github_mirrors、settings 旧 key 等):代码停用但表不删,避免旧版本升级 migration 断裂R05

任务卡

D1. 免登录改造(去掉 GitHub OAuth 登录门槛)

  • status: done
  • complexity: M
  • files: src/App.tsx, src/components/auth/LoginPage.tsx, src/components/layout/Sidebar.tsx, src-tauri/src/commands/github.rs, src-tauri/src/commands/settings.rs, src-tauri/src/lib.rs, src/lib/commands.ts
  • acceptance: 应用启动直接进主界面无登录页github.rs 及 8 个 OAuth 命令删除Sidebar 账户区与「应用设置」GitHub OAuth 弹窗删除;健康检查移除 GitHub Token 项GLOBAL_KEYS 移除 github_client_id/secrettypecheck + cargo test 通过

D2. 移除 GitHub 发布 / 导入 / PR / CI 状态入口

  • status: done
  • complexity: M
  • files: src/components/dashboard/PublishModal.tsx, src/components/dashboard/ImportRepoModal.tsx, src/components/dashboard/ProjectCard.tsx, src/components/dashboard/RepoRegistryModal.tsx, src/components/dashboard/CicdModal.tsx, src/components/manage/ManagePage.tsx, src-tauri/src/commands/publish.rs, src/lib/commands.ts
  • acceptance: 发布按钮 / 从 GitHub 导入 / PR compare 链接 / Actions 运行状态显示全部移除publish.rs 仅删 github_create_repo / git_push_to_github / get_token通用工具WSL 路径、scan_local_git 等保留CicdModal 保留配置 tab、删 runs tabtypecheck 通过

D3. 删除 spacesSync单机化跨空间 GitHub 云同步下线)

  • status: done
  • complexity: S
  • files: src/lib/spacesSync.ts, src/hooks/useSpacesSync.ts, src/components/spaces/SpacesPage.tsx已无引用的死代码, src/components/dashboard/Dashboard.tsx, src/components/dashboard/ProjectCard.tsx, src/components/dashboard/ProjectModal.tsx
  • acceptance: spacesJson prop 链App → Dashboard → ProjectCard拆除跨空间感知/接续 UI、可发现项目区块、push 后 catalog 上报全部移除typecheck 通过

D4. git_ops 凭据去 GitHub 化

  • status: done
  • complexity: M
  • files: src-tauri/src/commands/git_ops.rs
  • acceptance: git_clone/fetch/pull/push/upstream_behind 不再硬依赖 settings.github_token凭据链改为 git credential helper → gitea_instances token 前缀匹配 → ssh agent → default无 token 时不再报「未登录 GitHub 账户」cargo test 通过

决策记录

  • 免登录而非换 Gitea 登录:炼境是单人本地工具,"登录"概念本身无收益Gitea 身份已由 gitea_instances.access_token 承载,远端操作按需取凭据
  • spacesSync 直接删而非迁 Gitea用户确认单机使用跨空间感知无真实场景
  • git 凭据优先走 git credential helper与用户 CLI 使用同一凭据源Windows Credential ManagerGitHub/Gitea 通吃,炼境不再自管 git 凭据

复盘笔记

【复盘】GitHub 退役清理D1-D42026-07-02 任务类型: 架构调整 复杂度: M×3 + S×1 实际轮数: 1轮预估 2 轮) 是否返工: 否 有效策略: 先全量排查grep 全代码库再动手发现蓝图未标记的两个深耦合登录门槛、spacesSync 定时同步);按"前端入口 → 封装层 → 后端命令 → 凭据层"顺序拆除,每层完成即 typecheck 遗留风险: ① Gitea token 作 basic auth username 的凭据方式userpass_plaintext(token, ""))未在真实 Gitea 实例上验证过 push② CicdModal 仍生成 GitHub Actions 模板,待 gitea-integration 的 workflow 改造卡处理;③ 前端测试清零parseRepoPath 测试随功能删除vitest 配了 passWithNoTests auto_applied_rules: R01, R05 rule_effectiveness: R01=有效(删命令时同步删 commands.ts 封装,无断层), R05=有效(保留 DB 表不删避免 migration 断裂)

【陷阱记录】servers.rs 存量测试 schema 漂移(顺手修复) 测试 setup 的 CREATE TABLE 手抄了 project_server_map 旧 schema缺 deploy_type/container_name/start_command 三列,与 db.rs migrate() 不一致导致 2 个测试常红。已补齐。根因:测试建表语句是手抄副本而非复用 migrate()schema 演进时必然漂移——后续新测试应从 db::migrate 复制对应段CONVENTIONS 测试模板已有此要求)。