2121 check-changes :
2222 runs-on : ubuntu-latest
2323 outputs :
24- file_filter : ${{ steps.filter.outputs.file_filter }}
2524 install_filter : ${{ steps.filter.outputs.install_filter }}
2625 docker_filter : ${{ steps.filter.outputs.docker_filter }}
26+ shared_filter : ${{ steps.filter.outputs.shared_filter }}
27+ embodied_filter : ${{ steps.filter.outputs.embodied_filter }}
28+ agent_reason_filter : ${{ steps.filter.outputs.agent_reason_filter }}
29+ unit_test_filter : ${{ steps.filter.outputs.unit_test_filter }}
30+ scheduler_test_filter : ${{ steps.filter.outputs.scheduler_test_filter }}
31+
32+ checked_files_filter : ${{ steps.filter.outputs.checked_files_filter }}
33+ all_changes_filter : ${{ steps.filter.outputs.all_changes }}
34+ checked_files_filter_files : ${{ steps.filter.outputs.checked_files_filter_files }}
35+ all_changes_filter_files : ${{ steps.filter.outputs.all_changes_filter_files }}
36+
2737 steps :
2838 - name : Checkout code
2939 uses : actions/checkout@v4
@@ -44,20 +54,113 @@ jobs:
4454 id : filter
4555 uses : dorny/paths-filter@v3
4656 with :
57+ list-files : json
4758 filters : |
48- file_filter:
49- - '**/*.py'
50- - 'tests/**'
51- - '.github/workflows/*tests.yml'
52- - '*.yaml'
53- install_filter:
59+ install_filter: &install
5460 - 'pyproject.toml'
5561 - 'requirements/*.sh'
5662 - 'requirements/*.txt'
5763 - '.github/workflows/install.yml'
58- docker_filter:
59- - 'docker/torch*/**'
64+ docker_filter: &docker
65+ - *install
66+ - 'docker/**'
6067 - '.github/workflows/docker-build.yml'
68+ shared_filter: &shared
69+ - *install
70+ - 'rlinf/scheduler/**'
71+ - 'rlinf/utils/**'
72+ - 'rlinf/workers/**'
73+ - 'rlinf/hybrid_engines/**'
74+ - 'rlinf/config.py'
75+ - 'rlinf/__init__.py'
76+ - 'rlinf/*/__init__.py'
77+ - 'toolkits/**'
78+ - '.github/workflows/ci-tests.yml'
79+ embodied_filter: &embodied
80+ - *shared
81+ - 'rlinf/envs/**'
82+ - 'rlinf/models/embodiment/**'
83+ - 'rlinf/models/worldmodel/**'
84+ - 'rlinf/runners/embodied_*.py'
85+ - 'examples/embodiment/**'
86+ - 'tests/e2e_tests/embodied/**'
87+ - '.github/workflows/embodied-e2e-tests.yml'
88+ agent_reason_filter: &agent
89+ - *shared
90+ - 'rlinf/agents/**'
91+ - 'rlinf/runners/agent_runner.py'
92+ - 'rlinf/runners/reasoning_runner.py'
93+ - 'rlinf/runners/coding_online_rl_runner.py'
94+ - 'examples/coding_online_rl/**'
95+ - 'examples/multiturn_demo/**'
96+ - 'examples/reasoning/**'
97+ - 'tests/e2e_tests/agent/**'
98+ - 'tests/e2e_tests/coding_online_rl/**'
99+ - 'tests/e2e_tests/reasoning/**'
100+ - '.github/workflows/agent-e2e-tests.yml'
101+ unit_test_filter: &unit
102+ - *shared
103+ - 'tests/unit_tests/**'
104+ - '.github/workflows/unit-tests.yml'
105+ scheduler_test_filter: &scheduler
106+ - *shared
107+ - *embodied
108+ - *agent
109+ - 'tests/e2e_tests/auto_placement/**'
110+ - 'tests/e2e_tests/dynamic_scheduler/**'
111+ - '.github/workflows/scheduler-tests.yml'
112+ checked_files_filter:
113+ - *install
114+ - *docker
115+ - *shared
116+ - *embodied
117+ - *agent
118+ - *unit
119+ - *scheduler
120+ all_changes_filter:
121+ - *install
122+ - *docker
123+ - '**/*.py'
124+ - 'tests/**'
125+ - '.github/workflows/*tests.yml'
126+ - '*.yaml'
127+
128+ # =============================================== filter coverage test ============================================
129+
130+ filter-coverage-test :
131+ needs : [check-changes]
132+ runs-on : ubuntu-latest
133+ steps :
134+ - name : Print files not covered by any CI filter
135+ run : |
136+ set -euo pipefail
137+
138+ json_input=$(cat << 'EOF'
139+ {
140+ "all": ${{ needs.check-changes.outputs.all_changes_filter_files }},
141+ "checked": ${{ needs.check-changes.outputs.checked_files_filter_files }}
142+ }
143+ EOF
144+ )
145+
146+ missing=$(echo "$json_input" | jq -r '
147+ def to_set:
148+ reduce .[] as $x ({}; .[$x] = true);
149+
150+ .all as $all
151+ | (.checked // []) as $chk
152+ | $chk | to_set as $covered
153+ | [
154+ $all[]
155+ | select((. as $p | ($covered[$p] // false)) | not)
156+ ]
157+ ')
158+
159+ if [ "$missing" != "[]" ]; then
160+ echo "The following changed files are not covered by any CI filter:" >&2
161+ echo "$missing" | jq -r '.[]' >&2
162+ exit 1
163+ fi
61164
62165
63166 # =============================================== install tests ====================================================
@@ -71,42 +174,43 @@ jobs:
71174
72175 docker-tests :
73176 needs : [check-changes]
74- if : needs.check-changes.outputs.docker_filter == 'true' || needs.check-changes.outputs.install_filter == 'true'
177+ if : needs.check-changes.outputs.docker_filter == 'true'
75178 uses : ./.github/workflows/docker-build.yml
76179
77180 # =============================================== unit tests ====================================================
78181
79182 unit-tests :
80183 needs : [check-changes]
81- if : needs.check-changes.outputs.file_filter == 'true' || needs.check-changes.outputs.install_filter == 'true'
184+ if : needs.check-changes.outputs.unit_test_filter == 'true'
82185 uses : ./.github/workflows/unit-tests.yml
83186
84187 # =============================================== agent e2e tests ====================================================
85188
86189 agent-reason-e2e-tests :
87190 needs : [check-changes]
88- if : needs.check-changes.outputs.file_filter == 'true' || needs.check-changes.outputs.install_filter == 'true'
191+ if : needs.check-changes.outputs.agent_reason_filter == 'true'
89192 uses : ./.github/workflows/agent-e2e-tests.yml
90193
91194 # =============================================== embodied e2e tests ====================================================
92195
93196 embodied-e2e-tests :
94197 needs : [check-changes]
95- if : needs.check-changes.outputs.file_filter == 'true' || needs.check-changes.outputs.install_filter == 'true'
198+ if : needs.check-changes.outputs.embodied_filter == 'true'
96199 uses : ./.github/workflows/embodied-e2e-tests.yml
97200
98201 # =============================================== scheduler tests ====================================================
99202
100203 scheduler-tests :
101204 needs : [check-changes]
102- if : needs.check-changes.outputs.file_filter == 'true' || needs.check-changes.outputs.install_filter == 'true'
205+ if : needs.check-changes.outputs.scheduler_test_filter == 'true'
103206 uses : ./.github/workflows/scheduler-tests.yml
104207
105208 # =============================================== finale ====================================================
106209
107210 ci-test-finish :
108211 needs : [
109212 check-changes,
213+ filter-coverage-test,
110214 install-tests,
111215 docker-tests,
112216 unit-tests,
0 commit comments