Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[main] update script for uploading images #2334

Open
wants to merge 22 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 17 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 0 additions & 1 deletion AISKU/README.md
Expand Up @@ -34,7 +34,6 @@ See [Breaking Changes](https://microsoft.github.io/ApplicationInsights-JS/upgrad
| Version | Full Size | Raw Minified | GZip Size
|---------|-----------|--------------|-------------
| [<nightly3>](https://github.com/microsoft/ApplicationInsights-JS/tree/main/AISKU) | [![full size size](https://js.monitor.azure.com/nightly/ai.3-nightly3.js.svg)](https://js.monitor.azure.com/nightly/ai.3-nightly3.js.svg)| ![minified size size](https://js.monitor.azure.com/nightly/ai.3-nightly3.min.js.svg) | ![gzip size](https://js.monitor.azure.com/nightly/ai.3-nightly3.min.js.gzip.svg)
| 3.2.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.2.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.2.0.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.2.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.2.0.min.js.gzip.svg)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should not be deleted 😄

| 3.1.2: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.1.2.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.1.2.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.1.2.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.1.2.min.js.gzip.svg)
| 3.1.1: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.1.1.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.1.1.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.1.1.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.1.1.min.js.gzip.svg)
| 3.1.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.1.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.1.0.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.1.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.1.0.min.js.gzip.svg)
Expand Down
127 changes: 127 additions & 0 deletions AISKU/scripts/publishImgToCdn.ps1
@@ -0,0 +1,127 @@
param (
[string] $releaseFrom = $null, # The root path for where to find the files to be released
[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] $overwrite = $false, # Overwrite any existing files
[switch] $testOnly = $false, # Uploads to a "tst" test container on the storage account
[switch] $cdn = $false # (No longer used -- kept for now for backward compatibility)
)

Import-Module -Force -Name "../../common/publish/Logging"
Import-Module -Force -Name "../../common/publish/AzureStorageHelper"

[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

$global:cacheValue = $null

Function Write-LogParams
{
$logDir = Get-LogPath

Write-Log "Storage Container : $storeContainer"
Write-Log "Store Path : $($global:connectDetails.cdnStorePath)"
Write-Log "Overwrite : $overwrite"
Write-Log "Test Mode : $testOnly"
Write-Log "SourcePath : $jsSdkDir"
Write-Log "Log Path : $logDir"

if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -eq $true) {
Write-Log "Mode : User-Credentials"
} else {
Write-Log "Mode : Sas-Token"
}
}

Function GetReleaseFiles
{
Write-Log "Folder : $jsSdkDir"

# check if the img dir exists
$parentDir = Split-Path -Path $jsSdkDir -Parent
$imgSrcDir = Join-Path -Path $parentDir -ChildPath "tools\sizeImageGenerator\img"

Write-Log "Image Folder : $imgSrcDir"

if (-Not (Test-Path $imgSrcDir)) {
Write-LogWarning "'$imgSrcDir' directory doesn't exist. Generate IMG first.";
exit
}

$files = New-Object 'system.collections.generic.dictionary[string,string]'

# Get all files in the imgSrcDir directory
$imgFiles = Get-ChildItem -Path $imgSrcDir -File


Write-Log "Adding files";
# Iterate over each file
foreach ($file in $imgFiles) {
# Call AddReleaseFile for the current file
AddReleaseFile $files $imgSrcDir $file.Name
}

return $files
}

#-----------------------------------------------------------------------------
# Start of Script
#-----------------------------------------------------------------------------
Set-LogPath $logPath "publishReleaseCdnLog"

$jsSdkDir = $releaseFrom
if ([string]::IsNullOrWhiteSpace($jsSdkDir) -eq $true) {
$jsSdkDir = Split-Path (Split-Path $MyInvocation.MyCommand.Path) -Parent
}

$cacheControl1Year = "public, max-age=31536000, immutable, no-transform";
$contentType = "text/javascript; charset=utf-8";

Write-LogParams

# You will need to at least have the AzureRM module 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 "======================================================================"

$releaseFiles = GetReleaseFiles
if ($null -eq $releaseFiles -or $releaseFiles.Count -eq 0) {
Write-LogFailure "Unable to find any release files"
}

Write-Log "Release Files : $($releaseFiles.Count)"

Write-Log "----------------------------------------------------------------------"

# Publish the full versioned files to all release folders
if ($version.type -eq "svg") {
# Normal publishing deployment
PublishFiles $releaseFiles "scripts/b" $cacheControl1Year $contentType $overwrite
}
else {
# Upload to the test container rather than the supplied one
$global:connectDetails.testOnly = $true
$global:connectDetails.storeContainer = "tst"
PublishFiles $releaseFiles "$($version.type)" $cacheControl1Year $contentType $overwrite
}

