Skip to content

Commit f6b5a4f

Browse files
committed
ci: snap mac
1 parent 600ff88 commit f6b5a4f

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

‎.github/workflows/snap-mac.yml‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
name: snap-mac
2+
on: push
3+
jobs:
4+
r:
5+
runs-on: macos-latest
6+
strategy:
7+
fail-fast: false
8+
matrix:
9+
gpu: ["auto", "software"]
10+
steps:
11+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
12+
with: { node-version: 22 }
13+
- run: brew install ffmpeg && pip3 install --break-system-packages pillow
14+
- name: project
15+
run: |
16+
mkdir p && cd p
17+
cat > index.html <<'H'
18+
<!doctype html>
19+
<html><head><meta charset="UTF-8" />
20+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
21+
<style>body{margin:0;width:640px;height:360px;overflow:hidden;background:#000}.scene{position:absolute;inset:0;opacity:0;visibility:hidden}</style></head>
22+
<body>
23+
<div id="root" data-composition-id="main" data-start="0" data-duration="30" data-width="640" data-height="360">
24+
<div id="s0" class="scene" style="background:#0000ff"></div>
25+
<div id="s1" class="scene" style="background:#ff0000"></div>
26+
<div id="s2" class="scene" data-composition-id="g" data-composition-src="g.html" data-start="11.5" data-duration="0.3" data-track-index="1"></div>
27+
<div id="s3" class="scene" style="background:#ffff00"></div>
28+
<div id="s4" class="scene" data-composition-id="p" data-composition-src="p.html" data-start="12.05" data-duration="17.95" data-track-index="2"></div>
29+
</div>
30+
<script>
31+
window.__timelines = window.__timelines || {};
32+
var tl = gsap.timeline({ paused: true });
33+
tl.set("#s0", { autoAlpha: 1 }, 0).set("#s0", { autoAlpha: 0 }, 11.3);
34+
tl.set("#s1", { autoAlpha: 1 }, 11.3).set("#s1", { autoAlpha: 0 }, 11.5);
35+
tl.set("#s3", { autoAlpha: 1 }, 11.8).set("#s3", { autoAlpha: 0 }, 12.05);
36+
tl.set("#s2", { autoAlpha: 1 }, 11.5).set("#s2", { autoAlpha: 0 }, 11.8);
37+
tl.set("#s4", { autoAlpha: 1 }, 12.05);
38+
tl.to({}, { duration: 30 }, 0);
39+
window.__timelines["main"] = tl;
40+
</script>
41+
</body></html>
42+
H
43+
mk() { cat > $1.html <<H
44+
<template id="$1-template"><div id="$1" data-composition-id="$1" data-width="640" data-height="360"><div class="box" style="position:absolute;inset:0;background:#$2"></div><script>window.__timelines = window.__timelines || {}; var t = gsap.timeline({ paused: true }); t.fromTo("#$1 .box", { opacity: 0.99 }, { opacity: 1, duration: 1 }); window.__timelines["$1"] = t;</script></div></template>
45+
H
46+
}
47+
mk g 00ff00
48+
mk p ff00ff
49+
cat > ../check.py <<'PY'
50+
import glob
51+
from PIL import Image
52+
names = {"0000ff":"BLUE(opening)","ff0000":"red","00ff00":"green","ffff00":"yellow","ff00ff":"purple"}
53+
exp = ["BLUE(opening)","red","green","yellow","purple"]
54+
files = sorted(glob.glob(".hyperframes/artifacts/snapshots/*/frame-*.png"))[:5]
55+
got = []
56+
for f in files:
57+
im = Image.open(f).convert("RGB"); r,g,b = im.getpixel((im.width//2, im.height//2))
58+
near = min(names, key=lambda k: sum(abs(a-int(k[i*2:i*2+2],16)) for i,a in enumerate((r,g,b))))
59+
got.append(names[near])
60+
print("RESULT", " ".join(got), "OK" if got == exp else "WRONG-FRAME")
61+
PY
62+
- name: runs
63+
working-directory: p
64+
run: |
65+
flag=""; [ "${{ matrix.gpu }}" = software ] && flag="--no-browser-gpu"
66+
run() { for i in 1 2 3 4 5 6; do rm -rf .hyperframes; npx -y hyperframes@0.8.207 snapshot $flag --at 11.25,11.37,11.60,11.94,12.15 > snap.log 2>&1; echo "$1 run $i exit $?"; python3 ../check.py; done; }
67+
run idle
68+
for n in 1 2 3 4 5 6; do (ffmpeg -hide_banner -loglevel error -f lavfi -i testsrc2=size=1920x1080:rate=30 -t 400 -c:v libx264 -preset slow -f null - &) ; done
69+
sleep 3
70+
run loaded

0 commit comments

Comments
 (0)