AL/Download-Symbols.ps1
|
function Download-Symbols { Param( [Parameter(Mandatory=$false)] [string]$SourcePath = (Get-Location), [Parameter(Mandatory=$false)] [string]$ContainerName = (Get-ContainerFromLaunchJson), # optionally download the test symbols [Parameter(Mandatory=$false)] [switch] $includeTestSymbols ) $PackagesPath = Join-Path $SourcePath '.alpackages' if (!(Test-Path $PackagesPath)) { Create-EmptyDirectory $PackagesPath } [version]$BCFallPlatform = '15.0.0.0' [version]$platform = Get-BcContainerPlatformVersion -containerOrImageName $ContainerName if ($platform -ge $BCFallPlatform) { $ServerInstance = 'bc' } else { $ServerInstance = 'nav' } $Version = '{0}.0.0.0' -f $platform.Major $SymbolsDownloaded = $false # since BC15, system layer can be defined in dependencies $Dependencies = Get-AppKeyValue -SourcePath $SourcePath -KeyName 'dependencies' foreach ($Dependency in $Dependencies) { if ($Dependency.publisher -eq 'Microsoft') { Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -Publisher $Dependency.publisher -AppName $Dependency.name -Version $Dependency.version $SymbolsDownloaded = $true } } Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -AppName 'System' -Version $Version Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -AppName 'Application' -Version $Version if ($platform -ge $BCFallPlatform) { Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -AppName 'System Application' -Version $Version Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -AppName 'Base Application' -Version $Version if ($platform -ge [version]'24.0.0.0') { Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -AppName 'Business Foundation' -Version $Version } if ($platform -ge [version]'28.0.0.0' -and $includeTestSymbols.IsPresent) { Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -AppName 'System Application Test Library' -Version $Version Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -AppName 'Application Test Library' -Version $Version Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -AppName 'Permissions Mock' -Version $Version Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -AppName 'Any' -Version $Version } } elseif (!$SymbolsDownloaded -and $includeTestSymbols.IsPresent) { # prior to BC15, test symbols available as a separate package Invoke-SymbolDownload -ContainerName $ContainerName -ServerInstance $ServerInstance -PackagesPath $PackagesPath -AppName 'Test' -Version (Get-AppKeyValue -SourcePath $SourcePath -KeyName 'test') } } function Invoke-SymbolDownload { Param( [string]$ContainerName, [string]$ServerInstance, [string]$PackagesPath, [string]$Publisher = 'Microsoft', [string]$AppName, [string]$Version ) $Uri = 'http://{0}:7049/{1}/dev/packages?publisher={2}&appName={3}&versionText={4}&tenant=default' -f $ContainerName, $ServerInstance, $Publisher, $AppName, $Version Write-Host $Uri Invoke-WebRequest -Uri $Uri -Headers (Create-Headers) -OutFile (Join-Path $PackagesPath ('{0}_{1}_{2}.app' -f $Publisher, $AppName, $Version)) } function Create-Headers { $ba = '{0}:{1}' -f (Get-EnvironmentKeyValue -KeyName 'user'), (Get-EnvironmentKeyValue -KeyName 'password') $ba = [System.Text.Encoding]::UTF8.GetBytes($ba) $ba = [System.Convert]::ToBase64String($ba) $h = @{Authorization=("Basic {0}" -f $ba);'Accept-Encoding'='gzip,deflate'} $h } Export-ModuleMember -Function Download-Symbols |