Commit Graph
39 Commits
Author SHA1 Message Date
josh a7044f21a1 Rename blueprints to Collections and add Operations tab
Fixes #46
2026-09-27 14:50:55 -04:00
josh df265d1900 refactor: make provisioning own instance lifecycle operations 2026-09-27 14:45:00 -04:00
josh cfed584614 feat: add provisioning lifecycle actions
Rename Deployments to Provisioning with compatible redirects and APIs. Add durable Start, Restart, Stop, and Rebuild operations alongside Create and Destroy; rebuild wipes the instance and recreates it in the same slot and port.

Add lifecycle, migration, recovery, and Komodo command tests. Type checks and production build pass; the full suite retains a telemetry assertion failure reproduced on the unchanged branch.

Refs #39
2026-09-27 14:20:04 -04:00
josh 0b0e5b5bdb feat: match fleet to blueprint targets exactly
Add an optional exact blueprint mode with keep/create/remove previews, atomic queueing, cancellation of unstarted excess creations, and persistent dependencies for safe port reuse. Track removals alongside creations and preserve fill mode as the default.

Validation: type check, production build, and 103 deployment tests passed. The full suite has one telemetry assertion failure also reproduced on the previous commit.

Fixes #42
2026-09-27 13:36:08 -04:00
josh f875260b7e Remove fleet lobby follow notifications 2026-09-21 19:33:57 -04:00
josh ce6861203e Use user timezone for maintenance and official Plutonium manifest 2026-09-21 19:14:40 -04:00
josh 47d6dc07b7 Add Plutonium version checks and scheduled rolling restarts 2026-09-21 18:47:24 -04:00
josh 68b21a83ce Restore campaign terminology across UI and docs 2026-09-19 22:41:33 -04:00
josh ce0321a6e9 Add heartbeat telemetry support 2026-09-19 21:52:05 -04:00
josh f171889dfb Pace collection startups and clarify deployment queue progress 2026-09-19 20:33:08 -04:00
josh 345839fbd4 Use current promoted files for blueprint launches 2026-09-19 19:58:30 -04:00
josh 41891b4209 Add per-server telemetry request diagnostics 2026-09-19 18:59:30 -04:00
josh a182aeb950 Add persistent player leaderboards from game telemetry 2026-09-18 16:43:44 -04:00
josh 5bb49a776e Simplify telemetry to three game events 2026-09-18 15:35:21 -04:00
josh 9cf0bd87f4 Refresh Fleet with discovery, operation progress, and lobby watches 2026-09-18 11:59:14 -04:00
josh 3c49437bf9 Add GitHub plugin release imports and update discovery 2026-09-18 01:29:38 -04:00
josh 453821805a Fix server deletion cleanup and allow failed cleanup to resume 2026-09-18 00:49:30 -04:00
josh 274aedb66e Add House Party Protocol for fleet-wide queued destruction 2026-09-18 00:39:19 -04:00
josh 586133c711 Conform blueprint launches to desired fleet counts 2026-09-18 00:28:17 -04:00
josh 989931a0f2 Add multi-server blueprint collections and atomic launches 2026-09-18 00:08:54 -04:00
josh 782c7c0bda Add deployment blueprints and reviewed launch recipes 2026-09-17 23:43:12 -04:00
josh a50eae9d21 Add configurable beta test plans and staged rollout 2026-09-17 21:35:28 -04:00
josh 9dcf4ac1d3 Add T6 Zombies fleet support with Plutainer configuration 2026-09-17 18:03:12 -04:00
josh 885abbdffe Use database fleet registry and gate RCON polling on container readiness 2026-09-17 17:28:38 -04:00
josh 3b1c9bf3d9 Rename Server keys page to Keys 2026-09-17 17:19:27 -04:00
josh c2ad5cc95a Queue server creation and verify health and selected map before completion 2026-09-17 17:14:36 -04:00
josh f37014fad9 Merge branch 'main' of https://gitea.thewrightserver.net/josh/electric-cherry 2026-09-17 16:57:13 -04:00
josh a611850649 new destruction flow 2026-09-17 16:57:08 -04:00
josh 5c2df6d652 Update README.md 2026-09-17 16:55:27 -04:00
josh e688283210 Update README.md 2026-09-17 16:54:14 -04:00
josh 6f83700161 Separate campaigns from server deployment lifecycle tracking 2026-09-17 16:42:37 -04:00
josh e8e7332365 Automatically deploy the lowest available lobby with exact ID preview 2026-09-17 15:59:29 -04:00
josh ae173517b6 Persist Plutonium keys by server ID and add key management 2026-09-17 15:54:10 -04:00
josh 858704bb10 adds round telemetry support 2026-09-17 14:35:42 -04:00
josh 8e04a190b3 Roll deployment restarts through a shared fleet-wide recovery limit 2026-09-17 11:25:06 -04:00
josh 3f0d6dd87d Apply selected server maps automatically without config overlays 2026-09-17 11:05:01 -04:00
josh 854f5532a9 Replace IW4MAdmin with direct RCON for player counts
IW4M kept hitting a network wall (container -> host LAN IP -> IW4M
loopback bind) that we couldn't cleanly punch through, and the two-minute
!rt token added enough operational friction that the pause-all-deployments
gate never got a fair test. RCON gives us the same fact — how many
players are on a server right now — direct from each game server over
UDP, with no session, no token, no proxy.

