2015-11-16 19:21:57 +00:00
#
# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#
2015-10-27 01:31:06 +00:00
param (
[ string ] $file = $ ( throw " Specify the full path to the file to be uploaded " )
)
function CheckRequiredVariables
2015-11-12 05:54:58 +00:00
{
2015-10-27 21:26:50 +00:00
if ( [ string ] :: IsNullOrEmpty ( $env:DOTNET_BUILD_VERSION ) )
2015-11-12 05:54:58 +00:00
{
2015-10-27 01:31:06 +00:00
return $false
2015-10-27 21:26:50 +00:00
}
2015-10-27 01:31:06 +00:00
# this variable is set by the CI system
if ( [ string ] :: IsNullOrEmpty ( $env:SASTOKEN ) )
2015-11-12 05:54:58 +00:00
{
2015-10-27 01:31:06 +00:00
return $false
}
2015-10-27 21:26:50 +00:00
# this variable is set by the CI system
if ( [ string ] :: IsNullOrEmpty ( $env:STORAGE_ACCOUNT ) )
{
return $false
}
# this variable is set by the CI system
if ( [ string ] :: IsNullOrEmpty ( $env:STORAGE_CONTAINER ) )
{
return $false
}
2015-10-29 00:11:32 +00:00
# this variable is set by the CI system
if ( [ string ] :: IsNullOrEmpty ( $env:CHANNEL ) )
{
return $false
}
2015-11-18 16:32:09 +00:00
# this variable is set by the CI system
if ( [ string ] :: IsNullOrEmpty ( $env:CONNECTION_STRING ) )
{
return $false
}
2015-10-27 01:31:06 +00:00
return $true
}
2015-11-18 16:32:09 +00:00
function UploadFile($Blob , $Uploadfile )
2015-10-27 01:31:06 +00:00
{
2015-11-05 03:13:50 +00:00
Write-Host " Uploading $Uploadfile to dotnet feed to.. "
2015-11-18 16:32:09 +00:00
# use azure cli to upload to blob storage. We cannot use Invoke-WebRequest to do this becuase azure has a max limit of 64mb that can be uploaded using REST
#$statusCode = (Invoke-WebRequest -URI "$Upload_URI" -Method PUT -Headers @{"x-ms-blob-type"="BlockBlob"; "x-ms-date"="2015-10-23";"x-ms-version"="2013-08-15"} -InFile $Uploadfile).StatusCode
2015-12-16 03:10:06 +00:00
azure storage blob upload - -quiet - -container $env:STORAGE_CONTAINER - -blob $Blob - -blobtype block - -connection -string " $env:CONNECTION_STRING " - -file $Uploadfile | Out-Host
2015-11-05 03:13:50 +00:00
2015-11-18 16:32:09 +00:00
if ( $LastExitCode -eq 0 )
2015-11-05 03:13:50 +00:00
{
Write-Host " Successfully uploaded $Uploadfile to dotnet feed. "
return $true
}
else
{
Write-Host " Failed to upload $Uploadfile to dotnet feed. "
return $false
}
2015-10-27 01:31:06 +00:00
}
2015-11-05 03:13:50 +00:00
function UploadBinaries($zipFile )
2015-10-27 01:31:06 +00:00
{
2015-11-05 03:13:50 +00:00
$result = -1
$fileName = [ System.IO.Path ] :: GetFileName ( $zipFile )
2015-11-18 16:32:09 +00:00
$zipBlob = " $env:CHANNEL /Binaries/ $env:DOTNET_BUILD_VERSION / $fileName "
2015-10-27 01:31:06 +00:00
2015-11-18 16:32:09 +00:00
if ( -Not ( UploadFile $zipBlob $zipFile ) )
2015-11-05 03:13:50 +00:00
{
2015-11-07 01:06:55 +00:00
return -1
2015-11-05 03:13:50 +00:00
}
2015-10-27 01:31:06 +00:00
2015-11-07 01:06:55 +00:00
Write-Host " Updating the latest dotnet binaries for windows.. "
2015-11-18 16:32:09 +00:00
$zipBlobLatest = " $env:CHANNEL /Binaries/Latest/dotnet-win-x64.latest.zip "
2015-11-07 01:06:55 +00:00
2015-11-18 16:32:09 +00:00
if ( -Not ( UploadFile $zipBlobLatest $zipFile ) )
2015-11-07 01:06:55 +00:00
{
return -1
}
# update the index file too
$indexContent = " Binaries/ $env:DOTNET_BUILD_VERSION / $fileName "
$indexFile = " $env:TEMP \latest.win.index "
$indexContent | Out-File -FilePath $indexFile
# upload the index file
2015-11-18 16:32:09 +00:00
$indexBlob = " $env:CHANNEL /dnvm/latest.win.index "
2015-11-07 01:06:55 +00:00
2015-11-18 16:32:09 +00:00
if ( -Not ( UploadFile $indexBlob $indexFile ) )
2015-11-07 01:06:55 +00:00
{
return -1
}
2015-11-11 21:37:55 +00:00
# update the version file
2015-11-11 01:30:01 +00:00
$versionFile = Convert-Path $PSScriptRoot \ . . \ . . \ artifacts \ win7-x64 \ stage2 \ . version
2015-11-18 16:32:09 +00:00
$versionBlob = " $env:CHANNEL /dnvm/latest.win.version "
2015-11-11 21:37:55 +00:00
2015-11-18 16:32:09 +00:00
if ( -Not ( UploadFile $versionBlob $versionFile ) )
2015-11-11 21:37:55 +00:00
{
return -1
}
2015-11-07 01:06:55 +00:00
return 0
2015-10-27 01:31:06 +00:00
}
2015-11-05 03:13:50 +00:00
function UploadInstallers($msiFile )
2015-10-27 01:31:06 +00:00
{
2015-11-05 03:13:50 +00:00
$fileName = [ System.IO.Path ] :: GetFileName ( $msiFile )
2015-11-18 16:32:09 +00:00
$msiBlob = " $env:CHANNEL /Installers/ $env:DOTNET_BUILD_VERSION / $fileName "
2015-10-27 01:31:06 +00:00
2015-11-18 16:32:09 +00:00
if ( -Not ( UploadFile $msiBlob $msiFile ) )
2015-11-07 01:06:55 +00:00
{
return -1
}
Write-Host " Updating the latest dotnet installer for windows.. "
2015-11-18 16:32:09 +00:00
$msiBlobLatest = " $env:CHANNEL /Installers/Latest/dotnet-win-x64.latest.msi "
2015-11-07 01:06:55 +00:00
2015-11-18 16:32:09 +00:00
if ( -Not ( UploadFile $msiBlobLatest $msiFile ) )
2015-11-05 03:13:50 +00:00
{
2015-11-07 01:06:55 +00:00
return -1
2015-11-05 03:13:50 +00:00
}
2015-10-27 01:31:06 +00:00
2015-11-07 01:06:55 +00:00
return 0
2015-11-05 03:13:50 +00:00
}
2015-10-27 01:31:06 +00:00
2015-11-05 03:13:50 +00:00
if ( ! ( CheckRequiredVariables ) )
{
# fail silently if the required variables are not available for publishing the file
exit 0
}
2015-10-27 21:26:50 +00:00
2015-11-05 03:13:50 +00:00
if ( ! [ System.IO.File ] :: Exists ( $file ) )
{
throw " $file not found "
}
2015-10-27 01:31:06 +00:00
2015-11-05 03:13:50 +00:00
$result = $false
2015-10-27 01:31:06 +00:00
2015-11-05 03:13:50 +00:00
if ( [ System.IO.Path ] :: GetExtension ( $file ) . ToLower ( ) -eq " .zip " )
2015-10-27 01:31:06 +00:00
{
2015-11-05 03:13:50 +00:00
$result = UploadBinaries $file
2015-10-27 01:31:06 +00:00
}
2015-11-05 03:13:50 +00:00
elseif ( [ System.IO.Path ] :: GetExtension ( $file ) . ToLower ( ) -eq " .msi " )
2015-10-27 01:31:06 +00:00
{
2015-11-05 03:13:50 +00:00
$result = UploadInstallers $file
2015-10-27 01:31:06 +00:00
}
2015-11-05 03:13:50 +00:00
exit $result