雲端環境變數清單有版本了:docs/cloud-env-versions.tsv 記每版 key,產生器印版本與差異、改清單沒升版就拒絕,產物預設放桌面(v6:+ARCRUN_NS_UNCLE6/GITHUB_MIRROR_TOKEN/GITHUB_ACCOUNT_NAME)
leo 2026-09-18:「你這裡記錄每版的 credential 的 key,但 value 自動產生,我就貼上去,你要有版本,因為這件事做了很多次,但你都沒記錄版本」 v1–v5 由 git 歷史還原(f855d82、ca9ea99、7aef943、cb310e9、dd86fef)。test-make-cloud-env.sh 13/13(新增 V1 檔頭版本、V2 不一致拒絕)。 (inkstone/ISEP#158、inkstone/InkStoneCo#98 c7739) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
# 誤觸時怎麼關: 這支不擋任何東西。不想產生就別跑;產物在版控外,刪掉即可。
|
||||
#
|
||||
# 用法:bash scripts/make-cloud-env.sh
|
||||
# 產物:~/.claude/cloud-env/<日期>.txt(權限 600,**不在任何 repo 裡**)
|
||||
# 產物:~/Desktop/cloud-env-<版本>-<日期>.txt(權限 600,**不在任何 repo 裡**);版本紀錄 docs/cloud-env-versions.tsv
|
||||
# 本腳本只寫「變數名字」,值在執行當下才從既有 .env 讀出來寫進產物 —— 值不進版控、不進對話。
|
||||
set -euo pipefail
|
||||
|
||||
@@ -44,6 +44,14 @@ NEEDED=(
|
||||
# 只有 namespace 是機敏 ⇒ 走環境變數。原本只住在 ~/.arcrun/config.yaml 的 api_key,
|
||||
# 那個檔在家目錄、不隨 clone 走 ⇒ 雲端永遠拿不到。
|
||||
ARCRUN_NS_YOULIN # youlin 實例的 namespace(X-Arcrun-API-Key)
|
||||
ARCRUN_NS_UNCLE6 # uncle6 實例的 namespace:出貨第 1、19、20 站派給 uncle6 工作流(inkstone/InkStoneCo#98 → comment 7739)
|
||||
|
||||
# ── prod 出貨把產物推上 GitHub 鏡像(第 14、21、22 站)──
|
||||
# 🔴 名字進清單 ≠ 雲端可以自由寫 GitHub:`github-contact-guard.sh` 照樣擋,
|
||||
# 寫入仍要 D20 開閘(保險檔落在哪由 inkstone/ISEP#157 處理)。
|
||||
# 進清單是因為「拿不到這兩個名字」會讓 prod 那半在雲端**連開閘之後都走不下去**。
|
||||
GITHUB_MIRROR_TOKEN # GitHub 鏡像 repo 的寫入 token(走標頭,不進網址)
|
||||
GITHUB_ACCOUNT_NAME # 上面那把的帳號名(組鏡像 repo 路徑用,不是機密)
|
||||
)
|
||||
#
|
||||
# 🔴 這份清單的邊界——加一把之前先問「這把打得到哪個實例」,不是「這把方便嗎」
|
||||
@@ -91,13 +99,30 @@ lookup() { # $1=變數名 → 印出值(找不到就空)
|
||||
return 1
|
||||
}
|
||||
|
||||
# 預設丟 ~/.claude/cloud-env(權限 700)。要放別的地方= OUT_DIR=~/Desktop bash scripts/make-cloud-env.sh
|
||||
OUT_DIR="${OUT_DIR:-$HOME/.claude/cloud-env}"
|
||||
# ── 版本(leo 2026-09-18:「你要有版本,因為這件事做了很多次,但你都沒記錄版本」)──
|
||||
# 真相源=docs/cloud-env-versions.tsv(只記 key,不記值)。最後一列=現行版。
|
||||
# 🔴 NEEDED 跟最後一列的 key 不一致 ⇒ 拒絕產生:改了清單就必須在 tsv 加一版。
|
||||
VERSIONS="$(cd "$(dirname "$0")/.." && pwd)/docs/cloud-env-versions.tsv"
|
||||
[ -f "$VERSIONS" ] || { echo "🔴 找不到 $VERSIONS" >&2; exit 1; }
|
||||
CUR_LINE=$(grep -v '^#' "$VERSIONS" | grep -v '^[[:space:]]*$' | tail -1)
|
||||
PREV_LINE=$(grep -v '^#' "$VERSIONS" | grep -v '^[[:space:]]*$' | tail -2 | head -1)
|
||||
VER=$(printf '%s' "$CUR_LINE" | cut -f1); VER_DATE=$(printf '%s' "$CUR_LINE" | cut -f2)
|
||||
VER_KEYS=$(printf '%s' "$CUR_LINE" | cut -f3); VER_WHY=$(printf '%s' "$CUR_LINE" | cut -f4)
|
||||
PREV_VER=$(printf '%s' "$PREV_LINE" | cut -f1); PREV_KEYS=$(printf '%s' "$PREV_LINE" | cut -f3)
|
||||
NEEDED_JOINED=$(IFS=,; printf '%s' "${NEEDED[*]}")
|
||||
if [ "$NEEDED_JOINED" != "$VER_KEYS" ]; then
|
||||
echo "🔴 NEEDED 與 $VERSIONS 最後一版($VER)的 key 不一致——改了清單就要在 tsv 加一列新版本再跑。" >&2
|
||||
echo " NEEDED:$NEEDED_JOINED" >&2
|
||||
echo " $VER :$VER_KEYS" >&2
|
||||
exit 2
|
||||
fi
|
||||
ADDED=$(comm -13 <(tr , '\n' <<<"$PREV_KEYS" | sort) <(tr , '\n' <<<"$VER_KEYS" | sort) | paste -sd, -)
|
||||
REMOVED=$(comm -23 <(tr , '\n' <<<"$PREV_KEYS" | sort) <(tr , '\n' <<<"$VER_KEYS" | sort) | paste -sd, -)
|
||||
|
||||
# 預設丟桌面(leo 2026-09-18 指定)。要放別的地方= OUT_DIR=<目錄> bash scripts/make-cloud-env.sh
|
||||
OUT_DIR="${OUT_DIR:-$HOME/Desktop}"
|
||||
mkdir -p "$OUT_DIR"
|
||||
# 只在「這個目錄是我們自己造的預設位置」時才收緊權限——
|
||||
# OUT_DIR 可被覆寫,不該對使用者指定的既有目錄(例如 ~/Desktop)動權限。
|
||||
[ "$OUT_DIR" = "$HOME/.claude/cloud-env" ] && chmod 700 "$OUT_DIR"
|
||||
OUT="$OUT_DIR/$(date +%Y%m%d-%H%M%S).txt"
|
||||
OUT="$OUT_DIR/cloud-env-${VER}-$(date +%Y%m%d-%H%M).txt"
|
||||
|
||||
SETUP="$(cd "$(dirname "$0")/.." && pwd)/docs/cloud-setup-script.sh"
|
||||
[ -f "$SETUP" ] || { echo "🔴 找不到 $SETUP" >&2; exit 1; }
|
||||
@@ -105,6 +130,8 @@ SETUP="$(cd "$(dirname "$0")/.." && pwd)/docs/cloud-setup-script.sh"
|
||||
MISSING=()
|
||||
{
|
||||
echo "claude.ai → Cloud environments → 你的環境。下面兩塊各自貼進對應欄位。"
|
||||
echo "版本:${VER}(${VER_DATE})——${VER_WHY}"
|
||||
echo "比 ${PREV_VER} 多:${ADDED:-(無)}|少:${REMOVED:-(無)}"
|
||||
echo "產生時間:$(date '+%Y-%m-%d %H:%M')"
|
||||
echo
|
||||
echo "════════ ① Environment variables(一行一個,名字與值分開填)════════"
|
||||
@@ -123,5 +150,6 @@ MISSING=()
|
||||
chmod 600 "$OUT"
|
||||
|
||||
echo "✅ 產生完成:$OUT"
|
||||
echo " 版本:${VER}(比 ${PREV_VER} 多:${ADDED:-無}|少:${REMOVED:-無})"
|
||||
echo " 變數 ${#NEEDED[@]} 個|找不到值的 ${#MISSING[@]} 個 ${MISSING[*]:-}"
|
||||
echo " 🔴 這個檔含金鑰真身:貼完就刪(rm '$OUT'),它刻意不在任何 repo 裡。"
|
||||
|
||||
@@ -59,6 +59,14 @@ chk 0 "$miss" "A3 每個名字都帶著值出現在 ① 區塊"
|
||||
printf '%s\n' "$OUT_LINE" | grep -q "找不到值的 0 個" \
|
||||
&& ok "A4 收尾那行說「找不到值的 0 個」" || bad "A4 收尾計數不對:$OUT_LINE"
|
||||
|
||||
# 版本(leo 2026-09-18):產物檔頭帶現行版本號;清單改了沒升版要拒絕
|
||||
grep -q "^版本:v[0-9]" "$F" && ok "V1 產物檔頭寫著版本號" || bad "V1 產物檔頭沒有版本號"
|
||||
VT="$(cd "$(dirname "$S")/.." && pwd)/docs/cloud-env-versions.tsv"; VB="$VT.bak-test"
|
||||
cp "$VT" "$VB"; printf 'v999\t2099-01-01\tNOPE_ONLY\t測試用\n' >> "$VT"
|
||||
INKSTONE_ROOT="$FAKE" OUT_DIR="$OUTD" bash "$S" >/dev/null 2>&1; rc=$?
|
||||
mv "$VB" "$VT"
|
||||
chk 2 "$rc" "V2 清單與最後一版 key 不一致時拒絕產生(離開碼 2)"
|
||||
|
||||
# 缺值時不准假綠:拿掉第一個,它要變成 <🔴 …> 且計數變 1
|
||||
grep -v "^${NEEDED[0]}=" "$FAKE/.env" > "$FAKE/.env.tmp" && mv "$FAKE/.env.tmp" "$FAKE/.env"
|
||||
OUT2=$(INKSTONE_ROOT="$FAKE" OUT_DIR="$OUTD" bash "$S" 2>&1)
|
||||
|
||||
Reference in New Issue
Block a user