Modern CI pipelines in this repository classify runners into two categories to control cost and coverage. Understanding the difference allows you to target expensive resources only when necessary and keep feedback cycles fast.
ubuntu-latest or windows-latest.requirements-core.json) omit runner_type or set it to standard. Workflows simply use runs-on: ubuntu-latest or similar.runner_type: "integration" in the appropriate mapping file and reference the runner by label in workflows. Integration entries often set skip_dry_run: true to force real execution.Requirement mapping files define which runner each test or requirement targets:
{
"runners": {
"ubuntu-latest": {
"runner_label": "ubuntu-latest",
"runner_type": "integration"
},
"windows-latest": {
"runner_label": "windows-latest"
/* implicit runner_type: "standard" */
}
},
"requirements": [
{
"id": "REQ-009",
"runner": "ubuntu-latest",
"tests": ["Build.Workflow"]
}
]
}
The summarizer partitions results by runner_type, producing artifacts such as summary-integration.md alongside summary-standard.md. This separation keeps integration evidence distinct from fast feedback produced on default runners.
needs chains so multiple integration jobs do not compete for the same hardware.docs/requirements.md so the Runner and Runner Type columns reflect the intended infrastructure.By explicitly classifying jobs, teams can scale the project efficiently—routine tasks remain fast on default runners while integration tests validate real‑world behavior without overloading scarce resources.
Administrators can modify runner mappings without opening a pull request by running the update-runner-runtime workflow. For step‑by‑step instructions, input examples, and troubleshooting tips, see the Update Runner Runtime guide.