chore(ci): add local token drift check script
- Standalone script complementing the CI token-drift job - Supports --fix mode to regenerate and stage changes - Run: bash scripts/check-token-drift.sh
This commit is contained in:
parent
11a832e271
commit
6f2572e90b
79
scripts/check-token-drift.sh
Executable file
79
scripts/check-token-drift.sh
Executable file
@ -0,0 +1,79 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# check-token-drift.sh — Verify generated design token files are up to date.
|
||||||
|
#
|
||||||
|
# Regenerates all token outputs from the canonical bytelyst.tokens.json
|
||||||
|
# and diffs them against the committed files. Non-zero exit if any drift.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# bash scripts/check-token-drift.sh # check for drift
|
||||||
|
# bash scripts/check-token-drift.sh --fix # regenerate and stage changes
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||||
|
TOKENS_DIR="$REPO_ROOT/packages/design-tokens"
|
||||||
|
GENERATED_DIR="$TOKENS_DIR/generated"
|
||||||
|
|
||||||
|
FIX=false
|
||||||
|
if [[ "${1:-}" == "--fix" ]]; then
|
||||||
|
FIX=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🔍 Checking design token drift..."
|
||||||
|
|
||||||
|
# 1. Snapshot current generated files
|
||||||
|
TMPDIR=$(mktemp -d)
|
||||||
|
trap 'rm -rf "$TMPDIR"' EXIT
|
||||||
|
|
||||||
|
if [ -d "$GENERATED_DIR" ]; then
|
||||||
|
cp -r "$GENERATED_DIR" "$TMPDIR/before"
|
||||||
|
else
|
||||||
|
mkdir -p "$TMPDIR/before"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Regenerate tokens
|
||||||
|
echo " Regenerating tokens from bytelyst.tokens.json..."
|
||||||
|
cd "$TOKENS_DIR"
|
||||||
|
if [ -f "package.json" ] && grep -q '"generate"' package.json; then
|
||||||
|
npx tsx scripts/generate.ts 2>/dev/null || {
|
||||||
|
echo "⚠️ Token generation script failed — skipping drift check"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
else
|
||||||
|
echo "⚠️ No generate script found in packages/design-tokens — skipping"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. Snapshot regenerated output
|
||||||
|
cp -r "$GENERATED_DIR" "$TMPDIR/after"
|
||||||
|
|
||||||
|
# 4. Diff
|
||||||
|
DIFF_OUTPUT=$(diff -rq "$TMPDIR/before" "$TMPDIR/after" 2>/dev/null || true)
|
||||||
|
|
||||||
|
if [ -z "$DIFF_OUTPUT" ]; then
|
||||||
|
echo "✅ No token drift detected — generated files are up to date."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "❌ Token drift detected! The following files are out of date:"
|
||||||
|
echo ""
|
||||||
|
echo "$DIFF_OUTPUT" | while IFS= read -r line; do
|
||||||
|
# Extract just the relative path
|
||||||
|
file=$(echo "$line" | sed "s|.*$TMPDIR/before/||; s|.*$TMPDIR/after/||; s| differ||; s| and .*||")
|
||||||
|
echo " - generated/$file"
|
||||||
|
done
|
||||||
|
|
||||||
|
if $FIX; then
|
||||||
|
echo ""
|
||||||
|
echo "🔧 --fix mode: staging regenerated token files..."
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
git add "$GENERATED_DIR"
|
||||||
|
echo "✅ Regenerated files staged. Commit and push to fix drift."
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Run 'bash scripts/check-token-drift.sh --fix' to regenerate and stage."
|
||||||
|
echo "Or: cd packages/design-tokens && npx tsx scripts/generate.ts"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Loading…
Reference in New Issue
Block a user