Write-Log "======================================================================"
58 changes: 29 additions & 29 deletions common/publish/AzureStorageHelper/AzureStorageHelper.psm1
Expand Up @@ -93,14 +93,14 @@ Function CheckLogin(
if ([string]::IsNullOrWhiteSpace($($connectDetails.resourceGroup)) -ne $true) {
if ([string]::IsNullOrWhiteSpace($connectDetails.storeName) -ne $true) {
Write-Log "Attempting to get default storage account for $($connectDetails.resourceGroup) account $($connectDetails.storeName)"
Get-AzureRmStorageAccount -ResourceGroupName $connectDetails.resourceGroup -AccountName $connectDetails.storeName -ErrorAction SilentlyContinue | Out-Null
Get-AzStorageAccount -ResourceGroupName $connectDetails.resourceGroup -Name $connectDetails.storeName -ErrorAction SilentlyContinue | Out-Null
} else {
Write-Log "Attempting to get default storage account for $($connectDetails.resourceGroup)"
Get-AzureRmStorageAccount -ResourceGroupName $connectDetails.resourceGroup -ErrorAction SilentlyContinue | Out-Null
Get-AzStorageAccount -ResourceGroupName $connectDetails.resourceGroup -ErrorAction SilentlyContinue | Out-Null
}
} else {
Write-Log "Attempting to get default storage account"
Get-AzureRmStorageAccount -ErrorAction SilentlyContinue | Out-Null
Get-AzStorageAccount -ErrorAction SilentlyContinue | Out-Null
}

Write-LogErrors $false
Expand All @@ -112,16 +112,16 @@ Function CheckLogin(
if ($eacherror.Exception.ToString() -like "* Login-AzureRmAccount*") {
Write-Log "Logging in... Atempt #$attempt"
$global:Error.Clear()
Login-AzureRMAccount -ErrorAction SilentlyContinue
Login-AzAccount -ErrorAction SilentlyContinue
Write-LogErrors $false
break
} elseif ($eacherror.Exception.ToString() -like "* Connect-AzureRmAccount*") {
Write-Log "Connecting... Atempt #$attempt"
$global:Error.Clear()
if ([string]::IsNullOrWhiteSpace($connectDetails.subscriptionId) -ne $true -and (IsGuid($connectDetails.subscriptionId) -eq $true)) {
Connect-AzureRmAccount -ErrorAction SilentlyContinue -Subscription $connectDetails.subscriptionId | Out-Null
Connect-AzAccount -ErrorAction SilentlyContinue -Subscription $connectDetails.subscriptionId | Out-Null
} else {
Connect-AzureRmAccount -ErrorAction SilentlyContinue | Out-Null
Connect-AzAccount -ErrorAction SilentlyContinue | Out-Null
}

Write-LogErrors $false
Expand Down Expand Up @@ -202,22 +202,22 @@ Function ValidateAccess (
$store = $null
$subs = $null
if ([string]::IsNullOrWhiteSpace($connectDetails.subscriptionId) -ne $true -and (IsGuid($connectDetails.subscriptionId) -eq $true)) {
Select-AzureRmSubscription -SubscriptionId $connectDetails.subscriptionId | Out-Null
Select-AzSubscription -Subscription $connectDetails.subscriptionId | Out-Null
if ([string]::IsNullOrWhiteSpace($connectDetails.resourceGroup) -ne $true -and [string]::IsNullOrWhiteSpace($connectDetails.storeName) -ne $true) {
Write-Log " Getting Storage Account"
$accounts = Get-AzureRmStorageAccount -ResourceGroupName $connectDetails.resourceGroup -AccountName $connectDetails.storeName
$accounts = Get-AzStorageAccount -ResourceGroupName $connectDetails.resourceGroup -Name $connectDetails.storeName
if ($null -ne $accounts -and $accounts.Length -eq 1) {
$store = $accounts[0]
}
}

if ($null -eq $store) {
Write-Log " Selecting Subscription"
$subs = Get-AzureRmSubscription -SubscriptionId $connectDetails.subscriptionId | Where-Object State -eq "Enabled"
$subs = Get-AzSubscription -SubscriptionId $connectDetails.subscriptionId | Where-Object State -eq "Enabled"
}
} else {
Write-Log " Finding Subscriptions"
$subs = Get-AzureRmSubscription | Where-Object State -eq "Enabled"
$subs = Get-AzSubscription | Where-Object State -eq "Enabled"
}

if ($null -eq $store -and $null -ne $subs) {
Expand All @@ -235,16 +235,16 @@ Function ValidateAccess (
$accounts = $null
foreach ($id in $subs) {
Write-Log " Checking Subscription $($id.Id)"
Select-AzureRmSubscription -SubscriptionId $id.Id | Out-Null
Select-AzSubscription -Subscription $id.Id | Out-Null
$accounts = $null
if ([string]::IsNullOrWhiteSpace($connectDetails.resourceGroup) -ne $true) {
if ([string]::IsNullOrWhiteSpace($connectDetails.storeName) -eq $true) {
$accounts = Get-AzureRmStorageAccount -ResourceGroupName $connectDetails.resourceGroup -AccountName $connectDetails.storeName
$accounts = Get-AzStorageAccount -ResourceGroupName $connectDetails.resourceGroup -Name $connectDetails.storeName
} else {
$accounts = Get-AzureRmStorageAccount -ResourceGroupName $connectDetails.resourceGroup
$accounts = Get-AzStorageAccount -ResourceGroupName $connectDetails.resourceGroup
}
} else {
$accounts = Get-AzureRmStorageAccount
$accounts = Get-AzStorageAccount
}

if ($null -ne $accounts -and $accounts.Length -ge 1) {
Expand Down Expand Up @@ -344,10 +344,10 @@ Function GetContainerContext(
$azureContext = $connectDetails.storageContext
if ([string]::IsNullOrWhiteSpace($connectDetails.sasToken) -ne $true) {
# Use the Sas token
$azureContext = New-AzureStorageContext -StorageAccountName $connectDetails.storeName -Sastoken $connectDetails.sasToken -ErrorAction SilentlyContinue
$azureContext = New-AzStorageContext -StorageAccountName $connectDetails.storeName -Sastoken $connectDetails.sasToken -ErrorAction SilentlyContinue
}

$azContainer = Get-AzureStorageContainer -Name $storageContainer -Context $azureContext -ErrorAction SilentlyContinue
$azContainer = Get-AzStorageContainer -Name $storageContainer -Context $azureContext -ErrorAction SilentlyContinue
if ($null -eq $azContainer) {
Write-Log "Container [$storageContainer] does not exist"
return
Expand Down Expand Up @@ -440,7 +440,7 @@ Function Get-VersionFiles(
$filePrefix = $filePrefix.Substring(0, $filePrefix.Length - 1)
}

$blobs = Get-AzureStorageBlob -Container $context.storageContainer -Context $context.azureContext -Prefix "$($context.blobPrefix)$filePrefix" -ErrorAction SilentlyContinue
$blobs = Get-AzStorageBlob -Container $context.storageContainer -Context $context.azureContext -Prefix "$($context.blobPrefix)$filePrefix" -ErrorAction SilentlyContinue
foreach ($blob in $blobs) {
$version = Get-FileVersion $blob.Name
if ($null -ne $version -and [string]::IsNullOrWhiteSpace($version.ver) -ne $true -and
Expand Down Expand Up @@ -536,17 +536,17 @@ Function CopyBlob(

$srcCloudBlob = $blob.ICloudBlob.FetchAttributes()

$blobResult = Start-AzureStorageBlobCopy -Context $blobContext -CloudBlob $blob.ICloudBlob -DestContext $destContext.azureContext -DestContainer "$($destContext.storageContainer)" -DestBlob $destName -Force
$blobResult = Start-AzStorageBlobCopy -Context $blobContext -CloudBlob $blob.ICloudBlob -DestContext $destContext.azureContext -DestContainer "$($destContext.storageContainer)" -DestBlob $destName -Force
Write-LogErrors

# Don't try and publish anything if any errors have been logged
if (Get-HasErrors -eq $true) {
exit 2
}

$status = $blobResult | Get-AzureStorageBlobCopyState
$status = $blobResult | Get-AzStorageBlobCopyState
while ($status.Status -eq "Pending") {
$status = $blobResult | Get-AzureStorageBlobCopyState
$status = $blobResult | Get-AzStorageBlobCopyState
Write-Log $status
Start-Sleep 10
}
Expand All @@ -559,7 +559,7 @@ Function CopyBlob(
# Make sure the metadata and properties are set correctly
# - When destination did not exist then the properties and metadata are set correctly
# - But when overwriting an existing blob the properties and metadata are not updated
$newBlob = Get-AzureStorageBlob -Context $destContext.azureContext -Container "$($destContext.storageContainer)" -Blob $destName
$newBlob = Get-AzStorageBlob -Context $destContext.azureContext -Container "$($destContext.storageContainer)" -Blob $destName
$cloudBlob = $newBlob.ICloudBlob
$cloudBlob.FetchAttributes()
$cloudBlob.Properties.CacheControl = $blob.ICloudBlob.Properties.CacheControl
Expand Down Expand Up @@ -648,13 +648,13 @@ Function PublishFiles(
$azureContext = $global:connectDetails.storageContext
if ([string]::IsNullOrWhiteSpace($global:connectDetails.sasToken) -ne $true) {
# Use the Sas token
$azureContext = New-AzureStorageContext -StorageAccountName $global:connectDetails.storeName -Sastoken $global:connectDetails.sasToken
$azureContext = New-AzStorageContext -StorageAccountName $global:connectDetails.storeName -Sastoken $global:connectDetails.sasToken
}

$container = Get-AzureStorageContainer -Name $storageContainer -Context $azureContext -ErrorAction SilentlyContinue
$container = Get-AzStorageContainer -Name $storageContainer -Context $azureContext -ErrorAction SilentlyContinue
if ($null -eq $container) {
$Error.Clear()
New-AzureStorageContainer -Name $storageContainer -Context $azureContext -Permission Blob -ErrorAction SilentlyContinue | Out-Null
New-AzStorageContainer -Name $storageContainer -Context $azureContext -Permission Blob -ErrorAction SilentlyContinue | Out-Null
Write-LogErrors
}

Expand All @@ -678,11 +678,11 @@ Function PublishFiles(
}

$newBlob = $null
$blob = Get-AzureStorageBlob -Container $storageContainer -Blob ($blobPrefix + $name) -Context $azureContext -ErrorAction SilentlyContinue
$blob = Get-AzStorageBlob -Container $storageContainer -Blob ($blobPrefix + $name) -Context $azureContext -ErrorAction SilentlyContinue
if ($null -ne $blob -and $blob.Count -ne 0) {
if ($overwrite -eq $true) {
Write-Log " Overwriting $($blobPrefix + $name)"
$newBlob = Set-AzureStorageBlobContent -Force -Container $storageContainer -File $path -Blob ($blobPrefix + $name) -Context $azureContext -Properties @{CacheControl = $cacheControlValue; ContentType = $contentType} -Metadata $metadata
$newBlob = Set-AzStorageBlobContent -Force -Container $storageContainer -File $path -Blob ($blobPrefix + $name) -Context $azureContext -Properties @{CacheControl = $cacheControlValue; ContentType = $contentType} -Metadata $metadata
if ($null -eq $newBlob) {
Write-LogFailure " Failed to overwrite/upload $($blobPrefix + $name)"
}
Expand All @@ -691,7 +691,7 @@ Function PublishFiles(
}
} else {
Write-Log " Uploading $($blobPrefix + $name)"
$newBlob = Set-AzureStorageBlobContent -Container $storageContainer -File $path -Blob ($blobPrefix + $name) -Context $azureContext -Properties @{CacheControl = $cacheControlValue; ContentType = $contentType} -Metadata $metadata
$newBlob = Set-AzStorageBlobContent -Container $storageContainer -File $path -Blob ($blobPrefix + $name) -Context $azureContext -Properties @{CacheControl = $cacheControlValue; ContentType = $contentType} -Metadata $metadata
if ($null -eq $newBlob) {
Write-LogFailure " Failed to upload $($blobPrefix + $name)"
}
Expand Down Expand Up @@ -882,7 +882,7 @@ Function SetActiveVersion(
$stageName = "$($version.path)$($version.prefix)$($verParts[0]).$($verParts[1])$($preRel)$($version.ext).stage"
CopyBlob $blobContext $blob $destContext $stageName

$stagedBlob = Get-AzureStorageBlob -Context $destContext.azureContext -Container $destContext.storageContainer -Blob $stageName
$stagedBlob = Get-AzStorageBlob -Context $destContext.azureContext -Container $destContext.storageContainer -Blob $stageName
SetProperties $stagedBlob "[$($destContext.storageContainer)]/$($blob.Name)" $version.ver $cacheControl30Min

$minorName = "$($version.path)$($version.prefix)$($verParts[0]).$($verParts[1])$($preRel)$($version.ext)"
Expand All @@ -899,7 +899,7 @@ Function SetActiveVersion(
}

# Remove the staged files
$stagedBlob | Remove-AzureStorageBlob -Force
$stagedBlob | Remove-AzStorageBlob -Force
}
}
}
Expand Down