Skip to content
This repository was archived by the owner on Jul 26, 2026. It is now read-only.

Commit fb84cb0

Browse files
committed
feat(ci): auto-detect placeholder demos and implementation changes
1 parent 0d75815 commit fb84cb0

1 file changed

Lines changed: 45 additions & 6 deletions

File tree

.github/workflows/create-demo.yml

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,10 @@ on:
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
1813
concurrency:
@@ -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

Comments
 (0)