feat(config): support multiple Gitea profiles via GITEA_PROFILE env var

未設時讀 config.env(行為不變);設了讀 config.<profile>.env。
.gitignore 新增 config.*.env 但保留 config.example.env。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
timmy
2026-04-21 16:18:16 +08:00
parent e333f7b8ab
commit f28f20ba56
6 changed files with 41 additions and 3 deletions

2
.gitignore vendored
View File

@@ -1 +1,3 @@
config.env config.env
config.*.env
!config.example.env

View File

@@ -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 提供: 所有 API / push / clone 都走 lib腳本本身不寫 curl 也不直接操作 credential helper。lib 提供:
- `load_config`:讀 `config.env`,檢查三個變數都非空非預設 - `load_config`:讀 `config.env`(或 `GITEA_PROFILE` 指定時讀 `config.<profile>.env`,檢查三個變數都非空非預設
- `gitea_api <METHOD> <path> [json-body]`:單一 API 呼叫入口;回傳後讀 `$HTTP_CODE``$GITEA_API_RESP_FILE` - `gitea_api <METHOD> <path> [json-body]`:單一 API 呼叫入口;回傳後讀 `$HTTP_CODE``$GITEA_API_RESP_FILE`
- `git_push_with_token <branch>` / `git_push_tag_with_token <tag>` / `git_clone_with_token <clean-url> <target>`:一次性帶 token 的 git 操作 - `git_push_with_token <branch>` / `git_push_tag_with_token <tag>` / `git_clone_with_token <clean-url> <target>`:一次性帶 token 的 git 操作
- `infer_repo_from_cwd`:從 `git remote get-url origin` 推斷 `owner/repo` - `infer_repo_from_cwd`:從 `git remote get-url origin` 推斷 `owner/repo`

View File

@@ -41,6 +41,15 @@ gitea-cli/
GITEA_TOKEN=你剛才產生的_token GITEA_TOKEN=你剛才產生的_token
``` ```
**多組 Gitea 站/帳號**:另存成 `config.<profile>.env`,執行腳本時帶 `GITEA_PROFILE=<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兩擇一 3. (選用)讓 Claude Code 自動辨識這個 skill兩擇一
**A. Symlink 本地開發目錄**(適合會持續改腳本的情境) **A. Symlink 本地開發目錄**(適合會持續改腳本的情境)
@@ -130,7 +139,7 @@ Aorigin 是乾淨 URL再次 push 會要求認證。解法二選一:
A重新到 Gitea 產生 token覆蓋 `config.env` 裡的 `GITEA_TOKEN`。 A重新到 Gitea 產生 token覆蓋 `config.env` 裡的 `GITEA_TOKEN`。
**Q要換成另一個 Gitea 站或使用者?** **Q要換成另一個 Gitea 站或使用者?**
A直接改 `config.env` 的 `GITEA_URL` / `GITEA_USER`。 A常駐切換就另存成 `config.<profile>.env`,執行時帶 `GITEA_PROFILE=<profile>`;只是單次替換就直接改 `config.env` 的 `GITEA_URL` / `GITEA_USER`。
**Q可以用在非 Gitea例如 Gitea clone 產品)嗎?** **Q可以用在非 Gitea例如 Gitea clone 產品)嗎?**
A本腳本用的是 Gitea API v1Forgejo 相容GitHub/GitLab 不相容。 A本腳本用的是 Gitea API v1Forgejo 相容GitHub/GitLab 不相容。

View File

@@ -17,6 +17,19 @@ description: 對自架 Gitea 做常見操作:建 repo 並推送、列出 repo
``` ```
3. `config.env` 已被 `.gitignore` 排除。 3. `config.env` 已被 `.gitignore` 排除。
### 多組 Gitea 站/帳號
需要切換不同 Gitea 站或帳號時,另外存成 `config.<profile>.env`,呼叫腳本時帶 `GITEA_PROFILE`
```bash
cp config.example.env config.work.env
# 編輯 config.work.env
GITEA_PROFILE=work bash <skill-path>/scripts/list.sh
```
`GITEA_PROFILE` 未設時讀 `config.env`(預設)。`config.*.env` 已被 `.gitignore` 排除。
## 常見情境 → 對應腳本 ## 常見情境 → 對應腳本
`<skill-path>` 代表本 skill 所在路徑clone 下來的位置或 `~/.claude/skills/gitea-cli` symlink `<skill-path>` 代表本 skill 所在路徑clone 下來的位置或 `~/.claude/skills/gitea-cli` symlink

View File

@@ -1,5 +1,10 @@
# 複製此檔為 config.env 後填入實際值 # 複製此檔為 config.env 後填入實際值
# cp config.example.env config.env # cp config.example.env config.env
#
# 多組 Gitea 站/帳號:另存為 config.<profile>.env
# 執行腳本時帶 GITEA_PROFILE=<profile> 切換。例如:
# cp config.example.env config.work.env # 編輯後
# GITEA_PROFILE=work bash scripts/list.sh
# Gitea 站台網址(不要結尾 / # Gitea 站台網址(不要結尾 /
GITEA_URL=http://your-gitea.example.com:3000 GITEA_URL=http://your-gitea.example.com:3000

View File

@@ -12,7 +12,12 @@ set -euo pipefail
_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" _LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
_SKILL_DIR="$(cd "${_LIB_DIR}/../.." && pwd)" _SKILL_DIR="$(cd "${_LIB_DIR}/../.." && pwd)"
# GITEA_PROFILE 未設 → 讀 config.env設了 → 讀 config.<profile>.env
if [[ -n "${GITEA_PROFILE:-}" ]]; then
CONFIG_FILE="${_SKILL_DIR}/config.${GITEA_PROFILE}.env"
else
CONFIG_FILE="${_SKILL_DIR}/config.env" CONFIG_FILE="${_SKILL_DIR}/config.env"
fi
GITEA_API_RESP_FILE="" GITEA_API_RESP_FILE=""
_cleanup_common() { _cleanup_common() {
@@ -52,6 +57,10 @@ load_config() {
echo " cp ${_SKILL_DIR}/config.example.env ${CONFIG_FILE}" echo " cp ${_SKILL_DIR}/config.example.env ${CONFIG_FILE}"
echo "" echo ""
echo "然後編輯 ${CONFIG_FILE} 填入 GITEA_URL / GITEA_USER / GITEA_TOKEN" echo "然後編輯 ${CONFIG_FILE} 填入 GITEA_URL / GITEA_USER / GITEA_TOKEN"
if [[ -n "${GITEA_PROFILE:-}" ]]; then
echo ""
echo "(目前使用 profile${GITEA_PROFILE}"
fi
} >&2 } >&2
exit 1 exit 1
fi fi