act/cmd/list.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
}