init commit
This commit is contained in:
188
Start-PPTSolutionPull.ps1
Normal file
188
Start-PPTSolutionPull.ps1
Normal file
@@ -0,0 +1,188 @@
|
||||
function Start-PPTSolutionPull {
|
||||
[CmdLetBinding()]
|
||||
Param (
|
||||
[Alias('env')]
|
||||
[ValidateSet('DCMA_DEV', 'DCMA_Sustainment', 'DCMA_TEST', 'DCMA_PROD', 'ACP-DCMA-CDE-DEV', 'ACP-DCMA-CDE-PROD')]
|
||||
[string]$Environment = 'DCMA_DEV',
|
||||
$Path = (Get-Location).Path,
|
||||
[Alias('m')]
|
||||
[switch]$Managed,
|
||||
[Alias('p')]
|
||||
[switch]$Patch,
|
||||
[Alias('sn')]
|
||||
[switch]$SolutionName
|
||||
)
|
||||
|
||||
begin {
|
||||
|
||||
$Path = @{
|
||||
qualifier = (Split-Path -Path $Path -Qualifier)
|
||||
parent = (Split-Path -Path $Path)
|
||||
leaf = (Split-Path -Path $Path -Leaf)
|
||||
path = $Path
|
||||
pathBuild = (Join-Path -Path $Path -ChildPath 'Build')
|
||||
pathConfig = (Join-Path -Path $Path -ChildPath 'Build\config.json')
|
||||
sourcePath = (Join-Path -Path $PSScriptRoot -ChildPath 'source')
|
||||
sourceConfig = (Join-Path -Path $PSScriptRoot -ChildPath 'source\config.ps1')
|
||||
sourceIgnore = (Join-Path -Path $PSScriptRoot -ChildPath 'source\.gitignore')
|
||||
}
|
||||
|
||||
$config = (Get-Content $Path.pathConfig | ConvertFrom-Json)
|
||||
$env = ($config.env | ?{$_.name -eq $Environment})
|
||||
|
||||
function ConfiguredEnvironments () {
|
||||
if (!$env) {
|
||||
do {
|
||||
#Write-Host "┌───────────────────────────────────────────────────────────────┐" -ForegroundColor Green
|
||||
#Write-Host "│`t`t`t`t`t`t`t`t│ -ForegroundColor Green
|
||||
#Write-Host "│" -ForegroundColor Green -NoNewLine; Write-Host "`t`t`tCONFIGURED ENVIRONMENTS`t`t`t" -ForegroundColor Cyan -NoNewline; Write-Host "│" -ForegroundColor Green
|
||||
#Write-Host "└───────────────────────────────────────────────────────────────┘" -ForegroundColor Green
|
||||
$config.env | %{"[ {0} ] {1}" -f $_.id,$_.name}
|
||||
$environmentId = Read-Host -Prompt "Select Environment ($((1..$config.env.Count) -join ','))"
|
||||
} while ($environmentId -notin (1..$config.env.Count))
|
||||
#$env = ($config.env | ?{$_.id -eq $environmentId})
|
||||
return ($config.env | ?{$_.id -eq $environmentId})
|
||||
}
|
||||
}
|
||||
|
||||
function NameThatSolution () {
|
||||
#Write-Host "┌───────────────────────────────────────────────────────────────┐" -ForegroundColor Green
|
||||
#Write-Host "│" -ForegroundColor Green -NoNewLine; Write-Host "`t`t`tNAME THAT SOLUTION`t`t`t" -ForegroundColor Cyan -NoNewline; Write-Host "│" -ForegroundColor Green
|
||||
#Write-Host "└───────────────────────────────────────────────────────────────┘" -ForegroundColor Green
|
||||
do {
|
||||
$solutionNameProvided = Read-Host -Prompt "Enter Solution Package name"
|
||||
If($solutionNameProvided -match '\s*(\W+?)') {
|
||||
Write-Host "We had to fix a few things with the Solution Package name provided [" -NoNewline -ForegroundColor Yellow
|
||||
Write-Host "$($solutionNameProvided)" -NoNewLine -ForegroundColor White
|
||||
Write-Host "]`nHope you're not too upset." -ForegroundColor Yellow
|
||||
}
|
||||
$solutionNewName = $solutionNameProvided -replace ('\s*(\W+?)', '')
|
||||
Write-Host "`n$(If($solutionNameProvided -match '\s*(\W+?)'){"A little fixer upper: "}Else{"Solution Package Name:"})" -NoNewline -ForegroundColor Green
|
||||
Write-Host "$($solutionNewName)" -ForegroundColor Magenta
|
||||
$continueSolutionName = Read-Host -Prompt "$(If($solutionNameProvided -match '\s*(\W+?)'){"We good?"}Else{"Continue"}) (y/n)"
|
||||
} while ($continueSolutionName -ne 'y' -or $continueSolutionName -ne 'Y')
|
||||
#$Path.leaf = $solutionNewName
|
||||
return $solutionNewName
|
||||
}
|
||||
|
||||
function GetAvailablePatches () {
|
||||
#Write-Host "┌───────────────────────────────────────────────────────────────┐" -ForegroundColor Green
|
||||
#Write-Host "│" -ForegroundColor Green -NoNewLine; Write-Host "`t`t`tAVAILABLE PATCHES`t`t`t" -ForegroundColor Cyan -NoNewline; Write-Host "│" -ForegroundColor Green
|
||||
#Write-Host "└───────────────────────────────────────────────────────────────┘" -ForegroundColor Green
|
||||
$pacResponse = (& $Global:pptConfig.pacPath solution list | ?{$_ -match $Path.leaf -and $_ -match "patch"}) -split "`r?`n" | %{
|
||||
$g1 = ($_ -split "(?'g1'^\S*)")
|
||||
$g2 = ($g1[2] -split "((\d+|\.){1,})")[0,1,-1]
|
||||
$solutionObject = @{
|
||||
Name = $g1[1]
|
||||
DisplayName = ($g2[0]).Trim()
|
||||
Version = ($g2[1])
|
||||
Managed = switch([string]($g2[2]).Trim()){'False' {$false} Default {$true}}
|
||||
ManagedQuantifier = switch([string]($g2[2]).Trim()){'False' {0} Default {1}}
|
||||
ManagedValue = [string]($g2[2]).Trim()
|
||||
IsPatch = $g1[1] -imatch 'patch'
|
||||
}
|
||||
New-Object -TypeName psObject -Property $solutionObject
|
||||
}
|
||||
|
||||
do {
|
||||
$index = 1
|
||||
$pacResponse | %{
|
||||
Write-Host "[ $(($index++)) ]`t" -NoNewline
|
||||
Write-Host "Name: " -NoNewline -ForegroundColor DarkGray; Write-Host "$($_.Name)`t" -NoNewline
|
||||
Write-Host "DisplayName: " -NoNewline -ForegroundColor DarkGray; Write-Host "$($_.DisplayName)`t" -NoNewline
|
||||
Write-Host "Version: " -NoNewline -ForegroundColor DarkGray; Write-Host "$($_.Version)`t" -NoNewline
|
||||
Write-Host "IsPatch: " -NoNewline -ForegroundColor DarkGray; Write-Host "$($_.IsPatch)`t"
|
||||
}
|
||||
$patchIndex = Read-Host "Select Patch ($((1..$pacResponse.Count) -join ','))"
|
||||
$patchSelection = $pacResponse[$patchIndex-1]
|
||||
} while ($patchSelection.Name -notin $pacResponse.Name)
|
||||
return $patchSelection
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
process {
|
||||
|
||||
$pacAuthResponse = & $Global:pptConfig.pacPath auth list
|
||||
|
||||
switch ($pacAuthResponse) {
|
||||
|
||||
{$_ -match 'No profiles were found on this computer'} {
|
||||
Write-Host "[ Error ] " -ForegroundColor Yellow -nonewline
|
||||
Write-Host "No profiles were found on this computer" -ForegroundColor Yellow
|
||||
break
|
||||
<#$authResponse = auth
|
||||
if ($authResponse) {
|
||||
$IsAuth = $true
|
||||
& $Global:pptConfig.pacPath org select -env $env.env_id
|
||||
} else {
|
||||
$IsAuth = $false
|
||||
}#>
|
||||
|
||||
<#if (& $Global:pptConfig.pacPath org list | ?{$_ -match '\*'}) {
|
||||
$IsAuth = $true
|
||||
& $Global:pptConfig.pacPath org select -env $env.env_id
|
||||
} else {
|
||||
$IsAuth = $false
|
||||
}#>
|
||||
}
|
||||
|
||||
{$_ -match '\*'} {
|
||||
Write-Host "[ Info ] " -ForegroundColor Green -nonewline
|
||||
write-host "Authentication profile found" -ForegroundColor Cyan
|
||||
& $Global:pptConfig.pacPath org select -env $env.env_id
|
||||
$IsAuth = $true}
|
||||
|
||||
#Default {Write-Warning -Message "Unhandled exception"; return}
|
||||
|
||||
}
|
||||
|
||||
Switch($Patch) {
|
||||
true {
|
||||
if ((& $Global:pptConfig.pacPath org list | ?{$_ -match '\*'}) -match $env.env_id -and $IsAuth) {
|
||||
|
||||
$patchSolution = GetAvailablePatches
|
||||
$patchSolution
|
||||
|
||||
Write-Host "[ Info ] " -ForegroundColor Green -nonewline; write-host "Building $(If($Managed){'managed'}else{'unmanaged'}) solution patch" -ForegroundColor Cyan
|
||||
& $Global:pptConfig.pacPath solution export --name $patchSolution.Name -ow --path $Path.path $(if($Managed){'--managed'})
|
||||
& $Global:pptConfig.pacPath solution unpack --zipfile "$($patchSolution.Name)$(If($Managed){'_managed'}).zip" --folder $Path.path -pca --packagetype $(If($Managed){'Managed'}else{'Unmanaged'}) --errorLevel Verbose
|
||||
|
||||
} else {
|
||||
|
||||
Write-Host '[ Error ] ' -ForegroundColor Yellow -nonewline; write-host 'Fatal exception' -ForegroundColor Red
|
||||
return
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Default {
|
||||
if ((& $Global:pptConfig.pacPath org list | ?{$_ -match '\*'}) -match $env.env_id -and $IsAuth) {
|
||||
|
||||
Write-Host "[ Info ] " -ForegroundColor Green -nonewline; write-host "Building $(If($Managed){'managed'}else{'unmanaged'}) solution" -ForegroundColor Cyan
|
||||
& $Global:pptConfig.pacPath solution export --name $Path.leaf -ow --path $Path.path $(if($Managed){'--managed'})
|
||||
& $Global:pptConfig.pacPath solution unpack --zipfile "$($Path.leaf)$(If($Managed){'_managed'}).zip" --folder $Path.path -pca --packagetype $(If($Managed){'Managed'}else{'Unmanaged'}) --errorLevel Verbose
|
||||
|
||||
} else {
|
||||
|
||||
Write-Host '[ Error ] ' -ForegroundColor Yellow -nonewline; write-host 'Fatal exception' -ForegroundColor Red
|
||||
return
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
end {
|
||||
|
||||
If($SolutionName) {
|
||||
$sn = NameThatSolution
|
||||
Move-Item -Path (Join-Path -Path $Path.path -ChildPath "$($Path.leaf)$(If($Managed){'_managed'}).zip") -Destination (Join-Path -Path $Path.path -ChildPath "$($sn).zip") -Force -Confirm:$false
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
# EXPORT ALIAS
|
||||
New-Alias -Name pullSolution -Value Start-PPTSolutionPull -Description 'posh-PowerPlatformToolkit - Start-PPTSolutionPull alias' -Force
|
||||
Reference in New Issue
Block a user