diff --git a/pkg/runner/job_executor.go b/pkg/runner/job_executor.go index 6b4ae7f..c00e4b9 100644 --- a/pkg/runner/job_executor.go +++ b/pkg/runner/job_executor.go @@ -73,6 +73,10 @@ func newJobExecutor(info jobInfo, sf stepFactory, rc *RunContext) common.Executo preExec := step.pre() preSteps = append(preSteps, useStepLogger(rc, stepModel, stepStagePre, func(ctx context.Context) error { + if rc.caller != nil { // For Gitea + rc.caller.reusedWorkflowJobResults[rc.JobName] = "pending" + } + logger := common.Logger(ctx) preErr := preExec(ctx) if preErr != nil { @@ -185,7 +189,35 @@ func setJobResult(ctx context.Context, info jobInfo, rc *RunContext, success boo info.result(jobResult) if rc.caller != nil { // set reusable workflow job result - rc.caller.runContext.result(jobResult) + + rc.caller.updateResultLock.Lock() + rc.caller.reusedWorkflowJobResults[rc.JobName] = jobResult + + allJobDone := true + hasFailure := false + for _, result := range rc.caller.reusedWorkflowJobResults { + if result == "pending" { + allJobDone = false + break + } + if result == "failure" { + hasFailure = true + } + } + + if allJobDone { + reusedWorkflowJobResult := "success" + reusedWorkflowJobResultMessage := "succeeded" + if hasFailure { + reusedWorkflowJobResult = "failure" + reusedWorkflowJobResultMessage = "failed" + } + rc.caller.runContext.result(reusedWorkflowJobResult) + logger.WithField("jobResult", reusedWorkflowJobResult).Infof("\U0001F3C1 Job %s", reusedWorkflowJobResultMessage) + } + + rc.caller.updateResultLock.Unlock() + return } jobResultMessage := "succeeded" diff --git a/pkg/runner/reusable_workflow.go b/pkg/runner/reusable_workflow.go index a40979b..28a45b2 100644 --- a/pkg/runner/reusable_workflow.go +++ b/pkg/runner/reusable_workflow.go @@ -185,6 +185,8 @@ func NewReusableWorkflowRunner(rc *RunContext) (Runner, error) { eventJSON: rc.EventJSON, caller: &caller{ runContext: rc, + + reusedWorkflowJobResults: map[string]string{}, // For Gitea }, } diff --git a/pkg/runner/runner.go b/pkg/runner/runner.go index b08e715..01cb5e6 100644 --- a/pkg/runner/runner.go +++ b/pkg/runner/runner.go @@ -6,6 +6,7 @@ import ( "fmt" "os" "runtime" + "sync" "time" docker_container "github.com/docker/docker/api/types/container" @@ -86,6 +87,9 @@ func (c Config) GetToken() string { type caller struct { runContext *RunContext + + updateResultLock sync.Mutex // For Gitea + reusedWorkflowJobResults map[string]string // For Gitea } type runnerImpl struct {