NetboxPS/deploy.ps1
2021-03-23 14:32:20 -04:00

132 lines
No EOL
4.7 KiB
PowerShell

<#
.SYNOPSIS
A brief description of the Invoke-deploy_ps1 file.
.DESCRIPTION
A description of the file.
.PARAMETER SkipVersion
A description of the SkipVersion parameter.
.PARAMETER VersionIncrease
A description of the VersionIncrease parameter.
.PARAMETER NewVersion
A description of the NewVersion parameter.
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.174
Created on: 4/9/2020 09:43
Created by: Claussen
Organization: NEOnet
Filename: deploy.ps1
===========================================================================
#>
[CmdletBinding(DefaultParameterSetName = 'IncreaseVersion')]
param
(
[Parameter(ParameterSetName = 'SkipVersion')]
[switch]$SkipVersion,
[Parameter(ParameterSetName = 'IncreaseVersion')]
[version]$VersionIncrease = "0.0.1",
[Parameter(ParameterSetName = 'SetVersion')]
[version]$NewVersion
)
Import-Module "Microsoft.PowerShell.Utility" -ErrorAction Stop
Write-Host "Beginning deployment" -ForegroundColor Green
$ModuleName = 'NetboxPS'
$ConcatenatedFilePath = "$PSScriptRoot\concatenated.ps1"
$FunctionPath = "$PSScriptRoot\Functions"
$OutputDirectory = "$PSScriptRoot\$ModuleName"
$PSD1OutputPath = "$OutputDirectory\$ModuleName.psd1"
$PSM1OutputPath = "$OutputDirectory\$ModuleName.psm1"
$PS1Files = Get-ChildItem $FunctionPath -Filter "*.ps1" -Recurse | Sort-Object Name
"" | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8
$Counter = 0
Write-Host "Concatenating [$($PS1Files.Count)] PS1 files from $FunctionPath"
foreach ($File in $PS1Files) {
$Counter++
try {
Write-Host (" Adding file {0:D2}/{1:D2}: $($File.Name)" -f $Counter, $PS1Files.Count)
"`r`n#region File $($File.Name)`r`n" | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 -Append -ErrorAction Stop
Get-Content $File.FullName -Encoding UTF8 -ErrorAction Stop | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 -Append -ErrorAction Stop
"`r`n#endregion" | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 -Append -ErrorAction Stop
} catch {
Write-Host "FAILED TO WRITE CONCATENATED FILE: $($_.Exception.Message): $($_.TargetObject)" -ForegroundColor Red
return
}
}
"" | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 -Append
Write-Host " Adding psm1"
Get-Content "$PSScriptRoot\$ModuleName.psm1" | Out-File -FilePath $ConcatenatedFilePath -Encoding UTF8 -Append
$PSDManifest = Import-PowerShellDataFile -Path "$PSScriptRoot\$ModuleName.psd1"
# Get the version from the PSD1
#[version]$CurrentVersion = [regex]::matches($PSDContent, "\s*ModuleVersion\s=\s'(\d*.\d*.\d*)'\s*").groups[1].value
[version]$CurrentVersion = $PSDManifest.ModuleVersion
switch ($PSCmdlet.ParameterSetName) {
"SkipVersion" {
# Dont do anything with the PSD
Write-Host " Skipping version update, maintaining version [$CurrentVersion]"
break
}
"IncreaseVersion" {
# Calculate the new version
[version]$NewVersion = "{0}.{1}.{2}" -f ($CurrentVersion.Major + $VersionIncrease.Major), ($CurrentVersion.Minor + $VersionIncrease.Minor), ($CurrentVersion.Build + $VersionIncrease.Build)
Write-Host " Updating version in PSD1 from [$CurrentVersion] to [$NewVersion]"
# Replace the version number in the content
#$PSDContent -replace $CurrentVersion, $NewVersion | Out-File $PSScriptRoot\$ModuleName.psd1 -Encoding UTF8
Update-ModuleManifest -Path "$PSScriptRoot\$ModuleName.psd1" -ModuleVersion $NewVersion
break
}
"SetVersion" {
Write-Host " Updating version in PSD1 from [$CurrentVersion] to [$NewVersion]"
# Replace the version number in the content
#$PSDContent -replace $CurrentVersion, $NewVersion | Out-File $PSScriptRoot\$ModuleName.psd1 -Encoding UTF8
Update-ModuleManifest -Path "$PSScriptRoot\$ModuleName.psd1" -ModuleVersion $NewVersion
break
}
}
if (-not (Test-Path $OutputDirectory)) {
try {
Write-Warning "Creating path [$OutputDirectory]"
$null = New-Item -Path $OutputDirectory -ItemType Directory -Force
} catch {
throw "Failed to create directory [$OutputDirectory]: $($_.Exception.Message)"
}
}
Write-Host " Copying psd1"
Copy-Item -Path "$PSScriptRoot\$ModuleName.psd1" -Destination $PSD1OutputPath -Force
Write-Host " Copying psm1"
Copy-Item -Path $ConcatenatedFilePath -Destination $PSM1OutputPath -Force
Write-Host "Deployment complete" -ForegroundColor Green