diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 3012c72..c31a024 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -3,6 +3,7 @@ on: [push, pull_request] jobs: lint: + name: Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -13,6 +14,7 @@ jobs: CGO_ENABLED: 0 test: + name: Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -24,6 +26,7 @@ jobs: CGO_ENABLED: 0 snapshot: + name: Snapshot if: ${{ github.event_name == 'pull_request' }} needs: - lint @@ -40,6 +43,7 @@ jobs: SNAPSHOT_VERSION: "v0.0.0" release: + name: Release if: startsWith(github.ref, 'refs/tags/v') needs: - lint diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index ac26b25..c2d8e89 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -5,6 +5,7 @@ on: jobs: stale: + name: Stale runs-on: ubuntu-latest steps: - uses: actions/stale@v3 diff --git a/cmd/list.go b/cmd/list.go new file mode 100644 index 0000000..da6e10d --- /dev/null +++ b/cmd/list.go @@ -0,0 +1,57 @@ +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", + } + + idMaxWidth := len(header.id) + stageMaxWidth := len(header.stage) + nameMaxWidth := len(header.name) + + for i, stage := range plan.Stages { + for _, r := range stage.Runs { + line := lineInfoDef{ + id: r.JobID, + stage: strconv.Itoa(i), + name: r.String(), + } + 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) + } + return nil +} diff --git a/cmd/root.go b/cmd/root.go index 2e0b79a..e9e2885 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -34,6 +34,7 @@ func Execute(ctx context.Context, version string) { } rootCmd.Flags().BoolP("watch", "w", false, "watch the contents of the local repo and run when files change") rootCmd.Flags().BoolP("list", "l", false, "list workflows") + rootCmd.Flags().BoolP("graph", "g", false, "draw workflows") rootCmd.Flags().StringP("job", "j", "", "run job") rootCmd.Flags().StringArrayVarP(&input.secrets, "secret", "s", []string{}, "secret to make available to actions with optional value (e.g. -s mysecret=foo or -s mysecret)") rootCmd.Flags().StringArrayVarP(&input.platforms, "platform", "P", []string{}, "custom image to use per platform (e.g. -P ubuntu-18.04=nektos/act-environments-ubuntu:18.04)") @@ -150,9 +151,16 @@ func newRunCommand(ctx context.Context, input *Input) func(*cobra.Command, []str plan = planner.PlanEvent(eventName) } - // check if we should just print the graph + // check if we should just list the workflows if list, err := cmd.Flags().GetBool("list"); err != nil { return err + } else if list { + return printList(plan) + } + + // check if we should just print the graph + if list, err := cmd.Flags().GetBool("graph"); err != nil { + return err } else if list { return drawGraph(plan) }