2024-06-08 02:50:37 +03:00
[ CmdletBinding ( ) ]
param (
[ string ] $container = " " , # The container to update
[ string ] $activeVersion = " " , # The version to copy as the active version
[ string ] $storeContainer = " cdn " , # Identifies the destination storage account container
[ string ] $cdnStorePath = " cdnstoragename " , # Identifies the target Azure Storage account (by name)
[ string ] $subscriptionId = $null , # Identifies the target Azure Subscription Id (if not encoded in the cdnStorePath)
[ string ] $resourceGroup = $null , # Identifies the target Azure Subscription Resource Group (if not encoded in the cdnStorePath)
[ string ] $sasToken = $null , # The SAS Token to use rather than using or attempting to login
[ string ] $logPath = $null , # The location where logs should be written
[ switch ] $minorOnly = $false , # Only set the active minor version (v2.x) and not the major version (v2)
[ switch ] $testOnly = $false , # Uploads to a "tst" test container on the storage account
2024-07-20 00:11:27 +03:00
[ switch ] $cdn = $false , # (No longer used -- kept for now for backward compatibility)
[ switch ] $useConnectedAccount = $false # Use Entra Id to connect to Azure
2024-06-08 02:50:37 +03:00
)
Import-Module -Force -Name " ../../common/publish/Logging "
Import-Module -Force -Name " ../../common/publish/AzStorageHelper "
[ hashtable ] $global:connectDetails = @ { }
$global:connectDetails . storeContainer = $storeContainer
$global:connectDetails . cdnStorePath = $cdnStorePath
$global:connectDetails . resourceGroup = $resourceGroup
$global:connectDetails . storeName = $null # The endpoint needs to the base name of the endpoint, not the full URL (eg. “my-cdn” rather than “my-cdn.azureedge.net”)
$global:connectDetails . subscriptionId = $subscriptionId
$global:connectDetails . sasToken = $sasToken
$global:connectDetails . storageContext = $null
$global:connectDetails . testOnly = $testOnly
2024-07-20 00:11:27 +03:00
$global:connectDetails . useConnectedAccount = $useConnectedAccount
2024-06-08 02:50:37 +03:00
Function Write-LogParams
{
Write-Log " Container : $container "
Write-Log " Version : $activeVersion "
Write-Log " Storage Container : $storeContainer "
Write-Log " Store Path : $( $global:connectDetails . cdnStorePath ) "
Write-Log " Test Mode : $testOnly "
Write-Log " Log Path : $logDir "
2024-07-20 00:11:27 +03:00
Write-Log " Use Connected Acct: $useConnectedAccount "
2024-06-08 02:50:37 +03:00
if ( [ string ] :: IsNullOrWhiteSpace ( $global:connectDetails . sasToken ) -eq $true ) {
Write-Log " Mode : User-Credentials "
} else {
Write-Log " Mode : Sas-Token "
}
}
Function Validate-Params
{
if ( [ string ] :: IsNullOrWhiteSpace ( $activeVersion ) -eq $true ) {
Write-LogFailure " The Active version is not specified "
exit
}
$version = Get-VersionDetails $activeVersion
if ( [ string ] :: IsNullOrWhiteSpace ( $version . type ) -eq $true ) {
Write-LogFailure " Unknown release type "
}
$versionParts = $version . ver . Split ( " . " )
if ( $versionParts . Length -ne 3 ) {
Write-LogFailure " Active Version [ $activeVersion ] is not a valid version number "
}
foreach ( $verNum in $versionParts ) {
[ int ] $value = 0
if ( [ int32 ] :: TryParse ( $verNum , [ ref ] $value ) -ne $true ) {
Write-LogFailure " [ $( $verNum ) ] is not a valid number within the version[ $activeVersion ] "
}
}
# Publish the full versioned files to all release folders
if ( $version . type -eq " release " ) {
# Normal publishing deployment
if ( " beta " , " next " , " public " -NotContains $container ) {
Write-LogFailure " Container [ $container ] is not valid for version type [ $( $version . type ) ] "
}
}
elseif ( $version . type -eq " rc " ) {
if ( " beta " , " next " -NotContains $container ) {
Write-LogFailure " Container [ $container ] is not valid for version type [ $( $version . type ) ] "
}
}
elseif ( $version . type -eq " dev " -or $version . type -eq " beta " ) {
if ( $version . type -ne $container ) {
Write-LogFailure " Container [ $container ] is not valid for version type [ $( $version . type ) ] "
}
}
elseif ( $version . type -eq " nightly " -or $version . type -eq " nightly3 " ) {
if ( " nightly " -ne $container ) {
Write-LogFailure " Container [ $container ] is not valid for version type [ $( $version . type ) ] "
}
}
else {
# Upload to the test container rather than the supplied one
$global:connectDetails . testOnly = $true
if ( $version . type -ne $container ) {
Write-LogFailure " Container [ $container ] is not valid for version type [ $( $version . type ) ] "
} else {
Write-LogWarning " Non-Standard release type using tst/ $container as the destination "
}
}
return $version ;
}
$Error . Clear ( )
#-----------------------------------------------------------------------------
# Start of Script
#-----------------------------------------------------------------------------
Set-LogPath $logPath " setActiveCdnVersionLog "
Write-LogParams
$version = Validate-Params
# Don't try and publish anything if any errors have been logged
if ( Get-HasErrors -eq $true ) {
exit 2
}
# You will need to at least have the Az modules installed
InstallRequiredModules
$global:connectDetails = ParseCdnStorePath $global:connectDetails
if ( [ string ] :: IsNullOrWhiteSpace ( $global:connectDetails . sasToken ) -eq $true ) {
Write-Log " ********************************************************************** "
Write-Log " Validating user access "
Write-Log " ********************************************************************** "
$global:connectDetails = ValidateAccess $global:connectDetails
}
Write-Log " ====================================================================== "
# List the files for each container
$files = New-Object 'system.collections.generic.dictionary[string, system.collections.generic.list[hashtable]]'
$storePath = " $container "
if ( $container -eq " public " ) {
$storePath = " scripts/b "
} elseif ( $container -ne " beta " -and $container -ne " next " -and $container -ne " dev " -and $container -ne " nightly " ) {
$global:connectDetails . testOnly = $true
$global:connectDetails . storeContainer = " tst "
}
Get-VersionFiles $files $storePath " ai. " $activeVersion
if ( $files . ContainsKey ( $activeVersion ) -ne $true ) {
Write-LogFailure " Version [ $activeVersion ] does not appear to be deployed to [ $container ] "
} elseif ( $files [ $activeVersion ] . Count -ne 4 -and # Prior to 2.5.8
$files [ $activeVersion ] . Count -ne 8 -and # Since 2.5.8
$files [ $activeVersion ] . Count -ne 9 -and # Since 2.6.5
$files [ $activeVersion ] . Count -ne 12 -and # Since 2.5.8
$files [ $activeVersion ] . Count -ne 13 ) { # Since 2.6.5
Write-LogFailure " Version [ $activeVersion ] does not fully deployed to [ $container ] -- only found [ $( $files [ $activeVersion ] . Count ) ] file(s) "
}
# Don't try and publish anything if any errors have been logged
if ( Get-HasErrors -eq $true ) {
exit 2
}
SetActiveVersion $files [ $activeVersion ] $storePath $minorOnly
Write-Log " ====================================================================== "