Files
2026-08-06 09:14:17 +08:00

3.4 KiB
Raw Permalink Blame History

name, description
name description
gitea-publish 将本地文件夹(如一个 WorkBuddy 技能)自动在自托管的 Gitea 实例上建仓并推送。当用户说"发布到 gitea"、"推到我的 gitea"、"把技能提交到 gitea"、"在 gitea 上建仓库"时使用。支持自定义 Gitea 地址、自动建仓、私有/公开仓库。

Gitea 发布技能

把任意本地目录发布为 Gitea 仓库:自动建仓(若不存在)+ git 提交并推送。 典型用途:开发一个 WorkBuddy 技能后,直接把它发布到你自己的 Gitea。

何时使用

  • "把这个技能发布到我的 Gitea"
  • "推送到 gitea.apescale.com"
  • "在 gitea 上建一个仓库并把内容传上去"
  • "把生成内容提交到个人 gitea"

配置(凭据,务必通过变量/参数传入,切勿硬编码)

通过环境变量或命令行参数传入,避免把令牌写进任何文件或在聊天里回显:

  • GITEA_URL : Gitea 基地址,例如 https://gitea.apescale.com
  • GITEA_USER : 用户名
  • GITEA_TOKEN : 个人访问令牌(PAT,推荐)或密码

生成 PAT:Gitea 网页 → 右上角头像 → 设置 → 应用 → 生成令牌。

用法

运行本技能附带的脚本(路径相对于本 SKILL.md 所在目录):

bash <skill_dir>/publish.sh \
  --repo   <仓库名> \
  --path   <本地目录> \
  --url    "$GITEA_URL" \
  --user   "$GITEA_USER" \
  --token  "$GITEA_TOKEN" \
  [--display-url "$GITEA_DISPLAY_URL"] \   # 可选:对外展示的公开域名,默认 https://gitea.apescale.com
  [--private]          # 可选:创建私有仓库
  [--branch <分支>]    # 可选:指定默认分支,默认 main

也可以用同名环境变量替代 --url/--user/--token

脚本流程

  1. 调用 Gitea API GET /api/v1/repos/{user}/{repo} 检查仓库是否存在; 不存在则用 POST /api/v1/user/repos 创建(支持 --private)。
  2. --path 内执行 git init(若尚未初始化),提交全部文件。
  3. 设置 remote 为 <protocol>://<user>:<token>@<host>/<user>/<repo>.git 并推送默认分支。协议(http/https)从 --url 参数自动提取。
  4. 若远程已有内容,先 pull --rebase 再推送,降低冲突风险。

注意事项

  • 凭据仅用于本次建仓/推送,不要写入仓库或回显到聊天记录。
  • 默认分支优先使用 main,回退到 master
  • 该技能可"自举":开发完成后,用它把自身(即本目录)发布到 Gitea。
  • 协议自适应:脚本从 --url 中提取协议(http://https://),不再硬编码 https://。HTTP-only 的 Gitea 实例也可正常推送。
  • 代理环境:若运行环境有全局代理(如沙箱),需设置 no_proxy='*' 或在命令前添加 http_proxy='' https_proxy='',否则 curl/git 可能走代理导致连接失败。
  • 凭据自动发现:若用户未显式提供凭据,可检查 macOS 钥匙串(git credential-osxkeychain get)和 ~/.ssh/configHost 条目)自动发现 Gitea 地址和凭据。
  • 对外地址始终为公开域名:脚本把"实际推送/API 端点"与"对外展示的 Web 地址"解耦。无论 --url(或 GITEA_URL)是内网 IP、端口还是其他主机名,最终打印给用户的仓库地址都落在 --display-url / GITEA_DISPLAY_URL 指定的公开域名下(默认 https://gitea.apescale.com),绝不把内网主机名或带凭据的 URL 透出。