46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package runner
|
|
|
|
import (
|
|
"fmt"
|
|
"path"
|
|
|
|
"github.com/nektos/act/pkg/common"
|
|
"github.com/nektos/act/pkg/model"
|
|
)
|
|
|
|
func newLocalReusableWorkflowExecutor(rc *RunContext) common.Executor {
|
|
return newReusableWorkflowExecutor(rc, rc.Config.Workdir)
|
|
}
|
|
|
|
func newRemoteReusableWorkflowExecutor(rc *RunContext) common.Executor {
|
|
return common.NewErrorExecutor(fmt.Errorf("remote reusable workflows are currently not supported (see https://github.com/nektos/act/issues/826 for updates)"))
|
|
}
|
|
|
|
func newReusableWorkflowExecutor(rc *RunContext, directory string) common.Executor {
|
|
planner, err := model.NewWorkflowPlanner(path.Join(directory, rc.Run.Job().Uses), true)
|
|
if err != nil {
|
|
return common.NewErrorExecutor(err)
|
|
}
|
|
|
|
plan := planner.PlanEvent("workflow_call")
|
|
|
|
runner, err := NewReusableWorkflowRunner(rc)
|
|
if err != nil {
|
|
return common.NewErrorExecutor(err)
|
|
}
|
|
|
|
return runner.NewPlanExecutor(plan)
|
|
}
|
|
|
|
func NewReusableWorkflowRunner(rc *RunContext) (Runner, error) {
|
|
runner := &runnerImpl{
|
|
config: rc.Config,
|
|
eventJSON: rc.EventJSON,
|
|
caller: &caller{
|
|
runContext: rc,
|
|
},
|
|
}
|
|
|
|
return runner.configure()
|
|
}
|