The public demo's deployment (docs/website/DEMO_MODE.md §7, §10 step 5): - deploy/demo/docker-compose.yml: the app and its database only, DEMO_MODE on, a /status healthcheck, the fixture mounted for seed:demo, MODULES read from state/modules.env so the workflow never edits the .env with secrets. - deploy/demo/.env.example: every variable the host needs, including BOT_INTERNAL_KEY (the app refuses to start in production without it) and MODULE_SOURCE_HOSTS (a fresh database's install allowlist). - deploy/demo/seed.json: the four logins, settings, two posts, a wiki page, a published "Server greeting" event on a Rust console step, the rig's server link and demo-player's Steam link; secrets as "$env:NAME". - deploy/demo/rig.mjs: plan (latest Rust bundle + newest Module-Rust on the same protocol, keeping the previous set when none matches), restore (kill, write a changed bundle, delete + unpack demo-baseline.tar.gz, start), baseline (power stop saves the world, DM22; compress, rename, start) and smoke (the site, then the rig reporting in), on the Pterodactyl client API. - .gitea/workflows/demo-wipe.yml: every 2 h on the hour UTC, on a push to deploy/demo/, and by hand; rig first, then down -v / pull / up / seed. - .gitea/workflows/demo-baseline.yml: by hand only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
43 lines
1.5 KiB
YAML
43 lines
1.5 KiB
YAML
# Capture the demo rig's baseline (docs/website/DEMO_MODE.md §7.2). Run by hand,
|
|
# after setting the demo default set up through the demo site: the permission
|
|
# groups, a few NPCs, a clan for the demo's Team. It stops the rig (a power stop
|
|
# runs `quit`, which saves the world, DM22), compresses oxide/data, oxide/config
|
|
# and server/<identity> into demo-baseline.tar.gz at the server root, and starts
|
|
# it again. Every wipe from then on restores that archive.
|
|
#
|
|
# Run it right after a wipe has finished and the default set is in place, not
|
|
# while visitors are mid-change: whatever is on the rig is what every later
|
|
# cycle returns to.
|
|
|
|
name: Demo baseline
|
|
|
|
on:
|
|
workflow_dispatch: {}
|
|
|
|
concurrency:
|
|
group: demo-rig
|
|
cancel-in-progress: false
|
|
|
|
env:
|
|
DEMO_DIR: ${{ vars.DEMO_DIR || '/opt/demo.runicgateway.com' }}
|
|
PTERODACTYL_URL: ${{ vars.PTERODACTYL_URL || 'http://192.168.0.12' }}
|
|
PTERODACTYL_SERVER: ${{ vars.PTERODACTYL_SERVER || '6eb9d621' }}
|
|
NODE_IMAGE: node:22.23.4-alpine
|
|
|
|
jobs:
|
|
baseline:
|
|
runs-on: demo-site
|
|
if: github.ref == 'refs/heads/main'
|
|
steps:
|
|
- name: Check out the deploy files
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Capture the baseline
|
|
env:
|
|
PTERODACTYL_CLIENT_KEY: ${{ secrets.PTERODACTYL_CLIENT_KEY }}
|
|
run: |
|
|
set -euo pipefail
|
|
docker run --rm -v "$PWD/deploy/demo:/demo:ro" \
|
|
-e PTERODACTYL_URL -e PTERODACTYL_SERVER -e PTERODACTYL_CLIENT_KEY \
|
|
"$NODE_IMAGE" node /demo/rig.mjs baseline
|