Skip to content

Commit 922dd02

Browse files
Simplify CI configuration
Signed-off-by: Keval Morabia <28916987+kevalmorabia97@users.noreply.github.com>
1 parent 7ac1669 commit 922dd02

5 files changed

Lines changed: 150 additions & 188 deletions

File tree

.github/workflows/_pr_gate.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: PR Gate
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
files:
7+
description: "Newline-separated list of file patterns to watch for changes"
8+
required: true
9+
type: string
10+
outputs:
11+
any_changed:
12+
description: "Whether any relevant files changed"
13+
value: ${{ jobs.check-file-changes.outputs.any_changed }}
14+
15+
jobs:
16+
check-file-changes:
17+
if: startsWith(github.ref, 'refs/heads/pull-request/')
18+
runs-on: ubuntu-latest
19+
outputs:
20+
any_changed: ${{ steps.changed-tests.outputs.any_changed }}
21+
steps:
22+
- uses: actions/checkout@v6
23+
with:
24+
fetch-depth: 0
25+
- id: get-pr-info
26+
uses: nv-gha-runners/get-pr-info@main
27+
# Get commit from main branch that is present in the PR to use as base for changed files
28+
- id: calculate-merge-base
29+
env:
30+
PR_SHA: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).head.sha }}
31+
BASE_SHA: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).base.sha }}
32+
run: |
33+
(echo -n "merge-base="; git merge-base "$BASE_SHA" "$PR_SHA") | tee --append "${GITHUB_OUTPUT}"
34+
- name: Check for changes in test-relevant directories
35+
id: changed-tests
36+
uses: step-security/changed-files@v46.0.5
37+
with:
38+
base_sha: ${{ steps.calculate-merge-base.outputs.merge-base }}
39+
sha: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).head.sha }}
40+
files: ${{ inputs.files }}
41+
fail_on_initial_diff_error: true
42+
wait-checks:
43+
needs: [check-file-changes]
44+
if: needs.check-file-changes.outputs.any_changed == 'true'
45+
uses: ./.github/workflows/_wait_for_checks.yml
46+
permissions:
47+
checks: read
48+
secrets: inherit
49+
with:
50+
match_pattern: "^linux$" # Wait for Unit tests / linux (DCO is a prerequisite of linux)
51+
delay: 300s

.github/workflows/example_tests.yml

Lines changed: 19 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -16,52 +16,23 @@ concurrency:
1616
cancel-in-progress: true
1717

