Skip to main content

Air-gapped mode

Air-gapped mode is the Enterprise tier posture for environments where the runner cannot — or must not — reach the public internet. Defence, medical-devices, automotive functional-safety teams use it to satisfy network-segmentation requirements.
Air-gapped pools are available only on the Enterprise tier. The platform itself can be SaaS, single-tenant SaaS, or fully on-prem. The runner side of the contract is identical across all three.

What changes

In air-gapped mode the runner only ever opens connections to:
  • https://<your-roboticks-platform> (could be api.roboticks.io, your single-tenant subdomain, or an on-prem https://roboticks.internal)
  • The S3-compatible object store presigned-URLs returned by the platform
It does not clone from GitHub. It does not pip install from public PyPI. It does not pull base images from Docker Hub at job time.

Set it up

Step 1 — declare an air-gapped pool

The --airgapped flag annotates the pool. Jobs routed to it must have airgapped: true on the project — the router refuses cross-mode dispatch.

Step 2 — flip the project flag

Once set, no job in this project is ever dispatched to a hosted pool, even if a self-hosted pool is unavailable. Jobs queue until a self-hosted runner picks them up.

Step 3 — install the runner on the isolated network

Mirror the Cosign-signed binary into your internal artifact store, then install on the host:

Step 4 — set network.airgapped: true in runner.yaml

The runner enforces network-egress restrictions when this flag is set:
Any outbound connection to a non-allowlisted host fails fast with an audit-log row.

Pushing tests without GitHub

In air-gapped mode the runner cannot git clone. Instead the CLI uploads the test payload directly:
The platform stores the payload as an immutable blob, dispatches the job to the air-gapped pool, and the runner pulls the blob (not the git repo) before execution. For commit-traceable runs, attach the commit SHA explicitly:
The SHA is recorded in the evidence pack so auditors can reconstruct the source state.

Firewall rules

Open one outbound rule on the runner host. Everything else can be denied. That is the entire firewall surface.

On-prem roboticks SDK mirror (optional)

If your tests pip install roboticks at job time and the runner cannot reach pypi.org, host an internal mirror:
Or — preferred — bake the SDK into your test image so the runner never needs PyPI:
Push the baked image to your internal registry and reference it from the test config:

Verification

After setup, prove isolation:
A red line is a finding, not a runner error — but you should fix the firewall before relying on the posture for audit.

Limits and trade-offs

Next steps

Pool management

Tokens, draining, audit log.

Service install

systemd / launchd / Windows service.