> ## Documentation Index
> Fetch the complete documentation index at: https://boxrouter.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Move a Workflow

> Change the runs-on line of the jobs that fit, check the result, and revert the line to roll back.

A move is one edit per job: the `runs-on` line. GitHub keeps the workflow, logs, artifacts, and secrets.

**Before You Begin:** A private repository that is connected and turned on, as in the [quickstart](https://boxrouter.ai/docs/actions/quickstart.md). A job in a repository that is off waits on GitHub.

## Pick the Label

BoxRouter does not accept GitHub's own labels such as `ubuntu-latest`. Replace the whole `runs-on` value with one BoxRouter label. Add `self-hosted`, `linux` or `x64` beside it if you like; any other label is refused, and so are two BoxRouter labels.

| Your Job Needs | Use |
| - | - |
| 2 vCPU | `boxrouter-ubuntu-24.04-2` |
| 4 vCPU, or you don't know | `boxrouter-ubuntu-24.04` |
| 8 vCPU | `boxrouter-ubuntu-24.04-8` |
| 16 vCPU, or more than 8 GiB of memory | `boxrouter-ubuntu-24.04-16` |

Each label sets a CPU and memory floor, so two runners with the same core count can have different memory. [Runners](https://boxrouter.ai/docs/actions/runners.md#runner-labels) lists each floor. BoxRouter refuses an unsupported size and lists the labels that exist; it never rounds. There is no Ubuntu 22.04 or 26.04 label, no floating `latest`, and no size above 16 vCPU.

```yaml theme={"theme":"css-variables"}
jobs:
  test:
    runs-on: boxrouter-ubuntu-24.04   # was: ubuntu-latest
```

A job that moves from `ubuntu-22.04` runs on 24.04, so check the tool versions its steps rely on.

Who pays and which provider runs the job come from your workspace's routing settings, not the label.

## Choose Which Jobs Move

Move jobs that need only Node.js, Git, `curl` and `jq`, or tools they install in a step: tests, linters, type checks, and builds without Docker. Keep these on GitHub:

* Jobs that use Docker, Buildx, Compose, or service containers. The default runner has no Docker;
  a `-full` runner label requests the [full image](https://boxrouter.ai/docs/actions/runners.md#actions-runner-image) with Docker on verified routes.
* Jobs for macOS, Windows, Arm, or Ubuntu 22.04 or 26.04.
* Jobs in public repositories or on fork pull requests.
* Disk-heavy jobs until you check free space on the target runner with `df -h`.
* Jobs that run longer than 30 minutes. A job runs for up to 6 hours, but a provider account or
  Credits funding can lower the limit to 30 minutes, and a policy can set any shorter limit. A job
  that reaches its limit ends early. See [Time limits](https://boxrouter.ai/docs/actions/runners.md#time-limits).

A workflow can mix both: each job picks its own `runs-on`.

## Check the Move

1. Review the diff. It should change only `runs-on` lines.
2. Push a branch, or use **Run workflow** for a `workflow_dispatch` workflow.
3. On GitHub, the job shows the BoxRouter label and a runner named like `brx-…`.
4. In BoxRouter, open **GitHub Actions** and select the run for its provider, size, timeline, duration, and cost.
5. Compare duration with your last run on GitHub. If the job ran out of memory or disk, check which limit it hit. The 16 vCPU label has a higher memory floor; a larger label does not guarantee more disk.

If a job stays queued or is refused, see [Troubleshooting](https://boxrouter.ai/docs/actions/troubleshooting.md).

## Give This to a Coding Agent

Paste this into a coding agent in a checkout of the repository.

```text theme={"theme":"css-variables"}
Move this repository's GitHub Actions jobs to BoxRouter runners where it is safe.

1. Confirm the repository is private. Read .github/workflows and list each job's
   runs-on and declared OS and tool requirements. Use available run logs or
   measurements for CPU, memory, disk and duration; mark unknowns. Leave fork-PR
   jobs and public repositories alone.
2. Leave on GitHub any job that uses Docker (docker, container:, services:,
   compose), needs macOS, Windows, Arm or Ubuntu 22.04/26.04, or runs longer
   than 30 minutes. Leave disk-heavy jobs until free space on the target runner
   has been checked. Leave jobs whose requirements cannot be established.
3. For each other job pick exactly one label by CPU, and by memory where it
   matters: boxrouter-ubuntu-24.04-2, boxrouter-ubuntu-24.04,
   boxrouter-ubuntu-24.04-8, boxrouter-ubuntu-24.04-16. Over 8 GiB needs -16.
   Change only runs-on.
4. Add no keys or tokens to any workflow or secret.
5. Open a pull request listing each job moved and each job left, with the reason.
```

## Roll Back

Revert the `runs-on` line:

```diff theme={"theme":"css-variables"}
-    runs-on: boxrouter-ubuntu-24.04
+    runs-on: ubuntu-latest
```

BoxRouter wrote nothing into your repository, so the revert is the whole rollback. A run already in progress finishes on BoxRouter; cancel it on GitHub if you don't want that. Runs that start after the revert use GitHub's runners. The installed App and the repository switch cost nothing while no job uses a BoxRouter label.

## Next Steps

> [card] [Choose a Runner](https://boxrouter.ai/docs/actions/runners.md)
>
> Labels, sizes, tools, and limits.

> [card] [Troubleshoot Actions](https://boxrouter.ai/docs/actions/troubleshooting.md)
>
> Fix a queued or refused job.

> [card] [How Actions Security Works](https://boxrouter.ai/docs/actions/security.md)
>
> Which jobs run and where secrets stay.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.