- Add integrations/rcon.ts: dgram UDP client. rconGetPlayerCount() and
  rconGetStatus() parse both `status` (print + scoreboard) and
  `statusResponse` (info line + rows) dialects. Timeout via
  RCON_TIMEOUT_MS.
- Add komodoResolveGamePort() + extractUdpPort(). Reads Komodo's read
  API for a server, walks both docker-compose-style port objects and
  docker-run-style "host:container/udp" strings, caches into
  servers.game_port on first success.
- Replace pipelineReady() guard in sweep with a simple
  integrations-configured check. Same held/failed/manual outcomes,
  but keyed on RCON+Komodo instead of IW4M+auth-state.
- Worker's status refresh fans out per-server over RCON at concurrency=4
  so a 15-server fleet doesn't spike UDP.
- Schema: drop iw4m_match/iw4m_value, add game_port + rcon_host.
- Delete every auth artifact: TokenModal, auth store, auth-state module,
  /api/auth/token, /api/events/auth, iw4m.test.ts. Layout no longer
  mounts the modal, pipeline store no longer tracks a frozen state.
- README + .env.example + docker-compose.yml + komodo/stack.toml swap
  IW4M_* env for RCON_PASSWORD / RCON_HOST / RCON_TIMEOUT_MS. Same
  host.docker.internal:host-gateway extra_hosts entry, repurposed
  for RCON reach.
- Tests: add rcon.test.ts and komodo.test.ts, update sweep.test.ts to
  drop the auth-freeze case. 23/23 passing.
2026-09-12 01:33:06 -04:00
josh 2a6009270d Move Dockerfile, entrypoint.sh, docker-compose.yml to repo root
Komodo's build ran `docker build -f Dockerfile .` from inside docker/,
which set the build context to docker/ — a directory that contains neither
package.json nor a nested docker/entrypoint.sh, so both COPY steps failed.
Moving these three files to the repo root makes `docker build .` from the
repo root work with default Komodo settings (no per-build-tool config).

- Dockerfile: update COPY entrypoint.sh path (drops docker/ prefix)
- docker-compose.yml: build.context = . (drops dockerfile: override)
- README.md: docker compose build (drops -f docker/docker-compose.yml)
2026-09-12 00:41:57 -04:00
josh d99711563e Initial commit — SvelteKit fleet manager for T5 Plutonium servers
Ports push_scripts.sh (1497 lines of bash) to a SvelteKit + SQLite web app
that manages a fleet of T5 Plutonium servers running on Komodo. Same push
and beta workflow as the shell script, with a live SSE pipeline view, a
!rt-token-gated auth modal that hard-pauses deployments on stale tokens,
per-file audit diffs, and a Komodo-container deployment target.

- Push/beta engines port the exact filter, held-by-beta, conflict, and
  stale-backup rules from the shell script
- SQLite (better-sqlite3) replaces script_metadata.json; a one-shot
  importer moves legacy state over on first boot
- 16 vitest tests cover push add/update/skip, beta open→rollback,
  open→promote, conflict guards, sweep frozen/manual branches, and IW4M
  login/status parsing
- docker/ + komodo/stack.toml deploy as a managed container on the same
  host as the game servers, /root/zombies bind-mounted at the same path
  the shell script used
2026-09-12 00:23:51 -04:00