Skip to content

Commit f20a07c

Browse files
azp: fix localcheckoutazure in single file deployment (#533)
1 parent 290772f commit f20a07c

3 files changed

Lines changed: 26 additions & 2 deletions

File tree

src/Runner.Server/Controllers/MessageController.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
using Sdk.Actions;
5252
using Sdk.Pipelines;
5353
using ExecutionContext = Sdk.Pipelines.ExecutionContext;
54+
using Microsoft.Extensions.FileProviders;
5455

5556
namespace Runner.Server.Controllers
5657
{
@@ -2814,7 +2815,13 @@ private HookResponse AzureDevopsMain(string fileRelativePath, string content, st
28142815
var tasksByNameAndVersion = new Dictionary<string, TaskMetaData>(getOrCreateTaskCache(null), StringComparer.OrdinalIgnoreCase);
28152816
state.TasksByNameAndVersion = tasksByNameAndVersion;
28162817
try {
2817-
TaskMetaData.Load(tasksByNameAndVersion, Path.Join(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "wwwroot", "localcheckoutazure.zip"));
2818+
if(!string.IsNullOrWhiteSpace(Assembly.GetEntryAssembly().Location)) {
2819+
TaskMetaData.Load(tasksByNameAndVersion, Path.Join(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "wwwroot", "localcheckoutazure.zip"));
2820+
} else {
2821+
var embeddedFileProvider = new ManifestEmbeddedFileProvider(Assembly.GetAssembly(type: typeof(Program))!, "wwwroot");
2822+
using var str = embeddedFileProvider.GetFileInfo("localcheckoutazure.zip").CreateReadStream();
2823+
TaskMetaData.Load(tasksByNameAndVersion, "embedded://localcheckoutazure.zip", str);
2824+
}
28182825
} catch(Exception ex) {
28192826
workflowTraceWriter.Error($"Failed to read the localcheckoutazure inbox task: {ex}");
28202827
}

src/Runner.Server/Controllers/TaskController.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using Microsoft.AspNetCore.Mvc;
1616
using Microsoft.Extensions.Caching.Memory;
1717
using Microsoft.Extensions.Configuration;
18+
using Microsoft.Extensions.FileProviders;
1819
using Microsoft.Extensions.Logging;
1920
using Newtonsoft.Json;
2021
using Swashbuckle.AspNetCore.Annotations;
@@ -67,6 +68,12 @@ public IActionResult GetTaskArchive(Guid taskid, string version) {
6768
handler.GetZip(runid, false, false, archivePath.Substring(prefix.Length), true).GetAwaiter().GetResult();
6869
return new EmptyResult();
6970
}
71+
prefix = "embedded://";
72+
if(archivePath.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)) {
73+
var embeddedFileProvider = new ManifestEmbeddedFileProvider(Assembly.GetAssembly(type: typeof(Program))!, "wwwroot");
74+
var str = embeddedFileProvider.GetFileInfo(archivePath.Substring(prefix.Length)).CreateReadStream();
75+
return new FileStreamResult(str, "application/zip") { EnableRangeProcessing = true };
76+
}
7077
return new FileStreamResult(System.IO.File.OpenRead(tasksByNameAndVersion[$"{taskid}@{version}"].ArchivePath), "application/zip") { EnableRangeProcessing = true };
7178
}
7279
}

src/Sdk/AzurePipelines/TaskMetaData.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,17 @@ public static (List<TaskMetaData>, Dictionary<string, TaskMetaData>) LoadTasks(s
4545
}
4646

4747
public static TaskMetaData Load(Dictionary<string, TaskMetaData> tasksByNameAndVersion, string filePath) {
48-
var task = System.IO.Compression.ZipFile.OpenRead(filePath);
48+
using (var task = System.IO.Compression.ZipFile.OpenRead(filePath))
49+
return Load(tasksByNameAndVersion, filePath, task);
50+
}
51+
52+
public static TaskMetaData Load(Dictionary<string, TaskMetaData> tasksByNameAndVersion, string filePath, Stream zipStream) {
53+
using (var task = new System.IO.Compression.ZipArchive(zipStream))
54+
return Load(tasksByNameAndVersion, filePath, task);
55+
}
56+
57+
public static TaskMetaData Load(Dictionary<string, TaskMetaData> tasksByNameAndVersion, string filePath, System.IO.Compression.ZipArchive task)
58+
{
4959
using(var stream = task.GetEntry("task.json")?.Open())
5060
using(var textreader = new StreamReader(stream)) {
5161
var metaData = JsonConvert.DeserializeObject<TaskMetaData>(textreader.ReadToEnd());

0 commit comments

Comments
 (0)