Merge pull request '產生雲端 env 設定給 leo 貼(InkStoneCo#14)' (#41) from feat/cloud-env-generator into main
雲端 env 產生器
This commit was merged in pull request #41.
This commit is contained in:
+13
-1
@@ -101,9 +101,21 @@ claude -p '請執行 git tag -a v9.9.9 -m test'
|
|||||||
機器碰不到 claude.ai 的 Cloud environment 設定,這段一定要你動手。
|
機器碰不到 claude.ai 的 Cloud environment 設定,這段一定要你動手。
|
||||||
看到跟「該看到」不一樣就停下來,把畫面貼回 `inkstone/InkStoneCo#14`。
|
看到跟「該看到」不一樣就停下來,把畫面貼回 `inkstone/InkStoneCo#14`。
|
||||||
|
|
||||||
|
### B0 — 先讓機器把要貼的東西產生好(不要自己拼湊)
|
||||||
|
|
||||||
|
```
|
||||||
|
bash scripts/make-cloud-env.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
它會去既有的 `.env` 把值讀出來,產生一個**含真實值、可直接複製**的檔到
|
||||||
|
`~/.claude/cloud-env/<時間>.txt`(權限 600,**刻意不在任何 repo 裡**),只把路徑印出來。
|
||||||
|
變數的**名字**寫在腳本裡(要加變數就加在那個清單),**值不進版控、不進對話**。
|
||||||
|
|
||||||
|
🔴 **貼完就刪那個檔**(指令印在它自己最後一行)。
|
||||||
|
|
||||||
### B1 — 設定(一次性)
|
### B1 — 設定(一次性)
|
||||||
|
|
||||||
claude.ai → **Cloud environments** → 你的環境:
|
打開上一步產生的檔,裡面兩塊分別貼進 claude.ai → **Cloud environments** → 你的環境:
|
||||||
|
|
||||||
1. **Environment variables** 加一個
|
1. **Environment variables** 加一個
|
||||||
- 名稱:`GITEA_TOKEN_CLAUDE_CODE`
|
- 名稱:`GITEA_TOKEN_CLAUDE_CODE`
|
||||||
|
|||||||
Executable
+69
@@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# 管什麼: 產生「可以直接貼進 claude.ai Cloud environment」的兩塊內容,值由本腳本自己去 .env 拉。
|
||||||
|
# 為什麼: leo 2026-08-20「這些值你都有,你可以只寫名字然後 build 一個檔案給我」——
|
||||||
|
# 之前的做法是叫他自己拼湊,或叫他把設定貼給 AI 看,兩種都錯(一個沒效率,一個讓值經過對話)。
|
||||||
|
# 誤觸時怎麼關: 這支不擋任何東西。不想產生就別跑;產物在版控外,刪掉即可。
|
||||||
|
#
|
||||||
|
# 用法:bash scripts/make-cloud-env.sh
|
||||||
|
# 產物:~/.claude/cloud-env/<日期>.txt(權限 600,**不在任何 repo 裡**)
|
||||||
|
# 本腳本只寫「變數名字」,值在執行當下才從既有 .env 讀出來寫進產物 —— 值不進版控、不進對話。
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# ── 雲端需要哪些變數(只有名字。要加就加在這裡)──────────────────
|
||||||
|
NEEDED=(
|
||||||
|
GITEA_TOKEN_CLAUDE_CODE # 機器帳號 claude-code 的 Gitea token;bootstrap 與 plugin 安裝都靠它
|
||||||
|
)
|
||||||
|
|
||||||
|
# ── 去哪裡找值(credentials-map.md 記的六個 .env)────────────────
|
||||||
|
BASE="${INKSTONE_ROOT:-$HOME/Documents/tech_projects/InkStoneCo}"
|
||||||
|
ENV_FILES=(
|
||||||
|
"$BASE/.env"
|
||||||
|
"$BASE/matrix/arcrun/.env"
|
||||||
|
"$BASE/products/arcrun-rag/.env"
|
||||||
|
"$BASE/polaris/mira/.env"
|
||||||
|
"$BASE/matrix/kbdb-graph-plugin/.env"
|
||||||
|
"$BASE/arcrun_harness/.env"
|
||||||
|
)
|
||||||
|
|
||||||
|
lookup() { # $1=變數名 → 印出值(找不到就空)
|
||||||
|
local name="$1" f v
|
||||||
|
for f in "${ENV_FILES[@]}"; do
|
||||||
|
[ -f "$f" ] || continue
|
||||||
|
v=$(grep -E "^[[:space:]]*(export[[:space:]]+)?${name}=" "$f" 2>/dev/null | tail -1 \
|
||||||
|
| sed -E "s/^[[:space:]]*(export[[:space:]]+)?${name}=//" \
|
||||||
|
| sed -E 's/^"(.*)"$/\1/; s/^'"'"'(.*)'"'"'$/\1/')
|
||||||
|
[ -n "$v" ] && { printf '%s' "$v"; return 0; }
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
OUT_DIR="$HOME/.claude/cloud-env"
|
||||||
|
mkdir -p "$OUT_DIR"; chmod 700 "$OUT_DIR"
|
||||||
|
OUT="$OUT_DIR/$(date +%Y%m%d-%H%M%S).txt"
|
||||||
|
|
||||||
|
SETUP="$(cd "$(dirname "$0")/.." && pwd)/docs/cloud-setup-script.sh"
|
||||||
|
[ -f "$SETUP" ] || { echo "🔴 找不到 $SETUP" >&2; exit 1; }
|
||||||
|
|
||||||
|
MISSING=()
|
||||||
|
{
|
||||||
|
echo "claude.ai → Cloud environments → 你的環境。下面兩塊各自貼進對應欄位。"
|
||||||
|
echo "產生時間:$(date '+%Y-%m-%d %H:%M')"
|
||||||
|
echo
|
||||||
|
echo "════════ ① Environment variables(一行一個,名字與值分開填)════════"
|
||||||
|
for n in "${NEEDED[@]}"; do
|
||||||
|
if v=$(lookup "$n"); then
|
||||||
|
echo "$n=$v"
|
||||||
|
else
|
||||||
|
echo "$n=<🔴 這台機器的 .env 裡找不到,要 leo 提供>"
|
||||||
|
MISSING+=("$n")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
echo "════════ ② Setup script(整段貼,一字不改)════════"
|
||||||
|
cat "$SETUP"
|
||||||
|
} > "$OUT"
|
||||||
|
chmod 600 "$OUT"
|
||||||
|
|
||||||
|
echo "✅ 產生完成:$OUT"
|
||||||
|
echo " 變數 ${#NEEDED[@]} 個|找不到值的 ${#MISSING[@]} 個 ${MISSING[*]:-}"
|
||||||
|
echo " 🔴 這個檔含金鑰真身:貼完就刪(rm '$OUT'),它刻意不在任何 repo 裡。"
|
||||||
Reference in New Issue
Block a user