181761310c
This update has all the code needed to connect to a zvma 10.0 (and probabaly 9.7) and allow the end user to connect to zvma as well as run all of the other functions.
205 lines
8.2 KiB
PowerShell
205 lines
8.2 KiB
PowerShell
#Requires -Modules 'InvokeBuild'
|
|
|
|
$version = "{0}" -f $(Get-Content .\version.txt)
|
|
$moduleOutPath = "{0}\publish\ZertoApiWrapper" -f $BuildRoot
|
|
|
|
#Define the default task
|
|
task . build
|
|
|
|
#Region - Helper Functions
|
|
function ImportSourceModule {
|
|
If (Get-Module -Name ZertoApiWrapper) {
|
|
Remove-Module -Name ZertoApiWrapper -Force -ErrorAction Stop
|
|
}
|
|
Import-Module "$BuildRoot\ZertoApiWrapper\ZertoApiWrapper.psd1" -ErrorAction Stop
|
|
}
|
|
|
|
function ImportBuiltModule {
|
|
If (Get-Module -Name ZertoApiWrapper) {
|
|
Remove-Module -Name ZertoApiWrapper -Force -ErrorAction Stop
|
|
}
|
|
Import-Module ("{0}\ZertoApiWrapper.psd1" -f $moduleOutPath) -ErrorAction Stop
|
|
}
|
|
#EndRegion
|
|
|
|
#Region - Module Checks
|
|
<# Synopsis: Ensure platyPS is installed #>
|
|
task CheckPlatyPSInstalled {
|
|
if ($null -eq (Get-Module -List platyPS)) {
|
|
Install-Module -Scope CurrentUser -Repository PSGallery -Name platyPS
|
|
}
|
|
}
|
|
|
|
<# Synopsis: Ensure Pester is installed #>
|
|
task CheckPesterInstalled {
|
|
Get-Module -Name Pester | Remove-Module -Force
|
|
if ($null -eq (Get-Module -List Pester)) {
|
|
Install-Module -Scope CurrentUser -Repository PSGallery -Name Pester -MaximumVersion 4.99
|
|
}
|
|
Import-Module -Name Pester -MaximumVersion 4.99 -Force
|
|
}
|
|
|
|
<# Synopsis: Ensure PSScriptAnalyzer is installed #>
|
|
task CheckPSScriptAnalyzerInstalled {
|
|
if ($null -eq (Get-Module -List PSScriptAnalyzer)) {
|
|
Install-Module -Scope CurrentUser -Repository PSGallery -Name PSScriptAnalyzer
|
|
}
|
|
}
|
|
#EndRegion
|
|
|
|
#Region - PSSA Tasks
|
|
<# Synopsis: Analyze ZertoApiWrapper functions for Code Violations #>
|
|
task AnalyzeSourceFiles CheckPSScriptAnalyzerInstalled, {
|
|
$scriptAnalyzerParams = @{
|
|
Path = "$BuildRoot\ZertoApiWrapper\"
|
|
Severity = @('Error') #, 'Warning')
|
|
Recurse = $true
|
|
Verbose = $false
|
|
ExcludeRule = @('PSUseToExportFieldsInManifest', 'PSUseBOMForUnicodeEncodedFile', 'PSUseSingularNouns', 'PSReviewUnusedParameter')
|
|
}
|
|
$saresults = Invoke-ScriptAnalyzer @scriptAnalyzerParams
|
|
if ($saResults) {
|
|
$saResults | Format-Table
|
|
throw "One or more PSScriptAnalyzer errors/warnings were found"
|
|
}
|
|
}
|
|
|
|
task AnalyzeBuiltFiles CheckPSScriptAnalyzerInstalled, CreatePsm1ForRelease, {
|
|
$scriptAnalyzerParams = @{
|
|
Path = $moduleOutPath
|
|
Severity = @('Error') #, 'Warning')
|
|
Recurse = $true
|
|
Verbose = $false
|
|
ExcludeRule = @('PSUseSingularNouns', 'PSUseBOMForUnicodeEncodedFile', 'PSReviewUnusedParameter')
|
|
}
|
|
$saresults = Invoke-ScriptAnalyzer @scriptAnalyzerParams
|
|
|
|
if ($saResults) {
|
|
$saResults | Format-Table
|
|
throw "One or more PSScriptAnalyzer errors/warnings were found"
|
|
}
|
|
}
|
|
#EndRegion
|
|
|
|
#Region - Clean Operations
|
|
task CleanPublish {
|
|
if ($(Test-Path "$BuildRoot\publish")) {
|
|
Remove-Item -Recurse -Path "$BuildRoot\publish\*"
|
|
} else {
|
|
New-Item -Path $BuildRoot -Name "publish" -ItemType Directory
|
|
}
|
|
New-Item -Path $moduleOutPath -ItemType "Directory"
|
|
}
|
|
#EndRegion
|
|
|
|
#Region - Pester Tests
|
|
#task SourceFileTests CheckPesterInstalled, {
|
|
# ImportSourceModule
|
|
# $testResultsFile = "$BuildRoot\Tests\SourceTestResults.xml"
|
|
# $script:results = Invoke-Pester -Script "$BuildRoot" -Tag Unit -OutputFile $testResultsFile -PassThru -Show Fails
|
|
# $FailureMessage = '{0} Unit test(s) failed. Aborting build' -f $results.FailedCount
|
|
# Assert ($results.FailedCount -eq 0) $FailureMessage
|
|
#}
|
|
|
|
#task BuiltFileTests CreatePsm1ForRelease, CheckPesterInstalled, {
|
|
# ImportBuiltModule
|
|
# $testResultsFile = "$BuildRoot\Tests\BuiltTestResults.xml"
|
|
# $script:results = Invoke-Pester -Script "$BuildRoot" -Tag Unit -OutputFile $testResultsFile -PassThru -Show Failed
|
|
# $FailureMessage = '{0} Unit test(s) failed. Aborting build' -f $results.FailedCount
|
|
# Assert ($results.FailedCount -eq 0) $FailureMessage
|
|
#}
|
|
#EndRegion
|
|
|
|
#Region - Build Help System
|
|
$buildMamlParams = @{
|
|
Inputs = { Get-ChildItem docs\*.md }
|
|
Outputs = "{0}\en-us\ZertoApiWrapper-help.xml" -f $moduleOutPath
|
|
}
|
|
|
|
task BuildMamlHelp CheckPlatyPSInstalled, {
|
|
if (Test-Path $buildMamlParams.Outputs) {
|
|
Remove-Item $buildMamlParams.Outputs
|
|
}
|
|
platyPS\New-ExternalHelp .\docs -Force -OutputPath $buildMamlParams.Outputs
|
|
}
|
|
|
|
task UpdateMarkdownHelp quickBuild, CheckPlatyPSInstalled, {
|
|
ImportBuiltModule
|
|
Update-MarkdownHelpModule -Path docs -AlphabeticParamsOrder
|
|
}
|
|
#EndRegion
|
|
|
|
#Region - Build Module Files
|
|
task CreatePsd1ForRelease CleanPublish, {
|
|
$functionsToExport = Get-ChildItem -Path 'ZertoApiWrapper\Public\*.ps1' | ForEach-Object { $_.BaseName }
|
|
$releaseNotes = "Please review the [Release Notes](https://github.com/ZertoPublic/ZertoApiWrapper/releases/tag/{0}) on GitHub." -f $version
|
|
|
|
$ManifestParams = @{
|
|
Path = "{0}\ZertoApiWrapper.psd1" -f $moduleOutPath
|
|
RootModule = 'ZertoApiWrapper.psm1'
|
|
ModuleVersion = $version
|
|
GUID = '4c0b9e17-141b-4dd5-8549-fb21cccaa325'
|
|
Author = 'Wes Carroll'
|
|
CompanyName = 'Zerto'
|
|
Copyright = '(c) {0} Wes Carroll. All rights reserved.' -f $(Get-Date -Format 'yyyy')
|
|
Description = 'Windows PowerShell and PowerShell Core API Wrapper Module for Zerto Virtual Manager'
|
|
PowerShellVersion = '5.1.0'
|
|
ProjectUri = 'https://github.com/ZertoPublic/ZertoApiWrapper'
|
|
LicenseUri = 'https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/LICENSE'
|
|
Tags = @("Zerto", "Automation")
|
|
FunctionsToExport = $functionsToExport
|
|
CmdletsToExport = @()
|
|
VariablesToExport = @()
|
|
AliasesToExport = @()
|
|
ReleaseNotes = $releaseNotes
|
|
}
|
|
New-ModuleManifest @ManifestParams
|
|
}
|
|
|
|
task CreatePsm1ForRelease CreatePsd1ForRelease, {
|
|
$emptyLine = ""
|
|
$psm1Path = "{0}\ZertoApiWrapper.psm1" -f $moduleOutPath
|
|
$lines = '#------------------------------------------------------------#'
|
|
$Private = @( Get-ChildItem -Path $BuildRoot\ZertoApiWrapper\Private\*.ps1 -ErrorAction Stop )
|
|
$Public = @( Get-ChildItem -Path $BuildRoot\ZertoApiWrapper\Public\*.ps1 -ErrorAction Stop )
|
|
Add-Content -Path $psm1Path -Value $lines -Encoding 'utf8'
|
|
Add-Content -Path $psm1Path -Value "#---------------------Private Functions----------------------#" -Encoding 'utf8'
|
|
Add-Content -Path $psm1Path -Value $lines -Encoding 'utf8'
|
|
Add-Content -Path $psm1Path -Value $emptyLine -Encoding 'utf8'
|
|
foreach ($file in $private) {
|
|
Add-Content -Path $psm1Path -Value $(Get-Content -Path $file.Fullname -Raw) -Encoding 'utf8'
|
|
Add-Content -Path $psm1Path -Value $emptyLine -Encoding 'utf8'
|
|
}
|
|
Add-Content -Path $psm1Path -Value $lines -Encoding 'utf8'
|
|
Add-Content -Path $psm1Path -Value "#----------------------Public Functions----------------------#" -Encoding 'utf8'
|
|
Add-Content -Path $psm1Path -Value $lines -Encoding 'utf8'
|
|
Add-Content -Path $psm1Path -Value $emptyLine -Encoding 'utf8'
|
|
foreach ($file in $public) {
|
|
Add-Content -Path $psm1Path -Value $(Get-Content -Path $file.Fullname -Raw) -Encoding 'utf8'
|
|
Add-Content -Path $psm1Path -Value $emptyLine -Encoding 'utf8'
|
|
}
|
|
}
|
|
#EndRegion
|
|
|
|
#Region - Artifacts \ Publish
|
|
# Full Build Process - No Publishing add this later \/ BuiltFileTests,
|
|
task CreateArtifacts CleanPublish, AnalyzeBuiltFiles, BuildMamlHelp, {
|
|
Compress-Archive -Path $moduleOutPath -DestinationPath .\publish\ZertoApiWrapper.zip
|
|
$MyMatches = Select-String -Path "$BuildRoot\CHANGELOG.md" "^##\s\["
|
|
$data = Get-Content "$BuildRoot\CHANGELOG.md"
|
|
$range = ($MyMatches[0].LineNumber - 1)..($MyMatches[1].LineNumber - 3)
|
|
foreach ($i in $range) {
|
|
Add-Content -Path "$BuildRoot\publish\ReleaseNotes.md" -Value ($data[$i]).replace("## ", "# ") -Encoding utf8
|
|
}
|
|
}
|
|
#EndRegion
|
|
# addd back to line below between analyze and create BuiltFileTests,
|
|
task build CleanPublish, CreatePsm1ForRelease, AnalyzeBuiltFiles, CreateArtifacts
|
|
task quickBuild CleanPublish, CreatePsm1ForRelease, AnalyzeBuiltFiles, {
|
|
Get-Module -Name ZertoApiWrapper | Remove-Module -Force
|
|
ImportBuiltModule
|
|
}
|
|
task release build, {
|
|
Publish-Module -Path $moduleOutPath -NuGetApiKey "1234" -WhatIf
|
|
}
|