Skip to content

Commit 4b4fb20

Browse files
Add separate code/docs important change patterns
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent 32aebf0 commit 4b4fb20

5 files changed

Lines changed: 100 additions & 45 deletions

File tree

.github/actions/Get-PSModuleSettings/action.yml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,12 @@ inputs:
3333
default: ${{ github.workspace }}
3434
ImportantFilePatterns:
3535
description: |
36-
Newline-separated list of regex patterns that identify module-impacting files.
37-
Changes matching these patterns trigger module build, test, and release stages.
38-
Docs/site orchestration also includes documentation/layout defaults.
39-
When set, fully replaces the defaults.
36+
Newline-separated list of regex patterns for module-impacting/code changes.
37+
This input configures the Code pattern list only.
38+
Docs patterns are configured in settings via ImportantFilePatterns.Docs.
4039
required: false
4140
default: |
42-
^src/
43-
^README\.md$
41+
^src/(?!.*\.md$).*
4442
4543
outputs:
4644
Settings:

.github/actions/Get-PSModuleSettings/src/Settings.schema.json

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,20 @@
1010
"description": "The name of the module"
1111
},
1212
"ImportantFilePatterns": {
13-
"type": "array",
14-
"description": "Regex patterns that identify module-impacting files. Changes matching these patterns trigger module build, test, and release stages. Docs/site orchestration adds documentation/layout defaults on top of these patterns. Defaults to ['^src/', '^README\\.md$'] when not configured.",
15-
"items": {
16-
"type": "string",
17-
"minLength": 1
18-
}
13+
"description": "Patterns that classify important code/docs changes for orchestration.",
14+
"oneOf": [
15+
{
16+
"type": "array",
17+
"description": "Backward-compatible format. Treated as code patterns.",
18+
"items": {
19+
"type": "string",
20+
"minLength": 1
21+
}
22+
},
23+
{
24+
"$ref": "#/definitions/importantFilePatternGroups"
25+
}
26+
]
1927
},
2028
"Test": {
2129
"type": "object",
@@ -347,6 +355,29 @@
347355
"TestPath",
348356
"TestName"
349357
]
358+
},
359+
"importantFilePatternGroups": {
360+
"type": "object",
361+
"description": "Pattern groups used by the orchestrator.",
362+
"properties": {
363+
"Code": {
364+
"type": "array",
365+
"description": "Regex patterns for module-impacting/code changes.",
366+
"items": {
367+
"type": "string",
368+
"minLength": 1
369+
}
370+
},
371+
"Docs": {
372+
"type": "array",
373+
"description": "Regex patterns for docs/layout/config changes.",
374+
"items": {
375+
"type": "string",
376+
"minLength": 1
377+
}
378+
}
379+
},
380+
"additionalProperties": false
350381
}
351382
}
352383
}

.github/actions/Get-PSModuleSettings/src/main.ps1

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -91,20 +91,49 @@ LogGroup 'Name' {
9191
}
9292

