1// Copyright 2023 The Gitea Authors. All rights reserved.2// SPDX-License-Identifier: MIT34package run56import (7 "bytes"8 "fmt"9 "sort"10 "strings"1112 runnerv1 "code.gitea.io/actions-proto-go/runner/v1"13 "github.com/nektos/act/pkg/model"14 "gopkg.in/yaml.v3"15)1617func generateWorkflow(task *runnerv1.Task) (*model.Workflow, string, error) {18 workflow, err := model.ReadWorkflow(bytes.NewReader(task.WorkflowPayload))19 if err != nil {20 return nil, "", err21 }2223 jobIDs := workflow.GetJobIDs()24 if len(jobIDs) != 1 {25 return nil, "", fmt.Errorf("multiple jobs found: %v", jobIDs)26 }27 jobID := jobIDs[0]2829 needJobIDs := make([]string, 0, len(task.Needs))30 for id, need := range task.Needs {31 needJobIDs = append(needJobIDs, id)32 needJob := &model.Job{33 Outputs: need.Outputs,34 Result: strings.ToLower(strings.TrimPrefix(need.Result.String(), "RESULT_")),35 }36 workflow.Jobs[id] = needJob37 }38 sort.Strings(needJobIDs)3940 rawNeeds := yaml.Node{41 Kind: yaml.SequenceNode,42 Content: make([]*yaml.Node, 0, len(needJobIDs)),43 }44 for _, id := range needJobIDs {45 rawNeeds.Content = append(rawNeeds.Content, &yaml.Node{46 Kind: yaml.ScalarNode,47 Value: id,48 })49 }5051 workflow.Jobs[jobID].RawNeeds = rawNeeds5253 return workflow, jobID, nil54}