fix/skill-check-compliance-and-flow #32
@@ -2,13 +2,16 @@
|
||||
# check-wiki-rules — 驗證 wiki repo 解析與 hash-id 規則。
|
||||
# 涵蓋 TYPES 列的每一種頁面類型,每種三項:專用變數優先、退回共用變數、不得跨類型代用。
|
||||
# 全部通過印 OK 並 exit 0;任一項不符印出差異並 exit 1。
|
||||
# 結束碼: 0=全部通過,stdout 印 OK
|
||||
# 1=有一項不符,stderr 印出 {項目}: want=… got=… 之後立刻停住,不續跑其餘項目。
|
||||
# 只有 0 與 1 兩種;這支不吃參數,也沒有用法錯誤那條路。
|
||||
set -eu
|
||||
|
||||
dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||
gitea="$dir/gitea.sh"
|
||||
hash_id="$dir/hash-id"
|
||||
|
||||
TYPES='QUESTION PLAN ANALYZE DELIVER MAINTAIN REPO LOG LEARN ERROR CHECK REPORT SKILLSET'
|
||||
TYPES='QUESTION PLAN ANALYZE DELIVER MAINTAIN REPO LOG LEARN ERROR CHECK REPORT SKILLSET TOOLING'
|
||||
|
||||
fail() {
|
||||
printf '%s\n' "$1" >&2
|
||||
|
||||
+60
-2
@@ -16,12 +16,20 @@
|
||||
# html-style.sh list 印出合併後的所有設定:種類<TAB>版型<TAB>風格<TAB>來源
|
||||
# html-style.sh layouts 列出可用版型:名稱<TAB>繁中說明
|
||||
# html-style.sh styles 列出可用風格:名稱<TAB>繁中說明
|
||||
# html-style.sh key wiki <頁名> 推導 wiki 頁的種類:取第一個底線前的字首
|
||||
# html-style.sh key issue <owner>/<repo> <編號> [--labels <名稱>[,<名稱>]]
|
||||
# 推導議題的種類:依序試每個標籤,第一個讓 get 回 project 或 global 的標籤勝出;
|
||||
# 都對不到就回 ISSUE:DEFAULT。已經有標籤名單時用 --labels 帶進來,省掉一次 API 呼叫。
|
||||
# key 的輸出固定一行:{種類}<TAB>{依據}
|
||||
# 依據 = prefix:{字首}、label:{標籤名}、fallback:no-labels、fallback:no-configured-label
|
||||
#
|
||||
# 結束碼: 0=成功 2=用法錯誤 4=版型或風格沒有對應範本檔
|
||||
# 結束碼: 0=成功 1=取不到議題標籤,或設定檔的目錄建不出來 2=用法錯誤 4=版型或風格沒有對應範本檔
|
||||
#
|
||||
# 陷阱:
|
||||
# - get 永遠印得出一組值:對不到就退 DEFAULT,再對不到就退內建預設。呼叫端不必自己準備退路,
|
||||
# 但要看第三欄,才知道這組值是使用者設的還是撿來的。
|
||||
# - key 的推導規則放在腳本裡,不放技能內文:字首怎麼切、標籤怎麼試,是固定的輸入輸出,
|
||||
# 每次由模型重推就會有人切錯底線或跳過標籤順序。
|
||||
# - set 會先確認範本檔真的存在,擋掉打錯字的版型或風格;設定寫得進去、出圖卻失敗最難查。
|
||||
set -u
|
||||
|
||||
@@ -41,8 +49,10 @@ usage() {
|
||||
html-style.sh set <種類> <版型> <風格> [--project|--global]
|
||||
html-style.sh unset <種類> [--project|--global]
|
||||
html-style.sh list | layouts | styles
|
||||
html-style.sh key wiki <頁名>
|
||||
html-style.sh key issue <owner>/<repo> <編號> [--labels <名稱>[,<名稱>]]
|
||||
種類: WIKI:{頁名前綴}、ISSUE:{標籤名}、DEFAULT
|
||||
結束碼: 0=成功 2=用法錯誤 4=版型或風格沒有對應範本檔
|
||||
結束碼: 0=成功 1=取不到議題標籤或建不出目錄 2=用法錯誤 4=版型或風格沒有對應範本檔
|
||||
EOF
|
||||
exit 2
|
||||
}
|
||||
@@ -135,6 +145,54 @@ case "$cmd" in
|
||||
key="${1:-}"; [ -n "$key" ] || usage
|
||||
resolve "$key"
|
||||
exit 0 ;;
|
||||
key)
|
||||
kind="${1:-}"; [ -n "$kind" ] || usage
|
||||
shift
|
||||
case "$kind" in
|
||||
wiki)
|
||||
page="${1:-}"; [ -n "$page" ] || usage
|
||||
# 頁名前綴 = 第一個底線之前那一段;沒有底線就是整個頁名。
|
||||
prefix=${page%%_*}
|
||||
printf 'WIKI:%s\tprefix:%s\n' "$prefix" "$prefix"
|
||||
exit 0 ;;
|
||||
issue)
|
||||
repo="${1:-}"; idx="${2:-}"
|
||||
[ -n "$repo" ] && [ -n "$idx" ] || usage
|
||||
shift 2
|
||||
labels=''
|
||||
have_labels=0
|
||||
case "${1:-}" in
|
||||
--labels) [ "$#" -ge 2 ] || usage; labels="$2"; have_labels=1 ;;
|
||||
'') ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
if [ "$have_labels" = 0 ]; then
|
||||
raw=$("$script_dir/issue.sh" labels-of "$repo" "$idx") || {
|
||||
echo "[jsc][HTML 設定][ERR]:取不到議題 $repo#$idx 的標籤。" >&2; exit 1; }
|
||||
labels=$(printf '%s' "$raw" | tr '\n' ',')
|
||||
fi
|
||||
matched=''
|
||||
old_ifs=$IFS
|
||||
IFS=','
|
||||
for l in $labels; do
|
||||
[ -n "$l" ] || continue
|
||||
# 標籤順序就是優先序:第一個使用者真的設過的標籤勝出,
|
||||
# 撿來的 DEFAULT 不算數,否則第一個標籤永遠贏,後面的設定形同虛設。
|
||||
case "$(resolve "ISSUE:$l" | cut -f3)" in
|
||||
project|global) matched="$l"; break ;;
|
||||
esac
|
||||
done
|
||||
IFS=$old_ifs
|
||||
if [ -n "$matched" ]; then
|
||||
printf 'ISSUE:%s\tlabel:%s\n' "$matched" "$matched"
|
||||
elif [ -z "$(printf '%s' "$labels" | tr -d ',')" ]; then
|
||||
printf 'ISSUE:DEFAULT\tfallback:no-labels\n'
|
||||
else
|
||||
printf 'ISSUE:DEFAULT\tfallback:no-configured-label\n'
|
||||
fi
|
||||
exit 0 ;;
|
||||
*) usage ;;
|
||||
esac ;;
|
||||
set)
|
||||
key="${1:-}"; layout="${2:-}"; style="${3:-}"
|
||||
[ -n "$key" ] && [ -n "$layout" ] && [ -n "$style" ] || usage
|
||||
|
||||
Reference in New Issue
Block a user