9393
LogGroup 'ImportantFilePatterns' {
94-
$defaultImportantFilePatterns = @('^src/', '^README\.md$')
94+
$defaultCodePatterns = @(
95+
'^src/(?!.*\.md$).*'
96+
)
97+
$defaultDocsPatterns = @(
98+
'^README\.md$',
99+
'^src/.*\.md$',
100+
'^docs/',
101+
'^\.github/zensical\.toml$',
102+
'^zensical\.toml$',
103+
'^mkdocs\.yml$',
104+
'^docs\.(ya?ml|json|toml)$'
105+
)
106+
95107
if ($null -ne $settings.ImportantFilePatterns) {
96-
$importantFilePatterns = @($settings.ImportantFilePatterns)
97-
Write-Host "Using ImportantFilePatterns from settings file: [$($importantFilePatterns -join ', ')]"
108+
$configuredCodePatterns = @($settings.ImportantFilePatterns.Code | Where-Object { -not [string]::IsNullOrWhiteSpace($_) })
109+
$configuredDocsPatterns = @($settings.ImportantFilePatterns.Docs | Where-Object { -not [string]::IsNullOrWhiteSpace($_) })
110+
if (($configuredCodePatterns.Count -gt 0) -or ($configuredDocsPatterns.Count -gt 0)) {
111+
$codeFilePatterns = if ($configuredCodePatterns.Count -gt 0) { $configuredCodePatterns } else { $defaultCodePatterns }
112+
$docsFilePatterns = if ($configuredDocsPatterns.Count -gt 0) { $configuredDocsPatterns } else { $defaultDocsPatterns }
113+
Write-Host "Using code patterns from ImportantFilePatterns.Code: [$($codeFilePatterns -join ', ')]"
114+
Write-Host "Using docs patterns from ImportantFilePatterns.Docs: [$($docsFilePatterns -join ', ')]"
115+
} else {
116+
# Backward-compatible format: array is treated as code patterns.
117+
$codeFilePatterns = @($settings.ImportantFilePatterns)
118+
$docsFilePatterns = $defaultDocsPatterns
119+
Write-Host "Using code patterns from legacy ImportantFilePatterns array: [$($codeFilePatterns -join ', ')]"
120+
Write-Host "Using default docs patterns: [$($docsFilePatterns -join ', ')]"
121+
}
98122
} elseif (-not [string]::IsNullOrWhiteSpace($importantFilePatternsInput)) {
99-
$importantFilePatterns = @($importantFilePatternsInput -split "`n" | ForEach-Object { $_.Trim() } | Where-Object { $_ })
100-
Write-Host "Using ImportantFilePatterns from action input: [$($importantFilePatterns -join ', ')]"
123+
# Action input remains code-focused for backward compatibility.
124+
$codeFilePatterns = @($importantFilePatternsInput -split "`n" | ForEach-Object { $_.Trim() } | Where-Object { $_ })
125+
$docsFilePatterns = $defaultDocsPatterns
126+
Write-Host "Using code patterns from action input: [$($codeFilePatterns -join ', ')]"
127+
Write-Host "Using default docs patterns: [$($docsFilePatterns -join ', ')]"
101128
} else {
102-
$importantFilePatterns = $defaultImportantFilePatterns
103-
Write-Host "Using default ImportantFilePatterns: [$($importantFilePatterns -join ', ')]"
129+
$codeFilePatterns = $defaultCodePatterns
130+
$docsFilePatterns = $defaultDocsPatterns
131+
Write-Host "Using default code patterns: [$($codeFilePatterns -join ', ')]"
132+
Write-Host "Using default docs patterns: [$($docsFilePatterns -join ', ')]"
104133
}
105134

106-
# Validate that all patterns are valid regular expressions
107-
foreach ($pattern in $importantFilePatterns) {
135+
# Validate that all patterns are valid regular expressions.
136+
foreach ($pattern in @($codeFilePatterns + $docsFilePatterns | Select-Object -Unique)) {
108137
try {
109138
[void][regex]::new($pattern)
110139
} catch {
@@ -115,7 +144,10 @@ LogGroup 'ImportantFilePatterns' {
115144

116145
$settings = [pscustomobject]@{
117146
Name = $name
118-
ImportantFilePatterns = $importantFilePatterns
147+
ImportantFilePatterns = [pscustomobject]@{
148+
Code = $codeFilePatterns
149+
Docs = $docsFilePatterns
150+
}
119151
Test = [pscustomobject]@{
120152
Skip = $settings.Test.Skip ?? $false
121153
Linux = [pscustomobject]@{
@@ -256,19 +288,12 @@ LogGroup 'Calculate Job Run Conditions:' {
256288
$isOpenOrLabeledPR = $isPR -and $pullRequestAction -in @('opened', 'reopened', 'synchronize', 'labeled')
257289

258290
# Classify changed files for orchestration decisions.
259-
# Module-impacting files come from ImportantFilePatterns.
260-
# Docs-impacting files include module-impacting files plus docs/layout/config defaults.
291+
# Module-impacting files come from ImportantFilePatterns.Code.
292+
# Docs-impacting files come from ImportantFilePatterns.Docs and always include module changes.
261293
$hasModuleChanges = $false
262294
$hasDocsChanges = $false
263-
$modulePatterns = $settings.ImportantFilePatterns
264-
$docsOnlyPatterns = @(
265-
'^docs/',
266-
'^\.github/zensical\.toml$',
267-
'^zensical\.toml$',
268-
'^mkdocs\.yml$',
269-
'^docs\.(ya?ml|json|toml)$'
270-
)
271-
$docsPatterns = @($modulePatterns + $docsOnlyPatterns | Select-Object -Unique)
295+
$modulePatterns = @($settings.ImportantFilePatterns.Code)
296+
$docsPatterns = @($settings.ImportantFilePatterns.Docs)
272297

273298
if ($isPR -and $pullRequest.Number) {
274299
LogGroup 'Classify Changed Files' {
@@ -305,6 +330,11 @@ LogGroup 'Calculate Job Run Conditions:' {
305330
if ($hasModuleChanges -and $hasDocsChanges) { break }
306331
}
307332

333+
# Source-code changes are docs-impacting because generated docs depend on code.
334+
if ($hasModuleChanges) {
335+
$hasDocsChanges = $true
336+
}
337+
308338
if ($hasModuleChanges) {
309339
Write-Host '✓ Module-impacting files have changed - module build/test/release stages will run'
310340
} else {

.github/workflows/Plan.yml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,12 @@ on:
4242
ImportantFilePatterns:
4343
type: string
4444
description: |
45-
Newline-separated list of regex patterns that identify module-impacting files.
46-
Changes matching these patterns trigger module build, test, and release stages.
47-
Docs/site orchestration also includes documentation/layout defaults.
48-
When set, fully replaces the defaults (^src/ and ^README\.md$).
45+
Newline-separated list of regex patterns for module-impacting/code changes.
46+
This input configures the Code pattern list only.
47+
Docs patterns are configured in .github/PSModule.yml via ImportantFilePatterns.Docs.
4948
required: false
5049
default: |
51-
^src/
52-
^README\.md$
50+
^src/(?!.*\.md$).*
5351
5452
outputs:
5553
Settings:

.github/workflows/workflow.yml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,12 @@ on:
5454
ImportantFilePatterns:
5555
type: string
5656
description: |
57-
Newline-separated list of regex patterns that identify module-impacting files.
58-
Changes matching these patterns trigger module build, test, and release stages.
59-
Docs/site orchestration also includes documentation/layout defaults.
60-
When set, fully replaces the defaults (^src/ and ^README\.md$).
57+
Newline-separated list of regex patterns for module-impacting/code changes.
58+
This input configures the Code pattern list only.
59+
Docs patterns are configured in .github/PSModule.yml via ImportantFilePatterns.Docs.
6160
required: false
6261
default: |
63-
^src/
64-
^README\.md$
62+
^src/(?!.*\.md$).*
6563
6664
permissions:
6765
contents: write # to checkout the repo and create releases on the repo

0 commit comments

Comments
 (0)