From f28f20ba569b9097757330273ef69ec759c82b96 Mon Sep 17 00:00:00 2001 From: timmy Date: Tue, 21 Apr 2026 16:18:16 +0800 Subject: [PATCH] feat(config): support multiple Gitea profiles via GITEA_PROFILE env var MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 未設時讀 config.env(行為不變);設了讀 config..env。 .gitignore 新增 config.*.env 但保留 config.example.env。 Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitignore | 2 ++ CLAUDE.md | 2 +- README.md | 11 ++++++++++- SKILL.md | 13 +++++++++++++ config.example.env | 5 +++++ scripts/lib/common.sh | 11 ++++++++++- 6 files changed, 41 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 2549b3d..73511ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ config.env +config.*.env +!config.example.env diff --git a/CLAUDE.md b/CLAUDE.md index 13dc87d..8d97d8d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,7 +35,7 @@ bash /path/to/gitea-cli/scripts/list.sh [--private|--public] [--format table|tsv 所有 API / push / clone 都走 lib,腳本本身不寫 curl 也不直接操作 credential helper。lib 提供: -- `load_config`:讀 `config.env`,檢查三個變數都非空非預設 +- `load_config`:讀 `config.env`(或 `GITEA_PROFILE` 指定時讀 `config..env`),檢查三個變數都非空非預設 - `gitea_api [json-body]`:單一 API 呼叫入口;回傳後讀 `$HTTP_CODE` 與 `$GITEA_API_RESP_FILE` - `git_push_with_token ` / `git_push_tag_with_token ` / `git_clone_with_token `:一次性帶 token 的 git 操作 - `infer_repo_from_cwd`:從 `git remote get-url origin` 推斷 `owner/repo` diff --git a/README.md b/README.md index c8f459e..21dc8e3 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,15 @@ gitea-cli/ GITEA_TOKEN=你剛才產生的_token ``` + **多組 Gitea 站/帳號**:另存成 `config..env`,執行腳本時帶 `GITEA_PROFILE=` 切換: + ```bash + cp config.example.env config.work.env + # 編輯 config.work.env + + GITEA_PROFILE=work bash /path/to/gitea-cli/scripts/list.sh + ``` + 未設 `GITEA_PROFILE` 時讀 `config.env`(預設)。`config.*.env` 已被 `.gitignore` 排除。 + 3. (選用)讓 Claude Code 自動辨識這個 skill(兩擇一): **A. Symlink 本地開發目錄**(適合會持續改腳本的情境) @@ -130,7 +139,7 @@ A:origin 是乾淨 URL,再次 push 會要求認證。解法二選一: A:重新到 Gitea 產生 token,覆蓋 `config.env` 裡的 `GITEA_TOKEN`。 **Q:要換成另一個 Gitea 站或使用者?** -A:直接改 `config.env` 的 `GITEA_URL` / `GITEA_USER`。 +A:常駐切換就另存成 `config..env`,執行時帶 `GITEA_PROFILE=`;只是單次替換就直接改 `config.env` 的 `GITEA_URL` / `GITEA_USER`。 **Q:可以用在非 Gitea(例如 Gitea clone 產品)嗎?** A:本腳本用的是 Gitea API v1,Forgejo 相容,GitHub/GitLab 不相容。 diff --git a/SKILL.md b/SKILL.md index f23309b..f5e93bc 100644 --- a/SKILL.md +++ b/SKILL.md @@ -17,6 +17,19 @@ description: 對自架 Gitea 做常見操作:建 repo 並推送、列出 repo ``` 3. `config.env` 已被 `.gitignore` 排除。 +### 多組 Gitea 站/帳號 + +需要切換不同 Gitea 站或帳號時,另外存成 `config..env`,呼叫腳本時帶 `GITEA_PROFILE`: + +```bash +cp config.example.env config.work.env +# 編輯 config.work.env + +GITEA_PROFILE=work bash /scripts/list.sh +``` + +`GITEA_PROFILE` 未設時讀 `config.env`(預設)。`config.*.env` 已被 `.gitignore` 排除。 + ## 常見情境 → 對應腳本 `` 代表本 skill 所在路徑(clone 下來的位置或 `~/.claude/skills/gitea-cli` symlink)。 diff --git a/config.example.env b/config.example.env index 5529397..ef3328e 100644 --- a/config.example.env +++ b/config.example.env @@ -1,5 +1,10 @@ # 複製此檔為 config.env 後填入實際值 # cp config.example.env config.env +# +# 多組 Gitea 站/帳號:另存為 config..env, +# 執行腳本時帶 GITEA_PROFILE= 切換。例如: +# cp config.example.env config.work.env # 編輯後 +# GITEA_PROFILE=work bash scripts/list.sh # Gitea 站台網址(不要結尾 /) GITEA_URL=http://your-gitea.example.com:3000 diff --git a/scripts/lib/common.sh b/scripts/lib/common.sh index aba232c..c79e773 100644 --- a/scripts/lib/common.sh +++ b/scripts/lib/common.sh @@ -12,7 +12,12 @@ set -euo pipefail _LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" _SKILL_DIR="$(cd "${_LIB_DIR}/../.." && pwd)" -CONFIG_FILE="${_SKILL_DIR}/config.env" +# GITEA_PROFILE 未設 → 讀 config.env;設了 → 讀 config..env +if [[ -n "${GITEA_PROFILE:-}" ]]; then + CONFIG_FILE="${_SKILL_DIR}/config.${GITEA_PROFILE}.env" +else + CONFIG_FILE="${_SKILL_DIR}/config.env" +fi GITEA_API_RESP_FILE="" _cleanup_common() { @@ -52,6 +57,10 @@ load_config() { echo " cp ${_SKILL_DIR}/config.example.env ${CONFIG_FILE}" echo "" echo "然後編輯 ${CONFIG_FILE} 填入 GITEA_URL / GITEA_USER / GITEA_TOKEN" + if [[ -n "${GITEA_PROFILE:-}" ]]; then + echo "" + echo "(目前使用 profile:${GITEA_PROFILE})" + fi } >&2 exit 1 fi