feat(cli): 部署收尾產生更新與移除指引,並掛上部署後重啟閘門 #27
@@ -10,6 +10,7 @@
|
|||||||
# exit<TAB>{結束碼}<TAB>{指令} 該指令的結束碼;dry-run 時結束碼印「-」
|
# exit<TAB>{結束碼}<TAB>{指令} 該指令的結束碼;dry-run 時結束碼印「-」
|
||||||
# skip<TAB>{domain}<TAB>{原因} 本地 clone 是開發中的樹,略過 git pull
|
# skip<TAB>{domain}<TAB>{原因} 本地 clone 是開發中的樹,略過 git pull
|
||||||
# note<TAB>{cli}<TAB>{原因} 非逐指令的說明(例:kiro 整批改走複製退路的理由)
|
# note<TAB>{cli}<TAB>{原因} 非逐指令的說明(例:kiro 整批改走複製退路的理由)
|
||||||
|
# restart<TAB>{路徑} 這次寫下的重啟狀態檔
|
||||||
# result<TAB>{cli}<TAB>{mode}<TAB>{domain 清單}<TAB>{ok|fail}
|
# result<TAB>{cli}<TAB>{mode}<TAB>{domain 清單}<TAB>{ok|fail}
|
||||||
# 結束碼:全部指令成功 0;任一指令失敗 1;參數錯誤 2。skip、note 不算失敗,但呼叫端要據實回報。
|
# 結束碼:全部指令成功 0;任一指令失敗 1;參數錯誤 2。skip、note 不算失敗,但呼叫端要據實回報。
|
||||||
# marketplace 指令一輪只跑一次:install 與 update 先跑,uninstall 最後跑。
|
# marketplace 指令一輪只跑一次:install 與 update 先跑,uninstall 最後跑。
|
||||||
@@ -18,7 +19,13 @@
|
|||||||
# kiro 的執行檔是 kiro-cli;先探測這個版本認不認得 plugin 子指令(部分版本已經完全
|
# kiro 的執行檔是 kiro-cli;先探測這個版本認不認得 plugin 子指令(部分版本已經完全
|
||||||
# 移除,例:2.18.1),認得才逐一嘗試、失敗才退回複製,不認得就整批直接走複製,
|
# 移除,例:2.18.1),認得才逐一嘗試、失敗才退回複製,不認得就整批直接走複製,
|
||||||
# 不逐一撞一次「unrecognized subcommand」才退回。
|
# 不逐一撞一次「unrecognized subcommand」才退回。
|
||||||
|
# install 或 update 全數成功時,收尾寫一行進 $JSC_HOME/restart-required,代表這台機器有一輪
|
||||||
|
# 部署還沒重啟。擋人邏輯不在這裡:由 jsc-hooks 讀這個檔案提示使用者重啟,逃生門
|
||||||
|
# JSC_RESTART_GATE=off 也由那邊判讀。
|
||||||
|
# 更新指引與移除指引由同目錄的 write-guides.sh 產生,一輪部署跑一次,不在這支腳本裡:
|
||||||
|
# 這支腳本的職責是「對單一 CLI 部署」,指引寫的是整台機器的樣貌。
|
||||||
# 環境變數:
|
# 環境變數:
|
||||||
|
# JSC_HOME hook 資料目錄,重啟狀態檔寫在這裡(預設 ~/.jsc)
|
||||||
# GITEA_HOST Gitea 站台,可省略 scheme(預設 https://gitea.jsc.idv.tw)
|
# GITEA_HOST Gitea 站台,可省略 scheme(預設 https://gitea.jsc.idv.tw)
|
||||||
# JSC_GITEA_OWNER 存取庫的 owner(預設 plugins)
|
# JSC_GITEA_OWNER 存取庫的 owner(預設 plugins)
|
||||||
# JSC_LOCAL_PLUGINS antigravity/kiro 用的本地 clone 目錄
|
# JSC_LOCAL_PLUGINS antigravity/kiro 用的本地 clone 目錄
|
||||||
@@ -57,6 +64,41 @@ usage() {
|
|||||||
exit 2
|
exit 2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 找 jsc-hooks 的 restart-gate.sh。順序比照 jsc-sdlc 的 wp-gate.sh:環境變數指定優先,
|
||||||
|
# 再找並排的工作樹,最後找 plugin 快取。找不到就回非零,由呼叫端據實回報。
|
||||||
|
restart_gate_sh() {
|
||||||
|
if [ -n "${JSC_HOOKS_DIR:-}" ] && [ -f "$JSC_HOOKS_DIR/restart-gate.sh" ]; then
|
||||||
|
printf '%s\n' "$JSC_HOOKS_DIR/restart-gate.sh"; return 0
|
||||||
|
fi
|
||||||
|
_root=$(cd "$(dirname "$0")/.." 2>/dev/null && pwd) || return 1
|
||||||
|
for _c in "$_root/../hooks/hooks/restart-gate.sh" "$_root/../jsc-hooks/hooks/restart-gate.sh"; do
|
||||||
|
[ -f "$_c" ] && { printf '%s\n' "$_c"; return 0; }
|
||||||
|
done
|
||||||
|
_c=$(ls -d "$HOME"/.claude/plugins/cache/*/jsc-hooks/*/hooks/restart-gate.sh 2>/dev/null | sort | tail -n1)
|
||||||
|
[ -n "$_c" ] && [ -f "$_c" ] && { printf '%s\n' "$_c"; return 0; }
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# 掛上部署後的重啟閘門。狀態檔的路徑、格式與判讀全在 jsc-hooks 的 restart-gate.sh,
|
||||||
|
# 這裡只轉呼叫它的 require 子命令,比照 jsc-sdlc 轉呼叫 sdlc-gate.sh wp-lock 的慣例。
|
||||||
|
# 兩邊各拼一份格式就會對不上:2026-08-27 這裡曾自己寫四欄 TSV,而 hooks 那端讀的是
|
||||||
|
# key=value,狀態檔存在卻解不出欄位。格式只能有一個真實來源。
|
||||||
|
# 找不到 restart-gate.sh 時不要自己補寫一份:閘門本來就由 jsc-hooks 判讀,它不在就沒有
|
||||||
|
# 判定點,寫下去只是留一個沒人讀的檔案,還會讓下一輪誤以為閘門掛上了。
|
||||||
|
mark_restart() {
|
||||||
|
[ "$DRYRUN" = 1 ] && return 0
|
||||||
|
case "$MODE" in install|update) ;; *) return 0 ;; esac
|
||||||
|
if ! rg=$(restart_gate_sh); then
|
||||||
|
printf 'note\t%s\t%s\n' "$CLI" "找不到 jsc-hooks 的 restart-gate.sh,這次沒有掛上重啟閘門"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if JSC_CLI="$CLI" sh "$rg" require "$MODE" $DOMAINS </dev/null; then
|
||||||
|
printf 'restart\t%s\n' "${JSC_HOME:-$HOME/.jsc}/restart-required"
|
||||||
|
else
|
||||||
|
printf 'note\t%s\t%s\n' "$CLI" "restart-gate.sh require 失敗,這次沒有掛上重啟閘門"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# 執行一個指令,並印出指令本身與結束碼。失敗就記進 FAILED。
|
# 執行一個指令,並印出指令本身與結束碼。失敗就記進 FAILED。
|
||||||
run() { # $@=指令
|
run() { # $@=指令
|
||||||
printf 'cmd\t%s\n' "$*"
|
printf 'cmd\t%s\n' "$*"
|
||||||
@@ -284,6 +326,7 @@ case "$CLI" in
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
if [ "$FAILED" -eq 0 ]; then
|
if [ "$FAILED" -eq 0 ]; then
|
||||||
|
mark_restart
|
||||||
printf 'result\t%s\t%s\t%s\tok\n' "$CLI" "$MODE" "$DOMAINS"
|
printf 'result\t%s\t%s\t%s\tok\n' "$CLI" "$MODE" "$DOMAINS"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user