Created
October 10, 2018 01:35
-
-
Save praneetloke/09a3597000eb2efc6531452cbef13459 to your computer and use it in GitHub Desktop.
A PowerShell script to upload a folder to a blob container in an Azure Storage account.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Param( | |
[string]$storageAccountName = "the_default_storage_account_name", | |
[string]$containerName = "the_default_container_name", | |
[string]$resourceGroupName = "your_default_resource_group_name", | |
[int] $maxAge = 86400, | |
[int] $indexMaxAge = 3600, | |
[boolean]$isProductionBuild = $false, | |
[boolean]$skipBuild = $false, | |
[boolean]$isAzurePipelineBuild = $false, | |
[string]$localFolder = ".\dist" | |
) | |
function Get-MimeType() { | |
param([parameter(Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullorEmpty()][System.IO.FileInfo]$CheckFile) | |
begin { | |
Add-Type -AssemblyName "System.Web" | |
[System.IO.FileInfo]$check_file = $CheckFile | |
[string]$mime_type = $null | |
} | |
process { | |
if ($check_file.Exists) { | |
$mime_type = [System.Web.MimeMapping]::GetMimeMapping($check_file.FullName) | |
} | |
else { | |
$mime_type = "false" | |
} | |
} | |
end { | |
return $mime_type | |
} | |
} | |
if ($false -eq $skipBuild) { | |
# Build the UI first | |
if ($false -eq $isProductionBuild) { | |
write-host "Building the UI for non-prod" | |
npm run build | |
} else { | |
write-host "Building the UI for PROD" | |
npm run build:prod | |
} | |
write-host "UI build completed" | |
write-host "Launching Azure login pop-up.." | |
} | |
if ($false -eq $isAzurePipelineBuild) { | |
# Login into Azure | |
Login-AzureRmAccount | |
} | |
# The destination folder. BE SURE TO INCLUDE THE TRAILING SLASH IF YOU ENTER A NON-EMPTY VALUE HERE. | |
$destfolder = "" | |
$storageAccount = Get-AzureRmStorageAccount -ErrorAction Stop | where-object {$_.StorageAccountName -eq $storageAccountName} | |
If($storageAccount) | |
{ | |
$storageAccountKey = Get-AzureRmStorageAccountKey -ResourceGroupName $storageAccount.ResourceGroupName -StorageAccountName $storageAccountName | |
$storageContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey[0].Value | |
$storageContainer = Get-AzureStorageContainer -Context $storageContext -ErrorAction Stop | where-object {$_.Name -eq $ContainerName} | |
If($storageContainer) | |
{ | |
Write-Host "'$ContainerName' blob container exists." | |
} | |
Else | |
{ | |
Write-Host "'$ContainerName' blob container not found. Will create it now.." | |
New-AzureStorageContainer -name $ContainerName -Context $storageContext -Permission Blob | |
Write-Host "Created blob container." | |
} | |
Invoke-Expression -Command "ls $localFolder" | |
$files = Get-ChildItem $localFolder -File -Recurse | |
foreach($file in $files) | |
{ | |
Write-Host "Processing " + $file.Name | |
$directoryName = $file.Directory.Name | |
$filename = $file.Name | |
if ($directoryName -ne "dist") { | |
$blobName = $destfolder + $file.FullName.Substring($file.FullName.IndexOf("dist\") + 5) | |
} else { | |
$blobName = $destfolder + $filename | |
} | |
write-host "copying $directoryName\$filename to $blobName" | |
if ($file.Name -like "*mp4*") { | |
$mimeType = "video/mp4" | |
} elseif ($file.Name -like "*webm*") { | |
$mimeType = "video/webm" | |
} else { | |
$mimeType = $(Get-MimeType -CheckFile $file.FullName) | |
} | |
# For index.html, use the $indexMaxAge | |
if ($file.Name -eq "index.html") { | |
$maxAge = $indexMaxAge | |
} | |
$Properties = @{"CacheControl" = "max-age=$maxAge"; "ContentType" = $mimeType} | |
Set-AzureStorageBlobContent -File $file.FullName -Container $containerName -Blob $blobName -Context $storageContext -Force -Properties $Properties | |
} | |
write-host "All files in $localFolder uploaded to $containerName!" | |
} else { | |
Write-Warning "'$storageAccountName' storage account not found." | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment