# CI Filters The `filters.yaml` file controls which CI jobs run based on changed files. ## How It Works When you open a PR, CI checks which files changed and runs only relevant jobs: | Filter | Triggers | |--------|----------| | `core` | Main test suite (vLLM, SGLang, TRT-LLM containers) | | `operator` | Kubernetes operator tests | | `deploy` | Deploy-specific tests | | `vllm` / `sglang` / `trtllm` | Backend-specific tests | | `docs` | Nothing (classification only) | | `examples` | Nothing (classification only) | | `ignore` | Nothing (classification only) | | `rust` | Rust pre merge checks | > **Note:** `docs`, `examples`, and `ignore` don't trigger any CI jobs. They exist to satisfy coverage requirements - every file must match at least one filter. ## Fixing "Uncovered Files" Errors If CI fails with: ``` ERROR: The following files are not covered by any CI filter ``` Add patterns to `filters.yaml`: 1. **New source files** → Add to `core` or relevant backend filter 2. **New examples/recipes** → Add to `examples` 3. **Documentation** → Add to `docs` 4. **Config files that don't need CI** → Add to `ignore` ## Testing Locally ```bash cd .github/scripts npm install npm run coverage # Check if all repo files are covered ``` ## Pattern Syntax - `**` matches any path depth (but not dotfiles by default) - `*` matches within a directory - `!pattern` excludes files (used in `core` to skip docs) - For dotfiles, add explicit pattern like `dir/.*` Example: `lib/**/*.rs` matches all Rust files under `lib/`. ## Adding a New Filter Group If you create a new filter in `filters.yaml`, you must also update the shared changed-files action so the coverage check knows about it: 1. Add the filter to `filters.yaml`. 2. Edit `.github/actions/changed-files/action.yml`: - Expose the new filter as an output (see the existing `core`, `planner`, `vllm`, `sglang`, `trtllm`, etc. entries at the top of the file). - Add its `*_all_modified_files` to the `COVERED_FILES` line in the "Check for uncovered files" step. If you skip this step, CI will fail with "uncovered files" even though your filter exists.