Files
cc-ci/tests/rustdesk-server/recipe_meta.py
T

48 lines
2.8 KiB
Python

# Per-recipe harness config for rustdesk-server (hbbs/hbbr rendezvous+relay — NOT HTTP-native).
#
# RustDesk's server speaks its own protobuf protocol on host-published ports
# (21115-21119 tcp + 21116 udp; 21118/21119 are its websocket listeners) — there is NO HTTP
# API and no web UI, and the stock compose's traefik labels point at a port nothing serves
# (vestigial). To fit cc-ci's HTTP-readiness model we deploy a cc-ci ENVIRONMENTAL overlay
# (compose.ccci.yml, auto-provided by lifecycle.provide_ccci_overlay):
# - a `status` sidecar (nginx) that serves EXACTLY ONE real artifact of the app — hbbs's
# generated identity key — at /id_ed25519.pub on the app domain via Traefik. The health
# gate then asserts the domain routes AND the app actually booted far enough to mint its
# keypair (a canned page would prove nothing; the key file only exists because hbbs
# created it). The private key and the sqlite peer DB in the same volume are NEVER
# exposed (nginx serves only the exact .pub location; everything else 404s).
# - host ports 21115-21119 need NO overlay: the stock compose already publishes them
# mode:host, so on-host protocol tests reach hbbs/hbbr at 127.0.0.1 directly.
#
# Distinctive config markers (read back by the recipe-specific tests — the app's own
# artifacts, not hard-coded upstream values): the identity key is asserted EQUAL across three
# independent surfaces — the HTTPS status route, hbbs's own startup log line ("Key: …"), and
# the volume file — proving our deploy actually produced the state we're reading.
HEALTH_PATH = "/id_ed25519.pub" # real hbbs artifact served by the status sidecar
HEALTH_OK = (200,)
DEPLOY_TIMEOUT = 600 # both images are tiny (~6 MB) and nginx is pre-pulled on the node
HTTP_TIMEOUT = 300 # key file appears seconds after hbbs starts; generous for a cold node
# Environmental overlay for EVERY deploy (base install AND upgrade head): adds the status
# sidecar + its Traefik router (priority beats the stock app's dead :80 router, which is left
# untouched — no version-specific pins, no service add/drop beyond the CI-only sidecar).
EXTRA_ENV = {
"COMPOSE_FILE": "compose.yml:compose.ccci.yml",
}
# Extra readiness beyond the HTTP gate: the rendezvous server must be STABLY listening on its
# core udp/tcp port 21116 (3 consecutive connects) before the harness proceeds — mirrors
# mumble's voice-port probe. The remaining ports + the websocket + protocol surfaces are
# asserted by the custom tier.
def READY_PROBE(ctx):
return [{"tcp_host": "127.0.0.1", "tcp_port": 21116, "stable": 3}]
# canon §2.B: enroll as a DATA-WARM canonical (all recipes enrolled — operator 2026-06-17).
# The weekly sweep promotes this recipe's canonical to its latest green RELEASE TAG.
WARM_CANONICAL = True