Repository navigation
video + gameserver: finish both plugins and mark them available - #164
Merged
Merged
Conversation
video: pin the published runner by digest (RUNNER_PULL_REF), run it under a local name, tag :stable in the workflow, label the package with its source, and check anonymous pulls in CI. `video setup` (now in core) pulls the pinned digest or builds from source. C0MPUTE_DOCKER overrides the container CLI. Speech gateway exposes router() so POST /v1/videos is tested end to end on loopback with a fake runner that writes a real MP4. gameserver (spec v2): secrets never ride in the offer (sealed handoff to the winning worker); backups every 30 min and at stop, encrypted to the buyer's X25519 key; signed status records on c0mpute/gameserver/v1; `gameserver watch` probes the port (Minecraft status, Valheim A2S, Factorio UDP + status), mirrors backups and fails over to another worker from the latest one; hard expiry via timeout + --init + --rm plus a boot/sweep watchdog. Runtime trait lets the loopback e2e run without docker. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… video e2e Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ThreatCrush Security Scan12 finding(s) HIGH/CRITICAL: 1 | MEDIUM: 8 | LOW: 3
Snippets are redacted; ThreatCrush never prints matched credential material. |
…nner CI showed a failover worker that shared no connection with the buyer could not fetch the restore world (Failed to dial the requested peer). Both sides now put their addresses in the handoff and dial each other, so either side can be the one behind NAT. Also fixes a unit test slicing a short last chunk. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Finishes the two
partialplugins. Hardware needs are now listed in the manifests as requirements ([module.requirements] hardware, which the plugins page shows as "requires: ..."). They no longer count as reasons forpartial.video
RUNNER_PULL_REF = ghcr.io/profullstack/c0mpute-video-runner@sha256:2ba52bed…(the image the current master build published). The node runs it under a local name,c0mpute/video-runner:stable. A unit test keepsmodule.toml[module.dispatch]andRUNNER_DIGESTequal.:stable, adds the OCIsourcelabel (links the package to this repo), writes the digest to pin into the job summary, and checks an anonymous pull (warns until it works).c0mpute-video-runnerreturnsUNAUTHORIZEDtoday. An org admin needs to go to github.com/orgs/profullstack/packages → c0mpute-video-runner → Package settings → Change visibility → Public. Until then,c0mpute video setupbuilds the image from source.video setupmoved into core (video::setup). It pulls the pinned digest and tags it; if the pull fails, it clones and builds from source (C0MPUTE_VIDEO_SOURCE_REPOoverrides the repo).install.shdoes the same.C0MPUTE_DOCKERoverrides the container CLI, for podman or a test double.speech_gateway::router()is exposed soPOST /v1/videoscan be tested end to end.status = "available",builtin = true, requires "NVIDIA GPU + docker with the NVIDIA container runtime".gameserver (spec v2)
handoff.rs(X25519 → HKDF → AES-256-GCM, gossip-signed sources).backup_mins(default 30) and at stop or expiry, the worker encrypts the world to the buyer's long-term X25519 key (backup.key, mode 0600) in 1 MiB AES-GCM chunks. Worlds published for a restore use a fresh key, handed only to the winning worker. Manifest is v2, and unencrypted manifests are refused.c0mpute/gameserver/v1: container running, latest backup.c0mpute gameserver watch <id>. Probes the game port: Minecraft status ping, Valheim Steam A2S, and for Factorio a UDP reachability check plus a fresh "running" status record. Every probe is logged (gameserver health <id>). It mirrors each backup to the buyer's machine. If the server fails checks for--fail-after-secs(default 300), it starts the same world on another worker from the newest backup, excludes the failed worker, and links the two rentals.timeout <reservation>with--init --rmand--stop-timeout. At boot and on every sweep, the worker kills any labelled container that is past its expiry, then backs up from the volume and removes it.Runtimetrait (Dockerin production) lets the loopback e2e tests run without docker. Entrypoints come from the image configs at the pinned digests.status = "available", requires "opt-in worker role: docker + a public IP with the port range open".Tests
cargo test --workspace --offlinein--network nonedocker: 682 passed, 0 failed, 1 ignored (the ignored one was already there). New tests:video_e2e:POST /v1/videos→ fake runner writes a real H.264 MP4 →video/mp4with the exact bytes.video setupbuilds from source when the pull is refused, and pulls and tags when the pull works.gameserver_e2e:timeout/--init/--rm), probe codecs against live loopback responders, health tracker, chunk encryption, backup key derivation.bun run lintandbun testpass (19).Not verified with real docker or a GPU here: the game images under
timeoutand the real runner were not run on dev2.🤖 Generated with Claude Code