70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"github.com/nektos/act/pkg/model"
|
|
)
|
|
|
|
func printList(plan *model.Plan) error {
|
|
type lineInfoDef struct {
|
|
id string
|
|
stage string
|
|
name string
|
|
}
|
|
lineInfos := []lineInfoDef{}
|
|
|
|
header := lineInfoDef{
|
|
id: "ID",
|
|
stage: "Stage",
|
|
name: "Name",
|
|
}
|
|
|
|
jobs := map[string]bool{}
|
|
duplicateJobIDs := false
|
|
|
|
idMaxWidth := len(header.id)
|
|
stageMaxWidth := len(header.stage)
|
|
nameMaxWidth := len(header.name)
|
|
|
|
for i, stage := range plan.Stages {
|
|
for _, r := range stage.Runs {
|
|
jobID := r.JobID
|
|
line := lineInfoDef{
|
|
id: jobID,
|
|
stage: strconv.Itoa(i),
|
|
name: r.String(),
|
|
}
|
|
if _, ok := jobs[jobID]; ok {
|
|
duplicateJobIDs = true
|
|
} else {
|
|
jobs[jobID] = true
|
|
}
|
|
lineInfos = append(lineInfos, line)
|
|
if idMaxWidth < len(line.id) {
|
|
idMaxWidth = len(line.id)
|
|
}
|
|
if stageMaxWidth < len(line.stage) {
|
|
stageMaxWidth = len(line.stage)
|
|
}
|
|
if nameMaxWidth < len(line.name) {
|
|
nameMaxWidth = len(line.name)
|
|
}
|
|
}
|
|
}
|
|
|
|
idMaxWidth += 2
|
|
stageMaxWidth += 2
|
|
nameMaxWidth += 2
|
|
|
|
fmt.Printf("%*s%*s%*s\n", -idMaxWidth, header.id, -stageMaxWidth, header.stage, -nameMaxWidth, header.name)
|
|
for _, line := range lineInfos {
|
|
fmt.Printf("%*s%*s%*s\n", -idMaxWidth, line.id, -stageMaxWidth, line.stage, -nameMaxWidth, line.name)
|
|
}
|
|
if duplicateJobIDs {
|
|
fmt.Print("\nDetected multiple jobs with the same job name, use `-W` to specify the path to the specific workflow.\n")
|
|
}
|
|
return nil
|
|
}
|