#!/usr/bin/env bash # check-cis.sh — CIS 合規機械檢查(t193) # # 🔴 leo 2026-08-04:「CIS 已經提供規範,你做的**連 Logo 都沒放上去**, # 這跟美不美有關係嗎?要求放進 CIS 是**硬要求**,**你做為檢查有嗎?沒有怎麼交貨?**」 # ⇒ 交貨前先跑這支。不過就不准交。 set -uo pipefail cd "$(dirname "$0")" CSS=frontend/src/style.css HTML=frontend/index.html FAIL=0 ok(){ printf " ✅ %s\n" "$1"; } ng(){ printf " ❌ %s\n" "$1"; FAIL=1; } echo "━━━ CIS 合規檢查 ━━━" # ① 官方色票(arcrun-cis/README.md 的 Colour 表)必須逐個出現 for t in "#FDFCFB:Paper" "#F2F1ED:Canvas" "#17181A:Ink" "#B04A2F:Relation" "#D9784F:Relation-dark"; do hex="${t%%:*}"; name="${t##*:}" grep -qi "$hex" "$CSS" && ok "色票 $name $hex" || ng "缺色票 $name $hex" done # ② 不准自創顏色:抓不在白名單內的 hex STRAY=$(grep -oiE '#[0-9a-f]{6}' "$CSS" | tr 'a-f' 'A-F' | sort -u \ | grep -vE '#(FDFCFB|F2F1ED|17181A|B04A2F|D9784F|1D7A48|7FE0A8|B03A26|E58575|1B1C1E|1E1F21)' || true) [ -z "$STRAY" ] && ok "沒有自創顏色" || ng "出現非 CIS 色:$(echo $STRAY | tr '\n' ' ')" # ③ Logo 必須真的放進去(leo 點名的那條) grep -q "arcrun-lockup-h-ink.png" "$HTML" && ok "淺色 lockup 已放" || ng "缺淺色 lockup" grep -q "arcrun-lockup-h-paper-on-ink.png" "$HTML" && ok "深色 lockup 已放" || ng "缺深色 lockup" [ -f frontend/src/assets/arcrun-lockup-h-ink.png ] && ok "lockup 檔案存在" || ng "lockup 檔案不存在" grep -q "lockup-h.svg" "$HTML" 2>/dev/null && ng "用到已作廢的 SVG lockup(字腔缺失)" || ok "沒用作廢的 SVG lockup" # ④ 深淺色都要成立(portal 有 data-theme,這裡也要) grep -q 'data-theme="dark"' "$CSS" && ok "有深色模式色票" || ng "缺深色模式" # ⑤ 字體與背景紋理要與 portal 一致 grep -q "IBM Plex Sans" "$CSS" && ok "字體同 portal" || ng "字體與 portal 不一致" grep -q "repeating-linear-gradient" "$CSS" && ok "紙張紋理同 portal" || ng "缺 portal 的紙張紋理" # ⑥ App icon 用官方檔 [ -f build/appicon.png ] && ok "app icon 存在" || ng "缺 app icon" echo [ $FAIL -eq 0 ] && echo "✅ CIS 檢查全過" || echo "❌ CIS 檢查未過——**不准交貨**" exit $FAIL