ci: use modulefast (#195) #441
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
env: | |
MODULE_NAME: Alt3.Docusaurus.Powershell | |
jobs: | |
# compile the module | |
build: | |
name: Build Module | |
runs-on: windows-latest | |
steps: | |
- name: Show Powershell Version | |
shell: pwsh | |
run: $PSVersionTable.PSVersion | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install GitVersion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
versionSpec: '5.x' | |
- name: Execute GitVersion | |
id: gitversion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
useConfigFile: true | |
- name: Install required PowerShell modules | |
uses: JustinGrote/ModuleFast-action@main | |
with: | |
path: ${{github.workspace}}/Dev/RequiredModules.psd1 | |
- name: Build module | |
id: build | |
uses: PoshCode/actions/build-module@main | |
with: | |
path: ${{github.workspace}}/Source | |
version: ${{ steps.gitversion.outputs.LegacySemVerPadded }} | |
destination: ${{github.workspace}}/output | |
- name: Upload artifact Modules | |
uses: actions/upload-artifact@v4 | |
id: upload-artifact-modules | |
with: | |
name: Modules | |
path: ${{github.workspace}}/output | |
- name: Upload artifact PesterTests | |
uses: actions/upload-artifact@v4 | |
with: | |
name: PesterTests | |
path: ${{github.workspace}}/Tests | |
- name: Upload artifact RequiredModules | |
uses: actions/upload-artifact@v4 | |
with: | |
name: RequiredModules | |
path: ${{github.workspace}}/Dev/RequiredModules.psd1 | |
- name: Upload artifact PSScriptAnalyzer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: PSScriptAnalyzer | |
path: ${{github.workspace}}/PSScriptAnalyzerSettings.psd1 | |
# enforce code quality | |
lint: | |
name: PSScriptAnalyzer | |
runs-on: windows-latest | |
needs: build | |
steps: | |
- name: Show Powershell Version | |
shell: pwsh | |
run: $PSVersionTable.PSVersion | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Display folder structure | |
run: ls -R | |
- name : Run PSScriptAnalyzer | |
id: analyze | |
shell: pwsh | |
run: | | |
$result = Invoke-ScriptAnalyzer -Settings ./PSScriptAnalyzerSettings.psd1 -Path . -Recurse | Select-Object -Property RuleName, Severity, ScriptPath, Line, Column | |
if (-not $result) { | |
exit 0 | |
} | |
$result | |
Write-Output "PSScriptAnalyzer failed with $($result.count) errors" | |
exit 1 | |
# run pester tests | |
test: | |
name: Pester Tests | |
runs-on: ${{ matrix.os }} | |
needs: build | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- windows-2019 # https://github.com/actions/virtual-environments | |
- windows-2022 | |
- ubuntu-20.04 | |
- ubuntu-22.04 | |
- macos-12 | |
- macos-13 | |
- macos-14 | |
steps: | |
- name: Show Powershell Version | |
shell: pwsh | |
run: $PSVersionTable.PSVersion | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
- name: Display structure of downloaded artifacts | |
run: ls -R | |
- name: Install required PowerShell modules | |
uses: JustinGrote/ModuleFast-action@main | |
with: | |
path: ${{github.workspace}}/RequiredModules/RequiredModules.psd1 # downloaded artifact path | |
- uses: PoshCode/Actions/pester@main | |
with: | |
codeCoveragePath: Modules/${{env.MODULE_NAME}} | |
moduleUnderTest: ${{env.MODULE_NAME}} | |
additionalModulePaths: ${{github.workspace}}/Modules | |
- name: Upload artifact PesterResults | |
uses: actions/upload-artifact@v4 | |
if: matrix.os == 'windows-2022' # only execute on this OS | |
with: | |
name: PesterResults | |
path: ${{github.workspace}}/*.xml | |
# ----------------------------------------------------------------------------- | |
# Publishing stage: | |
# - is skipped completely UNLESS on the main branch | |
# - is skipped completely UNLESS the commit message contains "[release]" | |
# - the psgallery published manifest already contains the bumped module version | |
# - the bump-main step bumps copies the artifact manifest to main to match | |
# the PSGallery-published version (without adding [release] to the commit | |
# message) | |
# ----------------------------------------------------------------------------- | |
publish: | |
name: Publish | |
runs-on: windows-latest | |
needs: [test, lint] | |
if: ${{ github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, '[release]')}} | |
steps: | |
- name: Show Powershell Version | |
shell: pwsh | |
run: $PSVersionTable.PSVersion | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install GitVersion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
versionSpec: '5.x' | |
- name: Execute GitVersion | |
id: gitversion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
useConfigFile: true | |
- name: Download Artifacts | |
uses: actions/download-artifact@v4 | |
- name: Publish to PSGallery | |
uses: ./.github/actions/psgallery-publisher | |
env: | |
PSGALLERY_API_KEY: ${{ secrets.PSGALLERY_API_KEY }} | |
with: | |
modulePath: Modules/${{env.MODULE_NAME}} | |
- name: Bump Manifest Version on Main | |
id: bumpMain | |
uses: ./.github/actions/bump-main | |
with: | |
artifactPath: Modules/${{env.MODULE_NAME}} | |
- name: Create Github Release | |
uses: softprops/action-gh-release@v1 | |
with: | |
name: Release ${{ steps.gitversion.outputs.LegacySemVerPadded }} | |
tag_name: ${{ env.GitVersion_LegacySemVerPadded }} | |
target_commitish: main | |
draft: false | |
prerelease: false | |
generate_release_notes: true |