@@ -91,20 +91,49 @@ LogGroup 'Name' {
9191}
9292
9393LogGroup ' 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 {
0 commit comments