firegex/.github/workflows/demo-pages.yml
Domingo Dirutigliano 08d83e0041
Publish a browsable demo on GitHub Pages
The real frontend, built against an in-memory backend, so the UI can be tried
without a Linux host, NET_ADMIN or a running firewall. A visitor can create,
edit, start, stop and delete services across all five modules and watch the UI
react as it would against a real instance; a reload restores the seed.

- frontend/src/js/demo.ts holds the mock. genericapi() and the socket.io client
  are the frontend's only two ways out to the network, so routing both through
  it was enough - no component knows the difference. It also emits the same
  "update" events the backend does, and ticks the packet counters of running
  services so the page looks alive.
- The demo lives behind IS_DEMO, which vite inlines as a literal, so a normal
  `bun run build` tree-shakes the module and its seed data away. Verified: no
  demo string survives in the production bundle.
- The workflow rebuilds on every push touching frontend/ or docs/ and deploys
  to demo.firegex.pwnzer0tt1.it, copying index.html to 404.html so deep links
  resolve on Pages.
2026-09-03 09:36:37 +02:00

69 lines
1.8 KiB
YAML

# Publishes the browsable demo at https://demo.firegex.pwnzer0tt1.it - the real frontend
# built against the in-memory backend in frontend/src/js/demo.ts, so it needs no server.
name: Deploy demo to GitHub Pages
on:
push:
branches: [main]
paths:
- 'frontend/**'
- 'docs/**'
- '.github/workflows/demo-pages.yml'
workflow_dispatch:
# Let a running deploy finish rather than publishing a half-built site, but keep only the
# newest queued commit: intermediate ones would be overwritten seconds later anyway.
concurrency:
group: pages
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install dependencies
working-directory: frontend
run: bun install --frozen-lockfile
- name: Build the demo
working-directory: frontend
run: bun run build:demo
- name: Prepare the artifact
working-directory: frontend/dist
run: |
# GitHub Pages serves 404.html for any path it has no file for. Handing it the
# SPA entrypoint is what makes deep links like /nfproxy/<id> resolve.
cp index.html 404.html
echo 'demo.firegex.pwnzer0tt1.it' > CNAME
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: frontend/dist
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
permissions:
pages: write
id-token: write
steps:
- name: Configure Pages
uses: actions/configure-pages@v5
- name: Deploy
id: deployment
uses: actions/deploy-pages@v4