dramaling-vocab-learning/docs/02_design/design-system/automation/design-sync.sh

181 lines
4.3 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
# Drama Ling 設計系統自動化同步腳本
# 功能:自動同步設計代幣、元件樣式到各個相關位置
# 作者Drama Ling 開發團隊
# 日期2025-09-15
set -e
# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 路徑定義
DESIGN_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
DESIGN_SYSTEM_DIR="$DESIGN_ROOT/design-system"
COMPONENT_LIBRARY_DIR="$DESIGN_ROOT/component-library"
PROTOTYPES_DIR="$DESIGN_ROOT/prototypes"
# 日誌函數
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 確保必要目錄存在
ensure_directories() {
log_info "檢查目錄結構..."
if [ ! -d "$DESIGN_SYSTEM_DIR" ]; then
log_error "設計系統目錄不存在: $DESIGN_SYSTEM_DIR"
exit 1
fi
if [ ! -d "$COMPONENT_LIBRARY_DIR" ]; then
log_error "元件庫目錄不存在: $COMPONENT_LIBRARY_DIR"
exit 1
fi
}
# 同步設計代幣
sync_design_tokens() {
log_info "同步設計代幣..."
TOKENS_FILE="$DESIGN_SYSTEM_DIR/tokens/design-tokens.css"
if [ ! -f "$TOKENS_FILE" ]; then
log_warning "設計代幣文件不存在,跳過同步"
return
fi
# 複製到元件庫
cp "$TOKENS_FILE" "$COMPONENT_LIBRARY_DIR/assets/styles/tokens.css"
log_info "✓ 設計代幣已同步到元件庫"
# 複製到原型目錄(如果存在)
if [ -d "$PROTOTYPES_DIR/web/html" ]; then
cp "$TOKENS_FILE" "$PROTOTYPES_DIR/web/html/assets/tokens.css"
log_info "✓ 設計代幣已同步到原型目錄"
fi
}
# 生成元件索引
generate_component_index() {
log_info "生成元件索引..."
INDEX_FILE="$COMPONENT_LIBRARY_DIR/COMPONENT_INDEX.md"
cat > "$INDEX_FILE" << EOF
# Drama Ling 元件索引
**自動生成時間**: $(date '+%Y-%m-%d %H:%M:%S')
## 📚 元件清單
EOF
# 掃描元件目錄
for dir in "$COMPONENT_LIBRARY_DIR"/components/*/; do
if [ -d "$dir" ]; then
dirname=$(basename "$dir")
echo "### $dirname" >> "$INDEX_FILE"
echo "" >> "$INDEX_FILE"
# 列出該目錄下的HTML文件
for file in "$dir"*.html; do
if [ -f "$file" ]; then
filename=$(basename "$file")
echo "- [$filename]($dir$filename)" >> "$INDEX_FILE"
fi
done
echo "" >> "$INDEX_FILE"
fi
done
log_info "✓ 元件索引已生成: $INDEX_FILE"
}
# 驗證CSS文件
validate_css() {
log_info "驗證CSS文件..."
CSS_FILES=(
"$COMPONENT_LIBRARY_DIR/assets/styles/base.css"
"$COMPONENT_LIBRARY_DIR/assets/styles/components.css"
"$DESIGN_SYSTEM_DIR/tokens/design-tokens.css"
)
for css_file in "${CSS_FILES[@]}"; do
if [ -f "$css_file" ]; then
# 基本CSS語法檢查
if grep -q "^\s*[^:{}]*{\s*$" "$css_file"; then
log_info "$css_file 語法檢查通過"
else
log_warning "$css_file 可能包含語法錯誤,請手動檢查"
fi
fi
done
}
# 生成變更報告
generate_change_report() {
log_info "生成變更報告..."
REPORT_FILE="$DESIGN_SYSTEM_DIR/CHANGE_LOG.md"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
# 如果報告文件不存在,創建標題
if [ ! -f "$REPORT_FILE" ]; then
cat > "$REPORT_FILE" << EOF
# 設計系統變更日誌
## 變更記錄
EOF
fi
# 添加新的變更記錄
cat >> "$REPORT_FILE" << EOF
### $TIMESTAMP
- 執行自動同步
- 同步設計代幣到元件庫
- 更新元件索引
- 驗證CSS文件
---
EOF
log_info "✓ 變更報告已更新: $REPORT_FILE"
}
# 主函數
main() {
echo "========================================="
echo "Drama Ling 設計系統自動化同步"
echo "========================================="
echo ""
ensure_directories
sync_design_tokens
generate_component_index
validate_css
generate_change_report
echo ""
echo "========================================="
log_info "同步完成!"
echo "========================================="
}
# 執行主函數
main "$@"