1
0
mirror of https://github.com/drone/drone-cli.git synced 2025-02-22 01:21:17 +01:00
drone-cli/drone/build/build_queue.go
2019-09-18 22:04:13 +02:00

94 lines
1.8 KiB
Go

package build
import (
"os"
"text/template"
"github.com/drone/drone-cli/drone/internal"
"github.com/drone/funcmap"
"github.com/urfave/cli"
)
var buildQueueCmd = cli.Command{
Name: "queue",
Usage: "show build queue",
ArgsUsage: "",
Action: buildQueue,
Flags: []cli.Flag{
cli.StringFlag{
Name: "format",
Usage: "format output",
Value: tmplBuildQueue,
},
cli.StringFlag{
Name: "repo",
Usage: "repo filter",
},
cli.StringFlag{
Name: "branch",
Usage: "branch filter",
},
cli.StringFlag{
Name: "event",
Usage: "event filter",
},
cli.StringFlag{
Name: "status",
Usage: "status filter",
},
},
}
func buildQueue(c *cli.Context) error {
client, err := internal.NewClient(c)
if err != nil {
return err
}
repos, err := client.Incomplete()
if err != nil {
return err
}
tmpl, err := template.New("_").Funcs(funcmap.Funcs).Parse(c.String("format") + "\n")
if err != nil {
return err
}
slug := c.String("repo")
branch := c.String("branch")
event := c.String("event")
status := c.String("status")
for _, repo := range repos {
if slug != "" && repo.Slug != slug {
continue
}
if branch != "" && repo.Build.Target != branch {
continue
}
if event != "" && repo.Build.Event != event {
continue
}
if status != "" && repo.Build.Status != status {
continue
}
tmpl.Execute(os.Stdout, repo)
}
return nil
}
// template for build queue information
var tmplBuildQueue = "\x1b[33m{{ .Slug }}#{{ .Build.Number }} \x1b[0m" + `
Name: {{ .Slug }}
Build: {{ .Build.Number }}
Status: {{ .Build.Status }}
Event: {{ .Build.Event }}
Branch: {{ .Build.Target }}
Ref: {{ .Build.Ref }}
Author: {{ .Build.Author }}{{ if .Build.AuthorEmail }} <{{ .Build.AuthorEmail }}>{{ end }}
Created: {{ .Build.Created | time }}
Started: {{ .Build.Started | time }}
Updated: {{ .Build.Updated | time }}
`