can1357/oh-my-pi · error · SystemExit
robomp orchestrator requires ROBOMP_GH_PROXY_URL and ROBOMP_
Error message
robomp orchestrator requires ROBOMP_GH_PROXY_URL and ROBOMP_GH_PROXY_HMAC_KEY (run gh-proxy in a sibling container).
What it means
_require_proxy_mode() enforces that proxy mode is fully configured: both ROBOMP_GH_PROXY_URL and ROBOMP_GH_PROXY_HMAC_KEY must be set before the orchestrator can build its GitHub client. Missing either means there is no usable GitHub route, so startup aborts with SystemExit.
Source
Thrown at python/robomp/src/cli.py:43
from robomp.server import create_app
def _settings_or_die() -> Settings:
try:
return get_settings()
except Exception as exc:
click.echo(f"configuration error: {exc}", err=True)
sys.exit(2)
def _require_proxy_mode(cfg: Settings) -> tuple[str, bytes]:
if cfg.github_token is not None:
raise SystemExit(
"robomp orchestrator refuses to start with GITHUB_TOKEN set in env. "
"The PAT must live only in the gh-proxy container."
)
if cfg.gh_proxy_url is None or cfg.gh_proxy_hmac_key is None:
raise SystemExit(
"robomp orchestrator requires ROBOMP_GH_PROXY_URL and "
"ROBOMP_GH_PROXY_HMAC_KEY (run gh-proxy in a sibling container)."
)
return cfg.gh_proxy_url, cfg.gh_proxy_hmac_key.get_secret_value().encode("utf-8")
def _build_github(cfg: Settings) -> GitHubProxyClient:
base_url, key = _require_proxy_mode(cfg)
return GitHubProxyClient(base_url=base_url, hmac_key=key)
def _default_wait_timeout(cfg: Settings) -> float:
return cfg.task_timeout_seconds + cfg.task_timeout_hard_grace_seconds + 30.0
@click.group()
def main() -> None:
"""roboomp control surface."""View on GitHub (pinned to 9690622007)
Solutions
- Set both ROBOMP_GH_PROXY_URL and ROBOMP_GH_PROXY_HMAC_KEY in the orchestrator environment.
- Deploy the gh-proxy container as a sibling and point ROBOMP_GH_PROXY_URL at it.
- Alternatively, if direct-PAT mode is intended, set GITHUB_TOKEN and run in the mode that supports it.
- Verify variable names and that your secret injection (k8s secret, docker secret) actually mounts them.
Example fix
// before # ROBOMP_GH_PROXY_URL unset, ROBOMP_GH_PROXY_HMAC_KEY unset // after export ROBOMP_GH_PROXY_URL=http://gh-proxy:8080 export ROBOMP_GH_PROXY_HMAC_KEY=$(cat /run/secrets/gh_proxy_hmac)
Defensive patterns
Strategy: validation
Validate before calling
import os
missing = [v for v in ("ROBOMP_GH_PROXY_URL", "ROBOMP_GH_PROXY_HMAC_KEY") if not os.environ.get(v)]
if missing and not os.environ.get("GITHUB_TOKEN"):
raise SystemExit(f"missing required env vars: {missing}") Type guard
def proxy_mode_complete(env: dict) -> bool:
return bool(env.get("ROBOMP_GH_PROXY_URL")) and bool(env.get("ROBOMP_GH_PROXY_HMAC_KEY")) Prevention
- Set both proxy variables together in the same .env/deploy manifest.
- Wire the HMAC key from your secret manager into the container env explicitly.
- Run a startup preflight that validates required env vars before launch.
When it happens
Trigger: Starting the robomp orchestrator with neither GITHUB_TOKEN nor (one or both of) ROBOMP_GH_PROXY_URL/ROBOMP_GH_PROXY_HMAC_KEY set, or setting only one of the proxy pair.
Common situations: Fresh deployment where the .env was never populated; the gh-proxy sidecar was added but orchestrator env vars were forgotten; HMAC key stored in a secret manager but not injected; typo in env var names.
Understand the failure class
Background: "environment variable is not set" and "Missing keys in environment" errors: what missing required env var messages mean and how to fix them — this error's family across 28 libraries.
Related errors
- no GitHub access configured: set GITHUB_TOKEN, or set ROBOMP
- robomp orchestrator refuses to start with GITHUB_TOKEN set i
- ROBOMP_BOT_LOGIN must be a non-empty GitHub login
- GITHUB_TOKEN and ROBOMP_GH_PROXY_URL are mutually exclusive
- ROBOMP_GH_PROXY_URL and ROBOMP_GH_PROXY_HMAC_KEY must both b
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/e28f2abab8d365a9.
Report an issue: GitHub.