Repository navigation
Expand file tree
/
Copy pathconfig.example.yaml
More file actions
107 lines (84 loc) · 4.22 KB
/
Copy pathconfig.example.yaml
File metadata and controls
107 lines (84 loc) · 4.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# AirStack CI orchestrator configuration (OSMO backend).
# Copy to /etc/airstack-orchestrator/config.yaml and fill in placeholders.
# --- OSMO target ---
# Path to the `osmo` CLI. The install script (see setup.sh / README) puts it on
# PATH as `osmo`; override with a full path if needed.
osmo_bin: "osmo"
# URL of your OSMO web service (the control plane the CLI logs into).
# AirLab: https://airlab-share-01.andrew.cmu.edu
osmo_url: "https://airlab-share-01.andrew.cmu.edu"
# File containing the OSMO service-account access token. This is the shared,
# non-personal "lab" identity — the analog of the old OpenStack application
# credential. The orchestrator runs `osmo login --method token --token-file`
# with it. Created by an OSMO admin via `osmo user create` + `osmo token set`
# (see README). It never leaves this host.
osmo_token_file: "/etc/airstack-orchestrator/osmo-token"
# GPU pool for ephemeral runners. AirLab team pools are Keycloak-autosynced;
# use the stable `airstack` pool (privileged_allowed=true). A hand-made
# `airstack-ci` pool will be wiped by synchronize_osmo_team_pools.py unless
# it is added to Keycloak. The service-account needs workflow:Create on this
# pool (role osmo-airstack) plus osmo-user for cancel/query.
pool: "airstack"
# Optional platform (hardware type) to target within the pool. Leave empty to
# use the pool's default platform. List options with `osmo pool list` / the UI.
platform: "default"
# Scheduling priority: HIGH | NORMAL | LOW.
priority: "NORMAL"
# --- Runner task (the per-job worker) ---
# Prebaked image: Docker CE + compose + nvidia-container-toolkit + GH Actions
# runner. Build & push runner.Dockerfile to a registry the pool can pull from.
runner_image: "airlab-docker.andrew.cmu.edu/airstack/airstack-ci-runner:2.336.0"
# Resource request for the runner container. Size for the full stack build +
# sim (Isaac Sim / ms-airsim + robot + gcs) running under docker compose.
cpu: 8
gpu: 1
memory: "32Gi"
storage: "300Gi"
# REQUIRED for the AirStack tests: they run `airstack up` (docker compose)
# inside the pod, which needs an inner Docker daemon -> a privileged container.
# The pool's platform must have "Privileged Mode Allowed" enabled by your OSMO
# admin, otherwise submission/scheduling will be rejected.
privileged: true
# Use the node's host network for the runner container. Usually not needed
# (the runner only makes outbound calls to GitHub); leave false unless the
# tests need host networking.
host_network: false
# GitHub Actions runner version to bake into runner_image. Kept here for
# reference/traceability; it is a build arg of runner.Dockerfile, not consumed
# by the orchestrator at runtime. Must match a tag at
# https://github.com/actions/runner/releases
runner_version: "2.336.0"
# --- GitHub ---
# Repos whose queued workflow_jobs to pick up. Trunk plus every module repo
# whose CI calls the reusable module-system-tests workflow. The PAT must have
# admin (self-hosted runner) rights on each. The legacy singular `repo:` key
# is still accepted.
repos:
- "castacks/AirStack"
- "castacks/asm_dfm2_disturbances"
- "castacks/asm_optitrack"
- "castacks/asm_macvo"
# Labels the orchestrator polls for. A queued workflow_job whose `labels`
# array is a superset of this list gets a workflow submitted for it. These are
# unchanged from the OpenStack backend, so system-tests.yml needs no edits.
runner_labels:
- self-hosted
- airstack-ephemeral
# --- Limits ---
# Maximum simultaneous in-flight workflows the orchestrator will submit. OSMO
# queues anything beyond the pool's capacity on its own, but this caps how many
# jobs we hand it at once.
max_concurrent: 3
# Hard ceiling for a single job. Past this age the reaper cancels the workflow
# even if GitHub still reports the job as in-progress. Must comfortably exceed
# the longest expected job (liveliness / autonomy runs).
max_job_minutes: 2880 # 48 hours
# --- Polling intervals (seconds) ---
spawn_poll_interval_s: 15
reap_poll_interval_s: 30
# How long to wait for `osmo workflow submit` to return before treating the
# submission as failed.
submit_timeout_s: 180
# Name prefix for submitted workflows. Also used by the orphan sweep to find
# workflows this orchestrator owns. Keep the trailing dash.
workflow_name_prefix: "gha-runner-"