# Demo module — tiny alpine container used to validate panel end-to-end
# without pulling multi-GB game server images. The container just sleeps,
# so the runtime exercises pull / create / start / stop / logs / wait without
# needing RCON or any real game behaviour.
id: demo
name: "Demo (alpine sleeper)"
version: 0.1.0
authors:
  - panel contributors
supported_modes:
  - docker
runtime:
  docker:
    image: alpine:3.21
    # Host networking -- container shares the host net namespace, so
    # any port the game/mod binds is directly on the LAN. AMP-like
    # model. Multi-instance safety comes from env-driven per-instance
    # ports (panel allocator + env: mapping on each ports entry).
    network_mode: host
    command:
      - sh
      - -c
      - |
        echo "demo instance starting";
        i=0;
        while true; do
          echo "tick $i $(date -Iseconds)";
          i=$((i+1));
          sleep 2;
        done
ports:
  - { name: dummy, proto: tcp, default: 14000 }
resources:
  min_ram_mb: 32
  recommended_ram_mb: 64
update_providers:
  # Exercise the Direct provider with a small, stable URL. Running the
  # update places the GPL-3.0 text at /data-ish/license.txt.
  - id: gpl
    kind: direct
    url: "https://www.gnu.org/licenses/gpl-3.0.txt"
    target_path: "license.txt"
  # GitHub provider: grabs the latest `buf` CLI release note as a demo
  # (asset_regex matches any tar.gz).
  - id: buf-latest
    kind: github
    repo: "bufbuild/buf"
    asset_regex: "buf-Linux-x86_64.tar.gz"
    target_path: "downloads/buf.tar.gz"

# --- Manifest-driven UI metadata (WI-07) --------------------------
# Consumed by the CONTROLLER/dashboard only (the controller loads its
# own ./modules copy at startup); the agent ignores these at runtime.
appearance:
  emoji: "🧪"
  grad: "linear-gradient(135deg,#4b5563,#9ca3af)"
