Skip to content

ci: use modulefast (#195) #441

ci: use modulefast (#195)

ci: use modulefast (#195) #441

Workflow file for this run

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