1818
jobs:
19-
check-file-changes:
20-
if: startsWith(github.ref, 'refs/heads/pull-request/')
21-
runs-on: ubuntu-latest
22-
outputs:
23-
any_changed: ${{ steps.changed-tests.outputs.any_changed }}
24-
steps:
25-
- uses: actions/checkout@v6
26-
with:
27-
fetch-depth: 0
28-
- id: get-pr-info
29-
uses: nv-gha-runners/get-pr-info@main
30-
# Get commit from main branch that is present in the PR to use as base for changed files
31-
- id: calculate-merge-base
32-
env:
33-
PR_SHA: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).head.sha }}
34-
BASE_SHA: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).base.sha }}
35-
run: |
36-
(echo -n "merge-base="; git merge-base "$BASE_SHA" "$PR_SHA") | tee --append "${GITHUB_OUTPUT}"
37-
- name: Check for changes in test-relevant directories
38-
id: changed-tests
39-
uses: step-security/changed-files@v46.0.5
40-
with:
41-
base_sha: ${{ steps.calculate-merge-base.outputs.merge-base }}
42-
sha: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).head.sha }}
43-
files: |
44-
.github/workflows/example_tests.yml
45-
examples/**
46-
modelopt/**
47-
pyproject.toml
48-
tests/examples/**
49-
fail_on_initial_diff_error: true
50-
wait-checks:
51-
needs: [check-file-changes]
52-
if: needs.check-file-changes.outputs.any_changed == 'true'
53-
uses: ./.github/workflows/_wait_for_checks.yml
19+
pr-gate:
20+
uses: ./.github/workflows/_pr_gate.yml
5421
permissions:
5522
checks: read
5623
secrets: inherit
5724
with:
58-
match_pattern: "^DCO$|^linux$" # Wait for DCO and Unit tests / linux to pass
59-
delay: 300s
25+
files: |
26+
.github/workflows/example_tests.yml
27+
examples/**
28+
modelopt/**
29+
pyproject.toml
30+
tests/examples/**
6031
6132
##### PyTorch Example Tests (speculative_decoding requires 26.01 image) #####
6233
torch-pr:
63-
needs: [check-file-changes, wait-checks]
64-
if: startsWith(github.ref, 'refs/heads/pull-request/') && needs.check-file-changes.outputs.any_changed == 'true'
34+
needs: [pr-gate]
35+
if: startsWith(github.ref, 'refs/heads/pull-request/') && needs.pr-gate.outputs.any_changed == 'true'
6536
strategy: &torch_strategy
6637
fail-fast: false
6738
matrix:
@@ -92,8 +63,8 @@ jobs:
9263

9364
##### TensorRT-LLM Example Tests #####
9465
trtllm-pr:
95-
needs: [check-file-changes, wait-checks]
96-
if: startsWith(github.ref, 'refs/heads/pull-request/') && needs.check-file-changes.outputs.any_changed == 'true'
66+
needs: [pr-gate]
67+
if: startsWith(github.ref, 'refs/heads/pull-request/') && needs.pr-gate.outputs.any_changed == 'true'
9768
strategy:
9869
fail-fast: false
9970
matrix:
@@ -122,8 +93,8 @@ jobs:
12293

12394
##### Megatron Example Tests #####
12495
megatron-pr:
125-
needs: [check-file-changes, wait-checks]
126-
if: startsWith(github.ref, 'refs/heads/pull-request/') && needs.check-file-changes.outputs.any_changed == 'true'
96+
needs: [pr-gate]
97+
if: startsWith(github.ref, 'refs/heads/pull-request/') && needs.pr-gate.outputs.any_changed == 'true'
12798
strategy: &nemo_strategy
12899
fail-fast: false
129100
matrix:
@@ -151,8 +122,8 @@ jobs:
151122

152123
##### ONNX/TensorRT Example Tests #####
153124
onnx-pr:
154-
needs: [check-file-changes, wait-checks]
155-
if: startsWith(github.ref, 'refs/heads/pull-request/') && needs.check-file-changes.outputs.any_changed == 'true'
125+
needs: [pr-gate]
126+
if: startsWith(github.ref, 'refs/heads/pull-request/') && needs.pr-gate.outputs.any_changed == 'true'
156127
strategy: &onnx_strategy
157128
fail-fast: false
158129
matrix:
@@ -180,13 +151,13 @@ jobs:
180151
example-pr-required-check:
181152
# Run even if example tests are skipped
182153
if: ${{ startsWith(github.ref, 'refs/heads/pull-request/') && always() }}
183-
needs: [check-file-changes, torch-pr, trtllm-pr, megatron-pr, onnx-pr]
154+
needs: [pr-gate, torch-pr, trtllm-pr, megatron-pr, onnx-pr]
184155
runs-on: ubuntu-latest
185156
steps:
186157
- name: Required GPU tests did not succeed
187158
if: |
188-
needs.check-file-changes.result != 'success' ||
189-
(needs.check-file-changes.outputs.any_changed == 'true' && (
159+
needs.pr-gate.result != 'success' ||
160+
(needs.pr-gate.outputs.any_changed == 'true' && (
190161
needs.torch-pr.result != 'success' ||
191162
needs.trtllm-pr.result != 'success' ||
192163
needs.megatron-pr.result != 'success' ||

.github/workflows/gpu_tests.yml

Lines changed: 14 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,52 +16,23 @@ concurrency:
1616
cancel-in-progress: true
1717

1818
jobs:
19-
check-file-changes:
20-
if: startsWith(github.ref, 'refs/heads/pull-request/')
21-
runs-on: ubuntu-latest
22-
outputs:
23-
any_changed: ${{ steps.changed-tests.outputs.any_changed }}
24-
steps:
25-
- uses: actions/checkout@v6
26-
with:
27-
fetch-depth: 0
28-
- id: get-pr-info
29-
uses: nv-gha-runners/get-pr-info@main
30-
# Get commit from main branch that is present in the PR to use as base for changed files
31-
- id: calculate-merge-base
32-
env:
33-
PR_SHA: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).head.sha }}
34-
BASE_SHA: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).base.sha }}
35-
run: |
36-
(echo -n "merge-base="; git merge-base "$BASE_SHA" "$PR_SHA") | tee --append "${GITHUB_OUTPUT}"
37-
- name: Check for changes in test-relevant directories
38-
id: changed-tests
39-
uses: step-security/changed-files@v46.0.5
40-
with:
41-
base_sha: ${{ steps.calculate-merge-base.outputs.merge-base }}
42-
sha: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).head.sha }}
43-
files: |
44-
.github/workflows/gpu_tests.yml
45-
modelopt/**
46-
noxfile.py
47-
pyproject.toml
48-
tests/gpu/**
49-
tests/gpu_megatron/**
50-
tests/gpu_trtllm/**
51-
fail_on_initial_diff_error: true
52-
wait-checks:
53-
needs: [check-file-changes]
54-
if: needs.check-file-changes.outputs.any_changed == 'true'
55-
uses: ./.github/workflows/_wait_for_checks.yml
19+
pr-gate:
20+
uses: ./.github/workflows/_pr_gate.yml
5621
permissions:
5722
checks: read
5823
secrets: inherit
5924
with:
60-
match_pattern: "^DCO$|^linux$" # Wait for DCO and Unit tests / linux to pass
61-
delay: 300s
25+
files: |
26+
.github/workflows/gpu_tests.yml
27+
modelopt/**
28+
noxfile.py
29+
pyproject.toml
30+
tests/gpu/**
31+
tests/gpu_megatron/**
32+
tests/gpu_trtllm/**
6233
gpu-tests-pr:
63-
needs: [check-file-changes, wait-checks]
64-
if: needs.check-file-changes.outputs.any_changed == 'true'
34+
needs: [pr-gate]
35+
if: needs.pr-gate.outputs.any_changed == 'true'
6536
strategy: &gpu_strategy
6637
fail-fast: false
6738
matrix:
@@ -114,9 +85,9 @@ jobs:
11485
gpu-pr-required-check:
11586
# Run even if gpu-tests-pr is skipped
11687
if: ${{ startsWith(github.ref, 'refs/heads/pull-request/') && always() }}
117-
needs: [check-file-changes, gpu-tests-pr]
88+
needs: [pr-gate, gpu-tests-pr]
11889
runs-on: ubuntu-latest
11990
steps:
12091
- name: Required GPU tests did not succeed
121-
if: ${{ needs.check-file-changes.result != 'success' || (needs.check-file-changes.outputs.any_changed == 'true' && needs.gpu-tests-pr.result != 'success') }}
92+
if: ${{ needs.pr-gate.result != 'success' || (needs.pr-gate.outputs.any_changed == 'true' && needs.gpu-tests-pr.result != 'success') }}
12293
run: exit 1

.github/workflows/regression_tests.yml

Lines changed: 17 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -16,54 +16,25 @@ concurrency:
1616
cancel-in-progress: true
1717

1818
jobs:
19-
check-file-changes:
20-
if: startsWith(github.ref, 'refs/heads/pull-request/')
21-
runs-on: ubuntu-latest
22-
outputs:
23-
any_changed: ${{ steps.changed-tests.outputs.any_changed }}
24-
steps:
25-
- uses: actions/checkout@v6
26-
with:
27-
fetch-depth: 0
28-
- id: get-pr-info
29-
uses: nv-gha-runners/get-pr-info@main
30-
# Get commit from main branch that is present in the PR to use as base for changed files
31-
- id: calculate-merge-base
32-
env:
33-
PR_SHA: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).head.sha }}
34-
BASE_SHA: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).base.sha }}
35-
run: |
36-
(echo -n "merge-base="; git merge-base "$BASE_SHA" "$PR_SHA") | tee --append "${GITHUB_OUTPUT}"
37-
- name: Check for changes in test-relevant directories
38-
id: changed-tests
39-
uses: step-security/changed-files@v46.0.5
40-
with:
41-
base_sha: ${{ steps.calculate-merge-base.outputs.merge-base }}
42-
sha: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).head.sha }}
43-
files: |
44-
.github/workflows/regression_tests.yml
45-
modelopt/torch/**
46-
noxfile.py
47-
pyproject.toml
48-
tests/regression/**
49-
examples/speculative_decoding/**
50-
examples/dataset/**
51-
modelopt_recipes/general/speculative_decoding/**
52-
tools/launcher/**
53-
fail_on_initial_diff_error: true
54-
wait-checks:
55-
needs: [check-file-changes]
56-
if: needs.check-file-changes.outputs.any_changed == 'true'
57-
uses: ./.github/workflows/_wait_for_checks.yml
19+
pr-gate:
20+
uses: ./.github/workflows/_pr_gate.yml
5821
permissions:
5922
checks: read
6023
secrets: inherit
6124
with:
62-
match_pattern: "^DCO$|^linux$" # Wait for DCO and Unit tests / linux to pass
63-
delay: 300s
25+
files: |
26+
.github/workflows/regression_tests.yml
27+
modelopt/torch/**
28+
noxfile.py
29+
pyproject.toml
30+
tests/regression/**
31+
examples/speculative_decoding/**
32+
examples/dataset/**
33+
modelopt_recipes/general/speculative_decoding/**
34+
tools/launcher/**
6435
regression-tests-pr:
65-
needs: [check-file-changes, wait-checks]
66-
if: needs.check-file-changes.outputs.any_changed == 'true'
36+
needs: [pr-gate]
37+
if: needs.pr-gate.outputs.any_changed == 'true'
6738
strategy: &regression_strategy
6839
fail-fast: false
6940
matrix:
@@ -110,11 +81,11 @@ jobs:
11081
regression-pr-required-check:
11182
# Run even if regression-tests-pr is skipped
11283
if: ${{ startsWith(github.ref, 'refs/heads/pull-request/') && always() }}
113-
needs: [check-file-changes, regression-tests-pr]
84+
needs: [pr-gate, regression-tests-pr]
11485
runs-on: ubuntu-latest
11586
steps:
11687
- name: Required regression tests did not succeed
11788
if: |
118-
needs.check-file-changes.result != 'success' ||
119-
(needs.check-file-changes.outputs.any_changed == 'true' && needs.regression-tests-pr.result != 'success')
89+
needs.pr-gate.result != 'success' ||
90+
(needs.pr-gate.outputs.any_changed == 'true' && needs.regression-tests-pr.result != 'success')
12091
run: exit 1

0 commit comments

Comments
 (0)