Publish gitea-publish via gitea-publish skill
This commit is contained in:
@@ -36,6 +36,7 @@ bash <skill_dir>/publish.sh \
|
||||
--url "$GITEA_URL" \
|
||||
--user "$GITEA_USER" \
|
||||
--token "$GITEA_TOKEN" \
|
||||
[--display-url "$GITEA_DISPLAY_URL"] \ # 可选:对外展示的公开域名,默认 https://gitea.apescale.com
|
||||
[--private] # 可选:创建私有仓库
|
||||
[--branch <分支>] # 可选:指定默认分支,默认 main
|
||||
```
|
||||
@@ -47,7 +48,7 @@ bash <skill_dir>/publish.sh \
|
||||
1. 调用 Gitea API `GET /api/v1/repos/{user}/{repo}` 检查仓库是否存在;
|
||||
不存在则用 `POST /api/v1/user/repos` 创建(支持 `--private`)。
|
||||
2. 在 `--path` 内执行 `git init`(若尚未初始化),提交全部文件。
|
||||
3. 设置 remote 为 `https://<user>:<token>@<host>/<user>/<repo>.git` 并推送默认分支。
|
||||
3. 设置 remote 为 `<protocol>://<user>:<token>@<host>/<user>/<repo>.git` 并推送默认分支。协议(http/https)从 `--url` 参数自动提取。
|
||||
4. 若远程已有内容,先 `pull --rebase` 再推送,降低冲突风险。
|
||||
|
||||
## 注意事项
|
||||
@@ -55,3 +56,7 @@ bash <skill_dir>/publish.sh \
|
||||
- 凭据仅用于本次建仓/推送,不要写入仓库或回显到聊天记录。
|
||||
- 默认分支优先使用 `main`,回退到 `master`。
|
||||
- 该技能可"自举":开发完成后,用它把自身(即本目录)发布到 Gitea。
|
||||
- **协议自适应**:脚本从 `--url` 中提取协议(`http://` 或 `https://`),不再硬编码 `https://`。HTTP-only 的 Gitea 实例也可正常推送。
|
||||
- **代理环境**:若运行环境有全局代理(如沙箱),需设置 `no_proxy='*'` 或在命令前添加 `http_proxy='' https_proxy=''`,否则 curl/git 可能走代理导致连接失败。
|
||||
- **凭据自动发现**:若用户未显式提供凭据,可检查 macOS 钥匙串(`git credential-osxkeychain get`)和 `~/.ssh/config`(Host 条目)自动发现 Gitea 地址和凭据。
|
||||
- **对外地址始终为公开域名**:脚本把"实际推送/API 端点"与"对外展示的 Web 地址"解耦。无论 `--url`(或 `GITEA_URL`)是内网 IP、端口还是其他主机名,最终打印给用户的仓库地址都落在 `--display-url` / `GITEA_DISPLAY_URL` 指定的公开域名下(默认 `https://gitea.apescale.com`),绝不把内网主机名或带凭据的 URL 透出。
|
||||
|
||||
+14
-4
@@ -9,6 +9,7 @@ PATH_=""
|
||||
URL="${GITEA_URL:-}"
|
||||
USER="${GITEA_USER:-}"
|
||||
TOKEN="${GITEA_TOKEN:-}"
|
||||
DISPLAY_URL=""
|
||||
PRIVATE="false"
|
||||
BRANCH=""
|
||||
|
||||
@@ -17,6 +18,7 @@ while [[ $# -gt 0 ]]; do
|
||||
--repo) REPO="$2"; shift 2;;
|
||||
--path) PATH_="$2"; shift 2;;
|
||||
--url) URL="$2"; shift 2;;
|
||||
--display-url) DISPLAY_URL="$2"; shift 2;;
|
||||
--user) USER="$2"; shift 2;;
|
||||
--token) TOKEN="$2"; shift 2;;
|
||||
--private) PRIVATE="true"; shift;;
|
||||
@@ -36,6 +38,13 @@ done
|
||||
# 规范化:去掉结尾斜杠
|
||||
URL="${URL%/}"
|
||||
|
||||
# 对外透出的 Web 地址:默认使用公开域名 gitea.apescale.com。
|
||||
# 即使 git 推送 / API 调用走的是内网地址或 IP,最终展示给用户的链接
|
||||
# 也始终落在公开域名下,避免把内网主机名 / IP 直接暴露出来。
|
||||
DISPLAY_URL="${DISPLAY_URL:-${GITEA_DISPLAY_URL:-https://gitea.apescale.com}}"
|
||||
DISPLAY_URL="${DISPLAY_URL%/}"
|
||||
WEB_URL="$DISPLAY_URL/$USER/$REPO"
|
||||
|
||||
# 对凭据做 URL 百分号编码(口令可能含 # $ @ 等特殊字符)
|
||||
urlencode() { python3 -c 'import sys,urllib.parse;print(urllib.parse.quote(sys.argv[1],safe=""))' "$1"; }
|
||||
U_ENC="$(urlencode "$USER")"
|
||||
@@ -52,9 +61,10 @@ fi
|
||||
[[ -z "$BRANCH" ]] && BRANCH="main"
|
||||
|
||||
API="$URL/api/v1"
|
||||
HOST="${URL#*//}"
|
||||
REMOTE_CLEAN="https://$HOST/$USER/$REPO.git"
|
||||
REMOTE_AUTH="https://$AUTH_ENC@$HOST/$USER/$REPO.git"
|
||||
PROTO="${URL%%://*}" # 从 URL 提取协议 (http 或 https)
|
||||
HOST="${URL#*//}" # 提取主机+端口
|
||||
REMOTE_CLEAN="$PROTO://$HOST/$USER/$REPO.git"
|
||||
REMOTE_AUTH="$PROTO://$AUTH_ENC@$HOST/$USER/$REPO.git"
|
||||
|
||||
echo "==> 检查仓库 $USER/$REPO 是否存在 ..."
|
||||
HTTP="$(curl -sS -o /dev/null -w '%{http_code}' -u "$AUTH_RAW" "$API/repos/$USER/$REPO")"
|
||||
@@ -106,4 +116,4 @@ fi
|
||||
# 用一次性带口令 URL 推送,不设置含口令的 upstream
|
||||
git push "$REMOTE_AUTH" "$BRANCH"
|
||||
git branch --set-upstream-to="origin/$BRANCH" 2>/dev/null || true
|
||||
echo "==> 完成。仓库地址: $URL/$USER/$REPO"
|
||||
echo "==> 完成。仓库地址: $WEB_URL"
|
||||
|
||||
Reference in New Issue
Block a user