Self-hosted runners
Use a runner you control when tests require VPN egress.
Free VPN CLI can support CI-style network checks when the runner environment permits VPN services and tunnel creation. Treat it as a self-hosted or controlled-runner workflow, not a blanket promise for GitHub-hosted runners.
GitHub-hosted runner compatibility is not promised here. Use Free VPN CLI on self-hosted runners or environments where installing services and creating VPN tunnels is allowed.
Install and permit the VPN service in a controlled runner environment, then use status and doctor output around network-sensitive jobs.
Keep CI usage permission-aware and transparent. The runner must allow the network behavior you need.
Use a runner you control when tests require VPN egress.
Capture status before tests that depend on region or egress.
Save doctor output when a job fails due to networking.
Avoid hidden VPN changes in shared or restricted CI contexts.
Three verbs cover most day-to-day VPN work. set-region and doctor cover region selection and troubleshooting.
Prepare the runner outside the job or in a controlled setup step. During the job, capture status before network-sensitive steps and doctor output only when needed.
| Command | Why it matters |
|---|---|
freevpn status --json | Log current VPN state before the sensitive step. |
freevpn set-region "US East"freevpn up --json | Connect to an explicit region when the runner permits it. |
freevpn doctor --json | Collect diagnostics when a network-dependent job fails. |
freevpn down | Clean up runner VPN state when your workflow requires it. |
CI needs headless operation, parseable output, and failure evidence more than visual controls.
The CLI does not require a desktop window for status, connection, or diagnostics.
Use --json for workflow logs and artifacts.
Capture DNS, route, controller, license, and egress diagnostics when a network step fails.
Use a documented region slug or label and verify status.
Runner network permissions decide whether VPN setup can work.
Make VPN state visible in job logs where appropriate.
On permitted self-hosted runners, services output can be logged as JSON before network-sensitive checks. Keep paid preset handling explicit and do not assume hosted CI allows VPN tunnels.
freevpn services list shows supported service presets.freevpn services categories groups presets such as Streaming, Sports, Social, AI, and Other where available.freevpn services current prints the current preset name on one line.freevpn services --json is the safest form for scripts and agents.VPN use in CI should be explicit and environment-aware.
status --json before tests and doctor --json on failure.freevpn status --json before the sensitive step and doctor --json only when troubleshooting.Start with a self-hosted or controlled runner, then use JSON status and doctor output around network-sensitive jobs.