Files
ISEP/scripts/check-deploy-drift.sh
T
Leo c2638668e3 ISEP 0.1.0:環境設定收成一個 plugin,本機與雲端共用一份
leo 2026-08-20:「同一個 plugin 你用,薄殼也用,保證兩邊同步」
              「我要你幫雲端做薄殼,永遠都有問題,你要做的就是這組設定
                你自己可以 dogfooding」

搬進來:41 支 hook(51 條註冊)/7 支 command/2 支 skill/23 支腳本。
不搬 .env、wiki、docs——那些是知識不是環境。

51 條 hook 路徑全部從 $CLAUDE_PROJECT_DIR/.claude/hooks/ 改成 ${CLAUDE_PLUGIN_ROOT}/hooks/,
零漏網。那正是薄殼一直壞掉的根:雲端 cwd 不是真身,寫死路徑就斷。

尚未驗證:Claude Code 能不能從私有 Gitea repo 裝 marketplace(要憑證)。
下一步就是在本機實際裝一次,通了才動雲端 bootstrap.sh。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 11:41:46 +08:00

86 lines
4.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# check-deploy-drift.sh — 線上/Gitea/本機三方版本對帳(2026-07-30 立)
#
# 為什麼存在:07-30 雲端總管看 Gitea 判「線上 919ed39 的程式碼失蹤」,實情是
# t143-t150 十筆 commit 只在本機沒 push——雲端缺「本機領先 Gitea 幾筆」的視野就會誤報。
# 本腳本讓任何 session(含雲端)一條命令看清三方是否一致;有落差 exit 1。
#
# 用法:scripts/check-deploy-drift.sh
# 需要 GITEA_TOKEN(環境變數,或頂層 .env 有就自動吸)。
# 雲端 checkout 沒有 products/gitignore)→ 本機欄自動降級成「—」,只比前兩欄。
set -euo pipefail
cd "$(dirname "$0")/.."
TOP="$(pwd)"
GITEA="https://git.uncle6.me/api/v1/repos/Leo/arcrun-rag/raw"
INSTALLER_REF="${INSTALLER_REF:-fix/t75-remove-config-card}"
LANDING_REF="${LANDING_REF:-feat/daemon}"
LOCAL_REPO="$TOP/products/arcrun-rag"
if [ -z "${GITEA_TOKEN:-}" ] && [ -f "$TOP/.env" ]; then
set -a; source "$TOP/.env" 2>/dev/null || true; set +a
fi
[ -n "${GITEA_TOKEN:-}" ] || { echo "❌ 缺 GITEA_TOKEN(環境變數或頂層 .env"; exit 2; }
VER_PAT='20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]+[0-9a-f]\{7\}'
# 從 worker.js 內容推導安裝器版本號(BUNDLE_BUILT + '+' + 釘碼前 7 碼,同 worker.js 顯示邏輯)
derive_installer_ver() {
local built pin
built="$(printf '%s' "$1" | grep -o "BUNDLE_BUILT = '[^']*'" | head -1 | sed "s/.*'\(.*\)'/\1/" || true)"
pin="$(printf '%s' "$1" | grep -o 'arcrun-rag-bundles@[0-9a-f]*' | head -1 | cut -d@ -f2 | cut -c1-7 || true)"
{ [ -n "$built" ] && [ -n "$pin" ]; } && printf '%s+%s' "$built" "$pin" || printf ''
}
# ── 線上 ──
LIVE_INSTALLER="$(curl -s -m 25 "https://install.arcrun.dev/?cb=$RANDOM" | grep -o "$VER_PAT" | head -1 || true)"
LIVE_LANDING="$(curl -s -m 25 "https://rag.arcrun.dev/?cb=$RANDOM" | grep -o "$VER_PAT" | head -1 || true)"
# ── Gitea ──
G_WORKER="$(curl -s -m 25 "$GITEA/installer/oauth-prototype/worker.js?ref=$INSTALLER_REF" -H "Authorization: token $GITEA_TOKEN" || true)"
GITEA_INSTALLER="$(derive_installer_ver "$G_WORKER")"
GITEA_LANDING="$(curl -s -m 25 "$GITEA/landing/wrangler.toml?ref=$LANDING_REF" -H "Authorization: token $GITEA_TOKEN" \
| grep -o 'SITE_BUNDLE_VERSION = "[^"]*"' | sed 's/.*"\(.*\)"/\1/' || true)"
# ── 本機(沒有 products/ 就降級)──
if [ -d "$LOCAL_REPO/.git" ]; then
L_WORKER="$(git -C "$LOCAL_REPO" show "$INSTALLER_REF:installer/oauth-prototype/worker.js" 2>/dev/null || true)"
LOCAL_INSTALLER="$(derive_installer_ver "$L_WORKER")"
LOCAL_LANDING="$(git -C "$LOCAL_REPO" show "$LANDING_REF:landing/wrangler.toml" 2>/dev/null \
| grep -o 'SITE_BUNDLE_VERSION = "[^"]*"' | sed 's/.*"\(.*\)"/\1/' || true)"
# 本機另一種漂移:commit 了沒推(07-30 事故本尊)
UNPUSHED_I="$(git -C "$LOCAL_REPO" log --oneline "gitea/$INSTALLER_REF..$INSTALLER_REF" 2>/dev/null | wc -l | tr -d ' ' || true)"
UNPUSHED_L="$(git -C "$LOCAL_REPO" log --oneline "gitea/$LANDING_REF..$LANDING_REF" 2>/dev/null | wc -l | tr -d ' ' || true)"
HAS_LOCAL=1
else
LOCAL_INSTALLER="—"; LOCAL_LANDING="—"; UNPUSHED_I=""; UNPUSHED_L=""
HAS_LOCAL=0
echo "(本機沒有 products/arcrun-rag——雲端模式,只比線上 vs Gitea)"
fi
printf '%-10s %-20s %-20s %-20s\n' "" "線上" "Gitea" "本機"
printf '%-10s %-20s %-20s %-20s\n' "installer" "${LIVE_INSTALLER:-}" "${GITEA_INSTALLER:-}" "${LOCAL_INSTALLER:-}"
printf '%-10s %-20s %-20s %-20s\n' "landing" "${LIVE_LANDING:-}" "${GITEA_LANDING:-}" "${LOCAL_LANDING:-}"
DRIFT=0
chk() { # chk 名稱 線上 gitea 本機
local name="$1" live="$2" gitea="$3" local_="$4"
[ -n "$live" ] && [ "$gitea" != "" ] && [ "$live" != "$gitea" ] && { echo "❌ $name:線上($live) ≠ Gitea($gitea)"; DRIFT=1; }
if [ "$HAS_LOCAL" = "1" ]; then
[ "$local_" != "" ] && [ "$gitea" != "" ] && [ "$local_" != "$gitea" ] && { echo "❌ $name:本機($local_) ≠ Gitea($gitea)——改了沒推?"; DRIFT=1; }
fi
true
}
chk installer "${LIVE_INSTALLER:-}" "${GITEA_INSTALLER:-}" "${LOCAL_INSTALLER:-}"
chk landing "${LIVE_LANDING:-}" "${GITEA_LANDING:-}" "${LOCAL_LANDING:-}"
[ -n "$UNPUSHED_I" ] && [ "$UNPUSHED_I" != "0" ] && { echo "❌ installer 分支有 $UNPUSHED_I 筆 commit 未推上 Gitea"; DRIFT=1; }
[ -n "$UNPUSHED_L" ] && [ "$UNPUSHED_L" != "0" ] && { echo "❌ landing 分支有 $UNPUSHED_L 筆 commit 未推上 Gitea"; DRIFT=1; }
[ "$DRIFT" = "1" ] && { echo "⚠️ 有漂移(見上)"; exit 1; }
# 抓不到 ≠ 驗證通過(假綠禁令):任何欄位是 ? 就不准報 ✅
if [ -z "${LIVE_INSTALLER:-}" ] || [ -z "${LIVE_LANDING:-}" ] || [ "$GITEA_INSTALLER" = "" ] || [ -z "${GITEA_LANDING:-}" ]; then
echo "⚠️ 有欄位抓不到(網路/權限問題)=無法驗證,不算通過;重跑一次試試"; exit 2
fi
echo "✅ 無漂移"