diff --git a/deploy.ps1 b/deploy.ps1 index cb01f34..7cc3b44 100644 --- a/deploy.ps1 +++ b/deploy.ps1 @@ -17,6 +17,10 @@ .PARAMETER NewVersion Override the new version with this version + .PARAMETER Environment + A description of the Environment parameter. + .PARAMETER ResetCurrentEnvironment + A description of the ResetCurrentEnvironment parameter. .EXAMPLE Use all defaults and concatenate all files @@ -48,13 +52,17 @@ param [version]$VersionIncrease = "0.0.1", [Parameter(ParameterSetName = 'SetVersion')] - [version]$NewVersion + [version]$NewVersion, + [ValidateSet('dev', 'development', 'prod', 'production', IgnoreCase = $true)] + [string]$Environment = 'development', + [switch]$ResetCurrentEnvironment ) -Import-Module "Microsoft.PowerShell.Utility" -ErrorAction Stop Write-Host "Beginning deployment" -ForegroundColor Green +Write-Host "Importing required modules" -ForegroundColor Green +Import-Module "Microsoft.PowerShell.Utility" -ErrorAction Stop $ModuleName = 'NetboxPS' $ConcatenatedFilePath = "$PSScriptRoot\concatenated.ps1" $FunctionPath = "$PSScriptRoot\Functions" @@ -62,17 +70,17 @@ $OutputDirectory = "$PSScriptRoot\$ModuleName" $PSD1OutputPath = "$OutputDirectory\$ModuleName.psd1" $PSM1OutputPath = "$OutputDirectory\$ModuleName.psm1" -$PS1Files = Get-ChildItem $FunctionPath -Filter "*.ps1" -Recurse | Sort-Object Name +$PS1FunctionFiles = 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) { +Write-Host "Concatenating [$($PS1FunctionFiles.Count)] PS1 files from $FunctionPath" +foreach ($File in $PS1FunctionFiles) { $Counter++ try { - Write-Host (" Adding file {0:D2}/{1:D2}: $($File.Name)" -f $Counter, $PS1Files.Count) + Write-Host (" Adding file {0:D2}/{1:D2}: $($File.Name)" -f $Counter, $PS1FunctionFiles.Count) "`r`n#region File $($File.Name)`r`n" | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 -Append -ErrorAction Stop @@ -87,15 +95,33 @@ foreach ($File in $PS1Files) { "" | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 -Append +if (-not (Test-Path $OutputDirectory)) { + try { + Write-Warning "Creating path [$OutputDirectory]" + $null = New-Item -Path $OutputDirectory -ItemType Directory -Force + } catch { + throw "Failed to create output directory [$OutputDirectory]: $($_.Exception.Message)" + } +} 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 +$UpdateModuleManifestSplat = @{ + Path = "$PSScriptRoot\$ModuleName.psd1" + ErrorAction = 'Stop' +} +if ($Environment -ilike 'dev*') { + Write-Host "Exporting all functions for development" + $UpdateModuleManifestSplat['FunctionsToExport'] = $PS1FunctionFiles.BaseName +} else { + $UpdateModuleManifestSplat['FunctionsToExport'] = ($PS1FunctionFiles.BaseName | Where-Object { $_ -like '*-*' }) +} +Write-Host "Comparing versions" switch ($PSCmdlet.ParameterSetName) { "SkipVersion" { # Dont do anything with the PSD @@ -108,35 +134,26 @@ switch ($PSCmdlet.ParameterSetName) { # 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]" + Write-Host " Updating version 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 + $UpdateModuleManifestSplat['ModuleVersion'] = $NewVersion break } "SetVersion" { - Write-Host " Updating version in PSD1 from [$CurrentVersion] to [$NewVersion]" + Write-Host " Updating version 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 + $UpdateModuleManifestSplat['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 "Updating Module Manifest" +Update-ModuleManifest @UpdateModuleManifestSplat Write-Host " Copying psd1" Copy-Item -Path "$PSScriptRoot\$ModuleName.psd1" -Destination $PSD1OutputPath -Force @@ -144,4 +161,12 @@ Copy-Item -Path "$PSScriptRoot\$ModuleName.psd1" -Destination $PSD1OutputPath -F Write-Host " Copying psm1" Copy-Item -Path $ConcatenatedFilePath -Destination $PSM1OutputPath -Force -Write-Host "Deployment complete" -ForegroundColor Green \ No newline at end of file +Write-Host "Deployment complete" -ForegroundColor Green +if ($ResetCurrentEnvironment) { + Write-Warning "Running commands to reset current environment" + Write-Host " Reimporting module" + Import-Module $PSM1OutputPath, $PSD1OutputPath -Force -ErrorAction Stop + Write-Host " Connecting to VivantioAPI" + Connect-VivantioAPI -Credential $VivantioAPICredential -ODataURI 'https://neonet.vivantio.com/odata/' -RPCURI 'https://webservices-na01.vivantio.com/api/' -ErrorAction Stop + Write-Host "Reset complete" -ForegroundColor Green +}