This revamps code quite a bit. Series handling has been moved into the gerrit client, it also handles caching. The Runner logic itself has been greatly simplified. The runner logic has been moved into the runner.go, submitqueue.go is gone. The "per-run result object" concept has been dropped - we instead just use annotated logs. Also, we switched to apex/log
95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
package frontend
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
|
|
"html/template"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/rakyll/statik/fs"
|
|
|
|
"github.com/tweag/gerrit-queue/gerrit"
|
|
_ "github.com/tweag/gerrit-queue/statik" // register static assets
|
|
"github.com/tweag/gerrit-queue/submitqueue"
|
|
|
|
"github.com/apex/log/handlers/memory"
|
|
)
|
|
|
|
//loadTemplate loads a list of templates, relative to the statikFS root, and a FuncMap, and returns a template object
|
|
func loadTemplate(templateNames []string, funcMap template.FuncMap) (*template.Template, error) {
|
|
if len(templateNames) == 0 {
|
|
return nil, fmt.Errorf("templateNames can't be empty")
|
|
}
|
|
tmpl := template.New(templateNames[0]).Funcs(funcMap)
|
|
statikFS, err := fs.New()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, templateName := range templateNames {
|
|
r, err := statikFS.Open("/" + templateName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer r.Close()
|
|
contents, err := ioutil.ReadAll(r)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
tmpl, err = tmpl.Parse(string(contents))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return tmpl, nil
|
|
}
|
|
|
|
// MakeFrontend returns a http.Handler
|
|
func MakeFrontend(memoryHandler *memory.Handler, gerritClient *gerrit.Client, runner *submitqueue.Runner) http.Handler {
|
|
router := gin.Default()
|
|
|
|
projectName := gerritClient.GetProjectName()
|
|
branchName := gerritClient.GetBranchName()
|
|
|
|
router.GET("/", func(c *gin.Context) {
|
|
var wipSerie *gerrit.Serie = nil
|
|
HEAD := ""
|
|
currentlyRunning := runner.IsCurrentlyRunning()
|
|
|
|
// don't trigger operations requiring a lock
|
|
if !currentlyRunning {
|
|
wipSerie = runner.GetWIPSerie()
|
|
HEAD = gerritClient.GetHEAD()
|
|
}
|
|
|
|
funcMap := template.FuncMap{
|
|
"changesetURL": func(changeset *gerrit.Changeset) string {
|
|
return gerritClient.GetChangesetURL(changeset)
|
|
},
|
|
}
|
|
|
|
tmpl := template.Must(loadTemplate([]string{
|
|
"submit-queue.tmpl.html",
|
|
"serie.tmpl.html",
|
|
"changeset.tmpl.html",
|
|
}, funcMap))
|
|
|
|
tmpl.ExecuteTemplate(c.Writer, "submit-queue.tmpl.html", gin.H{
|
|
// Config
|
|
"projectName": projectName,
|
|
"branchName": branchName,
|
|
|
|
// State
|
|
"currentlyRunning": currentlyRunning,
|
|
"wipSerie": wipSerie,
|
|
"HEAD": HEAD,
|
|
|
|
// History
|
|
"memory": memoryHandler,
|
|
})
|
|
})
|
|
return router
|
|
}
|