From dc04f94be2a3859d1f4a9e20fe2232e42707ff02 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 19 Apr 2025 16:11:25 +0200 Subject: [PATCH 1/8] =?UTF-8?q?=F0=9F=8C=9F=20[Major]:=20Parallel=20test?= =?UTF-8?q?=20run,=20configuration=20file=20and=20further=20modularization?= =?UTF-8?q?=20(#150)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The **PSModule v4 release** is a major overhaul of the PowerShell module workflow, introducing significant architectural changes to improve speed, modularity, and maintainability. This update continues on the goal to split the once-monolithic process into distinct GitHub Actions for building, testing, documenting, and publishing modules. By refactoring the workflow into isolated steps and enabling parallel execution, v4 dramatically optimizes build and test times while ensuring a more reliable and customizable process for module developers. ![image](https://github.com/user-attachments/assets/a583c4bd-e8ea-45dc-9164-a254f4764fa5)
Diagram - Old version

![image](https://github.com/user-attachments/assets/679bc459-44cd-4f50-8a98-e70bb4977068)

## Features ### Parallel Testing & Results Aggregation The workflow has been reworked to support flexible, parallelizable test runs. The `Test-PSModule` action will now execute tests in parallel via matrix jobs (e.g. across multiple OSes or test stages). Separate helper actions (`Get-PesterTestResults` and `Get-PesterCodeCoverage`) have been introduced to aggregate Pester test outcomes and code coverage from those parallel jobs, providing unified reporting and enforcing test success and coverage thresholds across the matrix. - Fixes #78 - Fixes #119 ### Central Configuration File A new configuration hierarchy allows customizing the process through a YAML (JSON or PSD1) settings file. Users can include a `.github/PSModule.yml` in their module repo to override defaults. This centralized config makes the pipeline more flexible and eliminates the need for hard-coded inputs in workflow files. - Fixes #144 - Fixes #81 - Fixes #159 ### Dedicated Documentation Step Documentation generation is now handled by a new `Document-PSModule` action. This step automatically builds the module's documentation (using PlatyPS) and uploads as an artifact, so that other steps can build a site and publish it to GitHub Pages. By isolating documentation in its own action, v4 ensures that doc-specific tools (e.g. PlatyPS and MkDocs) run without interference from build or test modules, and documentation is kept up-to-date with each release. - Fixes #148 - Fixes #77 - Fixes #95 ### Shared Helper Module Action A new `Install-PSModuleHelpers` action has been introduced as a foundational setup step. It installs and configures common helper functions used by the pipeline (for example, version specification conversion, module dependency resolution, and module installation utilities). This ensures all subsequent actions operate with a consistent environment and shared logic. Common functionality like resolving module dependencies (`Resolve-PSModuleDependency`) and version parsing has been consolidated here, reducing duplication across the build/test/publish steps. ### Enhanced Platform and Compatibility Support The v4 workflow expands support and testing across platforms and PowerShell versions. The Test-PSModule action runs on Windows, Linux, and macOS with PowerShell Core (and includes light support for Windows PowerShell 5.1 for basic compatibility). - Fixes #146 ### New test actions Static analysis is performed via a dedicated `Invoke-ScriptAnalyzer` GitHub action, and Pester tests are executed in an isolated context via the `Invoke-Pester` GitHub action, ensuring consistent behavior across different environments and increases the reusability of the automation we built around Pester. The new design also honors repository-specific analyzer settings (automatically picking up settings from `.github/linters/.powershell-psscriptanalyzer.psd1` in the repo for static code analysis), allowing module developers to customize linting rules. - Fixes #108 - Fixes #130 ### Modular Workflows By splitting the CI/CD process into discrete actions and enabling concurrency, the overall pipeline runtime is greatly reduced. Linting, unit tests, and integration tests can run in parallel, and the build step no longer blocks documentation or analysis. This *time-optimized process* means quicker feedback on pull requests and faster delivery of new module releases. ### Simplified Build & Publish Process The `Build-PSModule` action has been refactored into a pure module builder. New inputs like `ArtifactName` and `WorkingDirectory` give more control over build output naming and source path. The build step now produces a clean module package and uploads it as an artifact called `module`. Likewise, the **Publish-PSModule** action has been bumped to v2 with a clearer interface – it removes the old monolithic `ConfigurationFile` input in favor of explicit inputs and the new central settings file. The publish logic now uses the repository’s context (working directory defaulting to `.`) and respects the unified settings, simplifying how modules are published to the PowerShell Gallery. ### Robust Dependency Handling Module dependency resolution during builds is now more reliable and up-to-date. The pipeline switched to using **PSResourceGet** for installing required module dependencies, replacing the legacy PowerShellGet v2 approach. This change ensures compatibility with the latest PowerShell module packaging standards and improves the speed and success of acquiring dependencies. The helper scripts (`Convert-VersionSpec` and `Resolve-PSModuleDependency`) were moved into the shared helpers module, and their logic was hardened with better retry and null-check mechanisms when querying the PowerShell Gallery. - Fixes #62 ### Better Logging and Diagnostics Each action now provides more transparent logging and output for easier troubleshooting. The Publish step, for example, now logs all input parameters at the start of execution for traceability. Verbose logging in dependency resolution has been replaced with clear console output to ensure important information is always visible. The `Get-PesterTestResults` action prints a detailed summary of test suites executed, including counts of passed/failed/skipped tests, and will mark the workflow as failed if any tests did not run or failed – giving immediate feedback if something went wrong in the parallel test jobs. - Fixes #91 ### Other smaller issues - Fixes #82 ## Related actions and PRs - [Install-PSModuleHelpers](https://github.com/PSModule/Install-PSModuleHelpers) | https://github.com/PSModule/Install-PSModuleHelpers/pull/2 - [Test-PSModule](https://github.com/PSModule/Test-PSModule) | https://github.com/PSModule/Test-PSModule/pull/98 - [Get-PesterTestResults](https://github.com/PSModule/Get-PesterTestResults) | https://github.com/PSModule/Get-PesterTestResults/pull/2 - [Get-PesterCodeCoverage](https://github.com/PSModule/Get-PesterCodeCoverage) | https://github.com/PSModule/Get-PesterCodeCoverage/pull/1 - [Invoke-Pester](https://github.com/PSModule/Invoke-Pester) - [Invoke-ScriptAnalyzer](https://github.com/PSModule/Invoke-ScriptAnalyzer) - [Document-PSModule](https://github.com/PSModule/Document-PSModule) | https://github.com/PSModule/Document-PSModule/pull/16 - [Build-PSModule](https://github.com/PSModule/Build-PSModule) | https://github.com/PSModule/Build-PSModule/pull/108 - [Publish-PSModule](https://github.com/PSModule/Publish-PSModule) | https://github.com/PSModule/Publish-PSModule/pull/49 --- .github/linters/.jscpd.json | 11 + .../linters/.powershell-psscriptanalyzer.psd1 | 68 +- .github/linters/.textlintrc | 513 +++++++++++ .github/workflows/Auto-Release.yml | 2 - .github/workflows/Build-Docs.yml | 110 +++ .github/workflows/Build-Module.yml | 64 ++ .github/workflows/Build-Site.yml | 179 ++++ .github/workflows/CI.yml | 778 ++++------------ .github/workflows/Get-CodeCoverage.yml | 60 ++ .github/workflows/Get-Settings.yml | 360 ++++++++ .github/workflows/Get-TestResults.yml | 63 ++ .github/workflows/Lint-SourceCode.yml | 66 ++ .github/workflows/Linter.yml | 2 +- .github/workflows/Test-Module.yml | 124 +++ .github/workflows/Test-ModuleLocal.yml | 131 +++ .github/workflows/Test-SourceCode.yml | 63 ++ .../workflows/Workflow-Test-Default-CI.yml | 7 +- .github/workflows/Workflow-Test-Default.yml | 8 +- .../Workflow-Test-WithManifest-CI.yml | 8 +- .../workflows/Workflow-Test-WithManifest.yml | 9 +- .github/workflows/workflow.yml | 864 +++++------------- .gitignore | 11 +- LICENSE | 2 +- README.md | 246 ++++- media/.$Flow.drawio.bkp | 120 +++ media/Flow.drawio | 146 +++ media/Process-PSModule.png | Bin 73852 -> 119987 bytes media/pagesEnvironment.png | Bin 0 -> 26530 bytes tests/srcTestRepo/tests/Environment.Tests.ps1 | 15 + .../srcTestRepo/tests/PSModuleTest.Tests.ps1 | 16 - .../.github/PSModule.json | 22 + .../.github/PSModule.psd1 | 22 + .../.github/PSModule.yml | 13 + .../tests/Environments/Environment.Tests.ps1 | 15 + .../{ => MyTests}/PSModuleTest.Tests.ps1 | 16 - .../srcWithManifestTestRepo/tools/1-build.ps1 | 2 +- .../srcWithManifestTestRepo/tools/2-build.ps1 | 2 +- 37 files changed, 2768 insertions(+), 1370 deletions(-) create mode 100644 .github/linters/.jscpd.json create mode 100644 .github/linters/.textlintrc create mode 100644 .github/workflows/Build-Docs.yml create mode 100644 .github/workflows/Build-Module.yml create mode 100644 .github/workflows/Build-Site.yml create mode 100644 .github/workflows/Get-CodeCoverage.yml create mode 100644 .github/workflows/Get-Settings.yml create mode 100644 .github/workflows/Get-TestResults.yml create mode 100644 .github/workflows/Lint-SourceCode.yml create mode 100644 .github/workflows/Test-Module.yml create mode 100644 .github/workflows/Test-ModuleLocal.yml create mode 100644 .github/workflows/Test-SourceCode.yml create mode 100644 media/.$Flow.drawio.bkp create mode 100644 media/Flow.drawio create mode 100644 media/pagesEnvironment.png create mode 100644 tests/srcTestRepo/tests/Environment.Tests.ps1 create mode 100644 tests/srcWithManifestTestRepo/.github/PSModule.json create mode 100644 tests/srcWithManifestTestRepo/.github/PSModule.psd1 create mode 100644 tests/srcWithManifestTestRepo/.github/PSModule.yml create mode 100644 tests/srcWithManifestTestRepo/tests/Environments/Environment.Tests.ps1 rename tests/srcWithManifestTestRepo/tests/{ => MyTests}/PSModuleTest.Tests.ps1 (74%) diff --git a/.github/linters/.jscpd.json b/.github/linters/.jscpd.json new file mode 100644 index 00000000..15d4513d --- /dev/null +++ b/.github/linters/.jscpd.json @@ -0,0 +1,11 @@ +{ + "threshold": 0, + "reporters": [ + "consoleFull" + ], + "ignore": [ + "**/tests/**", + "**/workflows/**" + ], + "absolute": true +} diff --git a/.github/linters/.powershell-psscriptanalyzer.psd1 b/.github/linters/.powershell-psscriptanalyzer.psd1 index 40d11d60..09cc3d0c 100644 --- a/.github/linters/.powershell-psscriptanalyzer.psd1 +++ b/.github/linters/.powershell-psscriptanalyzer.psd1 @@ -1,18 +1,56 @@ -#Documentation: https://github.com/PowerShell/PSScriptAnalyzer/blob/master/docs/Cmdlets/Invoke-ScriptAnalyzer.md#-settings -@{ - #CustomRulePath='path\to\CustomRuleModule.psm1' - #RecurseCustomRulePath='path\of\customrules' - #Severity = @( - # 'Error' - # 'Warning' - #) - #IncludeDefaultRules=${true} +@{ + Rules = @{ + PSAlignAssignmentStatement = @{ + Enable = $true + CheckHashtable = $true + } + PSAvoidLongLines = @{ + Enable = $true + MaximumLineLength = 150 + } + PSAvoidSemicolonsAsLineTerminators = @{ + Enable = $true + } + PSPlaceCloseBrace = @{ + Enable = $true + NewLineAfter = $false + IgnoreOneLineBlock = $true + NoEmptyLineBefore = $false + } + PSPlaceOpenBrace = @{ + Enable = $true + OnSameLine = $true + NewLineAfter = $true + IgnoreOneLineBlock = $true + } + PSProvideCommentHelp = @{ + Enable = $true + ExportedOnly = $false + BlockComment = $true + VSCodeSnippetCorrection = $false + Placement = 'begin' + } + PSUseConsistentIndentation = @{ + Enable = $true + IndentationSize = 4 + PipelineIndentation = 'IncreaseIndentationForFirstPipeline' + Kind = 'space' + } + PSUseConsistentWhitespace = @{ + Enable = $true + CheckInnerBrace = $true + CheckOpenBrace = $true + CheckOpenParen = $true + CheckOperator = $true + CheckPipe = $true + CheckPipeForRedundantWhitespace = $true + CheckSeparator = $true + CheckParameter = $true + IgnoreAssignmentOperatorInsideHashTable = $true + } + } ExcludeRules = @( - 'PSMissingModuleManifestField' - 'PSAvoidUsingWriteHost' + 'PSMissingModuleManifestField', # This rule is not applicable until the module is built. + 'PSUseToExportFieldsInManifest' ) - #IncludeRules = @( - # 'PSAvoidUsingWriteHost', - # 'MyCustomRuleName' - #) } diff --git a/.github/linters/.textlintrc b/.github/linters/.textlintrc new file mode 100644 index 00000000..db48de80 --- /dev/null +++ b/.github/linters/.textlintrc @@ -0,0 +1,513 @@ +{ + "filters": { + "comments": true + }, + "rules": { + "terminology": { + "defaultTerms": false, + "terms": [ + "Airbnb", + "Android", + "AppleScript", + "AppVeyor", + "AVA", + "BrowserStack", + "Browsersync", + "Codecov", + "CodePen", + "CodeSandbox", + "DefinitelyTyped", + "EditorConfig", + "ESLint", + "GitHub", + "GraphQL", + "GraphiQL", + "iOS", + "JavaScript", + "JetBrains", + "jQuery", + "LinkedIn", + "Lodash", + "MacBook", + "Markdown", + "OpenType", + "PayPal", + "PhpStorm", + "PowerShell", + "PlayStation", + "RubyMine", + "Sass", + "SemVer", + "TypeScript", + "UglifyJS", + "Wasm", + "WebAssembly", + "WebStorm", + "WordPress", + "YouTube", + [ + "Common[ .]js", + "CommonJS" + ], + [ + "JSDocs?", + "JSDoc" + ], + [ + "Node[ .]js", + "Node.js" + ], + [ + "React[ .]js", + "React" + ], + [ + "SauceLabs", + "Sauce Labs" + ], + [ + "StackOverflow", + "Stack Overflow" + ], + [ + "styled ?components", + "styled-components" + ], + [ + "HTTP[ /]2(?:\\.0)?", + "HTTP/2" + ], + [ + "OS X", + "macOS" + ], + [ + "Mac ?OS", + "macOS" + ], + [ + "a npm", + "an npm" + ], + "ECMAScript", + [ + "ES2015", + "ES6" + ], + [ + "ES7", + "ES2016" + ], + "3D", + [ + "3-D", + "3D" + ], + "Ajax", + "API", + "APIs", + "API's", + [ + "(?> $env:GITHUB_OUTPUT + "path=$path" >> $env:GITHUB_OUTPUT + + - name: Test-ModuleLocal + uses: PSModule/Invoke-Pester@v4 + env: + TEST_APP_ENT_CLIENT_ID: ${{ secrets.TEST_APP_ENT_CLIENT_ID }} + TEST_APP_ENT_PRIVATE_KEY: ${{ secrets.TEST_APP_ENT_PRIVATE_KEY }} + TEST_APP_ORG_CLIENT_ID: ${{ secrets.TEST_APP_ORG_CLIENT_ID }} + TEST_APP_ORG_PRIVATE_KEY: ${{ secrets.TEST_APP_ORG_PRIVATE_KEY }} + TEST_USER_ORG_FG_PAT: ${{ secrets.TEST_USER_ORG_FG_PAT }} + TEST_USER_USER_FG_PAT: ${{ secrets.TEST_USER_USER_FG_PAT }} + TEST_USER_PAT: ${{ secrets.TEST_USER_PAT }} + with: + Debug: ${{ inputs.Debug }} + Prerelease: ${{ inputs.Prerelease }} + Verbose: ${{ inputs.Verbose }} + Version: ${{ inputs.Version }} + TestResult_TestSuiteName: ${{ inputs.TestName }}-${{ inputs.OS }} + TestResult_Enabled: true + CodeCoverage_Enabled: true + Output_Verbosity: Detailed + CodeCoverage_OutputFormat: JaCoCo + CodeCoverage_CoveragePercentTarget: 0 + Filter_ExcludeTag: Flaky + Path: ${{ inputs.TestPath }} + Run_Path: ${{ steps.import-module.outputs.path }} + WorkingDirectory: ${{ inputs.WorkingDirectory }} diff --git a/.github/workflows/Test-SourceCode.yml b/.github/workflows/Test-SourceCode.yml new file mode 100644 index 00000000..d14fd5e6 --- /dev/null +++ b/.github/workflows/Test-SourceCode.yml @@ -0,0 +1,63 @@ +name: Test-SourceCode + +on: + workflow_call: + inputs: + RunsOn: + type: string + description: The type of runner to use for the job. + required: true + OS: + type: string + description: The operating system name. + required: true + Name: + type: string + description: The name of the module to process. Scripts default to the repository name if nothing is specified. + required: false + 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 working directory where the script will run from. + required: false + default: '.' + +permissions: + contents: read # to checkout the repo and create releases on the repo + +jobs: + Test-SourceCode: + name: Test-SourceCode (${{ inputs.RunsOn }}) + runs-on: ${{ inputs.RunsOn }} + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Test-SourceCode + uses: PSModule/Test-PSModule@v3 + with: + Debug: ${{ inputs.Debug }} + Prerelease: ${{ inputs.Prerelease }} + Verbose: ${{ inputs.Verbose }} + Version: ${{ inputs.Version }} + WorkingDirectory: ${{ inputs.WorkingDirectory }} + Settings: SourceCode diff --git a/.github/workflows/Workflow-Test-Default-CI.yml b/.github/workflows/Workflow-Test-Default-CI.yml index 7f91a079..10ba430a 100644 --- a/.github/workflows/Workflow-Test-Default-CI.yml +++ b/.github/workflows/Workflow-Test-Default-CI.yml @@ -22,8 +22,5 @@ jobs: uses: ./.github/workflows/CI.yml secrets: inherit with: - Name: PSModuleTest - Path: tests/srcTestRepo/src - ModulesOutputPath: tests/srcTestRepo/outputs/modules - DocsOutputPath: tests/srcTestRepo/outputs/docs - SkipTests: Module + WorkingDirectory: tests/srcTestRepo + Name: PSModuleTest2 diff --git a/.github/workflows/Workflow-Test-Default.yml b/.github/workflows/Workflow-Test-Default.yml index 3ae91ac9..bd82710f 100644 --- a/.github/workflows/Workflow-Test-Default.yml +++ b/.github/workflows/Workflow-Test-Default.yml @@ -24,9 +24,5 @@ jobs: uses: ./.github/workflows/workflow.yml secrets: inherit with: - Name: PSModuleTest - Path: tests/srcTestRepo/src - ModulesOutputPath: tests/srcTestRepo/outputs/modules - DocsOutputPath: tests/srcTestRepo/outputs/docs - TestProcess: true - SkipTests: Module + WorkingDirectory: tests/srcTestRepo + Name: PSModuleTest2 diff --git a/.github/workflows/Workflow-Test-WithManifest-CI.yml b/.github/workflows/Workflow-Test-WithManifest-CI.yml index 663c7e5e..8c9de2e1 100644 --- a/.github/workflows/Workflow-Test-WithManifest-CI.yml +++ b/.github/workflows/Workflow-Test-WithManifest-CI.yml @@ -22,8 +22,6 @@ jobs: uses: ./.github/workflows/CI.yml secrets: inherit with: - Name: PSModuleTest - Path: tests/srcWithManifestTestRepo/src - ModulesOutputPath: tests/srcWithManifestTestRepo/outputs/modules - DocsOutputPath: tests/srcWithManifestTestRepo/outputs/docs - SkipTests: Linux + WorkingDirectory: tests/srcWithManifestTestRepo + Name: PSModuleTest2 + SettingsPath: .github/PSModule.json diff --git a/.github/workflows/Workflow-Test-WithManifest.yml b/.github/workflows/Workflow-Test-WithManifest.yml index 40034ff2..8caaabc1 100644 --- a/.github/workflows/Workflow-Test-WithManifest.yml +++ b/.github/workflows/Workflow-Test-WithManifest.yml @@ -24,9 +24,6 @@ jobs: uses: ./.github/workflows/workflow.yml secrets: inherit with: - Name: PSModuleTest - Path: tests/srcWithManifestTestRepo/src - ModulesOutputPath: tests/srcWithManifestTestRepo/outputs/modules - DocsOutputPath: tests/srcWithManifestTestRepo/outputs/docs - TestProcess: true - SkipTests: Linux + WorkingDirectory: tests/srcWithManifestTestRepo + Name: PSModuleTest2 + SettingsPath: .github/PSModule.yml diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 3cbf404f..bc750250 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -32,41 +32,11 @@ on: type: string description: The name of the module to process. Scripts default to the repository name if nothing is specified. required: false - Path: + SettingsPath: type: string - description: The path to the source code of the module. + description: The path to the settings file. Settings in the settings file take precedence over the action inputs. required: false - default: src - ModulesOutputPath: - type: string - description: The path to the output directory for the modules. - required: false - default: outputs/modules - DocsOutputPath: - type: string - description: The path to the output directory for the documentation. - required: false - default: outputs/docs - SiteOutputPath: - type: string - description: The path to the output directory for the site. - required: false - default: outputs/site - SkipTests: - type: string - description: Defines what types of tests to skip. Allowed values are 'All', 'SourceCode', 'Module', 'None', 'macOS', 'Windows', 'Linux'. - required: false - default: None - TestProcess: - type: boolean - description: Whether to test the process. - required: false - default: false - PublishDocs: - type: boolean - description: Whether to publish the documentation using MkDocs and GitHub Pages. - required: false - default: true + default: .github/PSModule.yml Debug: type: boolean description: Enable debug output. @@ -81,21 +51,17 @@ on: 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 - -env: - GITHUB_TOKEN: ${{ github.token }} # Used for GitHub CLI authentication - TEST_APP_ENT_CLIENT_ID: ${{ secrets.TEST_APP_ENT_CLIENT_ID }} - TEST_APP_ENT_PRIVATE_KEY: ${{ secrets.TEST_APP_ENT_PRIVATE_KEY }} - TEST_APP_ORG_CLIENT_ID: ${{ secrets.TEST_APP_ORG_CLIENT_ID }} - TEST_APP_ORG_PRIVATE_KEY: ${{ secrets.TEST_APP_ORG_PRIVATE_KEY }} - TEST_USER_ORG_FG_PAT: ${{ secrets.TEST_USER_ORG_FG_PAT }} - TEST_USER_USER_FG_PAT: ${{ secrets.TEST_USER_USER_FG_PAT }} - TEST_USER_PAT: ${{ secrets.TEST_USER_PAT }} + 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 @@ -105,599 +71,208 @@ permissions: id-token: write # to verify the deployment originates from an appropriate source jobs: - TestSourceCode-pwsh-ubuntu-latest: - name: Test source code (pwsh, ubuntu-latest) - if: ${{ !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'SourceCode') || contains(inputs.SkipTests, 'Linux')) }} - runs-on: ubuntu-latest - steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Test source code - id: test - uses: PSModule/Test-PSModule@v2 - with: - Name: ${{ inputs.Name }} - Path: ${{ inputs.Path }} - TestType: SourceCode - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - TestSourceCode-pwsh-macos-latest: - name: Test source code (pwsh, macos-latest) - if: ${{ !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'SourceCode' ) || contains(inputs.SkipTests, 'macOS')) }} - runs-on: macos-latest - steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Test source code - id: test - uses: PSModule/Test-PSModule@v2 - with: - Name: ${{ inputs.Name }} - Path: ${{ inputs.Path }} - TestType: SourceCode - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - TestSourceCode-pwsh-windows-latest: - name: Test source code (pwsh, windows-latest) - if: ${{ !(contains(inputs.SkipTests, 'All' ) || contains(inputs.SkipTests, 'SourceCode' ) || contains(inputs.SkipTests, 'Windows')) }} - runs-on: windows-latest - steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Test source code - id: test - uses: PSModule/Test-PSModule@v2 - with: - Name: ${{ inputs.Name }} - Path: ${{ inputs.Path }} - TestType: SourceCode - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - BuildModule: - name: Build module - runs-on: ubuntu-latest - steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Build module - uses: PSModule/Build-PSModule@v3 - with: - Name: ${{ inputs.Name }} - Path: ${{ inputs.Path }} - ModulesOutputPath: ${{ inputs.ModulesOutputPath }} - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - BuildDocs: - name: Build docs + 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 }} + + Build-Module: + if: ${{ fromJson(needs.Get-Settings.outputs.Settings).Build.Module.Skip != true }} + uses: ./.github/workflows/Build-Module.yml needs: - - BuildModule - runs-on: ubuntu-latest - steps: - - name: Checkout Code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Document module - uses: PSModule/Document-PSModule@v0 - with: - Name: ${{ inputs.Name }} - Path: ${{ inputs.Path }} - ModulesOutputPath: ${{ inputs.ModulesOutputPath }} - DocsOutputPath: ${{ inputs.DocsOutputPath }} - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Commit all changes - continue-on-error: true - shell: pwsh - run: | - # Rename the gitignore file to .gitignore.bak - Rename-Item -Path '.gitignore' -NewName '.gitignore.bak' -Force - - try { - # Add all changes to the repository - git add . - git commit -m 'Update documentation' - } catch { - Write-Host "No changes to commit" - } - - # Restore the gitignore file - Rename-Item -Path '.gitignore.bak' -NewName '.gitignore' -Force - - - name: Lint documentation - uses: super-linter/super-linter/slim@latest - env: - FILTER_REGEX_INCLUDE: '${{ inputs.DocsOutputPath }}/**' - DEFAULT_BRANCH: main - DEFAULT_WORKSPACE: ${{ github.workspace }} - ENABLE_GITHUB_ACTIONS_GROUP_TITLE: true - GITHUB_TOKEN: ${{ github.token }} - RUN_LOCAL: true - VALIDATE_ALL_CODEBASE: true - VALIDATE_JSCPD: false - VALIDATE_MARKDOWN_PRETTIER: false - VALIDATE_YAML_PRETTIER: false - VALIDATE_JSON_PRETTIER: false - VALIDATE_GITLEAKS: false - - - uses: actions/configure-pages@v5 - - - name: Install mkdoks-material - shell: pwsh - run: | - pip install mkdocs-material - pip install mkdocs-git-authors-plugin - pip install mkdocs-git-revision-date-localized-plugin - pip install mkdocs-git-committers-plugin-2 - - - name: Structure site - uses: PSModule/GitHub-Script@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - Script: | - New-Item -Path "$env:GITHUB_WORKSPACE/${{ inputs.SiteOutputPath }}/docs/Functions" -ItemType Directory -Force - Copy-Item -Path "$env:GITHUB_WORKSPACE/${{ inputs.DocsOutputPath }}/*" -Destination "$env:GITHUB_WORKSPACE/${{ inputs.SiteOutputPath }}/docs/Functions" -Recurse -Force - $moduleName = [string]::IsNullOrEmpty('${{ inputs.Name }}') ? $env:GITHUB_REPOSITORY_NAME : '${{ inputs.Name }}' - $ModuleSourcePath = Join-Path $PWD -ChildPath '${{ inputs.Path }}' - $SiteOutputPath = Join-Path $PWD -ChildPath '${{ inputs.SiteOutputPath }}' - - LogGroup "Get folder structure" { - Get-ChildItem -Recurse | Select-Object -ExpandProperty FullName | Sort-Object | Format-List - } - - $functionDocsFolder = Join-Path -Path $SiteOutputPath -ChildPath 'docs/Functions' | Get-Item - Get-ChildItem -Path $functionDocsFolder -Recurse -Force -Include '*.md' | ForEach-Object { - $fileName = $_.Name - LogGroup " - $fileName" { - Show-FileContent -Path $_ - } - } - - LogGroup 'Build docs - Process about topics' { - $aboutDocsFolderPath = Join-Path -Path $SiteOutputPath -ChildPath 'docs/About' - $aboutDocsFolder = New-Item -Path $aboutDocsFolderPath -ItemType Directory -Force - $aboutSourceFolder = Get-ChildItem -Path $ModuleSourcePath -Directory | Where-Object { $_.Name -eq 'en-US' } - Get-ChildItem -Path $aboutSourceFolder -Filter *.txt | Copy-Item -Destination $aboutDocsFolder -Force -Verbose -PassThru | - Rename-Item -NewName { $_.Name -replace '.txt', '.md' } - } - - LogGroup 'Build docs - Copy icon to assets' { - $assetsFolderPath = Join-Path -Path $SiteOutputPath -ChildPath 'docs/Assets' - $null = New-Item -Path $assetsFolderPath -ItemType Directory -Force - $rootPath = Split-Path -Path $ModuleSourcePath -Parent - $iconPath = Join-Path -Path $rootPath -ChildPath 'icon\icon.png' - Copy-Item -Path $iconPath -Destination $assetsFolderPath -Force -Verbose - } - - LogGroup 'Build docs - Copy readme.md' { - $rootPath = Split-Path -Path $ModuleSourcePath -Parent - $readmePath = Join-Path -Path $rootPath -ChildPath 'README.md' - $readmeTargetPath = Join-Path -Path $SiteOutputPath -ChildPath 'docs/README.md' - Copy-Item -Path $readmePath -Destination $readmeTargetPath -Force -Verbose - } - - LogGroup 'Build docs - Create mkdocs.yml' { - $rootPath = Split-Path -Path $ModuleSourcePath -Parent - # This should be moved to an action so that we can use a default one, and not have to copy it from the repo. - $mkdocsSourcePath = Join-Path -Path $rootPath -ChildPath 'mkdocs.yml' - $mkdocsTargetPath = Join-Path -Path $SiteOutputPath -ChildPath 'mkdocs.yml' - $mkdocsContent = Get-Content -Path $mkdocsSourcePath -Raw - $mkdocsContent = $mkdocsContent.Replace('-{{ REPO_NAME }}-', $ModuleName) - $mkdocsContent = $mkdocsContent.Replace('-{{ REPO_OWNER }}-', $env:GITHUB_REPOSITORY_OWNER) - $mkdocsContent | Set-Content -Path $mkdocsTargetPath -Force - Show-FileContent -Path $mkdocsTargetPath - } - - - name: Debug File system - shell: pwsh - run: | - Get-ChildItem -Path $env:GITHUB_WORKSPACE -Recurse | Select-Object -ExpandProperty FullName | Sort-Object - - - name: Build mkdocs-material project - working-directory: ${{ inputs.SiteOutputPath }} - shell: pwsh - run: | - Start-LogGroup 'Build docs - mkdocs build - content' - Show-FileContent -Path mkdocs.yml - Stop-LogGroup - Start-LogGroup 'Build docs - mkdocs build' - mkdocs build --config-file mkdocs.yml --site-dir ${{ github.workspace }}/_site - Stop-LogGroup - - - uses: actions/upload-pages-artifact@v3 - - #This is necessary as there is no way to get output from a matrix job - TestModule-pwsh-ubuntu-latest: - name: Test module (pwsh, ubuntu-latest) - if: ${{ needs.BuildModule.result == 'success' && !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'Module') || contains(inputs.SkipTests, 'Linux')) && !cancelled() }} - needs: BuildModule - runs-on: ubuntu-latest - outputs: - passed: ${{ steps.test.outputs.passed }} - steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Download module artifact - uses: actions/download-artifact@v4 - with: - name: module - path: ${{ inputs.ModulesOutputPath }} - - - name: Test built module - id: test - uses: PSModule/Test-PSModule@v2 - continue-on-error: true - with: - Name: ${{ inputs.Name }} - Path: ${{ inputs.ModulesOutputPath }} - TestType: Module - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Status - shell: pwsh - run: | - Write-Host "Passed: [${{ steps.test.outputs.passed }}]" - - - name: Failed test - if: steps.test.outcome != 'success' - shell: pwsh - run: Write-Host "Complete successfully" - - TestModule-pwsh-macos-latest: - name: Test module (pwsh, macos-latest) - if: ${{ needs.BuildModule.result == 'success' && !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'Module') || contains(inputs.SkipTests, 'macOS')) && !cancelled() }} - needs: BuildModule - runs-on: macos-latest - outputs: - passed: ${{ steps.test.outputs.passed }} - steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Download module artifact - uses: actions/download-artifact@v4 - with: - name: module - path: ${{ inputs.ModulesOutputPath }} - - - name: Test built module - id: test - uses: PSModule/Test-PSModule@v2 - continue-on-error: true - with: - Name: ${{ inputs.Name }} - Path: ${{ inputs.ModulesOutputPath }} - TestType: Module - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Status - shell: pwsh - run: | - Write-Host "Passed: [${{ steps.test.outputs.passed }}]" - - - name: Failed test - if: steps.test.outcome != 'success' - shell: pwsh - run: Write-Host "Complete successfully" - - TestModule-pwsh-windows-latest: - name: Test module (pwsh, windows-latest) - if: ${{ needs.BuildModule.result == 'success' && !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'Module') || contains(inputs.SkipTests, 'Windows')) && !cancelled() }} - needs: BuildModule - runs-on: windows-latest - outputs: - passed: ${{ steps.test.outputs.passed }} - steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Download module artifact - uses: actions/download-artifact@v4 - with: - name: module - path: ${{ inputs.ModulesOutputPath }} - - - name: Test built module - id: test - uses: PSModule/Test-PSModule@v2 - continue-on-error: true - with: - Name: ${{ inputs.Name }} - Path: ${{ inputs.ModulesOutputPath }} - TestType: Module - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Status - shell: pwsh - run: | - Write-Host "Passed: [${{ steps.test.outputs.passed }}]" - - - name: Failed test - if: steps.test.outcome != 'success' - shell: pwsh - run: Write-Host "Complete successfully" - - TestModuleStatus: - name: Test module status - if: ${{ contains(fromJson('["success", "skipped"]'), needs.TestModule-pwsh-ubuntu-latest.result) && contains(fromJson('["success", "skipped"]'), needs.TestModule-pwsh-macos-latest.result) && contains(fromJson('["success", "skipped"]'), needs.TestModule-pwsh-windows-latest.result) && !cancelled() }} + - Get-Settings + with: + Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} + Debug: ${{ inputs.Debug }} + Prerelease: ${{ inputs.Prerelease }} + Verbose: ${{ inputs.Verbose }} + Version: ${{ inputs.Version }} + WorkingDirectory: ${{ inputs.WorkingDirectory }} + + Build-Docs: + if: ${{ fromJson(needs.Get-Settings.outputs.Settings).Build.Docs.Skip != true }} needs: - - TestModule-pwsh-ubuntu-latest - - TestModule-pwsh-macos-latest - - TestModule-pwsh-windows-latest + - Get-Settings + - Build-Module + 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 }} + + Build-Site: + if: ${{ fromJson(needs.Get-Settings.outputs.Settings).Build.Site.Skip != true }} + needs: + - Get-Settings + - Build-Docs + 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 }} + + Test-SourceCode: + if: ${{ needs.Get-Settings.outputs.SourceCodeTestSuites != '[]' }} + needs: + - Get-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 }} + + Lint-SourceCode: + if: ${{ needs.Get-Settings.outputs.SourceCodeTestSuites != '[]' }} + needs: + - Get-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 }} + + Test-Module: + if: ${{ needs.Build-Module.result == 'success' && !cancelled() && needs.Get-Settings.outputs.PSModuleTestSuites != '[]' }} + needs: + - Build-Module + - Get-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 }} + + Test-ModuleLocal: + if: ${{ needs.Build-Module.result == 'success' && !cancelled() && needs.Get-Settings.outputs.ModuleTestSuites != '[]' }} + needs: + - Build-Module + - Get-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 }} + OS: ${{ 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 }} + + Get-TestResults: + if: 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 + 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 }} + + Get-CodeCoverage: + if: 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 + 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 }} + + Publish-Site: + if: ${{ 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 steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - - name: Download module artifact - uses: actions/download-artifact@v4 - with: - name: module - path: ${{ inputs.ModulesOutputPath }} - - - name: Summerize tests - uses: PSModule/GitHub-Script@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - Script: | - LogGroup -Name 'Test analysis' { - - $linuxPassed = '${{ needs.TestModule-pwsh-ubuntu-latest.outputs.passed }}' -eq 'true' - $linuxSkipped = '${{ needs.TestModule-pwsh-ubuntu-latest.result }}' -eq 'skipped' - $macOSPassed = '${{ needs.TestModule-pwsh-macos-latest.outputs.passed }}' -eq 'true' - $macOSSkipped = '${{ needs.TestModule-pwsh-macos-latest.result }}' -eq 'skipped' - $windowsPassed = '${{ needs.TestModule-pwsh-windows-latest.outputs.passed }}' -eq 'true' - $windowsSkipped = '${{ needs.TestModule-pwsh-windows-latest.result }}' -eq 'skipped' - $anyPassed = $linuxPassed -or $macOSPassed -or $windowsPassed - $allSkipped = $linuxSkipped -and $macOSSkipped -and $windowsSkipped - - $Status = @( - [pscustomobject]@{ - Name = 'Linux' - Icon = $linuxSkipped ? '⚠️' : $linuxPassed ? '✅' : '❌' - Status = $linuxSkipped ? 'Skipped' : $linuxPassed ? 'Passed' : 'Failed' - } - [pscustomobject]@{ - Name = 'MacOS' - Icon = $macOSSkipped ? '⚠️' : $macOSPassed ? '✅' : '❌' - Status = $macOSSkipped ? 'Skipped' : $macOSPassed ? 'Passed' : 'Failed' - } - [pscustomobject]@{ - Name = 'Windows' - Icon = $windowsSkipped ? '⚠️' : $windowsPassed ? '✅' : '❌' - Status = $windowsSkipped ? 'Skipped' : $windowsPassed ? 'Passed' : 'Failed' - } - [pscustomobject]@{ - Name = 'Result' - Icon = $allSkipped ? '⚠️' : $anyPassed ? '✅' : '❌' - Status = $allSkipped ? 'Skipped' : $anyPassed ? 'Passed' : 'Failed' - } - ) - - Write-Host ($Status | Format-Table | Out-String) - ($Status | New-MDTable) | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Append - - if (-not $anyPassed -and -not $allSkipped) { - Write-Host "::[error]::No tests passed" - exit 1 - } - } - - LogGroup 'Data' { - $moduleName = [string]::IsNullOrEmpty('${{ inputs.Name }}') ? $env:GITHUB_REPOSITORY_NAME : '${{ inputs.Name }}' - $path = Join-Path -Path $env:GITHUB_WORKSPACE -ChildPath "${{ inputs.ModulesOutputPath }}\$moduleName" - $moduleManifestPath = Join-Path -Path $Path -ChildPath "$moduleName.psd1" - - # Obay module manifest overrides - $sourcePath = Join-Path -Path $env:GITHUB_WORKSPACE -ChildPath "${{ inputs.Path }}" - $sourceModuleManifestPath = Join-Path -Path $sourcePath -ChildPath "manifest.psd1" - if (Test-Path -Path $sourceModuleManifestPath) { - $sourceManifest = Import-PowerShellDataFile -Path $sourceModuleManifestPath - } - - $data = [pscustomobject]@{ - ModuleName = $moduleName - Path = $path - ModuleManifestPath = $moduleManifestPath - } - Write-Verbose ($data | Format-List | Out-String) -Verbose - - # If the source module manifest has a PowerShellVersion, use that, otherwise use the latest version. - $powerShellVersion = $sourceManifest.PowerShellVersion ?? '7.4' - Set-ModuleManifest -Path $moduleManifestPath -PowerShellVersion $powerShellVersion - - Add-ModuleManifestData -Path $moduleManifestPath -CompatiblePSEditions 'Core' - Add-ModuleManifestData -Path $moduleManifestPath -Tags 'PSEdition_Core' - - if ($linuxPassed) { - Add-ModuleManifestData -Path $moduleManifestPath -Tags 'Linux' - } - - if ($macOSPassed) { - Add-ModuleManifestData -Path $moduleManifestPath -Tags 'MacOS' - } - - if ($windowsPassed) { - Add-ModuleManifestData -Path $moduleManifestPath -Tags 'Windows' - } - } - - LogGroup 'Module Manifest - Source' { - Show-FileContent -Path $moduleManifestPath - } - - LogGroup 'Module Manifest' { - Show-FileContent -Path $moduleManifestPath - } + - uses: actions/configure-pages@v5 - - name: Upload module artifact - uses: actions/upload-artifact@v4 - with: - name: module - path: ${{ inputs.ModulesOutputPath }} - if-no-files-found: error - retention-days: 1 - overwrite: true + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 - PublishModule: - name: Publish module - if: ${{ needs.TestModuleStatus.result == 'success' && !cancelled() && github.event_name == 'pull_request' }} + Publish-Module: + if: ${{ needs.Get-Settings.result == 'success' && needs.Get-TestResults.result == 'success' && needs.Get-CodeCoverage.result == 'success' && needs.Build-Site.result == 'success' && !cancelled() && github.event_name == 'pull_request' }} needs: - - TestModuleStatus - - BuildDocs + - Get-Settings + - Get-TestResults + - Get-CodeCoverage + - Build-Site runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v4 - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - name: Initialize environment uses: PSModule/Initialize-PSModule@v1 with: @@ -710,38 +285,25 @@ jobs: uses: actions/download-artifact@v4 with: name: module - path: ${{ inputs.ModulesOutputPath }} + path: ${{ inputs.WorkingDirectory }}/outputs/module - name: Publish module - uses: PSModule/Publish-PSModule@v1 + uses: PSModule/Publish-PSModule@v2 with: - Name: ${{ inputs.Name }} - ModulePath: ${{ inputs.ModulesOutputPath }} + Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} + ModulePath: ${{ inputs.WorkingDirectory }}/outputs/module APIKey: ${{ secrets.APIKEY }} - WhatIf: ${{ inputs.TestProcess }} + WhatIf: ${{ github.repository == 'PSModule/Process-PSModule' }} Debug: ${{ inputs.Debug }} Prerelease: ${{ inputs.Prerelease }} Verbose: ${{ inputs.Verbose }} Version: ${{ inputs.Version }} - - PublishSite: - name: Publish documentation - if: ${{ inputs.PublishDocs && needs.BuildDocs.result == 'success' && !cancelled() && github.event_name == 'pull_request' && github.event.pull_request.merged == true }} - needs: - - TestModuleStatus - - BuildDocs - 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 - steps: - - name: Debug - if: ${{ inputs.Debug }} - uses: PSModule/Debug@v0 - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 + 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 }} diff --git a/.gitignore b/.gitignore index af4061f4..eea2b29c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,12 @@ -## Ignore Visual Studio Code temporary files, build results, and -## files generated by popular Visual Studio Code add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/Global/VisualStudioCode.gitignore +# VS Code files for those working on multiple tools .vscode/* !.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json !.vscode/extensions.json +!.vscode/*.code-snippets + *.code-workspace # Local History for Visual Studio Code -.history/ +.history/* diff --git a/LICENSE b/LICENSE index 92f43842..75789b63 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 PSModule +Copyright (c) 2025 PSModule Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index f700871a..28259b48 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,20 @@ # Process-PSModule -A workflow for the PSModule process, stitching together the `Initialize`, `Build`, `Document`, `Test`, and `Publish` actions to create a complete -CI/CD pipeline for PowerShell modules. The workflow is used by all PowerShell modules in the PSModule organization. - -## Specifications and practices - -Process-PSModule follows: - -- [Test-Driven Development](https://testdriven.io/test-driven-development/) using [Pester](https://pester.dev) and [PSScriptAnalyzer](https://learn.microsoft.com/en-us/powershell/utility-modules/psscriptanalyzer/overview?view=ps-modules) -- [GitHub Flow specifications](https://docs.github.com/en/get-started/using-github/github-flow) -- [SemVer 2.0.0 specifications](https://semver.org) -- [Continiuous Delivery practices](https://en.wikipedia.org/wiki/Continuous_delivery) +A workflow for crafting PowerShell modules using the PSModule framework, which builds, tests and publishes PowerShell modules to the PowerShell +Gallery and produces documentation that is published to GitHub Pages. The workflow is used by all PowerShell modules in the PSModule organization. + +## How to get started + +1. [Create a repository from the Template-Module](https://github.com/new?template_name=Template-PSModule&template_owner=PSModule&description=Add%20a%20description%20(required)&name=%3CModule%20name%3E). +1. Configure the repository: + 1. Enable GitHub Pages in the repository settings. Set it to deploy from `GitHub Actions`. + 1. This will create an environment called `github-pages` that GitHub deploys your site to. +
Within the environment, remove the branch protection for main. + Remove the branch protection on main +
+ 1. [Create an API key on the PowerShell Gallery](https://www.powershellgallery.com/account/apikeys). Give it enough permission to manage the module you are working on. + 1. Create a new secret in the repository called `APIKEY` and set it to the API key for the PowerShell Gallery. +1. Create a branch, make your changes, create a PR and let the workflow run. ## How it works @@ -20,13 +24,39 @@ Depending on the labels in the pull requests, the workflow will result in differ ![Process diagram](./media/Process-PSModule.png) -- [Test-PSModule](https://github.com/PSModule/Test-PSModule/) - Tests and lints the source code. This runs on 3 different environments to check compatibility. - - PowerShell LTS on Windows, Ubuntu and macOS. -- [Build-PSModule](https://github.com/PSModule/Build-PSModule/) - Compiles the repository into an efficient PowerShell module. -- [Document-PSModule](https://github.com/PSModule/Document-PSModule/) - Generates documentation and deploys it to GitHub Pages. -- [Test-PSModule](https://github.com/PSModule/Test-PSModule/) - Tests the compiled module. This runs on 4 different environments to check compatibility. - - PowerShell LTS on Windows, Ubuntu and macOS. -- [Publish-PSModule](https://github.com/PSModule/Publish-PSModule/) - Publishes the module to the PowerShell Gallery, docs to GitHub Pages, and creates a release on the GitHub repository. +- [Get settings](./.github/workflows/Get-Settings.yml) + - Reads the settings file from a file in the module repository to configure the workflow. + - Gathers tests and creates test configuration based on the settings and the tests available in the module repository. + - This includes the selection of what OSes to run the tests on. +- [Build module](./.github/workflows/Build-Module.yml) + - Compiles the module source code into a PowerShell module. +- [Test source code](./.github/workflows/Test-SourceCode.yml) + - Tests the source code in parallel (matrix) using [PSModule framework settings for style and standards for source code](https://github.com/PSModule/Test-PSModule?tab=readme-ov-file#sourcecode-tests) + - This produces a json based report that is used to later evaluate the results of the tests. +- [Lint source code](./.github/workflows/Lint-SourceCode.yml) + - Lints the source code in parallel (matrix) using [PSScriptAnalyzer rules](https://github.com/PSModule/Invoke-ScriptAnalyzer). + - This produces a json based report that is used to later evaluate the results of the linter. +- [Framework test](./.github/workflows/Test-Module.yml) + - Tests and lints the module in parallel (matrix) using [PSModule framework settings for style and standards foor modules](https://github.com/PSModule/Test-PSModule?tab=readme-ov-file#module-tests) + [PSScriptAnalyzer rules](https://github.com/PSModule/Invoke-ScriptAnalyzer). + - This produces a json based report that is used to later evaluate the results of the tests. +- [Test module](./.github/workflows/Test-ModuleLocal.yml) + - Import and tests the module in parallel (matrix) using Pester tests from the module repository. + - This produces a json based report that is used to later evaluate the results of the tests. +- [Get test results](./.github/workflows/Get-TestResults.yml) + - Gathers the test results from the previous steps and creates a summary of the results. + - If any tests have failed, the workflow will fail here. +- [Get code coverage](./.github/workflows/Get-CodeCoverage.yml) + - Gathers the code coverage from the previous steps and creates a summary of the results. + - If the code coverage is below the target, the workflow will fail here. +- [Build docs](./.github/workflows/Build-Docs.yml) + - Generates documentation and lints the documentation using [super-linter](https://github.com/super-linter/super-linter). +- [Build site](./.github/workflows/Build-Site.yml) + - Generates a static site using [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/). +- [Publish site](./.github/workflows/Publish-Site.yml) + - Publishes the static site with the module documentationto GitHub Pages. +- [Publish module](./.github/workflows/Publish-Module.yml) + - Publishes the module to the PowerShell Gallery. + - Creates a release on the GitHub repository. To use the workflow, create a new file in the `.github/workflows` directory of the module repository and add the following content.
@@ -57,11 +87,162 @@ permissions: jobs: Process-PSModule: uses: PSModule/Process-PSModule/.github/workflows/workflow.yml@v2 - secrets: inherit + secrets: + APIKEY: ${{ secrets.APIKEY }} + +``` +
+ +## Configuration + +The workflow is configured using a settings file in the module repository. +The file can be a `JSON`, `YAML` or `PSD1` file. By default it will look for `.github/PSModule.yml`. + +The following settings are available in the settings file: +Here's a Markdown-formatted table describing your PowerShell object structure clearly and concisely: + +| Name | Type | Description | Default | +|----------------------------------------|-----------|----------------------------------------------------------------------------------------------------------|---------------------| +| `Name` | `String` | Name of the module to publish. Defaults to repository name. | `null` | +| `Test.Skip` | `Boolean` | Skip all tests | `false` | +| `Test.Linux.Skip` | `Boolean` | Skip tests on Linux | `false` | +| `Test.MacOS.Skip` | `Boolean` | Skip tests on macOS | `false` | +| `Test.Windows.Skip` | `Boolean` | Skip tests on Windows | `false` | +| `Test.SourceCode.Skip` | `Boolean` | Skip source code tests | `false` | +| `Test.SourceCode.Linux.Skip` | `Boolean` | Skip source code tests on Linux | `false` | +| `Test.SourceCode.MacOS.Skip` | `Boolean` | Skip source code tests on macOS | `false` | +| `Test.SourceCode.Windows.Skip` | `Boolean` | Skip source code tests on Windows | `false` | +| `Test.PSModule.Skip` | `Boolean` | Skip PSModule framework tests | `false` | +| `Test.PSModule.Linux.Skip` | `Boolean` | Skip PSModule framework tests on Linux | `false` | +| `Test.PSModule.MacOS.Skip` | `Boolean` | Skip PSModule framework tests on macOS | `false` | +| `Test.PSModule.Windows.Skip` | `Boolean` | Skip PSModule framework tests on Windows | `false` | +| `Test.Module.Skip` | `Boolean` | Skip module tests | `false` | +| `Test.Module.Linux.Skip` | `Boolean` | Skip module tests on Linux | `false` | +| `Test.Module.MacOS.Skip` | `Boolean` | Skip module tests on macOS | `false` | +| `Test.Module.Windows.Skip` | `Boolean` | Skip module tests on Windows | `false` | +| `Test.TestResults.Skip` | `Boolean` | Skip test result processing | `false` | +| `Test.CodeCoverage.Skip` | `Boolean` | Skip code coverage tests | `false` | +| `Test.CodeCoverage.PercentTarget` | `Integer` | Target code coverage percentage | `0` | +| `Test.CodeCoverage.StepSummaryMode` | `String` | Step summary mode for code coverage reports | `'Missed, Files'` | +| `Build.Skip` | `Boolean` | Skip all build tasks | `false` | +| `Build.Module.Skip` | `Boolean` | Skip module build | `false` | +| `Build.Docs.Skip` | `Boolean` | Skip documentation build | `false` | +| `Build.Site.Skip` | `Boolean` | Skip site build | `false` | +| `Publish.Module.Skip` | `Boolean` | Skip module publishing | `false` | +| `Publish.Module.AutoCleanup` | `Boolean` | Automatically cleanup old prerelease module versions | `true` | +| `Publish.Module.AutoPatching` | `Boolean` | Automatically patch module version | `true` | +| `Publish.Module.IncrementalPrerelease` | `Boolean` | Use incremental prerelease versioning | `true` | +| `Publish.Module.DatePrereleaseFormat` | `String` | Format for date-based prerelease ([.NET DateTime](https://learn.microsoft.com/dotnet/standard/base-types/standard-date-and-time-format-strings)) | `''` | +| `Publish.Module.VersionPrefix` | `String` | Prefix for version tags | `'v'` | +| `Publish.Module.MajorLabels` | `String` | Labels indicating a major version bump | `'major, breaking'` | +| `Publish.Module.MinorLabels` | `String` | Labels indicating a minor version bump | `'minor, feature'` | +| `Publish.Module.PatchLabels` | `String` | Labels indicating a patch version bump | `'patch, fix'` | +| `Publish.Module.IgnoreLabels` | `String` | Labels indicating no release | `'NoRelease'` | + +
+`PSModule.yml` with all defaults + +```yml +Name: null + +Build: + Skip: false + Module: + Skip: false + Docs: + Skip: false + Site: + Skip: false + +Test: + Skip: false + Linux: + Skip: false + MacOS: + Skip: false + Windows: + Skip: false + SourceCode: + Skip: false + Linux: + Skip: false + MacOS: + Skip: false + Windows: + Skip: false + PSModule: + Skip: false + Linux: + Skip: false + MacOS: + Skip: false + Windows: + Skip: false + Module: + Skip: false + Linux: + Skip: false + MacOS: + Skip: false + Windows: + Skip: false + TestResults: + Skip: false + CodeCoverage: + Skip: false + PercentTarget: 0 + StepSummaryMode: 'Missed, Files' + +Publish: + Module: + Skip: false + AutoCleanup: true + AutoPatching: true + IncrementalPrerelease: true + DatePrereleaseFormat: '' + VersionPrefix: 'v' + MajorLabels: 'major, breaking' + MinorLabels: 'minor, feature' + PatchLabels: 'patch, fix' + IgnoreLabels: 'NoRelease' ```
+### Example 1 - Defaults with Code Coverage target + +This example runs all steps and will require that code coverage is 80% before passing. + +```yaml +Test: + CodeCoverage: + PercentTarget: 80 +``` + +### Example 2 - Rapid testing + +This example ends up running Get-Settings, Build-Module and Test-Module (tests from the module repo) on ubuntu-latest. + +```yaml +Test: + SourceCode: + Skip: true + PSModule: + Skip: true + Module: + MacOS: + Skip: true + Windows: + Skip: true + TestResults: + Skip: true + CodeCoverage: + Skip: true +Build: + Docs: + Skip: true +``` + ## Usage ### Inputs @@ -69,17 +250,12 @@ jobs: | Name | Type | Description | Required | Default | | ---- | ---- | ----------- | -------- | ------- | | `Name` | `string` | The name of the module to process. This defaults to the repository name if nothing is specified. | `false` | N/A | -| `Path` | `string` | The path to the source code of the module. | `false` | `src` | -| `ModulesOutputPath` | `string` | The path to the output directory for the modules. | `false` | `outputs/modules` | -| `DocsOutputPath` | `string` | The path to the output directory for the documentation. | `false` | `outputs/docs` | -| `PublishDocs` | `boolean` | Whether to publish the documentation using MkDocs and GitHub Pages. | `false` | `true` | -| `SiteOutputPath` | `string` | The path to the output directory for the site. | `false` | `outputs/site` | -| `SkipTests` | `string` | Defines what types of tests to skip. Allowed values are 'All', 'SourceCode', 'Module', 'None', 'macOS', 'Windows', 'Linux'. | `false` | `None` | -| `TestProcess` | `boolean` | Whether to test the process. | `false` | `false` | -| `Version` | `string` | Specifies the version of the GitHub module to be installed. The value must be an exact version. | `false` | N/A | +| `SettingsPath` | `string` | The path to the settings file. Settings in the settings file take precedence over the action inputs. | `false` | `.github/PSModule.yml` | +| `Version` | `string` | Specifies the version of the GitHub module to be installed. The value must be an exact version. | `false` | `''` | | `Prerelease` | `boolean` | Whether to use a prerelease version of the 'GitHub' module. | `false` | `false` | | `Debug` | `boolean` | Whether to enable debug output. Adds a `debug` step to every job. | `false` | `false` | | `Verbose` | `boolean` | Whether to enable verbose output. | `false` | `false` | +| `WorkingDirectory` | `string` | The path to the root of the repo. | `false` | `.` | ### Secrets @@ -88,8 +264,7 @@ in the workflow file. | Name | Location | Description | Default | | ---- | -------- | ----------- | ------- | -| `GITHUB_TOKEN` | `github` context | The token used to authenticate with GitHub. | `${{ secrets.GITHUB_TOKEN }}` | -| `APIKey` | GitHub secrets | The API key for the PowerShell Gallery. | N/A | +| `APIKEY` | GitHub secrets | The API key for the PowerShell Gallery. | N/A | | `TEST_APP_ENT_CLIENT_ID` | GitHub secrets | The client ID of an Enterprise GitHub App for running tests. | N/A | | `TEST_APP_ENT_PRIVATE_KEY` | GitHub secrets | The private key of an Enterprise GitHub App for running tests. | N/A | | `TEST_APP_ORG_CLIENT_ID` | GitHub secrets | The client ID of an Organization GitHub App for running tests. | N/A | @@ -123,12 +298,11 @@ permissions: For more info see [Deploy GitHub Pages site](https://github.com/marketplace/actions/deploy-github-pages-site). -## Compatibility +## Specifications and practices -The action is compatible with the following configurations: +Process-PSModule follows: -| OS | Shell | -| --- | --- | -| windows-latest | pwsh | -| macos-latest | pwsh | -| ubuntu-latest | pwsh | +- [Test-Driven Development](https://testdriven.io/test-driven-development/) using [Pester](https://pester.dev) and [PSScriptAnalyzer](https://learn.microsoft.com/en-us/powershell/utility-modules/psscriptanalyzer/overview?view=ps-modules) +- [GitHub Flow specifications](https://docs.github.com/en/get-started/using-github/github-flow) +- [SemVer 2.0.0 specifications](https://semver.org) +- [Continiuous Delivery practices](https://en.wikipedia.org/wiki/Continuous_delivery) diff --git a/media/.$Flow.drawio.bkp b/media/.$Flow.drawio.bkp new file mode 100644 index 00000000..95b111d1 --- /dev/null +++ b/media/.$Flow.drawio.bkp @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/Flow.drawio b/media/Flow.drawio new file mode 100644 index 00000000..b9fc274b --- /dev/null +++ b/media/Flow.drawio @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/Process-PSModule.png b/media/Process-PSModule.png index 9c15217e1a7d7cc516a6522e510e5b3135ceeb80..fffc573614ba7f6517eefd8e5ab265a44b402693 100644 GIT binary patch literal 119987 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%0D3EQib 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

qh_9hqQqz_H`IAA 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 diff --git a/media/pagesEnvironment.png b/media/pagesEnvironment.png new file mode 100644 index 0000000000000000000000000000000000000000..59f411d052b340fe39143871c6214ffd7878e021 GIT binary patch literal 26530 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 literal 0 HcmV?d00001 diff --git a/tests/srcTestRepo/tests/Environment.Tests.ps1 b/tests/srcTestRepo/tests/Environment.Tests.ps1 new file mode 100644 index 00000000..211be946 --- /dev/null +++ b/tests/srcTestRepo/tests/Environment.Tests.ps1 @@ -0,0 +1,15 @@ +Describe 'Environment Variables are available' { + It 'Should be available [<_>]' -ForEach @( + 'TEST_APP_ENT_CLIENT_ID', + 'TEST_APP_ENT_PRIVATE_KEY', + 'TEST_APP_ORG_CLIENT_ID', + 'TEST_APP_ORG_PRIVATE_KEY', + 'TEST_USER_ORG_FG_PAT', + 'TEST_USER_USER_FG_PAT', + 'TEST_USER_PAT' + ) { + $name = $_ + Write-Verbose "Environment variable: [$name]" -Verbose + Get-ChildItem env: | Where-Object { $_.Name -eq $name } | Should -Not -BeNullOrEmpty + } +} diff --git a/tests/srcTestRepo/tests/PSModuleTest.Tests.ps1 b/tests/srcTestRepo/tests/PSModuleTest.Tests.ps1 index 2be65edb..9bf1bb64 100644 --- a/tests/srcTestRepo/tests/PSModuleTest.Tests.ps1 +++ b/tests/srcTestRepo/tests/PSModuleTest.Tests.ps1 @@ -6,22 +6,6 @@ Param( ) Write-Verbose "Path to the module: [$Path]" -Verbose -Describe 'Environment Variables are available' { - It 'Should be available [<_>]' -ForEach @( - 'TEST_APP_ENT_CLIENT_ID', - 'TEST_APP_ENT_PRIVATE_KEY', - 'TEST_APP_ORG_CLIENT_ID', - 'TEST_APP_ORG_PRIVATE_KEY', - 'TEST_USER_ORG_FG_PAT', - 'TEST_USER_USER_FG_PAT', - 'TEST_USER_PAT' - ) { - $name = $_ - Write-Verbose "Environment variable: [$name]" -Verbose - Get-ChildItem env: | Where-Object { $_.Name -eq $name } | Should -Not -BeNullOrEmpty - } -} - Describe 'PSModuleTest.Tests.ps1' { Context 'Function: Test-PSModuleTest' { It 'Should be able to call the function' { diff --git a/tests/srcWithManifestTestRepo/.github/PSModule.json b/tests/srcWithManifestTestRepo/.github/PSModule.json new file mode 100644 index 00000000..b175eeb5 --- /dev/null +++ b/tests/srcWithManifestTestRepo/.github/PSModule.json @@ -0,0 +1,22 @@ +{ + "Name": "PSModuleTest", + "Test": { + "SourceCode": { + "Skip": true + }, + "PSModule": { + "Linux": { + "Skip": true + } + }, + "Module": { + "Skip": false + }, + "CodeCoverage": { + "PercentTarget": 1 + } + }, + "Publish": { + "AutoCleanup": false + } +} diff --git a/tests/srcWithManifestTestRepo/.github/PSModule.psd1 b/tests/srcWithManifestTestRepo/.github/PSModule.psd1 new file mode 100644 index 00000000..e680e8fd --- /dev/null +++ b/tests/srcWithManifestTestRepo/.github/PSModule.psd1 @@ -0,0 +1,22 @@ +@{ + Name = 'PSModuleTest' + Test = @{ + SourceCode = @{ + Skip = $true + } + PSModule = @{ + Linux = @{ + Skip = $true + } + } + Module = @{ + Skip = $false + } + CodeCoverage = @{ + PercentTarget = 1 + } + } + Publish = @{ + AutoCleanup = $false + } +} diff --git a/tests/srcWithManifestTestRepo/.github/PSModule.yml b/tests/srcWithManifestTestRepo/.github/PSModule.yml new file mode 100644 index 00000000..d285c1ed --- /dev/null +++ b/tests/srcWithManifestTestRepo/.github/PSModule.yml @@ -0,0 +1,13 @@ +Name: PSModuleTest +Test: + SourceCode: + Skip: true + PSModule: + Linux: + Skip: true + Module: + Skip: false + CodeCoverage: + PercentTarget: 1 +Publish: + AutoCleanup: false diff --git a/tests/srcWithManifestTestRepo/tests/Environments/Environment.Tests.ps1 b/tests/srcWithManifestTestRepo/tests/Environments/Environment.Tests.ps1 new file mode 100644 index 00000000..211be946 --- /dev/null +++ b/tests/srcWithManifestTestRepo/tests/Environments/Environment.Tests.ps1 @@ -0,0 +1,15 @@ +Describe 'Environment Variables are available' { + It 'Should be available [<_>]' -ForEach @( + 'TEST_APP_ENT_CLIENT_ID', + 'TEST_APP_ENT_PRIVATE_KEY', + 'TEST_APP_ORG_CLIENT_ID', + 'TEST_APP_ORG_PRIVATE_KEY', + 'TEST_USER_ORG_FG_PAT', + 'TEST_USER_USER_FG_PAT', + 'TEST_USER_PAT' + ) { + $name = $_ + Write-Verbose "Environment variable: [$name]" -Verbose + Get-ChildItem env: | Where-Object { $_.Name -eq $name } | Should -Not -BeNullOrEmpty + } +} diff --git a/tests/srcWithManifestTestRepo/tests/PSModuleTest.Tests.ps1 b/tests/srcWithManifestTestRepo/tests/MyTests/PSModuleTest.Tests.ps1 similarity index 74% rename from tests/srcWithManifestTestRepo/tests/PSModuleTest.Tests.ps1 rename to tests/srcWithManifestTestRepo/tests/MyTests/PSModuleTest.Tests.ps1 index 2be65edb..9bf1bb64 100644 --- a/tests/srcWithManifestTestRepo/tests/PSModuleTest.Tests.ps1 +++ b/tests/srcWithManifestTestRepo/tests/MyTests/PSModuleTest.Tests.ps1 @@ -6,22 +6,6 @@ Param( ) Write-Verbose "Path to the module: [$Path]" -Verbose -Describe 'Environment Variables are available' { - It 'Should be available [<_>]' -ForEach @( - 'TEST_APP_ENT_CLIENT_ID', - 'TEST_APP_ENT_PRIVATE_KEY', - 'TEST_APP_ORG_CLIENT_ID', - 'TEST_APP_ORG_PRIVATE_KEY', - 'TEST_USER_ORG_FG_PAT', - 'TEST_USER_USER_FG_PAT', - 'TEST_USER_PAT' - ) { - $name = $_ - Write-Verbose "Environment variable: [$name]" -Verbose - Get-ChildItem env: | Where-Object { $_.Name -eq $name } | Should -Not -BeNullOrEmpty - } -} - Describe 'PSModuleTest.Tests.ps1' { Context 'Function: Test-PSModuleTest' { It 'Should be able to call the function' { diff --git a/tests/srcWithManifestTestRepo/tools/1-build.ps1 b/tests/srcWithManifestTestRepo/tools/1-build.ps1 index f3a17f23..e762395b 100644 --- a/tests/srcWithManifestTestRepo/tools/1-build.ps1 +++ b/tests/srcWithManifestTestRepo/tools/1-build.ps1 @@ -1 +1 @@ -Write-Host "1 - Build script executed." +"1 - Build script executed." diff --git a/tests/srcWithManifestTestRepo/tools/2-build.ps1 b/tests/srcWithManifestTestRepo/tools/2-build.ps1 index d839b516..d2575a02 100644 --- a/tests/srcWithManifestTestRepo/tools/2-build.ps1 +++ b/tests/srcWithManifestTestRepo/tools/2-build.ps1 @@ -1 +1 @@ -Write-Host "2 - Build script executed." +"2 - Build script executed." From 4e5d875c9f83f459a50d580f91db83ddc5e58b12 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sun, 20 Apr 2025 10:48:48 +0200 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=AA=B2=20[Fix]:=20Restore=20use=20of?= =?UTF-8?q?=20`GITHUB=5FTOKEN`=20and=20`Prescript`=20on=20module=20tests?= =?UTF-8?q?=20(#161)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description This pull request reverts changes to the `.github/workflows/Test-ModuleLocal.yml` file to restore testing capabilities and module loading performance. Details: * Restored the `GITHUB_TOKEN` environment variable mapping, allowing it to be used in tests once more. * Restored the `Prescript` step to preload the module with a specific version, optimizing module loading during Pester tests. --- .github/workflows/Test-ModuleLocal.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/Test-ModuleLocal.yml b/.github/workflows/Test-ModuleLocal.yml index 82037bf0..9f16e948 100644 --- a/.github/workflows/Test-ModuleLocal.yml +++ b/.github/workflows/Test-ModuleLocal.yml @@ -114,6 +114,7 @@ jobs: TEST_USER_ORG_FG_PAT: ${{ secrets.TEST_USER_ORG_FG_PAT }} TEST_USER_USER_FG_PAT: ${{ secrets.TEST_USER_USER_FG_PAT }} TEST_USER_PAT: ${{ secrets.TEST_USER_PAT }} + GITHUB_TOKEN: ${{ github.token }} # Used in tests! with: Debug: ${{ inputs.Debug }} Prerelease: ${{ inputs.Prerelease }} @@ -129,3 +130,5 @@ jobs: Path: ${{ inputs.TestPath }} Run_Path: ${{ steps.import-module.outputs.path }} WorkingDirectory: ${{ inputs.WorkingDirectory }} + Prescript: | # This is to speed up module loading in Pester. + Import-Module -Name '${{ steps.import-module.outputs.name }}' -RequiredVersion 999.0.0 From d0f553db583b179b0bf2dfe22b89d02fe7fbac2f Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Thu, 1 May 2025 18:04:50 +0200 Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=AA=B2=20[Fix]:=20Update=20PSResource?= =?UTF-8?q?Get=20to=20latest=20during=20`Publish-PSModule`=20(#163)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description This pull request introduces a small but important update to the GitHub Actions workflow configuration. It ensures that the latest version of the `Microsoft.PowerShell.PSResourceGet` module is installed before publishing a PowerShell module. - Fixes https://github.com/PSModule/NerdFonts/issues/33 * [`.github/workflows/workflow.yml`](diffhunk://#diff-126bf89616b7daa3d14ebc882ad18666aaf1c3dae888c4ba306a66ec80758bc1R290-R294): Added a step to install the `Microsoft.PowerShell.PSResourceGet` module from the PSGallery repository using `Install-PSResource`. ## Type of change - [ ] 📖 [Docs] - [x] 🪲 [Fix] - [ ] 🩹 [Patch] - [ ] ⚠️ [Security fix] - [ ] 🚀 [Feature] - [ ] 🌟 [Breaking change] ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas --- .github/workflows/workflow.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index bc750250..79b22623 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -287,6 +287,11 @@ jobs: 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@v2 with: From 0de5aa65a682ba44edd675ef07e9ca8526a03726 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Wed, 21 May 2025 00:59:44 +0200 Subject: [PATCH 4/8] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Add=20installatio?= =?UTF-8?q?n=20of=20`PSCustomObject`=20on=20`Test-ModuleLocal`=20(#166)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description This pull request updates the `.github/workflows/Test-ModuleLocal.yml` file to optimize module loading during Pester tests by installing a required PowerShell resource. Workflow optimization: * [`.github/workflows/Test-ModuleLocal.yml`](diffhunk://#diff-bc9fc4fcc46bb3f5c486f48b3708cb239d73c94b983b4e72815d093825c94581R134): Added a step to install the `PSCustomObject` module from the `PSGallery` repository to streamline module loading in Pester. ## Type of change - [ ] 📖 [Docs] - [ ] 🪲 [Fix] - [x] 🩹 [Patch] - [ ] ⚠️ [Security fix] - [ ] 🚀 [Feature] - [ ] 🌟 [Breaking change] ## Checklist - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas --- .github/workflows/Test-ModuleLocal.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/Test-ModuleLocal.yml b/.github/workflows/Test-ModuleLocal.yml index 9f16e948..b7b9654b 100644 --- a/.github/workflows/Test-ModuleLocal.yml +++ b/.github/workflows/Test-ModuleLocal.yml @@ -131,4 +131,5 @@ jobs: Run_Path: ${{ steps.import-module.outputs.path }} WorkingDirectory: ${{ inputs.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 999.0.0 From f5eba0bb609b9e6cd652badc1a9c7887aacf51d2 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Mon, 2 Jun 2025 01:39:19 +0200 Subject: [PATCH 5/8] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Remove=20redundan?= =?UTF-8?q?t=20actions=20(#170)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description This pull request simplifies the workflow configuration by removing the `Initialize-PSModule` step from two GitHub Actions workflows. This change reduces redundancy and streamlines the build and artifact download processes. Workflow updates: * [`.github/workflows/Build-Module.yml`](diffhunk://#diff-288da0616802a69b7e5aa63f771fe1525eda2ec5b576e26423f28380b2e68833L47-L55): Removed the `Initialize-PSModule` step, which previously set up the environment for building the module. * [`.github/workflows/workflow.yml`](diffhunk://#diff-126bf89616b7daa3d14ebc882ad18666aaf1c3dae888c4ba306a66ec80758bc1L276-L283): Removed the `Initialize-PSModule` step, which was used to prepare the environment before downloading module artifacts. ## Type of change - [ ] 📖 [Docs] - [ ] 🪲 [Fix] - [x] 🩹 [Patch] - [ ] ⚠️ [Security fix] - [ ] 🚀 [Feature] - [ ] 🌟 [Breaking change] ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas --- .github/workflows/Build-Module.yml | 9 --------- .github/workflows/workflow.yml | 8 -------- 2 files changed, 17 deletions(-) diff --git a/.github/workflows/Build-Module.yml b/.github/workflows/Build-Module.yml index b61fd893..23d4ef3b 100644 --- a/.github/workflows/Build-Module.yml +++ b/.github/workflows/Build-Module.yml @@ -44,15 +44,6 @@ jobs: - name: Checkout Code uses: actions/checkout@v4 - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - WorkingDirectory: ${{ inputs.WorkingDirectory }} - - name: Build module uses: PSModule/Build-PSModule@v4 with: diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 79b22623..3b0e331a 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -273,14 +273,6 @@ jobs: - name: Checkout Code uses: actions/checkout@v4 - - name: Initialize environment - uses: PSModule/Initialize-PSModule@v1 - with: - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} - - name: Download module artifact uses: actions/download-artifact@v4 with: From f1008b1fa7f30e82bd6d43c525962bb82c162381 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Mon, 2 Jun 2025 03:38:23 +0200 Subject: [PATCH 6/8] =?UTF-8?q?=F0=9F=AA=B2=20[Fix]:=20Access=20to=20GH=5F?= =?UTF-8?q?TOKEN=20and=20Get-Settings=20for=20Name=20(#171)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description This pull request includes updates to the workflow files to improve clarity and functionality. The changes primarily focus on refining conditional logic in PowerShell scripts and enhancing environment variable handling in GitHub Actions. ### Workflow improvements: * [`.github/workflows/Get-Settings.yml`](diffhunk://#diff-68f351d419a9b4db4797434891d5dfad44d83de65bfee7ba1c60badae369dbefL134-R140): Updated the conditional logic for determining the `$name` variable to use explicit `if-elseif-else` statements, improving readability and maintainability. ### Environment variable and input adjustments: * [`.github/workflows/workflow.yml`](diffhunk://#diff-126bf89616b7daa3d14ebc882ad18666aaf1c3dae888c4ba306a66ec80758bc1R289-L297): Added the `GH_TOKEN` environment variable to the `Publish module` step to ensure authentication is handled securely. * [`.github/workflows/workflow.yml`](diffhunk://#diff-126bf89616b7daa3d14ebc882ad18666aaf1c3dae888c4ba306a66ec80758bc1R305): Reintroduced the `WorkingDirectory` input to the `Publish module` step for better modularity and flexibility in specifying paths. ## Type of change - [ ] 📖 [Docs] - [x] 🪲 [Fix] - [ ] 🩹 [Patch] - [ ] ⚠️ [Security fix] - [ ] 🚀 [Feature] - [ ] 🌟 [Breaking change] ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas --- .github/workflows/Get-Settings.yml | 8 +++++++- .github/workflows/workflow.yml | 9 ++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/Get-Settings.yml b/.github/workflows/Get-Settings.yml index a954ace8..fceff39d 100644 --- a/.github/workflows/Get-Settings.yml +++ b/.github/workflows/Get-Settings.yml @@ -131,7 +131,13 @@ jobs: RepositoryName = $env:GITHUB_REPOSITORY_NAME } | Format-List | Out-String - $name = ![string]::IsNullOrEmpty($inputName) ? $name : ![string]::IsNullOrEmpty($settings.Name) ? $settings.Name : $env:GITHUB_REPOSITORY_NAME + if (![string]::IsNullOrEmpty($inputName)) { + $name = $inputName + } elseif (![string]::IsNullOrEmpty($settings.Name)) { + $name = $settings.Name + } else { + $name = $env:GITHUB_REPOSITORY_NAME + } Write-Host "Using [$name] as the module name." } diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 3b0e331a..dc94bd8e 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -286,15 +286,13 @@ jobs: - name: Publish module uses: PSModule/Publish-PSModule@v2 + env: + GH_TOKEN: ${{ github.token }} with: Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} - ModulePath: ${{ inputs.WorkingDirectory }}/outputs/module + ModulePath: outputs/module APIKey: ${{ secrets.APIKEY }} WhatIf: ${{ github.repository == 'PSModule/Process-PSModule' }} - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} 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 }} @@ -304,3 +302,4 @@ jobs: 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 }} From 7120d0c33e09fb503486289da5b3da2fa96a2270 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Mon, 2 Jun 2025 04:01:20 +0200 Subject: [PATCH 7/8] =?UTF-8?q?=F0=9F=AA=B2=20[Fix]:=20Fix=20issue=20with?= =?UTF-8?q?=20parameters=20and=20GitHub=20token=20access=20(#172)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description This pull request updates several GitHub Actions workflows to simplify input parameters and improve artifact handling. Key changes include the removal of unused parameters (`Debug`, `Verbose`, `Version`, and `Prerelease`) and the addition of an `ArtifactName` parameter for uploading artifacts. Additionally, environment variables are introduced for authentication. ### Simplification of input parameters: * [`.github/workflows/Build-Module.yml`](diffhunk://#diff-288da0616802a69b7e5aa63f771fe1525eda2ec5b576e26423f28380b2e68833L10-R14): Removed unused parameters (`Debug`, `Verbose`, `Version`, and `Prerelease`) and added a new `ArtifactName` parameter to specify the name of the artifact to upload. [[1]](diffhunk://#diff-288da0616802a69b7e5aa63f771fe1525eda2ec5b576e26423f28380b2e68833L10-R14) [[2]](diffhunk://#diff-288da0616802a69b7e5aa63f771fe1525eda2ec5b576e26423f28380b2e68833L51-R38) ### Environment variable addition: * [`.github/workflows/Build-Module.yml`](diffhunk://#diff-288da0616802a69b7e5aa63f771fe1525eda2ec5b576e26423f28380b2e68833R28-R29): Added the `GH_TOKEN` environment variable for authentication using GitHub's token. ### Consistency across workflows: * `.github/workflows/CI.yml` and `.github/workflows/workflow.yml`: Removed references to unused parameters (`Debug`, `Verbose`, `Version`, and `Prerelease`) to align with the updated `Build-Module.yml`. [[1]](diffhunk://#diff-3ab46ee209a127470fce3c2cf106b1a1dbadbb929a4b5b13656a4bc4ce19c0b8L90-L93) [[2]](diffhunk://#diff-126bf89616b7daa3d14ebc882ad18666aaf1c3dae888c4ba306a66ec80758bc1L92-L95) ## Type of change - [ ] 📖 [Docs] - [x] 🪲 [Fix] - [ ] 🩹 [Patch] - [ ] ⚠️ [Security fix] - [ ] 🚀 [Feature] - [ ] 🌟 [Breaking change] ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas --- .github/workflows/Build-Module.yml | 28 ++++++---------------------- .github/workflows/CI.yml | 4 ---- .github/workflows/workflow.yml | 4 ---- 3 files changed, 6 insertions(+), 30 deletions(-) diff --git a/.github/workflows/Build-Module.yml b/.github/workflows/Build-Module.yml index 23d4ef3b..3dc37fe3 100644 --- a/.github/workflows/Build-Module.yml +++ b/.github/workflows/Build-Module.yml @@ -7,26 +7,11 @@ on: type: string description: The name of the module to process. Scripts default to the repository name if nothing is specified. required: false - Debug: - type: boolean - description: Enable debug output. - required: false - default: false - Verbose: - type: boolean - description: Enable verbose output. - required: false - default: false - Version: + ArtifactName: 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. + description: Name of the artifact to upload. required: false - default: false + default: module WorkingDirectory: type: string description: The working directory where the script will run from. @@ -40,6 +25,8 @@ jobs: Build-Module: name: Build-Module runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ github.token }} steps: - name: Checkout Code uses: actions/checkout@v4 @@ -48,8 +35,5 @@ jobs: uses: PSModule/Build-PSModule@v4 with: Name: ${{ inputs.Name }} - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} + ArtifactName: ${{ inputs.ArtifactName }} WorkingDirectory: ${{ inputs.WorkingDirectory }} diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 1227576c..30ab8859 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -87,10 +87,6 @@ jobs: - Get-Settings with: Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} WorkingDirectory: ${{ inputs.WorkingDirectory }} Build-Docs: diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index dc94bd8e..c2f7ac8c 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -89,10 +89,6 @@ jobs: - Get-Settings with: Name: ${{ fromJson(needs.Get-Settings.outputs.Settings).Name }} - Debug: ${{ inputs.Debug }} - Prerelease: ${{ inputs.Prerelease }} - Verbose: ${{ inputs.Verbose }} - Version: ${{ inputs.Version }} WorkingDirectory: ${{ inputs.WorkingDirectory }} Build-Docs: From aabfd7c50496f2be55948340368365ab95866fb5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Aug 2025 12:36:01 +0200 Subject: [PATCH 8/8] Bump actions/download-artifact from 4 to 5 (#181) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 5.
    Release notes

    Sourced from actions/download-artifact's releases.

    v5.0.0

    What's Changed

    v5.0.0

    🚨 Breaking Change

    This release fixes an inconsistency in path behavior for single artifact downloads by ID. If you're downloading single artifacts by ID, the output path may change.

    What Changed

    Previously, single artifact downloads behaved differently depending on how you specified the artifact:

    • By name: name: my-artifact → extracted to path/ (direct)
    • By ID: artifact-ids: 12345 → extracted to path/my-artifact/ (nested)

    Now both methods are consistent:

    • By name: name: my-artifact → extracted to path/ (unchanged)
    • By ID: artifact-ids: 12345 → extracted to path/ (fixed - now direct)

    Migration Guide

    ✅ No Action Needed If:
    • You download artifacts by name
    • You download multiple artifacts by ID
    • You already use merge-multiple: true as a workaround
    ⚠️ Action Required If:

    You download single artifacts by ID and your workflows expect the nested directory structure.

    Before v5 (nested structure):

    - uses: actions/download-artifact@v4
      with:
        artifact-ids: 12345
        path: dist
    # Files were in: dist/my-artifact/
    

    Where my-artifact is the name of the artifact you previously uploaded

    To maintain old behavior (if needed):

    </tr></table>
    

    ... (truncated)

    Commits
    • 634f93c Merge pull request #416 from actions/single-artifact-id-download-path
    • b19ff43 refactor: resolve download path correctly in artifact download tests (mainly ...
    • e262cbe bundle dist
    • bff23f9 update docs
    • fff8c14 fix download path logic when downloading a single artifact by id
    • 448e3f8 Merge pull request #407 from actions/nebuk89-patch-1
    • 47225c4 Update README.md
    • See full diff in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/download-artifact&package-manager=github_actions&previous-version=4&new-version=5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/Build-Docs.yml | 2 +- .github/workflows/Build-Site.yml | 2 +- .github/workflows/Test-Module.yml | 4 ++-- .github/workflows/Test-ModuleLocal.yml | 2 +- .github/workflows/workflow.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/Build-Docs.yml b/.github/workflows/Build-Docs.yml index 1e21ffdc..3a181d89 100644 --- a/.github/workflows/Build-Docs.yml +++ b/.github/workflows/Build-Docs.yml @@ -47,7 +47,7 @@ jobs: fetch-depth: 0 - name: Download module artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: module path: ${{ inputs.WorkingDirectory }}/outputs/module diff --git a/.github/workflows/Build-Site.yml b/.github/workflows/Build-Site.yml index dc98a559..232a36f7 100644 --- a/.github/workflows/Build-Site.yml +++ b/.github/workflows/Build-Site.yml @@ -50,7 +50,7 @@ jobs: uses: PSModule/Install-PSModuleHelpers@v1 - name: Download docs artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: docs path: ${{ inputs.WorkingDirectory }}/outputs/docs diff --git a/.github/workflows/Test-Module.yml b/.github/workflows/Test-Module.yml index e97ecfa7..cb68552c 100644 --- a/.github/workflows/Test-Module.yml +++ b/.github/workflows/Test-Module.yml @@ -84,7 +84,7 @@ jobs: uses: actions/checkout@v4 - name: Download module artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: module path: ${{ inputs.WorkingDirectory }}/outputs/module @@ -105,7 +105,7 @@ jobs: runs-on: ${{ inputs.RunsOn }} steps: - name: Download module artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: module path: ${{ inputs.WorkingDirectory }}/outputs/module diff --git a/.github/workflows/Test-ModuleLocal.yml b/.github/workflows/Test-ModuleLocal.yml index b7b9654b..9f584c98 100644 --- a/.github/workflows/Test-ModuleLocal.yml +++ b/.github/workflows/Test-ModuleLocal.yml @@ -85,7 +85,7 @@ jobs: uses: actions/checkout@v4 - name: Download module artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: module path: ${{ inputs.WorkingDirectory }}/outputs/module diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index c2f7ac8c..08f7af86 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -270,7 +270,7 @@ jobs: uses: actions/checkout@v4 - name: Download module artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: module path: ${{ inputs.WorkingDirectory }}/outputs/module