fix(deploy): 相依版本不符改成照樣更新並提醒
What:check_requires() 對 check-requires.sh 的四種結束碼重新分流。0 照常更新。1 改印一行 warn,該 domain 照樣更新,訊息寫出還缺哪一版。4 印一行 note,也照樣更新。2 或其他代碼維持印 skip、跳過該 domain,並記成失敗。 Why:跳過會讓落後的 domain 永遠等不到它要的相依版本,也就永遠更新不到,兩個 domain 互相等就形成死鎖。阻擋移到技能叫用那一層,由 jsc-hooks 的 version-guard.sh 執行,更新照跑不會壞事。判不出結論跟版本落後要講不同的話,混成一句會把環境問題誤導成版本問題。檢查腳本自己出錯是另一回事,讀不到結論就不能當成通過。 How:結束碼 1 的分支從印 skip、回傳 1 改成印 warn、回傳 0,結束碼 4 新增一個印 note、回傳 0 的分支,其餘代碼維持原本的 skip 與 FAILED。函式上方與檔頭補上這四條分流的理由。檔頭的輸出格式表補進 warn 與 compat 兩欄,結束碼說明也把 warn 列為不算失敗但要據實回報。 Who:相依版本不符的處置。
This commit is contained in:
+25
-4
@@ -9,11 +9,20 @@
|
||||
# cmd<TAB>{指令} 即將執行的指令
|
||||
# exit<TAB>{結束碼}<TAB>{指令} 該指令的結束碼;dry-run 時結束碼印「-」
|
||||
# skip<TAB>{domain}<TAB>{原因} 本地 clone 是開發中的樹,略過 git pull
|
||||
# warn<TAB>{domain}<TAB>{原因} 相依版本不符,仍照樣更新的提醒
|
||||
# compat<TAB>codex<TAB>{舊路徑}<TAB>{新路徑} codex 舊版快取路徑補成指向新版的相容連結
|
||||
# note<TAB>{cli}<TAB>{原因} 非逐指令的說明(例:kiro 整批改走複製退路的理由)
|
||||
# restart<TAB>{路徑} 這次寫下的重啟狀態檔
|
||||
# requires<TAB>{domain}<TAB>{檢查結果} update 前的 jsc.requires 檢查
|
||||
# result<TAB>{cli}<TAB>{mode}<TAB>{domain 清單}<TAB>{ok|fail}
|
||||
# 結束碼:全部指令成功 0;任一指令失敗 1;參數錯誤 2。skip、note 不算失敗,但呼叫端要據實回報。
|
||||
# 結束碼:全部指令成功 0;任一指令失敗 1;參數錯誤 2。skip、warn、note 不算失敗,但呼叫端要據實回報。
|
||||
# update 前每個 domain 都先跑一次同目錄的 check-requires.sh,它的四種結束碼分流如下:
|
||||
# 0 相依符合,或沒有宣告相依 → 照常更新這個 domain
|
||||
# 1 相依版本不符或缺相依 plugin
|
||||
# → 印一行 warn,這個 domain 照樣更新(跳過會讓落後的 domain 永遠更新不到)
|
||||
# 4 判不出結論(manifest 讀不到、不是有效 JSON、缺 python3)
|
||||
# → 印一行 note,這個 domain 照樣更新。沒有證據不等於落後,話要跟 warn 分開講
|
||||
# 2 或其他 檢查腳本自己出錯(用法錯誤或腳本壞掉)→ 印一行 skip,跳過這個 domain 並記為失敗
|
||||
# marketplace 指令一輪只跑一次:install 與 update 先跑,uninstall 最後跑。
|
||||
# 各 CLI 的細節都收在這裡,SKILL.md 只描述何時呼叫與參數:
|
||||
# antigravity 不接受 gitea URL,先 clone 到本地再從路徑安裝,更新時 pull 同一份。
|
||||
@@ -134,7 +143,12 @@ restart_gate_sh() {
|
||||
return 1
|
||||
}
|
||||
|
||||
check_requires() { # $1=domain;0=可更新,1=略過這個 domain
|
||||
# 相依版本不符只回報、不跳過。跳過的話,落後的 domain 永遠等不到那一版相依,
|
||||
# 也就永遠更新不到,兩個 domain 互相等就形成死鎖。阻擋改放在技能呼叫那一層:
|
||||
# jsc-hooks 的 version-guard.sh 會在版本不足時擋下該 domain 的技能,更新照跑不會壞事。
|
||||
# 檢查腳本自己出錯(退出碼 2 以上:用法錯誤或腳本壞掉)是另一回事,那不是相依不符,
|
||||
# 讀不到結論就不能當成通過,照舊記 FAILED 並跳過這個 domain。
|
||||
check_requires() { # $1=domain;0=繼續更新,1=略過這個 domain(只有檢查腳本自己出錯才會回 1)
|
||||
[ "$MODE" = update ] || return 0
|
||||
sync_local "$1"
|
||||
manifest="$LOCAL_DIR/$1/plugin.json"
|
||||
@@ -145,8 +159,15 @@ check_requires() { # $1=domain;0=可更新,1=略過這個 domain
|
||||
return 0
|
||||
fi
|
||||
if [ "$code" -eq 1 ]; then
|
||||
printf 'skip\t%s\t%s\n' "$1" "相依版本不符,未更新:$out"
|
||||
return 1
|
||||
printf 'warn\t%s\t%s\n' "$1" "相依版本不符,這次照樣更新;補齊相依版本以前,叫用這個 domain 的技能會被 jsc-hooks 的 version-guard.sh 擋下。要補的版本:$out"
|
||||
return 0
|
||||
fi
|
||||
# 判不出結論跟版本落後要講不同的話。把兩者混成同一句,環境壞掉會被說成版本落後,
|
||||
# 操作者照著去補版本永遠補不到問題點。照樣更新的理由與 version-guard.sh 一致:
|
||||
# 沒有證據不等於落後,缺基礎設施就停掉更新,等於讓環境永遠修不好。
|
||||
if [ "$code" -eq 4 ]; then
|
||||
printf 'note\t%s\t%s\n' "$1" "判不出相依版本,這次照樣更新;成因不是版本落後,先修環境再重跑檢查:$out"
|
||||
return 0
|
||||
fi
|
||||
FAILED=1
|
||||
printf 'skip\t%s\t%s\n' "$1" "相依版本檢查失敗,未更新:$out"
|
||||
|
||||
Reference in New Issue
Block a user