2019-11-18 16:29:57 +01:00
|
|
|
//go:generate statik -f
|
|
|
|
|
2019-11-18 15:40:46 +01:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
|
|
|
|
"github.com/tweag/gerrit-queue/frontend"
|
|
|
|
"github.com/tweag/gerrit-queue/gerrit"
|
|
|
|
"github.com/tweag/gerrit-queue/submitqueue"
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/urfave/cli"
|
|
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
// configure logging
|
|
|
|
log.SetFormatter(&log.TextFormatter{})
|
|
|
|
//log.SetFormatter(&log.JSONFormatter{})
|
|
|
|
log.SetOutput(os.Stdout)
|
|
|
|
log.SetLevel(log.DebugLevel)
|
|
|
|
|
|
|
|
var URL, username, password, projectName, branchName, submitQueueTag string
|
|
|
|
var fetchOnly bool
|
|
|
|
|
|
|
|
app := cli.NewApp()
|
|
|
|
app.Name = "gerrit-queue"
|
|
|
|
|
|
|
|
app.Flags = []cli.Flag{
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "url",
|
|
|
|
Usage: "URL to the gerrit instance",
|
|
|
|
EnvVar: "GERRIT_URL",
|
|
|
|
Destination: &URL,
|
|
|
|
Required: true,
|
|
|
|
},
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "username",
|
|
|
|
Usage: "Username to use to login to gerrit",
|
|
|
|
EnvVar: "GERRIT_USERNAME",
|
|
|
|
Destination: &username,
|
|
|
|
Required: true,
|
|
|
|
},
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "password",
|
|
|
|
Usage: "Password to use to login to gerrit",
|
|
|
|
EnvVar: "GERRIT_PASSWORD",
|
|
|
|
Destination: &password,
|
|
|
|
Required: true,
|
|
|
|
},
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "project",
|
|
|
|
Usage: "Gerrit project name to run the submit queue for",
|
|
|
|
EnvVar: "GERRIT_PROJECT",
|
|
|
|
Destination: &projectName,
|
|
|
|
Required: true,
|
|
|
|
},
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "branch",
|
|
|
|
Usage: "Destination branch",
|
|
|
|
EnvVar: "GERRIT_BRANCH",
|
|
|
|
Destination: &branchName,
|
|
|
|
Value: "master",
|
|
|
|
},
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "submit-queue-tag",
|
|
|
|
Usage: "the tag used to submit something to the submit queue",
|
|
|
|
EnvVar: "SUBMIT_QUEUE_TAG",
|
|
|
|
Destination: &submitQueueTag,
|
|
|
|
Value: "submit_me",
|
|
|
|
},
|
|
|
|
cli.BoolFlag{
|
|
|
|
Name: "fetch-only",
|
|
|
|
Usage: "Only fetch changes and assemble queue, but don't actually write",
|
|
|
|
Destination: &fetchOnly,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
app.Action = func(c *cli.Context) error {
|
|
|
|
gerritClient, err := gerrit.NewClient(URL, username, password)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
log.Printf("Successfully connected to gerrit at %s", URL)
|
|
|
|
|
|
|
|
submitQueue := submitqueue.MakeSubmitQueue(gerritClient, projectName, branchName, submitQueueTag)
|
|
|
|
|
|
|
|
router := gin.Default()
|
|
|
|
frontend := frontend.MakeFrontend(router, &submitQueue)
|
|
|
|
|
|
|
|
err = submitQueue.LoadSeries()
|
|
|
|
if err != nil {
|
|
|
|
log.Errorf("Error loading submit queue: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Println()
|
|
|
|
fmt.Println()
|
|
|
|
fmt.Println()
|
|
|
|
fmt.Println()
|
|
|
|
for _, serie := range submitQueue.Series {
|
|
|
|
fmt.Println(fmt.Sprintf("%s", serie))
|
|
|
|
for _, changeset := range serie.ChangeSets {
|
|
|
|
fmt.Println(fmt.Sprintf(" - %s", changeset.String()))
|
|
|
|
}
|
|
|
|
fmt.Println()
|
|
|
|
}
|
|
|
|
|
|
|
|
frontend.Run(":8080")
|
|
|
|
|
|
|
|
if fetchOnly {
|
|
|
|
//return backlog.Run()
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
err := app.Run(os.Args)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// mux := http.NewServeMux()
|
|
|
|
|
|
|
|
// options := &gerrit.EventsLogOptions{}
|
|
|
|
// events, _, _, err := gerritClient.EventsLog.GetEvents(options)
|
|
|
|
|
|
|
|
// TODOS:
|
|
|
|
// - create submit queue user
|
|
|
|
// - handle event log, either by accepting webhooks, or by streaming events?
|
|
|
|
|
|
|
|
//n := negroni.Classic()
|
|
|
|
//n.UseHandler(mux)
|
|
|
|
|
|
|
|
//fmt.Println("Listening on :3000…")
|
|
|
|
//http.ListenAndServe(":3000", n)
|
|
|
|
}
|