build/

May 4, 2026 · View on GitHub

This directory contains Azure DevOps pipeline YAML files and the pod-scheduler configs that generate them.

Generated files (do not edit by hand)

The CI pipelines that run the daily benchmark sweep are generated by the pod-scheduler. Each pipeline maps to a JSON config that lists the available pods (machine groups) and scenarios.

Generated YAMLSource configNotes
benchmarks-ci-01.yml, benchmarks-ci-02.ymlbenchmarks_ci_pods.jsonOn-prem fleet (citrine + mono); split across two YAMLs to spread load
benchmarks-ci-azure.ymlbenchmarks_ci_azure_pods.jsonAzure cloud pods (includes the merged eastus2 cobalt cloud pods)
benchmarks-ci-cobalt.ymlbenchmarks_ci_cobalt_pods.jsonCobalt-hosted pods

To regenerate, from the repo root:

python ./scripts/pod-scheduler/main.py \
    --config ./build/benchmarks_ci_pods.json \
    --yaml-output ./build

python ./scripts/pod-scheduler/main.py \
    --config ./build/benchmarks_ci_azure_pods.json \
    --base-name benchmarks-ci-azure \
    --yaml-output ./build

python ./scripts/pod-scheduler/main.py \
    --config ./build/benchmarks_ci_cobalt_pods.json \
    --base-name benchmarks-ci-cobalt \
    --yaml-output ./build

The header of each generated YAML embeds the exact regen command for that file.

Hand-maintained scenario templates

Everything else in this directory is hand-maintained. The most important groups:

  • *-scenarios.yml — AzDO job templates that the generated pipelines invoke (e.g. proxies-scenarios.yml, grpc-scenarios.yml). One per benchmark family. The pod-scheduler picks which template to run via the template field on each scenario in the JSON config.
  • prbenchmarks.*.config.yml — PR-trigger pipelines for individual PR runs.
  • job-variables.yml — shared variable definitions consumed by the scenario templates.

When adding a new benchmark family, drop a *-scenarios.yml template in this directory and reference it from the relevant benchmarks_ci_*_pods.json.

Editing the schedule

Common edits, all done in JSON:

  • Add a scenario: append to scenarios[] in the appropriate benchmarks_ci_*_pods.json.
  • Add a pod / machine class: append to pods[] and reference its name from any scenario you want to target it.
  • Change cadence or splits: edit metadata.schedule (cron), metadata.yaml_generation.target_yaml_count, or metadata.yaml_generation.schedule_offset_hours.
  • Override a job's timeout: add "timeout": <minutes> to the scenario.

After any edit, regenerate the YAML and commit both the JSON and the YAML together. The snapshot tests in scripts/pod-scheduler/tests/test_snapshots.py will fail in CI if the generated YAML drifts from the configs.