Check all job results when calling reusable workflows (#116)
Fix [#31900](https://github.com/go-gitea/gitea/issues/31900) Reviewed-on: https://gitea.com/gitea/act/pulls/116 Reviewed-by: Jason Song <wolfogre@noreply.gitea.com> Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: Zettat123 <zettat123@gmail.com> Co-committed-by: Zettat123 <zettat123@gmail.com>
This commit is contained in:
@@ -73,6 +73,10 @@ func newJobExecutor(info jobInfo, sf stepFactory, rc *RunContext) common.Executo
|
|||||||
|
|
||||||
preExec := step.pre()
|
preExec := step.pre()
|
||||||
preSteps = append(preSteps, useStepLogger(rc, stepModel, stepStagePre, func(ctx context.Context) error {
|
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)
|
logger := common.Logger(ctx)
|
||||||
preErr := preExec(ctx)
|
preErr := preExec(ctx)
|
||||||
if preErr != nil {
|
if preErr != nil {
|
||||||
@@ -185,7 +189,35 @@ func setJobResult(ctx context.Context, info jobInfo, rc *RunContext, success boo
|
|||||||
info.result(jobResult)
|
info.result(jobResult)
|
||||||
if rc.caller != nil {
|
if rc.caller != nil {
|
||||||
// set reusable workflow job result
|
// 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"
|
jobResultMessage := "succeeded"
|
||||||
|
|||||||
@@ -185,6 +185,8 @@ func NewReusableWorkflowRunner(rc *RunContext) (Runner, error) {
|
|||||||
eventJSON: rc.EventJSON,
|
eventJSON: rc.EventJSON,
|
||||||
caller: &caller{
|
caller: &caller{
|
||||||
runContext: rc,
|
runContext: rc,
|
||||||
|
|
||||||
|
reusedWorkflowJobResults: map[string]string{}, // For Gitea
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
docker_container "github.com/docker/docker/api/types/container"
|
docker_container "github.com/docker/docker/api/types/container"
|
||||||
@@ -86,6 +87,9 @@ func (c Config) GetToken() string {
|
|||||||
|
|
||||||
type caller struct {
|
type caller struct {
|
||||||
runContext *RunContext
|
runContext *RunContext
|
||||||
|
|
||||||
|
updateResultLock sync.Mutex // For Gitea
|
||||||
|
reusedWorkflowJobResults map[string]string // For Gitea
|
||||||
}
|
}
|
||||||
|
|
||||||
type runnerImpl struct {
|
type runnerImpl struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user