45 lines
1.9 KiB
Bash
Executable File
45 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
||
# gitea-token.sh — 解出 Gitea 憑證(GITEA_TOKEN_CLAUDE_CODE)。source 它、呼叫 gitea_token()。
|
||
#
|
||
# 為什麼存在(inkstone/ISEP#47):舊法用 `git remote get-url gitea | sed` 從 remote URL
|
||
# 抽 token ⇒ token 必須明文嵌在 URL 裡 ⇒ 任何印出 remote URL 的訊息(git-lfs 的
|
||
# locksverify 那行)都會把它洩進 transcript/log。來源統一到這裡後,remote URL 才能改乾淨。
|
||
#
|
||
# 解析順序(先環境、後檔案——雲端只有 env、本機有 .env,兩邊都涵蓋):
|
||
# 1) 環境變數 $GITEA_TOKEN_CLAUDE_CODE(雲端 make-cloud-env 注入;本機 source .env 後也在)
|
||
# 2) .env 的 GITEA_TOKEN_CLAUDE_CODE=(先找 $CLAUDE_PROJECT_DIR/.env,再找 git 根的 .env)
|
||
# —— 與既有 gitea_arm_token()(scripts/lib/gitea-arm-common.sh)同一條路,照既有寫法走。
|
||
# 讀不到 → 印空字串、回非 0(呼叫者必須自己判空,不能把空字串當成功)。
|
||
#
|
||
# 🔴 只回值、不印別的——絕不 echo 出 token 以外的東西(避免洩進 log)。
|
||
|
||
# 內部:從一個 .env 檔抓 GITEA_TOKEN_CLAUDE_CODE=,去掉外圍引號。
|
||
_gitea_token_from_file() {
|
||
[ -f "$1" ] || return 1
|
||
_gt_val=$(grep '^GITEA_TOKEN_CLAUDE_CODE=' "$1" 2>/dev/null | head -1 | cut -d= -f2-)
|
||
_gt_val=${_gt_val%\"}; _gt_val=${_gt_val#\"}
|
||
_gt_val=${_gt_val%\'}; _gt_val=${_gt_val#\'}
|
||
[ -n "$_gt_val" ] || return 1
|
||
printf '%s' "$_gt_val"
|
||
return 0
|
||
}
|
||
|
||
gitea_token() {
|
||
# 1) 環境變數優先
|
||
if [ -n "${GITEA_TOKEN_CLAUDE_CODE:-}" ]; then
|
||
printf '%s' "$GITEA_TOKEN_CLAUDE_CODE"
|
||
return 0
|
||
fi
|
||
# 2) $CLAUDE_PROJECT_DIR/.env
|
||
if [ -n "${CLAUDE_PROJECT_DIR:-}" ] && _gitea_token_from_file "$CLAUDE_PROJECT_DIR/.env"; then
|
||
return 0
|
||
fi
|
||
# 3) git 根的 .env
|
||
_gt_root=$(git rev-parse --show-toplevel 2>/dev/null || true)
|
||
if [ -n "${_gt_root:-}" ] && _gitea_token_from_file "$_gt_root/.env"; then
|
||
return 0
|
||
fi
|
||
printf ''
|
||
return 1
|
||
}
|