Publish ibPS PowerShell Module #41
Workflow file for this run
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: Publish ibPS PowerShell Module | |
on: | |
workflow_dispatch: | |
inputs: | |
customVersion: | |
type: choice | |
description: 'Custom Version' | |
default: 'false' | |
options: | |
- true | |
- false | |
versionNumber: | |
type: string | |
description: 'Define Version Number' | |
jobs: | |
ibPS-Build-And-Publish: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Update Module Manifest & Change Tracking | |
shell: pwsh | |
run: | | |
Write-Host "Updating changes to Module.." | |
Copy-Item "./Modules/BloxOne-Main.ps1" "./Modules/ibPS/BloxOne-Main.psm1" -Force | |
Write-Host "Testing Module Manifest.." | |
$Module = Test-ModuleManifest -Path "./Modules/ibPS/ibPS.psd1" | |
$CustomModuleVersion = "${{ inputs.customVersion }}" | |
if ($CustomModuleVersion -eq "true") { | |
[version]$ModuleVersion = "${{ inputs.versionNumber }}" | |
} else { | |
$ModuleVersion = $Module.Version | |
$ModuleVersion = [version]::New($ModuleVersion.Major,$ModuleVersion.Minor,$ModuleVersion.Build,$ModuleVersion.Revision+1) | |
} | |
Write-Host "Updating release notes" | |
$ReleaseNotes = Get-Content -Path './RELEASE.md' -Raw | |
## Functions to export | |
$B1PublicFunctions = Get-ChildItem "./Modules/ibPS/Functions/BloxOne/" -Exclude Private | Get-ChildItem -Recurse | |
$NIOSPublicFunctions = Get-ChildItem "./Modules/ibPS/Functions/NIOS/" -Exclude Private | Get-ChildItem -Recurse | |
$MiscellaneousFunctions = Get-ChildItem "./Modules/ibPS/Functions/Misc/*.ps1" | Where-Object {$_.BaseName -ne 'Misc'} | |
$AdditionalFunctionsToExport = @('Invoke-CSP') | |
## Export Aliases | |
Write-Host "Exporting aliases.." | |
$null = Import-Module './Modules/ibPS/BloxOne-Main.psm1' | |
$null = Resolve-DoHQuery -Query google.com -DoHServer 1.1.1.1 | |
$Aliases = (Get-Alias | Where-Object {$_.Source -eq "BloxOne-Main"}).Name | |
## Export Functions | |
Write-Host "Updating Module Manifest to v$ModuleVersion.." | |
Update-ModuleManifest "./Modules/ibPS/ibPS.psd1" -ModuleVersion $ModuleVersion -FunctionsToExport ($(@($B1PublicFunctions + $NIOSPublicFunctions + $MiscellaneousFunctions) | Select-Object -ExpandProperty BaseName) + $AdditionalFunctionsToExport) -AliasesToExport $Aliases -ReleaseNotes "https://ibps.readthedocs.io/en/latest/Change%20Log/" | |
## Export Manifest info to JSON file | |
Write-Host "Counting functions.." | |
$Module = Test-ModuleManifest -Path "./Modules/ibPS/ibPS.psd1" | Select-Object Name,@{name="Version";expression={$_.Version.ToString()}},Description,Author,ProjectUri,LicenseUri,ReleaseNotes,CompanyName,Copyright,ExportedFunctions | |
$Module | Add-Member -MemberType NoteProperty -Name "Count" -Value $Module.ExportedFunctions.Count | |
$Module | Select-Object -ExcludeProperty ExportedFunctions | ConvertTo-Json -Depth 5 | Out-File ./docs/manifest.json -Force | |
## Update Build JSON | |
$Branch = git rev-parse --abbrev-ref HEAD | |
if ($Branch -eq 'main') { | |
Write-Host "Updating Build JSON.." | |
$Build = Get-Content Modules/ibPS/Functions/Misc/build.json | ConvertFrom-Json | |
$Build.Build = '0' | |
$Build.SHA = $ENV:GITHUB_SHA | |
$Build.Branch = $Branch | |
Set-Content -Path Modules/ibPS/Functions/Misc/build.json -Value $($Build | ConvertTo-Json) | |
} | |
Write-Host "Updating CHANGELOG.." | |
$ChangeHistory = Get-Content -Path './CHANGELOG.md' -Raw | |
$ModuleVersionString = "## $($ModuleVersion.ToString())" | |
Set-Content -Path './CHANGELOG.md' -Value ($ModuleVersionString + "`r`n" + $ReleaseNotes + "`r`n`r`n" + $ChangeHistory) | |
Write-Host "Export Github Actions Environment Variables.." | |
$Version = "v$($ModuleVersion.ToString())" | |
Write-Output "ModuleVersion=$($Version)" | Out-File -FilePath $ENV:GITHUB_ENV -Encoding utf8 -Append | |
Write-Output "ReleaseNotes<<EOF" | Out-File -FilePath $ENV:GITHUB_ENV -Encoding utf8 -Append | |
Write-Output "$($ReleaseNotes)" | Out-File -FilePath $ENV:GITHUB_ENV -Encoding utf8 -Append | |
Write-Output "EOF" | Out-File -FilePath $ENV:GITHUB_ENV -Encoding utf8 -Append | |
- name: Install platyPS module | |
shell: pwsh | |
run: | | |
Write-Host "Installing platyPS Powershell Module.." | |
git clone https://github.com/TehMuffinMoo/platyPS /tmp/platyPS | |
- name: Update Documentation | |
shell: pwsh | |
run: | | |
Write-Host "Importing platyPS Module.." | |
Import-Module '/tmp/platyPS/src/platyPS/platyPS.psd1' -ErrorAction Stop | |
Write-Host "Creating temporary docs directory.." | |
New-Item -ItemType Directory './docs-temp' | |
Write-Host "Importing ibPS Module.." | |
Import-Module './Modules/ibPS/ibPS.psd1' -Force -DisableNameChecking | |
Write-Host "Import ibPS Classes.." | |
. ./Modules/ibPS/Functions/BloxOne/Private/Classes.ps1 | |
Write-Host "Obtaining list of excluded docs.." | |
$ExcludedDocs = Import-Csv ./docs/exclusions.csv -Header 'doc' | |
Write-Host "Updating documentation.." | |
$DocumentationVersion = (Test-ModuleManifest -Path "./Modules/ibPS/ibPS.psd1").Version.ToString() | |
New-MarkdownHelp -Module ibPS -OutputFolder './docs-temp' -HelpVersion $($DocumentationVersion) -Force | |
Write-Host "Cleaning up old documentation.." | |
$OldDocs = Get-ChildItem ./docs/BloxOne -Recurse -File | where {$_.Name -notin $ExcludedDocs.doc} | Remove-Item -Force | |
$OldDocs = Get-ChildItem ./docs/General -Recurse -File | where {$_.Name -notin $ExcludedDocs.doc} | Remove-Item -Force | |
$OldDocs = Get-ChildItem ./docs/NIOS -Recurse -File | where {$_.Name -notin $ExcludedDocs.doc} | Remove-Item -Force | |
Write-Host "Relocating documentation.." | |
foreach ($F in Get-ChildItem './Modules/ibPS/Functions/' -Recurse) { | |
$DocToFind = "./docs-temp/$($F.BaseName).md" | |
if ((Test-Path $DocToFind) -and "$($F.BaseName).md" -notin $($ExcludedDocs.doc)) { | |
$BaseName = (Get-Item $F.DirectoryName).BaseName | |
switch ($BaseName) { | |
"BloxOneDDI" { | |
$BaseName = "$((Get-Item (Split-Path $($F.DirectoryName))).BaseName)/BloxOne DDI" | |
} | |
"BloxOneTD" { | |
$BaseName = "$((Get-Item (Split-Path $($F.DirectoryName))).BaseName)/BloxOne Threat Defense" | |
} | |
"BloxOnePlatform" { | |
$BaseName = "$((Get-Item (Split-Path $($F.DirectoryName))).BaseName)/BloxOne Platform" | |
} | |
"BloxOneCloud" { | |
$BaseName = "$((Get-Item (Split-Path $($F.DirectoryName))).BaseName)/BloxOne Cloud" | |
} | |
"Wrapper" { | |
$BaseName = "$((Get-Item (Split-Path $($F.DirectoryName))).BaseName)/Generic Wrapper" | |
} | |
"Misc" { | |
$BaseName = "General" | |
} | |
"Cleanup" { | |
$BaseName = "$((Get-Item (Split-Path $($F.DirectoryName))).BaseName)/Cleanup" | |
} | |
"Tools" { | |
$BaseName = "$((Get-Item (Split-Path $($F.DirectoryName))).BaseName)/Tools" | |
} | |
"Profiles" { | |
$BaseName = "$((Get-Item (Split-Path $($F.DirectoryName))).BaseName)/Profiles" | |
} | |
"Private" { | |
$BaseName = "$((Get-Item (Split-Path $($F.DirectoryName))).BaseName)/Functions" | |
} | |
} | |
Move-Item "$($DocToFind)" "./docs/$($BaseName)/" -Force | |
} | |
} | |
Copy-Item './CHANGELOG.md' './docs/Change Log.md' -Force | |
Write-Host "Removing temporary docs directory.." | |
Remove-Item './docs-temp' -Recurse -Force -Confirm:$false | |
- name: Build and Publish | |
id: build | |
env: | |
NUGET_KEY: ${{ secrets.NUGET_KEY }} | |
shell: pwsh | |
run: | | |
$Branch = git rev-parse --abbrev-ref HEAD | |
Write-Output ("Branch=$($Branch)") | Out-File -FilePath $ENV:GITHUB_ENV -Encoding utf8 -Append | |
$Manifest = Test-ModuleManifest -Path "./Modules/ibPS/ibPS.psd1" | |
if ($($Manifest).Version -gt $(Find-Module ibPS).Version) { | |
if ($Branch -eq "main") { | |
Write-Host "Publishing v$($Manifest.Version.ToString()).." | |
Copy-Item 'Modules/ibPS' '/home/runner/.local/share/powershell/Modules/' -Recurse | |
Publish-Module -Name "ibPS" -NuGetApiKey $env:NUGET_KEY -SkipAutomaticTags -Verbose | |
Write-Output "ReleaseUpdated=true" | Out-File -FilePath $ENV:GITHUB_ENV -Encoding utf8 -Append | |
} else { | |
Write-Host "Running on $($Branch) branch. Skipping publishing.." | |
Write-Output "ReleaseUpdated=false" | Out-File -FilePath $ENV:GITHUB_ENV -Encoding utf8 -Append | |
} | |
} else { | |
Write-Host "Version number is the same, skipping publishing.." | |
Write-Output "ReleaseUpdated=false" | Out-File -FilePath $ENV:GITHUB_ENV -Encoding utf8 -Append | |
} | |
- name: Update Repository | |
run: | | |
git config --global user.name ${{ github.actor }} | |
git config --global user.password ${{ secrets.GIT_ACTIONS }} | |
git config --global user.email 'mat.cox@tmmn.uk' | |
git add . | |
git status | |
if ! git diff-index --quiet HEAD; then | |
git commit -m "Update Module to ${{ env.ModuleVersion }}" | |
git push | |
fi | |
- name: Create Release | |
if: ${{ env.ReleaseUpdated == 'true' }} | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GIT_ACTIONS }} | |
with: | |
tag_name: ${{ env.ModuleVersion }} | |
release_name: Release ${{ env.ModuleVersion }} | |
body: ${{ env.ReleaseNotes }} | |
prerelease: false | |
draft: false | |
makeLatest: true |