Pipelines/Read-Settings.ps1

Param(
    [Parameter(Mandatory=$false)]
    [ValidateSet('Local', 'AzureDevOps', 'GithubActions', 'GitLab')]
    [string] $environment = 'Local',
    [string] $version = "",
    [string] $settingsFile = "",
    [string] $settingsFolder = $PSScriptRoot
)

$agentName = ""
if ($environment -ne 'Local') {
    $agentName = $ENV:AGENT_NAME
}

if ($settingsFile -eq "") {
    $settingsFile = (Join-Path $settingsFolder "settings.json")
}

$settings = (Get-Content $settingsFile | ConvertFrom-Json)      # TODO
if ("$version" -eq "")  {
    $version = $settings.versions[0].version
    Write-Host "Version not defined, using $version"
}

$buildversion = $settings.versions | Where-Object { $_.version -eq $version }

if ($buildversion) {
    Write-Host "Set artifact = $($buildVersion.artifact)"
    Set-Variable -Name "artifact" -Value $buildVersion.artifact
}
else {
    throw "Unknown version: $version"
}

$pipelineName = "$($settings.Name)-$version"
Write-Host "Set pipelineName = $pipelineName"

if ($agentName) {
    $containerName = "$($agentName -replace '[^a-zA-Z0-9---]', '')-$($pipelineName -replace '[^a-zA-Z0-9---]', '')".ToLowerInvariant()
}
else {
    $containerName = "$($pipelineName.Replace('.','-') -replace '[^a-zA-Z0-9---]', '')".ToLowerInvariant()
}
Write-Host "Set containerName = $containerName"
if ($environment -eq 'AzureDevOps') {
    Write-Host "##vso[task.setvariable variable=containerName]$containerName"
}

"installApps", "previousApps", "installTestApps", "rulesetFile", "appSourceCopMandatoryAffixes", "appSourceCopSupportedCountries", "appFolders", "testFolders", "bcptTestFolders", "memoryLimit", "additionalCountries", "genericImageName", "vaultNameForLocal", "bcContainerHelperVersion", "companyNameForTests", "restoreDbFromBackupUrl", "translationFolderBlobPath" | ForEach-Object {
    $str = ""
    if ($buildversion.PSObject.Properties.Name -eq $_) {
        $str = $buildversion."$_"
    }
    elseif ($settings.PSObject.Properties.Name -eq $_) {
        $str = $settings."$_"
    }
    Write-Host "Set $_ = '$str'"
    Set-Variable -Name $_ -Value "$str"
}

"installTestRunner", "installTestFramework", "installTestLibraries", "installPerformanceToolkit", "enableCodeCop", "enableAppSourceCop", "enablePerTenantExtensionCop", "enableUICop", "doNotRunBcptTests", "useDefaultAppSourceRuleSet", "doNotSignApps", "doNotRunTests", "cacheImage", "CreateRuntimePackages", "useCompilerFolder", "doNotPublishApps", "appendSasTokenFromSecrets", "useArtifactWithBlob" | ForEach-Object {
    $str = "False"
    if ($buildversion.PSObject.Properties.Name -eq $_) {
        $str = $buildversion."$_"
    }
    elseif ($settings.PSObject.Properties.Name -eq $_) {
        $str = $settings."$_"
    }
    Write-Host "Set $_ = $str"
    Set-Variable -Name $_ -Value ($str -eq "True")
}

"copyLibraries" | ForEach-Object {
    $arr = @()
    if ($buildversion.PSObject.Properties.Name -eq $_) {
        $arr = $buildversion."$_"
    }
    elseif ($settings.PSObject.Properties.Name -eq $_) {
        $arr = $settings."$_"
    }
    Write-Host "Set $_ = '$arr'"
    Set-Variable -Name $_ -Value $arr
}

$artifact = if ($useArtifactWithBlob) { "$ENV:artifactVersionFromSecrets" } else { $buildVersion.artifact }
Write-Host "Set artifact = '$artifact'"

if ($appendSasTokenFromSecrets) {
    $modifiedInstallApps = ($installApps -split ',' | ForEach-Object { if ($_ -like 'https://smartartifacts*') { $_ + $ENV:SASToken } else { $_ } }) -join ','
    $modifiedPreviousApps = ($previousApps -split ',' | ForEach-Object { if ($_ -like 'https://smartartifacts*') { $_ + $ENV:SASToken } else { $_ } }) -join ','
} else {
    $modifiedInstallApps = $installApps
    $modifiedPreviousApps = $previousApps
}

Write-Host "Set modified installApps = '$modifiedInstallApps'"
Set-Variable -Name "installApps" -Value "$modifiedInstallApps"
Write-Host "Set modified previousApps = '$modifiedPreviousApps'"
Set-Variable -Name "previousApps" -Value "$modifiedPreviousApps"

if ($translationFolderBlobPath -ne "") {
    Write-Host "##vso[task.setvariable variable=translationFolderBlobPath]$translationFolderBlobPath"
}

$imageName = ""
if ($cacheImage -and ("$AgentName" -ne "Hosted Agent" -and "$agentName" -ne "" -and "$AgentName" -notlike "Azure Pipelines*")) {
    $imageName = "bcimage"
}

# SO >>
if ($previousApps -ne "")
{
    if (Test-Path -Path $previousApps -PathType Container) {
        $previousApps = Get-ChildItem $previousApps | Where-Object {$_.Name -notlike "Microsoft*.app"} | Foreach-Object {$_.FullName}
    }
}
# SO <<