Merge branch 'main' of https://github.com/PSModule/Process-PSModule i… #6
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Process-PSModule | ||
|
Check failure on line 1 in .github/workflows/workflow.yml
|
||
| on: | ||
| workflow_call: | ||
| secrets: | ||
| APIKey: | ||
| description: The API key for the PowerShell Gallery. | ||
| required: true | ||
| TEST_APP_ENT_CLIENT_ID: | ||
| description: The client ID of an Enterprise GitHub App for running tests. | ||
| required: false | ||
| TEST_APP_ENT_PRIVATE_KEY: | ||
| description: The private key of an Enterprise GitHub App for running tests. | ||
| required: false | ||
| TEST_APP_ORG_CLIENT_ID: | ||
| description: The client ID of an Organization GitHub App for running tests. | ||
| required: false | ||
| TEST_APP_ORG_PRIVATE_KEY: | ||
| description: The private key of an Organization GitHub App for running tests. | ||
| required: false | ||
| TEST_USER_ORG_FG_PAT: | ||
| description: The fine-grained personal access token with org access for running tests. | ||
| required: false | ||
| TEST_USER_USER_FG_PAT: | ||
| description: The fine-grained personal access token with user account access for running tests. | ||
| required: false | ||
| TEST_USER_PAT: | ||
| description: The classic personal access token for running tests. | ||
| required: false | ||
| inputs: | ||
| Name: | ||
| type: string | ||
| description: The name of the module to process. Scripts default to the repository name if nothing is specified. | ||
| required: false | ||
| SettingsPath: | ||
| type: string | ||
| description: The path to the settings file. Settings in the settings file take precedence over the action inputs. | ||
| required: false | ||
| default: .github/PSModule.yml | ||
| Debug: | ||
| type: boolean | ||
| description: Enable debug output. | ||
| required: false | ||
| default: false | ||
| Verbose: | ||
| type: boolean | ||
| description: Enable verbose output. | ||
| required: false | ||
| default: false | ||
| Version: | ||
| type: string | ||
| description: Specifies the version of the GitHub module to be installed. The value must be an exact version. | ||
| required: false | ||
| default: '' | ||
| Prerelease: | ||
| type: boolean | ||
| description: Whether to use a prerelease version of the 'GitHub' module. | ||
| required: false | ||
| default: false | ||
| WorkingDirectory: | ||
| type: string | ||
| description: The path to the root of the repo. | ||
| required: false | ||
| default: '.' | ||
| permissions: | ||
| contents: write # to checkout the repo and create releases on the repo | ||
| pull-requests: write # to write comments to PRs | ||
| statuses: write # to update the status of the workflow from linter | ||
| pages: write # to deploy to Pages | ||
| id-token: write # to verify the deployment originates from an appropriate source | ||
| defaults: | ||
| run: | ||
| shell: pwsh | ||
| jobs: | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Always runs to load configuration | ||
| # - ✅ Merged PR - Always runs to load configuration | ||
| # - ✅ Abandoned PR - Always runs to load configuration | ||
| # - ✅ Manual run - Always runs to load configuration | ||
| Get-Settings: | ||
| uses: ./.github/workflows/Get-Settings.yml | ||
| with: | ||
| Name: ${{ inputs.Name }} | ||
| SettingsPath: ${{ inputs.SettingsPath }} | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Lints code changes in active PRs | ||
| # - ❌ Merged PR - No need to lint after merge + its a merge commit that causes issues with super-linter | ||
| # - ❌ Abandoned PR - No need to lint abandoned changes | ||
| # - ❌ Manual run - Only runs for PR events | ||
| Lint-Repository: | ||
| name: Lint code base | ||
| runs-on: ubuntu-latest | ||
| if: github.event_name == 'pull_request' && github.event.pull_request.merged != true && github.event.action != 'closed' && fromJson(needs.Get-Settings.outputs.Settings).Linter.Skip != true | ||
| needs: | ||
| - Get-Settings | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| steps: | ||
| - name: Checkout repo | ||
| uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 | ||
| with: | ||
| persist-credentials: false | ||
| fetch-depth: 0 | ||
| - name: Load dynamic envs | ||
| run: | | ||
| Write-Host "Loading settings for super-linter:" | ||
| $settings = $env:SETTINGS | ConvertFrom-Json -AsHashtable | ||
| $linter = $settings.Linter | ||
| $env = $linter.env | ||
| foreach ($key in $env.Keys) { | ||
| $value = $env[$key] | ||
| if ($value -is [bool]) { | ||
| $value = $value.ToString().ToLower() | ||
| } | ||
| Write-Host "$key = $value" | ||
| # Persist for following steps in this job | ||
| "$key=$value" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | ||
| } | ||
| - name: Lint code base | ||
| id: super-linter | ||
| uses: super-linter/super-linter@502f4fe48a81a392756e173e39a861f8c8efe056 # v8.3.0 | ||
| env: | ||
| GITHUB_TOKEN: ${{ github.token }} | ||
| DEFAULT_WORKSPACE: ${{ inputs.WorkingDirectory }} | ||
| FILTER_REGEX_INCLUDE: ${{ inputs.WorkingDirectory }} | ||
| ENABLE_GITHUB_ACTIONS_STEP_SUMMARY: false | ||
| SAVE_SUPER_LINTER_SUMMARY: true | ||
| - name: Post super-linter summary | ||
| if: failure() || fromJson(needs.Get-Settings.outputs.Settings).Linter.ShowSummaryOnSuccess == true | ||
| shell: pwsh | ||
| run: | | ||
| $summaryPath = Join-Path $env:GITHUB_WORKSPACE 'super-linter-output' 'super-linter-summary.md' | ||
| Get-Content $summaryPath | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Encoding utf8 | ||
| $failed = '${{ steps.super-linter.outcome }}' -eq 'failure' | ||
| if ($failed) { | ||
| Write-Host "::error::Super-linter found issues. Please review the summary above." | ||
| exit 1 | ||
| } | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Builds module for testing | ||
| # - ✅ Merged PR - Builds module for publishing | ||
| # - ❌ Abandoned PR - Skips building abandoned changes | ||
| # - ✅ Manual run - Builds module when manually triggered | ||
| Build-Module: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && fromJson(needs.Get-Settings.outputs.Settings).Build.Module.Skip != true }} | ||
| uses: ./.github/workflows/Build-Module.yml | ||
| needs: | ||
| - Get-Settings | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| with: | ||
| Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Tests source code changes | ||
| # - ✅ Merged PR - Tests source code before publishing | ||
| # - ❌ Abandoned PR - Skips testing abandoned changes | ||
| # - ✅ Manual run - Tests source code when manually triggered | ||
| Test-SourceCode: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && needs.Get-Settings.outputs.SourceCodeTestSuites != '[]' }} | ||
| needs: | ||
| - Get-Settings | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| include: ${{ fromJson(needs.Get-Settings.outputs.SourceCodeTestSuites) }} | ||
| uses: ./.github/workflows/Test-SourceCode.yml | ||
| with: | ||
| RunsOn: ${{ matrix.RunsOn }} | ||
| OS: ${{ matrix.OSName }} | ||
| Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Lints source code changes | ||
| # - ✅ Merged PR - Lints source code before publishing | ||
| # - ❌ Abandoned PR - Skips linting abandoned changes | ||
| # - ✅ Manual run - Lints source code when manually triggered | ||
| Lint-SourceCode: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && needs.Get-Settings.outputs.SourceCodeTestSuites != '[]' }} | ||
| needs: | ||
| - Get-Settings | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| include: ${{ fromJson(needs.Get-Settings.outputs.SourceCodeTestSuites) }} | ||
| uses: ./.github/workflows/Lint-SourceCode.yml | ||
| with: | ||
| RunsOn: ${{ matrix.RunsOn }} | ||
| OS: ${{ matrix.OSName }} | ||
| Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Tests built module | ||
| # - ✅ Merged PR - Tests built module before publishing | ||
| # - ❌ Abandoned PR - Skips testing abandoned changes | ||
| # - ✅ Manual run - Tests built module when manually triggered | ||
| Test-Module: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && needs.Build-Module.result == 'success' && !cancelled() && needs.Get-Settings.outputs.PSModuleTestSuites != '[]' }} | ||
| needs: | ||
| - Build-Module | ||
| - Get-Settings | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| include: ${{ fromJson(needs.Get-Settings.outputs.PSModuleTestSuites) }} | ||
| uses: ./.github/workflows/Test-Module.yml | ||
| secrets: inherit | ||
| with: | ||
| RunsOn: ${{ matrix.RunsOn }} | ||
| OS: ${{ matrix.OSName }} | ||
| Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Runs setup scripts before local module tests | ||
| # - ✅ Merged PR - Runs setup scripts before local module tests | ||
| # - ❌ Abandoned PR - Skips setup for abandoned changes | ||
| # - ✅ Manual run - Runs setup scripts when manually triggered | ||
| BeforeAll-ModuleLocal: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && needs.Build-Module.result == 'success' && !cancelled() && needs.Get-Settings.outputs.ModuleTestSuites != '[]' }} | ||
| name: BeforeAll-ModuleLocal | ||
| runs-on: ubuntu-latest | ||
| needs: | ||
| - Build-Module | ||
| - Get-Settings | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| steps: | ||
| - name: Checkout Code | ||
| uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 | ||
| with: | ||
| persist-credentials: false | ||
| fetch-depth: 0 | ||
| - name: Run BeforeAll Setup Scripts | ||
| uses: PSModule/GitHub-Script@00547bff5a143fbfc23a912a783fbfe9c470815c # v1.7.4 | ||
| with: | ||
| Name: BeforeAll-ModuleLocal | ||
| ShowInfo: false | ||
| ShowOutput: true | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| Script: | | ||
| LogGroup "Running BeforeAll Setup Scripts" { | ||
| $beforeAllScript = 'tests/BeforeAll.ps1' | ||
| if (-not (Test-Path $beforeAllScript)) { | ||
| Write-Host "No BeforeAll.ps1 script found at [$beforeAllScript] - exiting successfully" | ||
| exit 0 | ||
| } | ||
| Write-Host "Running BeforeAll setup script: $beforeAllScript" | ||
| try { | ||
| & $beforeAllScript | ||
| Write-Host "BeforeAll script completed successfully: $beforeAllScript" | ||
| } catch { | ||
| Write-Error "BeforeAll script failed: $beforeAllScript - $_" | ||
| throw | ||
| } | ||
| } | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Tests module in local environment | ||
| # - ✅ Merged PR - Tests module in local environment before publishing | ||
| # - ❌ Abandoned PR - Skips testing abandoned changes | ||
| # - ✅ Manual run - Tests module in local environment when manually triggered | ||
| Test-ModuleLocal: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && needs.Build-Module.result == 'success' && !cancelled() && needs.Get-Settings.outputs.ModuleTestSuites != '[]' }} | ||
| needs: | ||
| - Build-Module | ||
| - Get-Settings | ||
| - BeforeAll-ModuleLocal | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| include: ${{ fromJson(needs.Get-Settings.outputs.ModuleTestSuites) }} | ||
| uses: ./.github/workflows/Test-ModuleLocal.yml | ||
| secrets: inherit | ||
| with: | ||
| RunsOn: ${{ matrix.RunsOn }} | ||
| OSName: ${{ matrix.OSName }} | ||
| TestPath: ${{ matrix.TestPath }} | ||
| TestName: ${{ matrix.TestName }} | ||
| Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Runs teardown scripts after local module tests | ||
| # - ✅ Merged PR - Runs teardown scripts after local module tests | ||
| # - ✅ Abandoned PR - Runs teardown if tests were started (cleanup) | ||
| # - ✅ Manual run - Runs teardown scripts after local module tests | ||
| AfterAll-ModuleLocal: | ||
| if: ${{ needs.Test-ModuleLocal.result != 'skipped' && always() }} | ||
| name: AfterAll-ModuleLocal | ||
| runs-on: ubuntu-latest | ||
| needs: | ||
| - Get-Settings | ||
| - Test-ModuleLocal | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| steps: | ||
| - name: Checkout Code | ||
| uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 | ||
| with: | ||
| persist-credentials: false | ||
| fetch-depth: 0 | ||
| - name: Run AfterAll Teardown Scripts | ||
| if: always() | ||
| uses: PSModule/GitHub-Script@00547bff5a143fbfc23a912a783fbfe9c470815c # v1.7.4 | ||
| with: | ||
| Name: AfterAll-ModuleLocal | ||
| ShowInfo: false | ||
| ShowOutput: true | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| Script: | | ||
| LogGroup "Running AfterAll Teardown Scripts" { | ||
| $afterAllScript = 'tests/AfterAll.ps1' | ||
| if (-not (Test-Path $afterAllScript)) { | ||
| Write-Host "No AfterAll.ps1 script found at [$afterAllScript] - exiting successfully" | ||
| exit 0 | ||
| } | ||
| Write-Host "Running AfterAll teardown script: $afterAllScript" | ||
| try { | ||
| & $afterAllScript | ||
| Write-Host "AfterAll script completed successfully: $afterAllScript" | ||
| } catch { | ||
| Write-Warning "AfterAll script failed: $afterAllScript - $_" | ||
| # Don't throw for teardown scripts to ensure other cleanup scripts can run | ||
| } | ||
| } | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Collects and reports test results | ||
| # - ✅ Merged PR - Collects and reports test results before publishing | ||
| # - ❌ Abandoned PR - Skips collecting results for abandoned changes | ||
| # - ✅ Manual run - Collects and reports test results when manually triggered | ||
| Get-TestResults: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && needs.Get-Settings.result == 'success' && !fromJson(needs.Get-Settings.outputs.Settings).Test.TestResults.Skip && (needs.Get-Settings.outputs.SourceCodeTestSuites != '[]' || needs.Get-Settings.outputs.PSModuleTestSuites != '[]' || needs.Get-Settings.outputs.ModuleTestSuites != '[]') && (always() && !cancelled()) }} | ||
| needs: | ||
| - Get-Settings | ||
| - Test-SourceCode | ||
| - Lint-SourceCode | ||
| - Test-Module | ||
| - Test-ModuleLocal | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| uses: ./.github/workflows/Get-TestResults.yml | ||
| secrets: inherit | ||
| with: | ||
| ModuleTestSuites: ${{ needs.Get-Settings.outputs.ModuleTestSuites }} | ||
| SourceCodeTestSuites: ${{ needs.Get-Settings.outputs.SourceCodeTestSuites }} | ||
| PSModuleTestSuites: ${{ needs.Get-Settings.outputs.PSModuleTestSuites }} | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Calculates and reports code coverage | ||
| # - ✅ Merged PR - Calculates and reports code coverage before publishing | ||
| # - ❌ Abandoned PR - Skips coverage for abandoned changes | ||
| # - ✅ Manual run - Calculates and reports code coverage when manually triggered | ||
| Get-CodeCoverage: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && needs.Get-Settings.result == 'success' && !fromJson(needs.Get-Settings.outputs.Settings).Test.CodeCoverage.Skip && (needs.Get-Settings.outputs.PSModuleTestSuites != '[]' || needs.Get-Settings.outputs.ModuleTestSuites != '[]') && (always() && !cancelled()) }} | ||
| needs: | ||
| - Get-Settings | ||
| - Test-Module | ||
| - Test-ModuleLocal | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| uses: ./.github/workflows/Get-CodeCoverage.yml | ||
| secrets: inherit | ||
| with: | ||
| CodeCoveragePercentTarget: ${{ fromJson(needs.Get-Settings.outputs.Settings).Test.CodeCoverage.PercentTarget }} | ||
| StepSummary_Mode: ${{ fromJson(needs.Get-Settings.outputs.Settings).Test.CodeCoverage.StepSummaryMode }} | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Publishes prerelease when all tests/coverage/build succeed | ||
| # - ✅ Merged PR - Publishes release when all tests/coverage/build succeed | ||
| # - ✅ Abandoned PR - Publishes cleanup/retraction version | ||
| # - ✅ Manual run - Publishes when all tests/coverage/build succeed | ||
| Publish-Module: | ||
| if: | | ||
| needs.Get-Settings.result == 'success' && !cancelled() && github.event_name == 'pull_request' && ( | ||
| (github.event.action == 'closed' && github.event.pull_request.merged != true) || | ||
| (needs.Get-TestResults.result == 'success' && needs.Get-CodeCoverage.result == 'success' && needs.Build-Site.result == 'success') | ||
| ) | ||
| needs: | ||
| - Get-Settings | ||
| - Get-TestResults | ||
| - Get-CodeCoverage | ||
| - Build-Site | ||
| runs-on: ubuntu-latest | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| steps: | ||
| - name: Checkout Code | ||
| uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 | ||
| with: | ||
| persist-credentials: false | ||
| fetch-depth: 0 | ||
| - name: Download module artifact | ||
| uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 | ||
| with: | ||
| name: module | ||
| path: ${{ inputs.WorkingDirectory }}/outputs/module | ||
| - name: Update Microsoft.PowerShell.PSResourceGet | ||
| shell: pwsh | ||
| run: | | ||
| Install-PSResource -Name Microsoft.PowerShell.PSResourceGet -Repository PSGallery -TrustRepository | ||
| - name: Publish module | ||
| uses: PSModule/Publish-PSModule@6c25d139fe51b890f75c057897bd58ac344b192a # v2.0.8 | ||
| env: | ||
| GH_TOKEN: ${{ github.token }} | ||
| with: | ||
| Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} | ||
| ModulePath: outputs/module | ||
| APIKey: ${{ secrets.APIKEY }} | ||
| WhatIf: ${{ github.repository == 'PSModule/Process-PSModule' }} | ||
| AutoCleanup: ${{ fromJson(needs.Get-Settings.outputs.Settings).Publish.Module.AutoCleanup }} | ||
| AutoPatching: ${{ fromJson(needs.Get-Settings.outputs.Settings).Publish.Module.AutoPatching }} | ||
| DatePrereleaseFormat: ${{ fromJson(needs.Get-Settings.outputs.Settings).Publish.Module.DatePrereleaseFormat }} | ||
| IgnoreLabels: ${{ fromJson(needs.Get-Settings.outputs.Settings).Publish.Module.IgnoreLabels }} | ||
| IncrementalPrerelease: ${{ fromJson(needs.Get-Settings.outputs.Settings).Publish.Module.IncrementalPrerelease }} | ||
| MajorLabels: ${{ fromJson(needs.Get-Settings.outputs.Settings).Publish.Module.MajorLabels }} | ||
| MinorLabels: ${{ fromJson(needs.Get-Settings.outputs.Settings).Publish.Module.MinorLabels }} | ||
| PatchLabels: ${{ fromJson(needs.Get-Settings.outputs.Settings).Publish.Module.PatchLabels }} | ||
| VersionPrefix: ${{ fromJson(needs.Get-Settings.outputs.Settings).Publish.Module.VersionPrefix }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Builds documentation for review | ||
| # - ✅ Merged PR - Builds documentation for publishing | ||
| # - ❌ Abandoned PR - Skips building docs for abandoned changes | ||
| # - ✅ Manual run - Builds documentation when manually triggered | ||
| Build-Docs: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && fromJson(needs.Get-Settings.outputs.Settings).Build.Docs.Skip != true }} | ||
| needs: | ||
| - Get-Settings | ||
| - Build-Module | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| uses: ./.github/workflows/Build-Docs.yml | ||
| with: | ||
| Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| ShowSummaryOnSuccess: ${{ fromJson(needs.Get-Settings.outputs.Settings).Build.Docs.ShowSummaryOnSuccess }} | ||
| # Runs on: | ||
| # - ✅ Open/Updated PR - Builds site for preview | ||
| # - ✅ Merged PR - Builds site for publishing | ||
| # - ❌ Abandoned PR - Skips building site for abandoned changes | ||
| # - ✅ Manual run - Builds site when manually triggered | ||
| Build-Site: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && fromJson(needs.Get-Settings.outputs.Settings).Build.Site.Skip != true }} | ||
| needs: | ||
| - Get-Settings | ||
| - Build-Docs | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| uses: ./.github/workflows/Build-Site.yml | ||
| with: | ||
| Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} | ||
| Debug: ${{ inputs.Debug }} | ||
| Prerelease: ${{ inputs.Prerelease }} | ||
| Verbose: ${{ inputs.Verbose }} | ||
| Version: ${{ inputs.Version }} | ||
| WorkingDirectory: ${{ inputs.WorkingDirectory }} | ||
| # Runs on: | ||
| # - ❌ Open/Updated PR - Site not published for PRs in progress | ||
| # - ✅ Merged PR - Deploys site to GitHub Pages after successful merge | ||
| # - ❌ Abandoned PR - Site not published for abandoned changes | ||
| # - ❌ Manual run - Only publishes on merged PRs, not manual runs | ||
| Publish-Site: | ||
| if: ${{ !(github.event.action == 'closed' && github.event.pull_request.merged != true) && needs.Get-TestResults.result == 'success' && needs.Get-CodeCoverage.result == 'success' && needs.Build-Site.result == 'success' && !cancelled() && github.event_name == 'pull_request' && github.event.pull_request.merged == true }} | ||
| needs: | ||
| - Get-Settings | ||
| - Get-TestResults | ||
| - Get-CodeCoverage | ||
| - Build-Site | ||
| permissions: | ||
| pages: write # to deploy to Pages | ||
| id-token: write # to verify the deployment originates from an appropriate source | ||
| environment: | ||
| name: github-pages | ||
| url: ${{ steps.deployment.outputs.page_url }} | ||
| runs-on: ubuntu-latest | ||
| env: | ||
| SETTINGS: ${{ needs.Get-Settings.outputs.Settings }} | ||
| steps: | ||
| - uses: actions/configure-pages@v5 | ||
| - name: Deploy to GitHub Pages | ||
| id: deployment | ||
| uses: actions/deploy-pages@v4 | ||