48 lines
2.8 KiB
Python
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
|