[ci] Refresh stale .buildkite/README and remove dead ci_tags_from_change.sh#64375
[ci] Refresh stale .buildkite/README and remove dead ci_tags_from_change.sh#64375dstrodtman wants to merge 3 commits into
Conversation
…nge.sh .buildkite/README.md described the pre-rayci pipeline model: the `conditions` / `NO_WHEELS_REQUIRED` test-selection field and the `pipeline.*.yml` files, none of which exist anymore. Rewrite it to describe the current state: pipelines are the `*.rayci.yml` files run by rayci, and conditional test selection is driven by the `.buildkite/*.rules.txt` tag rules that rayci's `test-rules` evaluates. ci/ci_tags_from_change.sh is orphaned: nothing in this repo or in rayci references it, and it execs `ci/pipeline/determine_tests_to_run.py ci/pipeline/test_rules.txt`, a rules file that no longer exists. Remove it. ci/pipeline/determine_tests_to_run.py is left in place: it is an in-repo reference implementation of the rule-file format, not the live evaluator (rayci's own parser is). Flagging for CI owners whether it should also be retired or kept as a reference. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Douglas Strodtman <douglas@anyscale.com>
There was a problem hiding this comment.
Code Review
This pull request updates the .buildkite/README.md documentation to reflect the transition to rayci for pipeline orchestration and conditional test selection via rule files, while removing an obsolete shell script. The review feedback suggests improving the documentation's navigability by turning file paths and rule filenames into clickable relative links.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| - `test.rules.txt` is the conditional rule set. Rules are evaluated in order and the first match wins. A rule with no `@` tags is a skip rule (it matches but emits nothing), and a trailing `*` catch-all fans unmatched changes out to the full suite. | ||
| - `always.rules.txt` is an always-on overlay applied to every change. |
There was a problem hiding this comment.
To improve navigability and developer experience, we can make the rule filenames clickable links pointing directly to the files in the repository.
| - `test.rules.txt` is the conditional rule set. Rules are evaluated in order and the first match wins. A rule with no `@` tags is a skip rule (it matches but emits nothing), and a trailing `*` catch-all fans unmatched changes out to the full suite. | |
| - `always.rules.txt` is an always-on overlay applied to every change. | |
| - [`test.rules.txt`](test.rules.txt) is the conditional rule set. Rules are evaluated in order and the first match wins. A rule with no `@` tags is a skip rule (it matches but emits nothing), and a trailing `*` catch-all fans unmatched changes out to the full suite.\n- [`always.rules.txt`](always.rules.txt) is an always-on overlay applied to every change. |
| are run on the `ml.Dockerfile` image. | ||
| - `pipeline.gpu.yml` contains jobs that require one GPU. The tests are run on the `gpu.Dockerfile` image. | ||
| - `pipeline.gpu.large.yml` contains jobs that require multi-GPUs (currently 4). The tests are run on the `gpu.Dockerfile` image. | ||
| `ci/pipeline/determine_tests_to_run.py` is an in-repo reference implementation of the same rule-file format. It is not the live evaluator; rayci is. |
There was a problem hiding this comment.
We can make the path to the reference script a relative link so that developers reading the README on GitHub can easily jump to the implementation.
| `ci/pipeline/determine_tests_to_run.py` is an in-repo reference implementation of the same rule-file format. It is not the live evaluator; rayci is. | |
| [`ci/pipeline/determine_tests_to_run.py`](../ci/pipeline/determine_tests_to_run.py) is an in-repo reference implementation of the same rule-file format. It is not the live evaluator; rayci is. |
What
Two cleanups to the Buildkite CI docs/scripts that predate the rayci migration:
Rewrite
.buildkite/README.md. It described the pre-rayci model: theconditions/NO_WHEELS_REQUIREDtest-selection field and thepipeline.{build,test,ml,gpu,gpu.large}.ymlfiles. None of those exist anymore. Pipelines are now the*.rayci.ymlfiles run by rayci, and conditional test selection is the.buildkite/*.rules.txttag rules. The new README describes that and points at the rules files for the format.Remove
ci/ci_tags_from_change.sh. It's orphaned: nothing in this repo references it (git grepfinds zero callers) and rayci doesn't either. It alsoexecspython ci/pipeline/determine_tests_to_run.py ci/pipeline/test_rules.txt, andci/pipeline/test_rules.txtno longer exists, so it would fail if it ran.Why
The stale README and the orphaned script both point at
ci/pipeline/determine_tests_to_run.pyas the live test-selection mechanism. It isn't: the live tag computation is rayci'stest-rulesstep, which has its own parser and reads the.buildkite/*.rules.txtfiles. The mismatch is an easy trap for anyone trying to understand or modify CI test selection.Left for CI owners to decide
ci/pipeline/determine_tests_to_run.pyis now referenced only by the (also-removed) wrapper and apy_librarytarget with no dependents. It's an in-repo reference implementation of the same rule-file format rayci's parser uses, not the live evaluator. I've kept it (with a clarifying note in the README) since it can serve as a readable reference and is handy for a local rules dry-run. If you'd rather retire it (and itsci/pipeline/BUILD.bazeltarget), say the word and I'll add that here.Opening as a draft since
.buildkite/andci/are CI-owned — flagging for review before this goes anywhere.