Report the elapsed time for each workflow step (#2700)

* Report the elapsed time for each workflow step

The `runStepExecutor` was extended to track and report the execution time of the step.

This applies both to the standard and JSON log format.

Please, note that:
- on the standard log the time format depends on the value (e.g. `3.038334954s` or `2m0.054014069s`)
- on the JSON log the time format is nanoseconds

* Added the `executionTime` report also to failing steps
This commit is contained in:
Paolo Tagliaferri
2025-03-18 13:51:53 +01:00
committed by GitHub
parent eb46e8aa5a
commit 0098044d76

View File

@@ -12,6 +12,7 @@ import (
"github.com/nektos/act/pkg/container" "github.com/nektos/act/pkg/container"
"github.com/nektos/act/pkg/exprparser" "github.com/nektos/act/pkg/exprparser"
"github.com/nektos/act/pkg/model" "github.com/nektos/act/pkg/model"
"github.com/sirupsen/logrus"
) )
type step interface { type step interface {
@@ -141,10 +142,12 @@ func runStepExecutor(step step, stage stepStage, executor common.Executor) commo
timeoutctx, cancelTimeOut := evaluateStepTimeout(ctx, rc.ExprEval, stepModel) timeoutctx, cancelTimeOut := evaluateStepTimeout(ctx, rc.ExprEval, stepModel)
defer cancelTimeOut() defer cancelTimeOut()
startTime := time.Now()
err = executor(timeoutctx) err = executor(timeoutctx)
executionTime := time.Since(startTime)
if err == nil { if err == nil {
logger.WithField("stepResult", stepResult.Outcome).Infof(" \u2705 Success - %s %s", stage, stepString) logger.WithFields(logrus.Fields{"executionTime": executionTime, "stepResult": stepResult.Outcome}).Infof(" \u2705 Success - %s %s [%s]", stage, stepString, executionTime)
} else { } else {
stepResult.Outcome = model.StepStatusFailure stepResult.Outcome = model.StepStatusFailure
@@ -162,7 +165,7 @@ func runStepExecutor(step step, stage stepStage, executor common.Executor) commo
stepResult.Conclusion = model.StepStatusFailure stepResult.Conclusion = model.StepStatusFailure
} }
logger.WithField("stepResult", stepResult.Outcome).Errorf(" \u274C Failure - %s %s", stage, stepString) logger.WithFields(logrus.Fields{"executionTime": executionTime, "stepResult": stepResult.Outcome}).Infof(" \u274C Failure - %s %s [%s]", stage, stepString, executionTime)
} }
// Process Runner File Commands // Process Runner File Commands
orgerr := err orgerr := err