mirror of
https://github.com/actions/runner.git
synced 2025-12-10 04:06:57 +00:00
Use job execution context instead of step for adding summary attachments (#1667)
* use job exec context to queue/attach summaries * step summary tests: use job ctx and verify against server queue
This commit is contained in:
@@ -317,7 +317,8 @@ namespace GitHub.Runner.Worker
|
||||
var attachmentName = context.Id.ToString();
|
||||
|
||||
Trace.Info($"Queueing file ({filePath}) for attachment upload ({attachmentName})");
|
||||
context.QueueAttachFile(ChecksAttachmentType.StepSummary, attachmentName, scrubbedFilePath);
|
||||
// Attachments must be added to the parent context (job), not the current context (step)
|
||||
context.Root.QueueAttachFile(ChecksAttachmentType.StepSummary, attachmentName, scrubbedFilePath);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@@ -10,12 +10,15 @@ using Moq;
|
||||
using Xunit;
|
||||
using DTWebApi = GitHub.DistributedTask.WebApi;
|
||||
using GitHub.DistributedTask.WebApi;
|
||||
using Pipelines = GitHub.DistributedTask.Pipelines;
|
||||
|
||||
namespace GitHub.Runner.Common.Tests.Worker
|
||||
{
|
||||
public sealed class CreateStepSummaryCommandL0
|
||||
{
|
||||
private Mock<IExecutionContext> _executionContext;
|
||||
private Mock<IJobServerQueue> _jobServerQueue;
|
||||
private ExecutionContext _jobExecutionContext;
|
||||
private List<Tuple<DTWebApi.Issue, string>> _issues;
|
||||
private Variables _variables;
|
||||
private string _rootDirectory;
|
||||
@@ -30,9 +33,11 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
using (var hostContext = Setup(featureFlagState: "false"))
|
||||
{
|
||||
var stepSummaryFile = Path.Combine(_rootDirectory, "feature-off");
|
||||
|
||||
_createStepCommand.ProcessCommand(_executionContext.Object, stepSummaryFile, null);
|
||||
_jobExecutionContext.Complete();
|
||||
|
||||
_executionContext.Verify(e => e.QueueAttachFile(ChecksAttachmentType.StepSummary, It.IsAny<string>(), It.IsAny<string>()), Times.Never());
|
||||
|
||||
_jobServerQueue.Verify(x => x.QueueFileUpload(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>()), Times.Never());
|
||||
Assert.Equal(0, _issues.Count);
|
||||
}
|
||||
}
|
||||
@@ -45,8 +50,9 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
using (var hostContext = Setup())
|
||||
{
|
||||
_createStepCommand.ProcessCommand(_executionContext.Object, null, null);
|
||||
_jobExecutionContext.Complete();
|
||||
|
||||
_executionContext.Verify(e => e.QueueAttachFile(ChecksAttachmentType.StepSummary, It.IsAny<string>(), It.IsAny<string>()), Times.Never());
|
||||
_jobServerQueue.Verify(x => x.QueueFileUpload(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>()), Times.Never());
|
||||
Assert.Equal(0, _issues.Count);
|
||||
}
|
||||
}
|
||||
@@ -61,8 +67,9 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
var stepSummaryFile = Path.Combine(_rootDirectory, "directory-not-found", "env");
|
||||
|
||||
_createStepCommand.ProcessCommand(_executionContext.Object, stepSummaryFile, null);
|
||||
_jobExecutionContext.Complete();
|
||||
|
||||
_executionContext.Verify(e => e.QueueAttachFile(ChecksAttachmentType.StepSummary, It.IsAny<string>(), It.IsAny<string>()), Times.Never());
|
||||
_jobServerQueue.Verify(x => x.QueueFileUpload(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>()), Times.Never());
|
||||
Assert.Equal(0, _issues.Count);
|
||||
}
|
||||
}
|
||||
@@ -77,8 +84,9 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
var stepSummaryFile = Path.Combine(_rootDirectory, "file-not-found");
|
||||
|
||||
_createStepCommand.ProcessCommand(_executionContext.Object, stepSummaryFile, null);
|
||||
_jobExecutionContext.Complete();
|
||||
|
||||
_executionContext.Verify(e => e.QueueAttachFile(ChecksAttachmentType.StepSummary, It.IsAny<string>(), It.IsAny<string>()), Times.Never());
|
||||
_jobServerQueue.Verify(x => x.QueueFileUpload(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>()), Times.Never());
|
||||
Assert.Equal(0, _issues.Count);
|
||||
}
|
||||
}
|
||||
@@ -94,8 +102,9 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
File.Create(stepSummaryFile).Dispose();
|
||||
|
||||
_createStepCommand.ProcessCommand(_executionContext.Object, stepSummaryFile, null);
|
||||
_jobExecutionContext.Complete();
|
||||
|
||||
_executionContext.Verify(e => e.QueueAttachFile(ChecksAttachmentType.StepSummary, It.IsAny<string>(), It.IsAny<string>()), Times.Never());
|
||||
_jobServerQueue.Verify(x => x.QueueFileUpload(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>()), Times.Never());
|
||||
Assert.Equal(0, _issues.Count);
|
||||
}
|
||||
}
|
||||
@@ -111,8 +120,9 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
File.WriteAllBytes(stepSummaryFile, new byte[128 * 1024 + 1]);
|
||||
|
||||
_createStepCommand.ProcessCommand(_executionContext.Object, stepSummaryFile, null);
|
||||
_jobExecutionContext.Complete();
|
||||
|
||||
_executionContext.Verify(e => e.QueueAttachFile(ChecksAttachmentType.StepSummary, It.IsAny<string>(), It.IsAny<string>()), Times.Never());
|
||||
_jobServerQueue.Verify(x => x.QueueFileUpload(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>()), Times.Never());
|
||||
Assert.Equal(1, _issues.Count);
|
||||
}
|
||||
}
|
||||
@@ -134,8 +144,9 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
WriteContent(stepSummaryFile, content);
|
||||
|
||||
_createStepCommand.ProcessCommand(_executionContext.Object, stepSummaryFile, null);
|
||||
_jobExecutionContext.Complete();
|
||||
|
||||
_executionContext.Verify(e => e.QueueAttachFile(ChecksAttachmentType.StepSummary, _executionContext.Object.Id.ToString(), stepSummaryFile + "-scrubbed"), Times.Once());
|
||||
_jobServerQueue.Verify(x => x.QueueFileUpload(It.IsAny<Guid>(), It.IsAny<Guid>(), ChecksAttachmentType.StepSummary, _executionContext.Object.Id.ToString(), stepSummaryFile + "-scrubbed", It.IsAny<bool>()), Times.Once());
|
||||
Assert.Equal(0, _issues.Count);
|
||||
}
|
||||
}
|
||||
@@ -166,8 +177,9 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
var scrubbedFileContents = File.ReadAllText(scrubbedFile);
|
||||
Assert.DoesNotContain("ThisIsMySecretPassword!", scrubbedFileContents);
|
||||
Assert.DoesNotContain("ghs_verysecuretoken", scrubbedFileContents);
|
||||
_jobExecutionContext.Complete();
|
||||
|
||||
_executionContext.Verify(e => e.QueueAttachFile(ChecksAttachmentType.StepSummary, _executionContext.Object.Id.ToString(), scrubbedFile), Times.Once());
|
||||
_jobServerQueue.Verify(x => x.QueueFileUpload(It.IsAny<Guid>(), It.IsAny<Guid>(), ChecksAttachmentType.StepSummary, _executionContext.Object.Id.ToString(), scrubbedFile, It.IsAny<bool>()), Times.Once());
|
||||
Assert.Equal(0, _issues.Count);
|
||||
}
|
||||
}
|
||||
@@ -189,13 +201,43 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
|
||||
private TestHostContext Setup([CallerMemberName] string name = "", string featureFlagState = "true")
|
||||
{
|
||||
var hostContext = new TestHostContext(this, name);
|
||||
|
||||
_issues = new List<Tuple<DTWebApi.Issue, string>>();
|
||||
|
||||
var hostContext = new TestHostContext(this, name);
|
||||
// Setup a job request
|
||||
TaskOrchestrationPlanReference plan = new TaskOrchestrationPlanReference();
|
||||
TimelineReference timeline = new TimelineReference();
|
||||
Guid jobId = Guid.NewGuid();
|
||||
string jobName = "Summary Job";
|
||||
var jobRequest = new Pipelines.AgentJobRequestMessage(plan, timeline, jobId, jobName, jobName, null, null, null, new Dictionary<string, VariableValue>(), new List<MaskHint>(), new Pipelines.JobResources(), new Pipelines.ContextData.DictionaryContextData(), new Pipelines.WorkspaceOptions(), new List<Pipelines.ActionStep>(), null, null, null, null);
|
||||
jobRequest.Resources.Repositories.Add(new Pipelines.RepositoryResource()
|
||||
{
|
||||
Alias = Pipelines.PipelineConstants.SelfAlias,
|
||||
Id = "github",
|
||||
Version = "sha1"
|
||||
});
|
||||
jobRequest.ContextData["github"] = new Pipelines.ContextData.DictionaryContextData();
|
||||
jobRequest.Variables["ACTIONS_STEP_DEBUG"] = "true";
|
||||
|
||||
// Server queue for job
|
||||
_jobServerQueue = new Mock<IJobServerQueue>();
|
||||
_jobServerQueue.Setup(x => x.QueueTimelineRecordUpdate(It.IsAny<Guid>(), It.IsAny<TimelineRecord>()));
|
||||
hostContext.SetSingleton(_jobServerQueue.Object);
|
||||
|
||||
// Configuration store (required singleton)
|
||||
var configurationStore = new Mock<IConfigurationStore>();
|
||||
configurationStore.Setup(x => x.GetSettings()).Returns(new RunnerSettings());
|
||||
hostContext.SetSingleton(configurationStore.Object);
|
||||
|
||||
// Paging Logger (required singleton)
|
||||
var pagingLogger = new Mock<IPagingLogger>();
|
||||
hostContext.EnqueueInstance(pagingLogger.Object);
|
||||
|
||||
// Trace
|
||||
_trace = hostContext.GetTrace();
|
||||
|
||||
// Variables to test for secret scrubbing & FF options
|
||||
_variables = new Variables(hostContext, new Dictionary<string, VariableValue>
|
||||
{
|
||||
{ "MySecretName", new VariableValue("My secret value", true) },
|
||||
@@ -209,7 +251,12 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
_rootDirectory = Path.Combine(workDirectory, nameof(CreateStepSummaryCommandL0));
|
||||
Directory.CreateDirectory(_rootDirectory);
|
||||
|
||||
// Execution context
|
||||
// Job execution context
|
||||
_jobExecutionContext = new ExecutionContext();
|
||||
_jobExecutionContext.Initialize(hostContext);
|
||||
_jobExecutionContext.InitializeJob(jobRequest, System.Threading.CancellationToken.None);
|
||||
|
||||
// Step execution context
|
||||
_executionContext = new Mock<IExecutionContext>();
|
||||
_executionContext.Setup(x => x.Global)
|
||||
.Returns(new GlobalContext
|
||||
@@ -230,6 +277,7 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
{
|
||||
_trace.Info($"{tag}{message}");
|
||||
});
|
||||
_executionContext.SetupGet(x => x.Root).Returns(_jobExecutionContext);
|
||||
|
||||
//CreateStepSummaryCommand
|
||||
_createStepCommand = new CreateStepSummaryCommand();
|
||||
@@ -238,4 +286,4 @@ namespace GitHub.Runner.Common.Tests.Worker
|
||||
return hostContext;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user