mirror of
https://github.com/actions/runner.git
synced 2025-12-10 20:36:49 +00:00
* conditional support for composite actions * Fix Conditional function evaluation * Push launch.json temporarily * Revert "Push launch.json temporarily" * rename context * Cleanup comments * fix success/failure functions to run based on pre/main steps * idea of step_status * change to use steps context, WIP * add inputs to possible if condition expressions * use action_status * pr cleanup * Added right stages * Test on stage in conditional functions * Fix naming and formatting * Fix tests * Add success and failure L0s * Remove comment * Remove whitespace * Undo formatting * Add L0 for step-if parsing * Add ADR Co-authored-by: Thomas Boop <thboop@github.com>
43 lines
1.8 KiB
C#
43 lines
1.8 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using GitHub.DistributedTask.Expressions2;
|
|
using GitHub.DistributedTask.Expressions2.Sdk;
|
|
using GitHub.DistributedTask.ObjectTemplating;
|
|
using GitHub.DistributedTask.WebApi;
|
|
using GitHub.Runner.Common;
|
|
using GitHub.Runner.Common.Util;
|
|
using GitHub.Runner.Sdk;
|
|
using ObjectTemplating = GitHub.DistributedTask.ObjectTemplating;
|
|
using PipelineTemplateConstants = GitHub.DistributedTask.Pipelines.ObjectTemplating.PipelineTemplateConstants;
|
|
|
|
namespace GitHub.Runner.Worker.Expressions
|
|
{
|
|
public sealed class SuccessFunction : Function
|
|
{
|
|
protected sealed override object EvaluateCore(EvaluationContext evaluationContext, out ResultMemory resultMemory)
|
|
{
|
|
resultMemory = null;
|
|
var templateContext = evaluationContext.State as TemplateContext;
|
|
ArgUtil.NotNull(templateContext, nameof(templateContext));
|
|
var executionContext = templateContext.State[nameof(IExecutionContext)] as IExecutionContext;
|
|
ArgUtil.NotNull(executionContext, nameof(executionContext));
|
|
|
|
// Decide based on 'action_status' for composite MAIN steps and 'job.status' for pre, post and job-level steps
|
|
var isCompositeMainStep = executionContext.IsEmbedded && executionContext.Stage == ActionRunStage.Main;
|
|
if (isCompositeMainStep)
|
|
{
|
|
ActionResult actionStatus = EnumUtil.TryParse<ActionResult>(executionContext.GetGitHubContext("action_status")) ?? ActionResult.Success;
|
|
return actionStatus == ActionResult.Success;
|
|
}
|
|
else
|
|
{
|
|
ActionResult jobStatus = executionContext.JobContext.Status ?? ActionResult.Success;
|
|
return jobStatus == ActionResult.Success;
|
|
}
|
|
}
|
|
}
|
|
}
|