44 # Triggered manually or by meta repo
55 workflow_dispatch :
66
7- # Auto-trigger when implementation changes OR demo scripts change
7+ # Auto-trigger on any push to check if demo is needed
88 push :
99 branches :
1010 - main
11- paths :
12- - ' src/**'
13- - ' lib/**'
14- - ' scripts/record-demo.sh'
15- - ' scripts/lib/demo-framework.sh'
1611
1712# Cancel in-progress runs
1813concurrency :
@@ -28,32 +23,76 @@ jobs:
2823 steps :
2924 - uses : actions/checkout@v4
3025
26+ - name : Check if demo needs generation
27+ id : check-demo
28+ run : |
29+ NEEDS_DEMO=false
30+
31+ # Check 1: Did implementation change (src/** or lib/**)?
32+ if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '^(src|lib)/'; then
33+ echo "✓ Implementation changed (src/** or lib/**)"
34+ NEEDS_DEMO=true
35+ fi
36+
37+ # Check 2: Is demo.gif missing or a placeholder (43 bytes)?
38+ if [ ! -f "docs/demo.gif" ]; then
39+ echo "✓ Demo GIF missing"
40+ NEEDS_DEMO=true
41+ elif [ $(stat -f%z "docs/demo.gif" 2>/dev/null || stat -c%s "docs/demo.gif") -le 100 ]; then
42+ echo "✓ Demo GIF is a placeholder ($(stat -f%z "docs/demo.gif" 2>/dev/null || stat -c%s "docs/demo.gif") bytes)"
43+ NEEDS_DEMO=true
44+ fi
45+
46+ # Check 3: Is demo-url.txt missing or empty?
47+ if [ ! -f "demo-url.txt" ] || [ ! -s "demo-url.txt" ]; then
48+ echo "✓ Demo URL missing or empty"
49+ NEEDS_DEMO=true
50+ fi
51+
52+ # Check 4: Does README have placeholder link "#"?
53+ if grep -q 'href="#"' README.md 2>/dev/null; then
54+ echo "✓ README has placeholder demo link"
55+ NEEDS_DEMO=true
56+ fi
57+
58+ if [ "$NEEDS_DEMO" = "false" ]; then
59+ echo "✗ Demo is up to date, skipping generation"
60+ fi
61+
62+ echo "needs_demo=$NEEDS_DEMO" >> $GITHUB_OUTPUT
63+
3164 - name : Setup Node.js
65+ if : steps.check-demo.outputs.needs_demo == 'true'
3266 uses : actions/setup-node@v4
3367 with :
3468 node-version : ' 20'
3569
3670 - name : Install dependencies
71+ if : steps.check-demo.outputs.needs_demo == 'true'
3772 run : npm install
3873
3974 - name : Install asciinema
75+ if : steps.check-demo.outputs.needs_demo == 'true'
4076 run : |
4177 sudo apt-get update
4278 sudo apt-get install -y asciinema
4379
4480 - name : Install agg (asciinema GIF generator)
81+ if : steps.check-demo.outputs.needs_demo == 'true'
4582 run : |
4683 if ! command -v agg &> /dev/null; then
4784 cargo install --git https://github.com/asciinema/agg
4885 fi
4986
5087 - name : Record demo
88+ if : steps.check-demo.outputs.needs_demo == 'true'
5189 env :
5290 ASCIINEMA_INSTALL_ID : ${{ secrets.ASCIINEMA_INSTALL_ID }}
5391 run : |
5492 bash scripts/record-demo.sh
5593
5694 - name : Commit demo files
95+ if : steps.check-demo.outputs.needs_demo == 'true'
5796 run : |
5897 git config user.name "github-actions[bot]"
5998 git config user.email "github-actions[bot]@users.noreply.github.com"
0 commit comments