Merge pull request #87 from ZertoPublic/Refactor-Build

Refactor build
This commit is contained in:
Wes Carroll
2020-06-11 11:35:16 -04:00
committed by GitHub
4 changed files with 106 additions and 136 deletions
+2 -2
View File
@@ -7,7 +7,7 @@
SkipPublisherCheck = $true SkipPublisherCheck = $true
} }
Target = 'CurrentUser' Target = 'CurrentUser'
Version = '5.5.11' Version = '5.6.0'
Tags = 'Bootstrap' Tags = 'Bootstrap'
} }
@@ -31,7 +31,7 @@
SkipPublisherCheck = $true SkipPublisherCheck = $true
} }
Target = 'CurrentUser' Target = 'CurrentUser'
Version = '1.18.3' Version = '1.19.0'
Tags = 'Bootstrap' Tags = 'Bootstrap'
} }
+44 -43
View File
@@ -1,23 +1,24 @@
#Requires -Modules 'InvokeBuild' #Requires -Modules 'InvokeBuild'
$version = "{0}" -f $(Get-Content .\version.txt) $version = "{0}" -f $(Get-Content .\version.txt)
$moduleOutPath = "{0}\publish\ZertoApiWrapper" -f $BuildRoot
#Define the default task #Define the default task
task . CreateArtifacts task . build
#Region - Helper Functions #Region - Helper Functions
function ImportSourceModule() { function ImportSourceModule {
If (Get-Module -Name ZertoApiWrapper) { If (Get-Module -Name ZertoApiWrapper) {
Remove-Module -Name ZertoApiWrapper -Force -ErrorAction Stop Remove-Module -Name ZertoApiWrapper -Force -ErrorAction Stop
} }
Import-Module "$BuildRoot\ZertoApiWrapper\ZertoApiWrapper.psd1" -ErrorAction Stop Import-Module "$BuildRoot\ZertoApiWrapper\ZertoApiWrapper.psd1" -ErrorAction Stop
} }
function ImportBuiltModule() { function ImportBuiltModule {
If (Get-Module -Name ZertoApiWrapper) { If (Get-Module -Name ZertoApiWrapper) {
Remove-Module -Name ZertoApiWrapper -Force -ErrorAction Stop Remove-Module -Name ZertoApiWrapper -Force -ErrorAction Stop
} }
Import-Module "$BuildRoot\temp\ZertoApiWrapper.psd1" -ErrorAction Stop Import-Module ("{0}\ZertoApiWrapper.psd1" -f $moduleOutPath) -ErrorAction Stop
} }
#EndRegion #EndRegion
@@ -65,7 +66,7 @@ task AnalyzeSourceFiles CheckPSScriptAnalyzerInstalled, {
task AnalyzeBuiltFiles CheckPSScriptAnalyzerInstalled, CreatePsm1ForRelease, { task AnalyzeBuiltFiles CheckPSScriptAnalyzerInstalled, CreatePsm1ForRelease, {
$scriptAnalyzerParams = @{ $scriptAnalyzerParams = @{
Path = "$BuildRoot\temp\" Path = $moduleOutPath
Severity = @('Error', 'Warning') Severity = @('Error', 'Warning')
Recurse = $true Recurse = $true
Verbose = $false Verbose = $false
@@ -81,17 +82,13 @@ task AnalyzeBuiltFiles CheckPSScriptAnalyzerInstalled, CreatePsm1ForRelease, {
#EndRegion #EndRegion
#Region - Clean Operations #Region - Clean Operations
task CleanTemp {
if (-not $(Test-Path "$BuildRoot\temp")) {
New-Item -Path $BuildRoot -Name "temp" -ItemType "Directory"
}
Remove-Item -Recurse -Path "$BuildRoot\temp\*"
}
task CleanPublish { task CleanPublish {
if ($(Test-Path "$BuildRoot\publish")) { if ($(Test-Path "$BuildRoot\publish")) {
Remove-Item -Recurse -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 #EndRegion
@@ -107,7 +104,7 @@ task SourceFileTests CheckPesterInstalled, {
task BuiltFileTests CreatePsm1ForRelease, CheckPesterInstalled, { task BuiltFileTests CreatePsm1ForRelease, CheckPesterInstalled, {
ImportBuiltModule ImportBuiltModule
$testResultsFile = "$BuildRoot\Tests\BuiltTestResults.xml" $testResultsFile = "$BuildRoot\Tests\BuiltTestResults.xml"
$script:results = Invoke-Pester -Script "$BuildRoot" -Tag Unit -OutputFile $testResultsFile -PassThru -Show Fails $script:results = Invoke-Pester -Script "$BuildRoot" -Tag Unit -OutputFile $testResultsFile -PassThru -Show Failed
$FailureMessage = '{0} Unit test(s) failed. Aborting build' -f $results.FailedCount $FailureMessage = '{0} Unit test(s) failed. Aborting build' -f $results.FailedCount
Assert ($results.FailedCount -eq 0) $FailureMessage Assert ($results.FailedCount -eq 0) $FailureMessage
} }
@@ -116,7 +113,7 @@ task BuiltFileTests CreatePsm1ForRelease, CheckPesterInstalled, {
#Region - Build Help System #Region - Build Help System
$buildMamlParams = @{ $buildMamlParams = @{
Inputs = { Get-ChildItem docs\*.md } Inputs = { Get-ChildItem docs\*.md }
Outputs = "$BuildRoot\temp\en-us\ZertoApiWrapper-help.xml" Outputs = "{0}\en-us\ZertoApiWrapper-help.xml" -f $moduleOutPath
} }
task BuildMamlHelp CheckPlatyPSInstalled, { task BuildMamlHelp CheckPlatyPSInstalled, {
@@ -126,19 +123,19 @@ task BuildMamlHelp CheckPlatyPSInstalled, {
platyPS\New-ExternalHelp .\docs -Force -OutputPath $buildMamlParams.Outputs platyPS\New-ExternalHelp .\docs -Force -OutputPath $buildMamlParams.Outputs
} }
task UpdateMarkdownHelp CheckPlatyPSInstalled, { task UpdateMarkdownHelp quickBuild, CheckPlatyPSInstalled, {
ImportSourceModule ImportBuiltModule
Update-MarkdownHelpModule -Path docs -AlphabeticParamsOrder Update-MarkdownHelpModule -Path docs -AlphabeticParamsOrder
} }
#EndRegion #EndRegion
#Region - Build Module Files #Region - Build Module Files
task CreatePsd1ForRelease CleanTemp, { task CreatePsd1ForRelease CleanPublish, {
$functionsToExport = Get-ChildItem -Path 'ZertoApiWrapper\Public\*.ps1' | ForEach-Object { $_.BaseName } $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 $releaseNotes = "Please review the [Release Notes](https://github.com/ZertoPublic/ZertoApiWrapper/releases/tag/{0}) on GitHub." -f $version
$ManifestParams = @{ $ManifestParams = @{
Path = "$BuildRoot\temp\ZertoApiWrapper.psd1" Path = "{0}\ZertoApiWrapper.psd1" -f $moduleOutPath
RootModule = 'ZertoApiWrapper.psm1' RootModule = 'ZertoApiWrapper.psm1'
ModuleVersion = $version ModuleVersion = $version
GUID = '4c0b9e17-141b-4dd5-8549-fb21cccaa325' GUID = '4c0b9e17-141b-4dd5-8549-fb21cccaa325'
@@ -161,43 +158,47 @@ task CreatePsd1ForRelease CleanTemp, {
task CreatePsm1ForRelease CreatePsd1ForRelease, { task CreatePsm1ForRelease CreatePsd1ForRelease, {
$emptyLine = "" $emptyLine = ""
$psm1Path = "$BuildRoot\temp\ZertoApiWrapper.psm1" $psm1Path = "{0}\ZertoApiWrapper.psm1" -f $moduleOutPath
$lines = '#------------------------------------------------------------#' $lines = '#------------------------------------------------------------#'
$Private = @( Get-ChildItem -Path $BuildRoot\ZertoApiWrapper\Private\*.ps1 -ErrorAction Stop ) $Private = @( Get-ChildItem -Path $BuildRoot\ZertoApiWrapper\Private\*.ps1 -ErrorAction Stop )
$Public = @( Get-ChildItem -Path $BuildRoot\ZertoApiWrapper\Public\*.ps1 -ErrorAction Stop ) $Public = @( Get-ChildItem -Path $BuildRoot\ZertoApiWrapper\Public\*.ps1 -ErrorAction Stop )
Add-Content -Path $psm1Path -Value $lines Add-Content -Path $psm1Path -Value $lines -Encoding 'utf8'
Add-Content -Path $psm1Path -Value "#---------------------Private Functions----------------------#" Add-Content -Path $psm1Path -Value "#---------------------Private Functions----------------------#" -Encoding 'utf8'
Add-Content -Path $psm1Path -Value $lines Add-Content -Path $psm1Path -Value $lines -Encoding 'utf8'
Add-Content -Path $psm1Path -Value $emptyLine Add-Content -Path $psm1Path -Value $emptyLine -Encoding 'utf8'
foreach ($file in $private) { foreach ($file in $private) {
Add-Content -Path $psm1Path -Value $(Get-Content -Path $file.Fullname -Raw) Add-Content -Path $psm1Path -Value $(Get-Content -Path $file.Fullname -Raw) -Encoding 'utf8'
Add-Content -Path $psm1Path -Value $emptyLine Add-Content -Path $psm1Path -Value $emptyLine -Encoding 'utf8'
} }
Add-Content -Path $psm1Path -Value $lines Add-Content -Path $psm1Path -Value $lines -Encoding 'utf8'
Add-Content -Path $psm1Path -Value "#----------------------Public Functions----------------------#" Add-Content -Path $psm1Path -Value "#----------------------Public Functions----------------------#" -Encoding 'utf8'
Add-Content -Path $psm1Path -Value $lines Add-Content -Path $psm1Path -Value $lines -Encoding 'utf8'
Add-Content -Path $psm1Path -Value $emptyLine Add-Content -Path $psm1Path -Value $emptyLine -Encoding 'utf8'
foreach ($file in $public) { foreach ($file in $public) {
Add-Content -Path $psm1Path -Value $(Get-Content -Path $file.Fullname -Raw) Add-Content -Path $psm1Path -Value $(Get-Content -Path $file.Fullname -Raw) -Encoding 'utf8'
Add-Content -Path $psm1Path -Value $emptyLine Add-Content -Path $psm1Path -Value $emptyLine -Encoding 'utf8'
} }
# Add-Content -Path $psm1Path -Value $emptyLine
# Add-Content -Path $psm1Path -Value "Export-ModuleMember -Function $exportString"
} }
#EndRegion #EndRegion
#Region - Artifacts \ Publish #Region - Artifacts \ Publish
# Full Build Process - No Publishing # Full Build Process - No Publishing
task CreateArtifacts CleanPublish, CleanTemp, AnalyzeSourceFiles, SourceFileTests, AnalyzeBuiltFiles, BuiltFileTests, BuildMamlHelp, { task CreateArtifacts CleanPublish, AnalyzeBuiltFiles, BuiltFileTests, BuildMamlHelp, {
if (-not $(Test-Path "$BuildRoot\publish")) { Compress-Archive -Path $moduleOutPath -DestinationPath .\publish\ZertoApiWrapper.zip
New-Item -Path $BuildRoot -Name "publish" -ItemType Directory $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
} }
Compress-Archive -Path .\temp\* -DestinationPath .\publish\ZertoApiWrapper.zip
#ImportBuiltModule
#(Get-Module ZertoApiWrapper).ReleaseNotes | Add-Content .\publish\release-notes.txt
#(Get-Module ZertoApiWrapper).Version.ToString() | Add-Content .\publish\release-version.txt
Copy-Item "$BuildRoot\ZertoApiWrapper.build.ps1" "$BuildRoot\publish\ZertoApiWrapper.build.ps1"
Copy-Item "$BuildRoot\ZertoApiWrapper.Depend.psd1" "$BuildRoot\publish\ZertoApiWrapper.Depend.psd1"
Copy-Item "$BuildRoot\build.ps1" "$BuildRoot\publish\build.ps1"
} }
#EndRegion #EndRegion
task build CleanPublish, CreatePsm1ForRelease, AnalyzeBuiltFiles, BuiltFileTests, CreateArtifacts
task quickBuild CleanPublish, CreatePsm1ForRelease, AnalyzeBuiltFiles, {
Get-Module -Name ZertoApiWrapper | Remove-Module -Force
ImportBuiltModule
}
task release build, {
Publish-Module -Path $moduleOutPath -NuGetApiKey "1234" -WhatIf
}
+24 -58
View File
@@ -11,6 +11,7 @@ trigger:
include: include:
- master - master
- PowerShellBackPort - PowerShellBackPort
- Refactor-Build
# Trigger CI on pull requests to master and develop branches # Trigger CI on pull requests to master and develop branches
pr: pr:
@@ -27,23 +28,15 @@ jobs:
# Run build.ps1 script in PowerShell Core # Run build.ps1 script in PowerShell Core
- powershell: | - powershell: |
.\build.ps1 -Verbose .\build.ps1 -Verbose
displayName: 'Build and Test' displayName: "Build and Test"
# Upload test results to Azure Pipeline # Upload test results to Azure Pipeline
- task: PublishTestResults@2 - task: PublishTestResults@2
inputs: inputs:
testRunner: 'NUnit' testRunner: "NUnit"
testResultsFiles: '**/SourceTestResults.xml' testResultsFiles: "**/BuiltTestResults.xml"
testRunTitle: 'PS_Win2016_Source' testRunTitle: "PS_Win2016_Built"
displayName: 'Publish Test Results' displayName: "Publish Test Results"
condition: always() condition: always()
- task: PublishTestResults@2
inputs:
testRunner: 'NUnit'
testResultsFiles: '**/BuiltTestResults.xml'
testRunTitle: 'PS_Win2016_Built'
displayName: 'Publish Test Results'
condition: always()
# Windows PowerShell Core Build Job # Windows PowerShell Core Build Job
- job: Build_PSCore_Windows - job: Build_PSCore_Windows
@@ -55,21 +48,14 @@ jobs:
# Run build.ps1 script in PowerShell Core # Run build.ps1 script in PowerShell Core
- pwsh: | - pwsh: |
.\build.ps1 -Verbose .\build.ps1 -Verbose
displayName: 'Build and Test' displayName: "Build and Test"
# Upload test results to Azure Pipeline # Upload test results to Azure Pipeline
- task: PublishTestResults@2 - task: PublishTestResults@2
inputs: inputs:
testRunner: 'NUnit' testRunner: "NUnit"
testResultsFiles: '**/SourceTestResults.xml' testResultsFiles: "**/BuiltTestResults.xml"
testRunTitle: 'PSCore_Win2016_Source' testRunTitle: "PSCore_Win2016_Built"
displayName: 'Publish Test Results' displayName: "Publish Test Results"
condition: always()
- task: PublishTestResults@2
inputs:
testRunner: 'NUnit'
testResultsFiles: '**/BuiltTestResults.xml'
testRunTitle: 'PSCore_Win2016_Built'
displayName: 'Publish Test Results'
condition: always() condition: always()
# Linux Build Job # Linux Build Job
@@ -82,32 +68,19 @@ jobs:
# Run build.ps1 script in PowerShell Core # Run build.ps1 script in PowerShell Core
- pwsh: | - pwsh: |
.\build.ps1 -verbose .\build.ps1 -verbose
displayName: 'Build and Test' displayName: "Build and Test"
# Upload test results to Azure Pipeline # Upload test results to Azure Pipeline
- task: PublishTestResults@2 - task: PublishTestResults@2
inputs: inputs:
testRunner: 'NUnit' testRunner: "NUnit"
testResultsFiles: '**/SourceTestResults.xml' testResultsFiles: "**/BuiltTestResults.xml"
testRunTitle: 'PSCore_Ubuntu_Source' testRunTitle: "PSCore_Ubuntu_Built"
displayName: 'Publish Test Results' displayName: "Publish Test Results"
condition: always() condition: always()
- task: PublishTestResults@2 - task: PublishPipelineArtifact@1
displayName: "Publish Data"
inputs: inputs:
testRunner: 'NUnit' artifactName: "ReleaseData"
testResultsFiles: '**/BuiltTestResults.xml'
testRunTitle: 'PSCore_Ubuntu_Built'
displayName: 'Publish Test Results'
condition: always()
- task: PublishPipelineArtifact@0
displayName: 'Publish compiled module Artifact'
inputs:
artifactName: 'ZertoApiWrapper'
targetPath: ./temp
condition: always()
- task: PublishPipelineArtifact@0
displayName: 'Publish Data'
inputs:
artifactName: 'ReleaseData'
targetPath: ./publish targetPath: ./publish
condition: always() condition: always()
@@ -121,19 +94,12 @@ jobs:
# Run build.ps1 script in PowerShell Core # Run build.ps1 script in PowerShell Core
- pwsh: | - pwsh: |
.\build.ps1 -verbose .\build.ps1 -verbose
displayName: 'Build and Test' displayName: "Build and Test"
# Upload test results to Azure Pipeline # Upload test results to Azure Pipeline
- task: PublishTestResults@2 - task: PublishTestResults@2
inputs: inputs:
testRunner: 'NUnit' testRunner: "NUnit"
testResultsFiles: '**/SourceTestResults.xml' testResultsFiles: "**/BuiltTestResults.xml"
testRunTitle: 'PSCore_MacOS1013_Source' testRunTitle: "PSCore_MacOS1013_Built"
displayName: 'Publish Test Results' displayName: "Publish Test Results"
condition: always()
- task: PublishTestResults@2
inputs:
testRunner: 'NUnit'
testResultsFiles: '**/BuiltTestResults.xml'
testRunTitle: 'PSCore_MacOS1013_Built'
displayName: 'Publish Test Results'
condition: always() condition: always()
+5 -2
View File
@@ -1,3 +1,5 @@
param([validateSet("build", "release")]$operation = "build")
# Bootstrap the environment # Bootstrap the environment
$null = Get-PackageProvider -Name NuGet -ForceBootstrap $null = Get-PackageProvider -Name NuGet -ForceBootstrap
@@ -11,6 +13,7 @@ Invoke-PSDepend `
-Force ` -Force `
-Import ` -Import `
-Install ` -Install `
-Tags 'Bootstrap' -Tags 'Bootstrap' `
-ErrorAction Continue
Invoke-Build . Invoke-Build $operation