Skip to content

Commit 1f31e70

Browse files
bolenscursoragent
andcommitted
ci(test): split shards that hit the 90m job timeout
Keep PerFile batches ~8–12 files and separate serial bootstrap/main so wall clock stays under the job limit without raising it. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent c514850 commit 1f31e70

3 files changed

Lines changed: 57 additions & 20 deletions

File tree

scripts/utils/code-quality/modules/PesterCiShardFilter.psm1

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@ function Get-PesterCiFilterRules {
1818
$unitProfileCoreShards = @(
1919
'unit-profile-core-lang'
2020
'unit-profile-core-files'
21-
'unit-profile-core-boot-main'
21+
'unit-profile-core-bootstrap'
22+
'unit-profile-core-main'
2223
'unit-profile-core-git-util-sys'
2324
)
2425
$integrationToolsShards = @(
25-
'integration-tools-a'
26-
'integration-tools-e'
26+
'integration-tools-ab'
27+
'integration-tools-c'
28+
'integration-tools-d'
29+
'integration-tools-eh'
30+
'integration-tools-il'
2731
'integration-tools-m'
2832
'integration-tools-s'
2933
)
@@ -33,12 +37,14 @@ function Get-PesterCiFilterRules {
3337
'performance-profile-b'
3438
)
3539
$conversionDocumentShards = @(
36-
'conversion-document-markdown'
40+
'conversion-document-markdown-core'
41+
'conversion-document-markdown-extra'
3742
'conversion-document-other'
3843
)
3944
$conversionStructuredShards = @(
4045
'conversion-data-structured-a'
41-
'conversion-data-structured-b'
46+
'conversion-data-structured-n'
47+
'conversion-data-structured-t'
4248
)
4349

4450
return [ordered]@{
@@ -219,13 +225,15 @@ function Get-PesterCiAllShards {
219225
'unit-library', 'unit-utility', 'unit-test-runner', 'unit-support'
220226
'unit-profile-conversion'
221227
'unit-profile-core-lang', 'unit-profile-core-files'
222-
'unit-profile-core-boot-main', 'unit-profile-core-git-util-sys'
228+
'unit-profile-core-bootstrap', 'unit-profile-core-main', 'unit-profile-core-git-util-sys'
223229
'unit-profile-infra'
224230
'unit-profile-misc-a', 'unit-profile-misc-b'
225-
'integration-tools-a', 'integration-tools-e', 'integration-tools-m', 'integration-tools-s'
231+
'integration-tools-ab', 'integration-tools-c', 'integration-tools-d'
232+
'integration-tools-eh', 'integration-tools-il', 'integration-tools-m', 'integration-tools-s'
226233
'integration-core'
227-
'conversion-document-markdown', 'conversion-document-other', 'conversion-media'
228-
'conversion-data-structured-a', 'conversion-data-structured-b'
234+
'conversion-document-markdown-core', 'conversion-document-markdown-extra'
235+
'conversion-document-other', 'conversion-media'
236+
'conversion-data-structured-a', 'conversion-data-structured-n', 'conversion-data-structured-t'
229237
'conversion-data-units', 'conversion-data-encoding'
230238
'conversion-data-binary', 'conversion-data-compression', 'conversion-data-scientific'
231239
'conversion-data-misc'
@@ -242,8 +250,9 @@ function Get-PesterCiWindowsShards {
242250
return @(
243251
'unit-library'
244252
'unit-profile-core-lang', 'unit-profile-core-files'
245-
'unit-profile-core-boot-main', 'unit-profile-core-git-util-sys'
246-
'integration-tools-a', 'integration-tools-e', 'integration-tools-m', 'integration-tools-s'
253+
'unit-profile-core-bootstrap', 'unit-profile-core-main', 'unit-profile-core-git-util-sys'
254+
'integration-tools-ab', 'integration-tools-c', 'integration-tools-d'
255+
'integration-tools-eh', 'integration-tools-il', 'integration-tools-m', 'integration-tools-s'
247256
'integration-core'
248257
'performance-lang-core', 'performance-profile-a', 'performance-profile-b'
249258
)

scripts/utils/code-quality/run-pester-ci-shard.ps1

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,21 +131,32 @@ function Get-PesterCiShardDefinitions {
131131
'unit-profile-conversion' = @{ Kind = 'Pester'; Suite = 'Unit'; Paths = @('tests/unit/profile/conversion') }
132132
'unit-profile-core-lang' = @{ Kind = 'Pester'; Suite = 'Unit'; Paths = @('tests/unit/profile/lang'); MaxParallelThreads = 1 }
133133
'unit-profile-core-files' = @{ Kind = 'Pester'; Suite = 'Unit'; Paths = @('tests/unit/profile/files'); MaxParallelThreads = 1 }
134-
'unit-profile-core-boot-main' = @{ Kind = 'Pester'; Suite = 'Unit'; Paths = @('tests/unit/profile/bootstrap', 'tests/unit/profile/main'); MaxParallelThreads = 1 }
134+
# bootstrap/main stay serial (shared globals) but are separate jobs so neither
135+
# alone approaches the 90m job timeout (~20–40 files each).
136+
'unit-profile-core-bootstrap' = @{ Kind = 'Pester'; Suite = 'Unit'; Paths = @('tests/unit/profile/bootstrap'); MaxParallelThreads = 1 }
137+
'unit-profile-core-main' = @{ Kind = 'Pester'; Suite = 'Unit'; Paths = @('tests/unit/profile/main'); MaxParallelThreads = 1 }
135138
'unit-profile-core-git-util-sys' = @{ Kind = 'Pester'; Suite = 'Unit'; Paths = @('tests/unit/profile/git', 'tests/unit/profile/utilities', 'tests/unit/profile/system'); MaxParallelThreads = 1 }
136139
'unit-profile-infra' = @{ Kind = 'Pester'; Suite = 'Unit'; Paths = $unitProfileInfra; MaxParallelThreads = 1 }
137140
'unit-profile-misc-a' = @{ Kind = 'Pester'; Suite = 'Unit'; Paths = $miscA; MaxParallelThreads = 1 }
138141
'unit-profile-misc-b' = @{ Kind = 'Pester'; Suite = 'Unit'; Paths = $miscB; MaxParallelThreads = 1 }
139-
'integration-tools-a' = @{ Kind = 'ToolsBatch'; NamePattern = '^[0-9a-d]' }
140-
'integration-tools-e' = @{ Kind = 'ToolsBatch'; NamePattern = '^[e-l]' }
142+
# tools-a (28 PerFile jobs) timed out at 90m; keep letter buckets ~8–12 files.
143+
'integration-tools-ab' = @{ Kind = 'ToolsBatch'; NamePattern = '^[0-9a-b]' }
144+
'integration-tools-c' = @{ Kind = 'ToolsBatch'; NamePattern = '^c' }
145+
'integration-tools-d' = @{ Kind = 'ToolsBatch'; NamePattern = '^d' }
146+
# tools-e (e-l) was ~24 PerFile jobs — near the size that timed out at 90m.
147+
'integration-tools-eh' = @{ Kind = 'ToolsBatch'; NamePattern = '^[e-h]' }
148+
'integration-tools-il' = @{ Kind = 'ToolsBatch'; NamePattern = '^[i-l]' }
141149
'integration-tools-m' = @{ Kind = 'ToolsBatch'; NamePattern = '^[m-r]' }
142150
'integration-tools-s' = @{ Kind = 'ToolsBatch'; NamePattern = '^[s-z]' }
143151
'integration-core' = @{ Kind = 'Pester'; Suite = 'Integration'; Paths = $integrationCore }
144-
'conversion-document-markdown' = @{ Kind = 'ConversionBatch'; Paths = @('document'); NamePattern = '^markdown' }
152+
# markdown shard is only 3 files but each is heavy under PerFile; split core vs extras.
153+
'conversion-document-markdown-core' = @{ Kind = 'ConversionBatch'; Paths = @('document'); NamePattern = '^markdown\.tests' }
154+
'conversion-document-markdown-extra' = @{ Kind = 'ConversionBatch'; Paths = @('document'); NamePattern = '^markdown-' }
145155
'conversion-document-other' = @{ Kind = 'ConversionBatch'; Paths = @('document'); NamePattern = '^(?!markdown)' }
146156
'conversion-media' = @{ Kind = 'ConversionAllBatch'; Paths = $convMedia }
147157
'conversion-data-structured-a' = @{ Kind = 'ConversionBatch'; Paths = @('data/structured'); NamePattern = '^[a-m]' }
148-
'conversion-data-structured-b' = @{ Kind = 'ConversionBatch'; Paths = @('data/structured'); NamePattern = '^[n-z]' }
158+
'conversion-data-structured-n' = @{ Kind = 'ConversionBatch'; Paths = @('data/structured'); NamePattern = '^[n-s]' }
159+
'conversion-data-structured-t' = @{ Kind = 'ConversionBatch'; Paths = @('data/structured'); NamePattern = '^[t-z]' }
149160
'conversion-data-units' = @{ Kind = 'ConversionBatch'; Paths = @('data/units') }
150161
'conversion-data-encoding' = @{ Kind = 'ConversionBatch'; Paths = @('data/encoding') }
151162
'conversion-data-binary' = @{ Kind = 'ConversionAllBatch'; Paths = @('data/binary', 'data/binary-to-text') }

tests/unit/test-runner/ci/test-runner-pester-ci-shard-filter.tests.ps1

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ Describe 'PesterCiShardFilter' {
1212

1313
It 'Maps conversion module changes to conversion shards' {
1414
$shards = Resolve-PesterCiShards -ChangedFiles @('profile.d/conversion-modules/data/core/csv.ps1')
15-
$shards | Should -Contain 'conversion-document-markdown'
15+
$shards | Should -Contain 'conversion-document-markdown-core'
16+
$shards | Should -Contain 'conversion-document-markdown-extra'
1617
$shards | Should -Contain 'conversion-document-other'
1718
$shards | Should -Contain 'conversion-data-structured-a'
18-
$shards | Should -Contain 'conversion-data-structured-b'
19+
$shards | Should -Contain 'conversion-data-structured-n'
20+
$shards | Should -Contain 'conversion-data-structured-t'
1921
$shards | Should -Contain 'conversion-media'
2022
$shards | Should -Contain 'unit-profile-conversion'
2123
$shards | Should -Not -Contain 'unit-library'
@@ -36,11 +38,16 @@ Describe 'PesterCiShardFilter' {
3638

3739
It 'Maps tools integration changes to all tools letter shards' {
3840
$shards = Resolve-PesterCiShards -ChangedFiles @('tests/integration/tools/git.tests.ps1')
39-
$shards | Should -Contain 'integration-tools-a'
40-
$shards | Should -Contain 'integration-tools-e'
41+
$shards | Should -Contain 'integration-tools-ab'
42+
$shards | Should -Contain 'integration-tools-c'
43+
$shards | Should -Contain 'integration-tools-d'
44+
$shards | Should -Contain 'integration-tools-eh'
45+
$shards | Should -Contain 'integration-tools-il'
4146
$shards | Should -Contain 'integration-tools-m'
4247
$shards | Should -Contain 'integration-tools-s'
4348
$shards | Should -Not -Contain 'integration-tools'
49+
$shards | Should -Not -Contain 'integration-tools-a'
50+
$shards | Should -Not -Contain 'integration-tools-e'
4451
}
4552

4653
It 'Enables full suite for CI contract changes' {
@@ -66,9 +73,19 @@ Describe 'PesterCiShardFilter' {
6673
It 'Does not expose retired fat shard names in the full set' {
6774
$all = Get-PesterCiAllShards
6875
$all | Should -Not -Contain 'integration-tools'
76+
$all | Should -Not -Contain 'integration-tools-a'
77+
$all | Should -Not -Contain 'integration-tools-e'
6978
$all | Should -Not -Contain 'unit-profile-core'
79+
$all | Should -Not -Contain 'unit-profile-core-boot-main'
7080
$all | Should -Not -Contain 'conversion-document'
81+
$all | Should -Not -Contain 'conversion-document-markdown'
7182
$all | Should -Not -Contain 'conversion-data-structured'
83+
$all | Should -Not -Contain 'conversion-data-structured-b'
7284
$all | Should -Not -Contain 'performance'
85+
$all | Should -Contain 'unit-profile-core-bootstrap'
86+
$all | Should -Contain 'unit-profile-core-main'
87+
$all | Should -Contain 'integration-tools-eh'
88+
$all | Should -Contain 'conversion-document-markdown-core'
89+
$all | Should -Contain 'conversion-data-structured-n'
7390
}
7491
}

0 commit comments

Comments
 (0)