Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 2 additions & 105 deletions .github/actions/Get-PSModuleSettings/src/Settings.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -220,51 +220,6 @@
}
}
},
"TestSuites": {
"type": "object",
"description": "Test suite configurations",
"properties": {
"SourceCode": {
"oneOf": [
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/testSuite"
}
}
]
},
"PSModule": {
"oneOf": [
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/testSuite"
}
}
]
},
"Module": {
"oneOf": [
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/moduleTestSuite"
}
}
]
}
}
},
"SettingsPath": {
"type": "string",
"description": "Path to the settings file"
Expand Down Expand Up @@ -306,66 +261,8 @@
"description": "Indicates if important files have changed in the PR (src/**, examples/**, README.md, .github/workflows/Process-PSModule.yml)"
},
"Run": {
"type": "object",
"description": "Runtime execution flags",
"properties": {
"LintRepository": {
"type": "boolean",
"description": "Run repository linting"
},
"BuildModule": {
"type": "boolean",
"description": "Build the module"
},
"TestSourceCode": {
"type": "boolean",
"description": "Test source code"
},
"LintSourceCode": {
"type": "boolean",
"description": "Lint source code"
},
"TestModule": {
"type": "boolean",
"description": "Test the module"
},
"BeforeAllModuleLocal": {
"type": "boolean",
"description": "Run before all module local tests"
},
"TestModuleLocal": {
"type": "boolean",
"description": "Test module locally"
},
"AfterAllModuleLocal": {
"type": "boolean",
"description": "Run after all module local tests"
},
"GetTestResults": {
"type": "boolean",
"description": "Collect test results"
},
"GetCodeCoverage": {
"type": "boolean",
"description": "Collect code coverage"
},
"PublishModule": {
"type": "boolean",
"description": "Publish the module"
},
"BuildDocs": {
"type": "boolean",
"description": "Build documentation"
},
"BuildSite": {
"type": "boolean",
"description": "Build the site"
},
"PublishSite": {
"type": "boolean",
"description": "Publish the site"
}
}
"type": "null",
"description": "Deprecated. Runtime execution flags are now stored on each phase object."
}
},
"definitions": {
Expand Down
109 changes: 74 additions & 35 deletions .github/actions/Get-PSModuleSettings/src/main.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -375,13 +375,6 @@ if ($settings.Test.Skip) {
$sourceCodeTestSuites = $null
$psModuleTestSuites = $null
$moduleTestSuites = $null

# Add TestSuites to settings
$settings | Add-Member -MemberType NoteProperty -Name TestSuites -Value ([pscustomobject]@{
SourceCode = $null
PSModule = $null
Module = $null
})
} else {

# Define test configurations as an array of hashtables.
Expand Down Expand Up @@ -529,14 +522,13 @@ if ($settings.Test.Skip) {
$moduleTestSuites | Format-Table -AutoSize | Out-String
}

# Add TestSuites to settings
$settings | Add-Member -MemberType NoteProperty -Name TestSuites -Value ([pscustomobject]@{
SourceCode = $sourceCodeTestSuites
PSModule = $psModuleTestSuites
Module = $moduleTestSuites
})
}

# Keep test suites with each test phase that owns them.
$settings.Test.SourceCode | Add-Member -MemberType NoteProperty -Name Suites -Value $sourceCodeTestSuites -Force
$settings.Test.PSModule | Add-Member -MemberType NoteProperty -Name Suites -Value $psModuleTestSuites -Force
$settings.Test.Module | Add-Member -MemberType NoteProperty -Name Suites -Value $moduleTestSuites -Force

# Calculate job-specific conditions and add to settings
LogGroup 'Calculate Job Run Conditions:' {
# Calculate if prereleases should be cleaned up:
Expand Down Expand Up @@ -565,32 +557,79 @@ LogGroup 'Calculate Job Run Conditions:' {
Write-Host " tests/BeforeAll.ps1 exists: $hasBeforeAllScript"
Write-Host " tests/AfterAll.ps1 exists: $hasAfterAllScript"

# Create Run object with all job-specific conditions
$run = [pscustomobject]@{
LintRepository = $isOpenOrUpdatedPR -and (-not $settings.Linter.Skip)
BuildModule = $shouldRunBuildTest -and (-not $settings.Build.Module.Skip)
TestSourceCode = $shouldRunBuildTest -and ($null -ne $settings.TestSuites.SourceCode)
LintSourceCode = $shouldRunBuildTest -and ($null -ne $settings.TestSuites.SourceCode)
TestModule = $shouldRunBuildTest -and ($null -ne $settings.TestSuites.PSModule)
BeforeAllModuleLocal = $shouldRunBuildTest -and ($null -ne $settings.TestSuites.Module) -and $hasBeforeAllScript
TestModuleLocal = $shouldRunBuildTest -and ($null -ne $settings.TestSuites.Module)
AfterAllModuleLocal = $shouldRunBuildTest -and ($null -ne $settings.TestSuites.Module) -and $hasAfterAllScript
GetTestResults = $shouldRunBuildTest -and (-not $settings.Test.TestResults.Skip) -and (
($null -ne $settings.TestSuites.SourceCode) -or ($null -ne $settings.TestSuites.PSModule) -or ($null -ne $settings.TestSuites.Module)
$sourceCodeEnabled = $shouldRunBuildTest -and ($null -ne $settings.Test.SourceCode.Suites)
$psModuleEnabled = $shouldRunBuildTest -and ($null -ne $settings.Test.PSModule.Suites)
$moduleLocalEnabled = $shouldRunBuildTest -and ($null -ne $settings.Test.Module.Suites)
$beforeAllEnabled = $moduleLocalEnabled -and $hasBeforeAllScript
$afterAllEnabled = $moduleLocalEnabled -and $hasAfterAllScript

# Keep desired/computed execution state with each phase.
$settings.Linter | Add-Member -MemberType NoteProperty -Name Repository -Value ([pscustomobject]@{
Desired = -not $settings.Linter.Skip
Enabled = $isOpenOrUpdatedPR -and (-not $settings.Linter.Skip)
}) -Force
$settings.Linter | Add-Member -MemberType NoteProperty -Name SourceCode -Value ([pscustomobject]@{
Desired = -not $settings.Test.SourceCode.Skip
Enabled = $sourceCodeEnabled
}) -Force

$settings.Build.Module | Add-Member -MemberType NoteProperty -Name Desired -Value (-not $settings.Build.Module.Skip) -Force
$settings.Build.Module | Add-Member -MemberType NoteProperty -Name Enabled -Value (
$shouldRunBuildTest -and (-not $settings.Build.Module.Skip)
) -Force
$settings.Build.Docs | Add-Member -MemberType NoteProperty -Name Desired -Value (-not $settings.Build.Docs.Skip) -Force
$settings.Build.Docs | Add-Member -MemberType NoteProperty -Name Enabled -Value ($shouldRunBuildTest -and (-not $settings.Build.Docs.Skip)) -Force
$settings.Build.Site | Add-Member -MemberType NoteProperty -Name Desired -Value (-not $settings.Build.Site.Skip) -Force
$settings.Build.Site | Add-Member -MemberType NoteProperty -Name Enabled -Value ($shouldRunBuildTest -and (-not $settings.Build.Site.Skip)) -Force

$settings.Test.SourceCode | Add-Member -MemberType NoteProperty -Name Desired -Value (-not $settings.Test.SourceCode.Skip) -Force
$settings.Test.SourceCode | Add-Member -MemberType NoteProperty -Name Enabled -Value $sourceCodeEnabled -Force
$settings.Test.PSModule | Add-Member -MemberType NoteProperty -Name Desired -Value (-not $settings.Test.PSModule.Skip) -Force
$settings.Test.PSModule | Add-Member -MemberType NoteProperty -Name Enabled -Value $psModuleEnabled -Force
$settings.Test.Module | Add-Member -MemberType NoteProperty -Name Desired -Value (-not $settings.Test.Module.Skip) -Force
$settings.Test.Module | Add-Member -MemberType NoteProperty -Name BeforeAllEnabled -Value $beforeAllEnabled -Force
$settings.Test.Module | Add-Member -MemberType NoteProperty -Name MainEnabled -Value $moduleLocalEnabled -Force
$settings.Test.Module | Add-Member -MemberType NoteProperty -Name AfterAllEnabled -Value $afterAllEnabled -Force

$settings.Test.TestResults | Add-Member -MemberType NoteProperty -Name Desired -Value (-not $settings.Test.TestResults.Skip) -Force
$settings.Test.TestResults | Add-Member -MemberType NoteProperty -Name Enabled -Value (
$shouldRunBuildTest -and (-not $settings.Test.TestResults.Skip) -and (
($null -ne $settings.Test.SourceCode.Suites) -or ($null -ne $settings.Test.PSModule.Suites) -or ($null -ne $settings.Test.Module.Suites)
)
GetCodeCoverage = $shouldRunBuildTest -and (-not $settings.Test.CodeCoverage.Skip) -and (
($null -ne $settings.TestSuites.PSModule) -or ($null -ne $settings.TestSuites.Module)
) -Force
$settings.Test.CodeCoverage | Add-Member -MemberType NoteProperty -Name Desired -Value (-not $settings.Test.CodeCoverage.Skip) -Force
$settings.Test.CodeCoverage | Add-Member -MemberType NoteProperty -Name Enabled -Value (
$shouldRunBuildTest -and (-not $settings.Test.CodeCoverage.Skip) -and (
($null -ne $settings.Test.PSModule.Suites) -or ($null -ne $settings.Test.Module.Suites)
)
PublishModule = ($releaseType -ne 'None') -or $shouldAutoCleanup
BuildDocs = $shouldRunBuildTest -and (-not $settings.Build.Docs.Skip)
BuildSite = $shouldRunBuildTest -and (-not $settings.Build.Site.Skip)
PublishSite = $isMergedPR -and $isTargetDefaultBranch -and $hasImportantChanges
}
$settings | Add-Member -MemberType NoteProperty -Name Run -Value $run
) -Force

$settings.Publish.Module | Add-Member -MemberType NoteProperty -Name Desired -Value (($releaseType -ne 'None') -or $shouldAutoCleanup) -Force
$settings.Publish.Module | Add-Member -MemberType NoteProperty -Name Enabled -Value (($releaseType -ne 'None') -or $shouldAutoCleanup) -Force
$settings.Publish | Add-Member -MemberType NoteProperty -Name Site -Value ([pscustomobject]@{
Desired = $isMergedPR -and $isTargetDefaultBranch -and $hasImportantChanges
Enabled = $isMergedPR -and $isTargetDefaultBranch -and $hasImportantChanges
}) -Force

$settings | Add-Member -MemberType NoteProperty -Name HasImportantChanges -Value $hasImportantChanges

Write-Host 'Job Run Conditions:'
$run | Format-List | Out-String
Write-Host 'Phase execution state:'
[pscustomobject]@{
LintRepository = $settings.Linter.Repository.Enabled
BuildModule = $settings.Build.Module.Enabled
TestSourceCode = $settings.Test.SourceCode.Enabled
LintSourceCode = $settings.Linter.SourceCode.Enabled
TestModule = $settings.Test.PSModule.Enabled
BeforeAllModuleLocal = $settings.Test.Module.BeforeAllEnabled
TestModuleLocal = $settings.Test.Module.MainEnabled
AfterAllModuleLocal = $settings.Test.Module.AfterAllEnabled
GetTestResults = $settings.Test.TestResults.Enabled
GetCodeCoverage = $settings.Test.CodeCoverage.Enabled
PublishModule = $settings.Publish.Module.Enabled
BuildDocs = $settings.Build.Docs.Enabled
BuildSite = $settings.Build.Site.Enabled
PublishSite = $settings.Publish.Site.Enabled
} | Format-List | Out-String
}

LogGroup 'Final settings' {
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/Build-Module.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
uses: ./_wf/.github/actions/Build-PSModule
with:
Name: ${{ fromJson(inputs.Settings).Name }}
Version: ${{ fromJson(inputs.Settings).Module.Version != '' && fromJson(inputs.Settings).Module.Version || '999.0.0' }}
Prerelease: ${{ fromJson(inputs.Settings).Module.Prerelease }}
Version: ${{ fromJson(inputs.Settings).Publish.Module.Resolution.Version != '' && fromJson(inputs.Settings).Publish.Module.Resolution.Version || '999.0.0' }}
Prerelease: ${{ fromJson(inputs.Settings).Publish.Module.Resolution.Prerelease }}
ArtifactName: ${{ inputs.ArtifactName }}
WorkingDirectory: ${{ fromJson(inputs.Settings).WorkingDirectory }}
6 changes: 3 additions & 3 deletions .github/workflows/Get-TestResults.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ jobs:
uses: ./_wf/.github/actions/Get-PesterTestResults
id: Get-TestResults
with:
SourceCodeTestSuites: ${{ toJSON(fromJson(inputs.Settings).TestSuites.SourceCode) }}
PSModuleTestSuites: ${{ toJSON(fromJson(inputs.Settings).TestSuites.PSModule) }}
ModuleTestSuites: ${{ toJSON(fromJson(inputs.Settings).TestSuites.Module) }}
SourceCodeTestSuites: ${{ toJSON(fromJson(inputs.Settings).Test.SourceCode.Suites) }}
PSModuleTestSuites: ${{ toJSON(fromJson(inputs.Settings).Test.PSModule.Suites) }}
ModuleTestSuites: ${{ toJSON(fromJson(inputs.Settings).Test.Module.Suites) }}
BeforeAllModuleLocalResult: ${{ inputs.BeforeAllModuleLocalResult }}
Debug: ${{ fromJson(inputs.Settings).Debug }}
Prerelease: ${{ fromJson(inputs.Settings).Prerelease }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/Lint-SourceCode.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(inputs.Settings).TestSuites.SourceCode }}
include: ${{ fromJson(inputs.Settings).Test.SourceCode.Suites }}
steps:
- name: Checkout Code
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/Plan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ name: Plan
# It runs two steps:
# 1. Get-PSModuleSettings - loads and resolves configuration
# 2. Resolve-PSModuleVersion - calculates the next version from settings + PR labels
# The resolved version is merged into the Settings object (Settings.Module.*) by the Enrich-Settings step.
# The resolved version is merged into the publish phase object (Settings.Publish.Module.Resolution.*) by the Enrich-Settings step.
# All downstream jobs receive one self-contained Settings JSON with no separate version outputs.

on:
Expand Down Expand Up @@ -118,12 +118,12 @@ jobs:
CREATE_RELEASE: ${{ steps.Resolve-Version.outputs.CreateRelease }}
run: |
$settings = $env:SETTINGS | ConvertFrom-Json
$settings | Add-Member -MemberType NoteProperty -Name Module -Value ([pscustomobject]@{
$settings.Publish.Module | Add-Member -MemberType NoteProperty -Name Resolution -Value ([pscustomobject]@{
Version = $env:VERSION
Prerelease = $env:PRERELEASE
FullVersion = $env:FULL_VERSION
ReleaseType = if ([string]::IsNullOrEmpty($env:RELEASE_TYPE)) { 'None' } else { $env:RELEASE_TYPE }
CreateRelease = $env:CREATE_RELEASE -eq 'true'
})
}) -Force
$enriched = $settings | ConvertTo-Json -Depth 10 -Compress
"Settings=$enriched" >> $env:GITHUB_OUTPUT
4 changes: 2 additions & 2 deletions .github/workflows/Test-Module.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(inputs.Settings).TestSuites.PSModule }}
include: ${{ fromJson(inputs.Settings).Test.PSModule.Suites }}
steps:
- name: Checkout repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
Expand Down Expand Up @@ -56,7 +56,7 @@ jobs:
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(inputs.Settings).TestSuites.PSModule }}
include: ${{ fromJson(inputs.Settings).Test.PSModule.Suites }}
steps:
- name: Checkout repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/Test-ModuleLocal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(inputs.Settings).TestSuites.Module }}
include: ${{ fromJson(inputs.Settings).Test.Module.Suites }}
steps:
- name: Checkout Code
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
Expand Down Expand Up @@ -88,4 +88,4 @@ jobs:
WorkingDirectory: ${{ fromJson(inputs.Settings).WorkingDirectory }}
Prescript: | # This is to speed up module loading in Pester.
Install-PSResource -Repository PSGallery -TrustRepository -Name PSCustomObject
Import-Module -Name '${{ steps.import-module.outputs.name }}' -RequiredVersion '${{ fromJson(inputs.Settings).Module.Version }}'
Import-Module -Name '${{ steps.import-module.outputs.name }}' -RequiredVersion '${{ fromJson(inputs.Settings).Publish.Module.Resolution.Version }}'
2 changes: 1 addition & 1 deletion .github/workflows/Test-SourceCode.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(inputs.Settings).TestSuites.SourceCode }}
include: ${{ fromJson(inputs.Settings).Test.SourceCode.Suites }}
steps:
- name: Checkout Code
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
Expand Down
Loading
Loading