Support building with custom container name
Currently, using a custom container name is supported for only some publish steps. This commit makes it supported for all publish steps. This commit also ensures that the Overwrite property is specified on all calls to the UploadToAzure task.
This commit is contained in:
parent
85819d562b
commit
343374d7c7
3 changed files with 24 additions and 43 deletions
|
@ -97,11 +97,13 @@
|
||||||
AccountKey="$(CloudDropAccessToken)"
|
AccountKey="$(CloudDropAccessToken)"
|
||||||
AccountName="$(CloudDropAccountName)"
|
AccountName="$(CloudDropAccountName)"
|
||||||
ContainerName="$(ContainerName)"
|
ContainerName="$(ContainerName)"
|
||||||
Items="@(CliVersionBadgeToUpload)" />
|
Items="@(CliVersionBadgeToUpload)"
|
||||||
|
Overwrite="$(OverwriteOnPublish)" />
|
||||||
|
|
||||||
<SetBlobPropertiesBasedOnFileType
|
<SetBlobPropertiesBasedOnFileType
|
||||||
AccountKey="$(CloudDropAccessToken)"
|
AccountKey="$(CloudDropAccessToken)"
|
||||||
AccountName="$(CloudDropAccountName)"
|
AccountName="$(CloudDropAccountName)"
|
||||||
|
ContainerName="$(ContainerName)"
|
||||||
Items="@(CliVersionBadgeToUpload)" />
|
Items="@(CliVersionBadgeToUpload)" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
|
@ -18,6 +18,9 @@ namespace Microsoft.DotNet.Cli.Build
|
||||||
[Required]
|
[Required]
|
||||||
public string AccountKey { get; set; }
|
public string AccountKey { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string ContainerName { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
public ITaskItem[] Items { get; set; }
|
public ITaskItem[] Items { get; set; }
|
||||||
|
|
||||||
|
@ -27,7 +30,7 @@ namespace Microsoft.DotNet.Cli.Build
|
||||||
{
|
{
|
||||||
if (_azurePublisher == null)
|
if (_azurePublisher == null)
|
||||||
{
|
{
|
||||||
_azurePublisher = new AzurePublisher(AccountName, AccountKey);
|
_azurePublisher = new AzurePublisher(AccountName, AccountKey, ContainerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _azurePublisher;
|
return _azurePublisher;
|
||||||
|
|
|
@ -22,42 +22,44 @@ namespace Microsoft.DotNet.Cli.Build
|
||||||
Sdk,
|
Sdk,
|
||||||
}
|
}
|
||||||
|
|
||||||
private const string s_dotnetBlobRootUrl = "https://dotnetcli.blob.core.windows.net/" + s_dotnetBlobContainerName;
|
|
||||||
private const string s_dotnetBlobContainerName = "dotnet";
|
private const string s_dotnetBlobContainerName = "dotnet";
|
||||||
|
|
||||||
private string _connectionString { get; set; }
|
private string _connectionString { get; set; }
|
||||||
|
private string _containerName { get; set; }
|
||||||
private CloudBlobContainer _blobContainer { get; set; }
|
private CloudBlobContainer _blobContainer { get; set; }
|
||||||
|
|
||||||
public AzurePublisher()
|
public AzurePublisher(string containerName = s_dotnetBlobContainerName)
|
||||||
{
|
{
|
||||||
_connectionString = EnvVars.EnsureVariable("CONNECTION_STRING").Trim('"');
|
_connectionString = EnvVars.EnsureVariable("CONNECTION_STRING").Trim('"');
|
||||||
_blobContainer = GetDotnetBlobContainer(_connectionString);
|
_containerName = containerName;
|
||||||
|
_blobContainer = GetDotnetBlobContainer(_connectionString, containerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AzurePublisher(string accountName, string accountKey)
|
public AzurePublisher(string accountName, string accountKey, string containerName = s_dotnetBlobContainerName)
|
||||||
{
|
{
|
||||||
_blobContainer = GetDotnetBlobContainer(accountName, accountKey);
|
_containerName = containerName;
|
||||||
|
_blobContainer = GetDotnetBlobContainer(accountName, accountKey, containerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private CloudBlobContainer GetDotnetBlobContainer(string connectionString)
|
private CloudBlobContainer GetDotnetBlobContainer(string connectionString, string containerName)
|
||||||
{
|
{
|
||||||
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
|
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
|
||||||
|
|
||||||
return GetDotnetBlobContainer(storageAccount);
|
return GetDotnetBlobContainer(storageAccount, containerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private CloudBlobContainer GetDotnetBlobContainer(string accountName, string accountKey)
|
private CloudBlobContainer GetDotnetBlobContainer(string accountName, string accountKey, string containerName)
|
||||||
{
|
{
|
||||||
var storageCredentials = new StorageCredentials(accountName, accountKey);
|
var storageCredentials = new StorageCredentials(accountName, accountKey);
|
||||||
var storageAccount = new CloudStorageAccount(storageCredentials, true);
|
var storageAccount = new CloudStorageAccount(storageCredentials, true);
|
||||||
return GetDotnetBlobContainer(storageAccount);
|
return GetDotnetBlobContainer(storageAccount, containerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private CloudBlobContainer GetDotnetBlobContainer(CloudStorageAccount storageAccount)
|
private CloudBlobContainer GetDotnetBlobContainer(CloudStorageAccount storageAccount, string containerName)
|
||||||
{
|
{
|
||||||
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
|
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
|
||||||
|
|
||||||
return blobClient.GetContainerReference(s_dotnetBlobContainerName);
|
return blobClient.GetContainerReference(containerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string UploadFile(string file, Product product, string version)
|
public string UploadFile(string file, Product product, string version)
|
||||||
|
@ -126,7 +128,7 @@ namespace Microsoft.DotNet.Cli.Build
|
||||||
BlobContinuationToken continuationToken = new BlobContinuationToken();
|
BlobContinuationToken continuationToken = new BlobContinuationToken();
|
||||||
|
|
||||||
var blobFiles = blobDir.ListBlobsSegmentedAsync(continuationToken).Result;
|
var blobFiles = blobDir.ListBlobsSegmentedAsync(continuationToken).Result;
|
||||||
return blobFiles.Results.Select(bf => bf.Uri.PathAndQuery.Replace($"/{s_dotnetBlobContainerName}/", string.Empty));
|
return blobFiles.Results.Select(bf => bf.Uri.PathAndQuery.Replace($"/{_containerName}/", string.Empty));
|
||||||
}
|
}
|
||||||
|
|
||||||
public string AcquireLeaseOnBlob(
|
public string AcquireLeaseOnBlob(
|
||||||
|
@ -219,35 +221,9 @@ namespace Microsoft.DotNet.Cli.Build
|
||||||
_blobContainer.GetBlockBlobReference(path).DeleteAsync().Wait();
|
_blobContainer.GetBlockBlobReference(path).DeleteAsync().Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string CalculateFullUrlForFile(string file, Product product, string version)
|
|
||||||
{
|
|
||||||
return $"{s_dotnetBlobRootUrl}/{CalculateRelativePathForFile(file, product, version)}";
|
|
||||||
}
|
|
||||||
|
|
||||||
private static string CalculateRelativePathForFile(string file, Product product, string version)
|
private static string CalculateRelativePathForFile(string file, Product product, string version)
|
||||||
{
|
{
|
||||||
return $"{product}/{version}/{Path.GetFileName(file)}";
|
return $"{product}/{version}/{Path.GetFileName(file)}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task DownloadFile(string blobFilePath, string localDownloadPath)
|
|
||||||
{
|
|
||||||
var blobUrl = $"{s_dotnetBlobRootUrl}/{blobFilePath}";
|
|
||||||
|
|
||||||
using (var client = new HttpClient())
|
|
||||||
{
|
|
||||||
var request = new HttpRequestMessage(HttpMethod.Get, blobUrl);
|
|
||||||
var sendTask = client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
|
|
||||||
var response = sendTask.Result.EnsureSuccessStatusCode();
|
|
||||||
|
|
||||||
var httpStream = await response.Content.ReadAsStreamAsync();
|
|
||||||
|
|
||||||
using (var fileStream = File.Create(localDownloadPath))
|
|
||||||
using (var reader = new StreamReader(httpStream))
|
|
||||||
{
|
|
||||||
httpStream.CopyTo(fileStream);
|
|
||||||
fileStream.Flush();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue