--- name: gitea description: 统一 Gitea 总入口,支持 issue 查询、issue 拆单创建、git push 和 PR 基础操作,优先从当前仓库 origin 自动识别目标仓库。 --- # Gitea - 统一入口 > **定位**:这是 Gitea 总入口。适合“看 issue”“拆 issue”“把提交 push 上去”“给当前分支开 PR”“在 PR 里留言”这类场景。 > > `issue` 和 `issue-drive` 继续保留:`issue` 负责只读查看,`issue-drive` 负责拆单和创建工单;`gitea` 负责统一路由和 push / PR 能力。 当用户调用 `/gitea`、`$gitea`,或自然语言要求“处理 Gitea / push / PR / issue”时,按以下规则执行。 ## 1. 先路由意图 先从用户输入里判断目标动作: - 包含“看 / 查 / list / open / closed / #123 / issue”,且没有“拆 / 建 / 提 / 创建工单”语义:走 `issue` - 包含“拆 issue / 提 issue / 创建工单 / 沉淀问题”语义:走 `issue-drive` - 包含“push / 推送 / tag 推上去 / 推当前分支”语义:走 push 流程 - 包含“PR / pull request / 拉请求 / 合并请求 / 评论 PR”语义:走 PR 流程 如果一句话里同时包含多个动作,先按用户描述顺序执行;默认不要自作主张串更多步骤。 ## 2. 环境变量 统一使用: - `GITEA_TOKEN`:必需 - `GITEA_BASE_URL`:可选;当传 `owner/repo` 或当前仓库 `origin` 是 SSH 地址时推荐配置 如果缺少 `GITEA_TOKEN`,先提示用户配置后停止,不继续执行 API、push fallback 或 PR 操作。 ## 3. Issue 路由 如果判定为只读 issue: - 直接执行 `issue` skill 的流程 - 保持它的输入规则:当前仓库自动识别、支持 `owner/repo`、支持完整仓库 URL、支持单条 issue 编号 - 不在 `gitea` 里重复抄写 `issue` 的长说明 如果判定为 issue 拆单 / 创建: - 直接执行 `issue-drive` 的流程 - 先整理事实和证据,再创建 issue - 创建时统一使用 `GITEA_TOKEN` ## 4. Push 流程 Push 一律先跑预检,再决定是否执行: ```bash # Codex python3 .codex/skills/gitea/scripts/push_gitea.py # Claude Code python3 .claude/skills/gitea/scripts/push_gitea.py ``` 规则: - 默认推当前分支到同名远端分支 - `ahead=0` 时直接告诉用户“没有可推送提交” - `dirty=true` 时明确提示“只会推送已提交内容” - 分支 diverged 时停止,不自动 rebase,也不自动 force - 只有用户明确要求“强推 / force push”时,才带 `--force` 真正执行时: ```bash # Codex python3 .codex/skills/gitea/scripts/push_gitea.py --execute # Claude Code python3 .claude/skills/gitea/scripts/push_gitea.py --execute ``` 若用户明确要求强推: ```bash python3 .codex/skills/gitea/scripts/push_gitea.py --execute --force ``` 执行策略: - 先尝试 `git push origin branch:branch` - 若远端鉴权失败,再使用 `GITEA_TOKEN` 调 `/api/v1/user` 获取登录名,构造一次性 HTTPS token URL 进行 fallback - 不改写本地 `origin` ## 5. PR 流程 PR 只做三件事:`list`、`create`、`comment`。 ### 5.1 看 PR ```bash # Codex python3 .codex/skills/gitea/scripts/pr_gitea.py list --state=open --limit=20 ``` ### 5.2 开 PR ```bash # Codex python3 .codex/skills/gitea/scripts/pr_gitea.py create --base main --title "标题" --body "正文" ``` 规则: - `head` 默认当前分支 - `base` 默认远端默认分支;识别不到时再显式传 `--base` - 如果当前分支还没推送到远端,脚本会先走 push 流程,再创建 PR - v1 只支持同仓库 PR,不处理 fork 间 PR ### 5.3 在 PR 里留言 ```bash # Codex python3 .codex/skills/gitea/scripts/pr_gitea.py comment 12 --body "已完成回归" ``` 规则: - PR 评论走 issue comment API,因为 Gitea PR 底层复用 issue 线程 ## 6. 输出要求 - issue 查询:沿用 `issue` skill 的固定 Markdown 输出 - issue 创建:沿用 `issue-drive` 的创建结果输出 - push:输出预检 JSON 或执行结果 JSON,至少包含 `status`、`branch`、`ahead/behind`、是否执行、执行方式 - PR:输出 PR 列表或单条创建 / 评论结果 JSON,至少包含编号、标题、URL、状态 ## 7. 用法示例 ```bash /gitea 看当前仓库 open issues /gitea 查 issue 17 /gitea 把这个 bug 拆成两张 issue /gitea push /gitea 推送当前分支到远端 /gitea 给当前分支开 PR 到 main /gitea 看当前仓库 open PR /gitea 在 PR 12 留言:已完成回归 ```