Skip to content

Commit f270f39

Browse files
Copilotdorkmo
andcommitted
Add browser joystick preview screenshot and GitHub Action
Co-authored-by: dorkmo <[email protected]>
1 parent a629f93 commit f270f39

File tree

5 files changed

+576
-0
lines changed

5 files changed

+576
-0
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
name: Generate Web Controller Preview
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
paths:
7+
- 'LifeTrac-v25/raspberry_pi_web_controller/static/**'
8+
- 'LifeTrac-v25/raspberry_pi_web_controller/templates/**'
9+
- 'LifeTrac-v25/raspberry_pi_web_controller/preview/**'
10+
- '.github/workflows/generate-web-controller-preview.yml'
11+
12+
jobs:
13+
generate-screenshot:
14+
runs-on: ubuntu-latest
15+
16+
steps:
17+
- name: Checkout repository
18+
uses: actions/checkout@v4
19+
20+
- name: Set up Node.js
21+
uses: actions/setup-node@v4
22+
with:
23+
node-version: '20'
24+
25+
- name: Install Playwright
26+
run: |
27+
npm init -y
28+
npm install --save-dev @playwright/test
29+
npx playwright install --with-deps chromium
30+
31+
- name: Start HTTP server
32+
run: |
33+
cd LifeTrac-v25/raspberry_pi_web_controller/preview
34+
python3 -m http.server 8080 &
35+
echo "HTTP_SERVER_PID=$!" >> $GITHUB_ENV
36+
sleep 2
37+
38+
- name: Create screenshot script
39+
run: |
40+
cat > screenshot.js << 'EOF'
41+
const { chromium } = require('@playwright/test');
42+
43+
(async () => {
44+
const browser = await chromium.launch();
45+
const context = await browser.newContext({
46+
viewport: { width: 1920, height: 1080 }
47+
});
48+
const page = await context.newPage();
49+
50+
console.log('Navigating to page...');
51+
await page.goto('http://localhost:8080/standalone.html');
52+
53+
console.log('Waiting for page to be ready...');
54+
await page.waitForSelector('[data-ready="true"]', { timeout: 10000 });
55+
56+
// Wait a bit more for joysticks to fully render
57+
await page.waitForTimeout(2000);
58+
59+
console.log('Taking screenshot...');
60+
await page.screenshot({
61+
path: 'web-controller-preview.png',
62+
fullPage: false
63+
});
64+
65+
console.log('Screenshot saved!');
66+
await browser.close();
67+
})();
68+
EOF
69+
70+
- name: Generate screenshot
71+
run: node screenshot.js
72+
73+
- name: Verify screenshot was created
74+
run: |
75+
if [ -f "web-controller-preview.png" ]; then
76+
echo "Screenshot created successfully"
77+
ls -lh web-controller-preview.png
78+
else
79+
echo "ERROR: Screenshot was not created"
80+
exit 1
81+
fi
82+
83+
- name: Move screenshot to preview directory
84+
run: |
85+
mv web-controller-preview.png LifeTrac-v25/raspberry_pi_web_controller/preview/
86+
87+
- name: Upload screenshot as artifact
88+
uses: actions/upload-artifact@v4
89+
with:
90+
name: web-controller-preview
91+
path: LifeTrac-v25/raspberry_pi_web_controller/preview/web-controller-preview.png
92+
retention-days: 90
93+
94+
- name: Commit and push screenshot
95+
run: |
96+
git config --global user.name 'github-actions[bot]'
97+
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
98+
git add LifeTrac-v25/raspberry_pi_web_controller/preview/web-controller-preview.png
99+
git diff --staged --quiet || (git commit -m "Update web controller preview screenshot [skip ci]" && git push)
100+
env:
101+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
102+
103+
- name: Stop HTTP server
104+
if: always()
105+
run: |
106+
if [ ! -z "$HTTP_SERVER_PID" ]; then
107+
kill $HTTP_SERVER_PID || true
108+
fi

LifeTrac-v25/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ LifeTrac v25 features a comprehensive remote control system with multiple contro
7474
- WebSocket for real-time communication
7575
- See [raspberry_pi_web_controller/README.md](raspberry_pi_web_controller/README.md) for setup
7676

77+
![Web Controller Preview](raspberry_pi_web_controller/preview/web-controller-preview.png)
78+
*Browser-based control interface with live camera feed and on-screen joysticks*
79+
7780
## ROS2 Integration
7881
- **ros2_bridge/**: ROS2 packages for BeagleBone control via MQTT
7982
- **lifetrac_msgs/**: Custom ROS2 message definitions
Lines changed: 43 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)