Skip to content

Add PSScriptAnalyzer & Docs workflow #184

Add PSScriptAnalyzer & Docs workflow

Add PSScriptAnalyzer & Docs workflow #184

Workflow file for this run

name: SteamPS CI/CD workflow
on:
push:
branches:
- main
- master
pull_request:
branches:
- main
- master
release:
types:
- published
env:
DOTNET_CLI_TELEMETRY_OPTOUT: 1
POWERSHELL_TELEMETRY_OPTOUT: 1
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
DOTNET_NOLOGO: true
BUILD_CONFIGURATION: ${{ fromJSON('["Debug", "Release"]')[startsWith(github.ref, 'refs/tags/v')] }}
jobs:
build:
name: 👷 Build
runs-on: windows-latest
steps:
- name: 🚚 Check out repository
uses: actions/checkout@v4
- name: 🐛 Build module - Debug
shell: pwsh
run: ./build.ps1 -Configuration $env:BUILD_CONFIGURATION -Task Build
if: ${{ env.BUILD_CONFIGURATION == 'Debug' }}
- name: 🚀 Build module - Publish
shell: pwsh
run: ./build.ps1 -Configuration $env:BUILD_CONFIGURATION -Task Build
if: ${{ env.BUILD_CONFIGURATION == 'Release' }}
- name: 📦 Capture PowerShell Module
uses: actions/upload-artifact@v4
with:
name: PSModule
path: output/*.nupkg
test:
name: 🧪 Test
needs:
- build
runs-on: ${{ matrix.info.os }}
strategy:
fail-fast: false
matrix:
info:
- name: 🪟 Win2019_PS-5.1
psversion: '5.1'
os: windows-2019
- name: 🪟 Win2019_PS-7
psversion: '7'
os: windows-2019
- name: 🪟 Win2022_PS-5.1
psversion: '5.1'
os: windows-latest
- name: 🪟 Win2022_PS-7
psversion: '7'
os: windows-latest
steps:
- name: 🚚 Checkout
uses: actions/checkout@v4
- name: ➕ Restore Built PowerShell Module
uses: actions/download-artifact@v4
with:
name: PSModule
path: output
- name: 📦 Install Built PowerShell Module
shell: pwsh
run: |
# Get the manifest from the newly built module.
$manifestItem = Get-Item ([IO.Path]::Combine('SteamPS', '*.psd1'))
$moduleName = $manifestItem.BaseName
$Manifest = Test-ModuleManifest -Path $manifestItem.FullName -ErrorAction SilentlyContinue -WarningAction Ignore
if ($env:BUILD_CONFIGURATION -eq 'Release') {
$Version = $env:GITHUB_REF -replace '^refs/tags/v(\d+\.\d+\.\d+)', '$1'
} else {
$Version = $Manifest.Version
}
$destPath = [IO.Path]::Combine('output', $moduleName, $Version)
if (-not (Test-Path -LiteralPath $destPath)) {
New-Item -Path $destPath -ItemType Directory | Out-Null
}
Get-ChildItem output/*.nupkg | Rename-Item -NewName { $_.Name -replace '.nupkg', '.zip' }
Expand-Archive -Path output/*.zip -DestinationPath $destPath -Force -ErrorAction Stop
- name: 🧪 Run Tests - Windows PowerShell
if: ${{ matrix.info.psversion == '5.1' }}
shell: powershell
run: ./build.ps1 -Configuration $env:BUILD_CONFIGURATION -Task Test
- name: 🧪 Run Tests - PowerShell
if: ${{ matrix.info.psversion != '5.1' }}
shell: pwsh
run: ./build.ps1 -Configuration $env:BUILD_CONFIGURATION -Task Test
- name: ⬆️ Upload Test Results
if: always()
uses: actions/upload-artifact@v4
with:
name: Unit Test Results (${{ matrix.info.name }})
path: ./output/TestResults/Pester.xml
- name: ⬆️ Upload Coverage Results
if: always() && !startsWith(github.ref, 'refs/tags/v')
uses: actions/upload-artifact@v4
with:
name: Coverage Results (${{ matrix.info.name }})
path: ./output/TestResults/Coverage.xml
- name: ⬆️ Upload Coverage to codecov
if: always() && !startsWith(github.ref, 'refs/tags/v')
uses: codecov/codecov-action@v4
with:
files: ./output/TestResults/Coverage.json
flags: ${{ matrix.info.name }}
token: ${{ secrets.CODECOV_TOKEN }}
docs:
name: 📄 Docs
runs-on: windows-latest
needs:
- build
steps:
- name: 🚚 Check out repository
uses: actions/checkout@v2
- name: ➕ Restore Built PowerShell Module
uses: actions/download-artifact@v4
with:
name: PSModule
path: output
- name: 📦 Import PowerShell Module
shell: pwsh
run: |
$destPath = "output\$($moduleName)\$($Version)\"
if (-not (Test-Path -LiteralPath $destPath)) {
New-Item -Path $destPath -ItemType Directory | Out-Null
}
Get-ChildItem output/*.nupkg | Rename-Item -NewName { $_.Name -replace '.nupkg', '.zip' }
Expand-Archive -Path output/*.zip -DestinationPath $destPath -Force -ErrorAction Stop
Get-ChildItem -Path output -Recurse
Import-Module -Name "$destPath\SteamPS.psd1" -Force
- name: 📦 Update documentation
shell: pwsh
run: |
Install-Module -Name platyPS -Force
Update-MarkdownHelpModule -Path .\docs\ -Module $moduleName -AlphabeticParamsOrder -RefreshModulePage -UpdateInputOutput -ModulePagePath .\docs\index.md
- name: 📦 Commit and push changes
run: |
git config --global user.email "[email protected]"
git config --global user.name "GitHub Action"
git add .
git commit -m "Update documentation"
git push
publish:
name: 🚀 Deploy
if: startsWith(github.ref, 'refs/tags/v')
needs:
- build
- test
- docs
runs-on: windows-latest
steps:
- name: ➕ Restore Built PowerShell Module
uses: actions/download-artifact@v4
with:
name: PSModule
path: ./
- name: 🚀 Publish to Gallery
if: github.event_name == 'release'
shell: pwsh
run: >-
dotnet nuget push '*.nupkg'
--api-key $env:PSGALLERY_TOKEN
--source 'https://www.powershellgallery.com/api/v2/package'
--no-symbols
env:
PSGALLERY_TOKEN: ${{ secrets.PS_GALLERY_KEY }}