75 lines
1.5 KiB
Go
75 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"net/http"
|
|
"text/template"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
var baseTemplate *template.Template
|
|
|
|
func init() {
|
|
baseTemplate = template.New("svgTemplate")
|
|
baseTemplate, _ = baseTemplate.Parse(svgTemplate)
|
|
}
|
|
|
|
func badgeFromCommit(w http.ResponseWriter, r *http.Request) {
|
|
commitID := mux.Vars(r)["commit"]
|
|
result := svgFromHash(commitID)
|
|
|
|
w.Header().Set("Content-Type", "image/svg+xml")
|
|
fmt.Fprint(w, result)
|
|
}
|
|
|
|
func badgeFromProject(w http.ResponseWriter, r *http.Request) {
|
|
projectName := mux.Vars(r)["project"]
|
|
tagName := mux.Vars(r)["tag"]
|
|
commitRow, err := db.Query("SELECT commit_hash FROM alias WHERE project_name=? AND project_tag=?", projectName, tagName)
|
|
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if !commitRow.Next() {
|
|
fmt.Fprint(w, unknownCoveragePill())
|
|
return
|
|
}
|
|
|
|
var commitHash string
|
|
commitRow.Scan(&commitHash)
|
|
commitRow.Close()
|
|
|
|
result := svgFromHash(commitHash)
|
|
|
|
w.Header().Set("Content-Type", "image/svg+xml")
|
|
fmt.Fprint(w, result)
|
|
}
|
|
|
|
func svgFromHash(commit string) string {
|
|
result, err := db.Query("SELECT percentage FROM badge WHERE commit_hash=?", commit)
|
|
defer result.Close()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if !result.Next() {
|
|
return unknownCoveragePill()
|
|
}
|
|
|
|
var percentage float64
|
|
result.Scan(&percentage)
|
|
|
|
fillColour := percentageToRGB(percentage)
|
|
pill := CoveragePill{
|
|
toOneDecimal(percentage*100) + "%",
|
|
baseColour,
|
|
fillColour,
|
|
}
|
|
|
|
buf := &bytes.Buffer{}
|
|
baseTemplate.Execute(buf, pill)
|
|
return buf.String()
|
|
}
|