SHA256
1
0

1 Commits

Author SHA256 Message Date
Michal Suchanek
d110024ff5 Add link to blocked BR in package summary 2025-11-06 18:01:16 +01:00
3 changed files with 40 additions and 27 deletions

View File

@@ -103,16 +103,6 @@ func ProjectStatusSummarySvg(res []*common.BuildResult) []byte {
return ret.GenerateSvg()
}
func LinkToBuildlog(R *common.BuildResult, S *common.PackageBuildStatus) string {
if R != nil && S != nil {
switch S.Code {
case "succeeded", "failed", "building":
return "/buildlog/" + url.PathEscape(R.Project) + "/" + url.PathEscape(S.Package) + "/" + url.PathEscape(R.Repository) + "/" + url.PathEscape(R.Arch)
}
}
return ""
}
func DeleteExceptPkg(pkg string) func(*common.PackageBuildStatus) bool {
return func(item *common.PackageBuildStatus) bool {
multibuild_prefix := pkg + ":"
@@ -155,8 +145,7 @@ func PackageStatusSummarySvg(pkg string, res []*common.BuildResult) []byte {
for _, s := range r.Status {
if s.Package == pkg {
link := LinkToBuildlog(r, s)
ret.WritePackageStatus(link, r.Arch, s.Code, s.Details)
ret.WritePackageStatus(r, s)
}
}
}
@@ -275,7 +264,7 @@ func main() {
res.Write([]byte("404 page not found\n"))
})
http.HandleFunc("GET /status/{Project}", func(res http.ResponseWriter, req *http.Request) {
mime := ParseMimeHeaderAndQuery(req)
mime := ParseMimeHeader(req)
obsPrj := req.PathValue("Project")
common.LogInfo(" GET /status/"+obsPrj, "["+mime.MimeType()+"]")
@@ -296,7 +285,7 @@ func main() {
}
})
http.HandleFunc("GET /status/{Project}/{Package}", func(res http.ResponseWriter, req *http.Request) {
mime := ParseMimeHeaderAndQuery(req)
mime := ParseMimeHeader(req)
obsPrj := req.PathValue("Project")
obsPkg := req.PathValue("Package")
common.LogInfo(" GET /status/"+obsPrj+"/"+obsPkg, "["+mime.MimeType()+"]")
@@ -326,7 +315,7 @@ func main() {
})
http.HandleFunc("GET /status/{Project}/{Package}/{Repository}", func(res http.ResponseWriter, req *http.Request) {
mime := ParseMimeHeaderAndQuery(req)
mime := ParseMimeHeader(req)
obsPrj := req.PathValue("Project")
obsPkg := req.PathValue("Package")
repo := req.PathValue("Repository")
@@ -355,7 +344,7 @@ func main() {
}
})
http.HandleFunc("GET /status/{Project}/{Package}/{Repository}/{Arch}", func(res http.ResponseWriter, req *http.Request) {
mime := ParseMimeHeaderAndQuery(req)
mime := ParseMimeHeader(req)
prj := req.PathValue("Project")
pkg := req.PathValue("Package")
repo := req.PathValue("Repository")

View File

@@ -21,16 +21,7 @@ var AcceptedStatusMimes []string = []string{
XmlMime,
}
func ParseMimeHeaderAndQuery(req *http.Request) *MimeHeader {
format := req.URL.Query().Get("format")
switch format {
case "svg":
return &MimeHeader{MimeHeader: SvgMime}
case "json":
return &MimeHeader{MimeHeader: JsonMime}
case "xml":
return &MimeHeader{MimeHeader: XmlMime}
}
func ParseMimeHeader(req *http.Request) *MimeHeader {
proposedMimes := req.Header.Values("Accept")
mime := MimeHeader{MimeHeader: SvgMime}
if len(proposedMimes) == 0 {

View File

@@ -6,6 +6,8 @@ import (
"html"
"net/url"
"slices"
"src.opensuse.org/autogits/common"
)
type SvgWriter struct {
@@ -19,6 +21,23 @@ const (
SvgType_Project
)
func LinkToBuildlogAlways(R *common.BuildResult, S *common.PackageBuildStatus) string {
if R != nil && S != nil {
return "/buildlog/" + url.PathEscape(R.Project) + "/" + url.PathEscape(S.Package) + "/" + url.PathEscape(R.Repository) + "/" + url.PathEscape(R.Arch)
}
return ""
}
func LinkToBuildlog(R *common.BuildResult, S *common.PackageBuildStatus) string {
if R != nil && S != nil {
switch S.Code {
case "succeeded", "failed", "building":
LinkToBuildlogAlways(R, S)
}
}
return ""
}
func NewSvg(SvgType int) *SvgWriter {
svg := &SvgWriter{}
svg.header = []byte(`<svg version="2.0" overflow="auto" width="40ex" height="`)
@@ -89,7 +108,11 @@ func (svg *SvgWriter) WriteSubtitle(subtitle string) {
svg.ypos += 2
}
func (svg *SvgWriter) WritePackageStatus(loglink, arch, status, detail string) {
func (svg *SvgWriter) WritePackageStatus(r *common.BuildResult, s *common.PackageBuildStatus) {
loglink := LinkToBuildlogAlways(r, s)
arch := r.Arch
status := s.Code
detail := s.Details
StatusToSVG := func(S string) string {
switch S {
case "succeeded":
@@ -112,8 +135,18 @@ func (svg *SvgWriter) WritePackageStatus(loglink, arch, status, detail string) {
return "un"
}
if len(loglink) > 0 {
u, err := url.Parse(loglink)
if err == nil {
svg.out.WriteString(`<a href="` + u.String() + `" target="_blank" rel="noopener">`)
}
}
svg.out.WriteString(`<text fill="#113" x="5ex" y="` + fmt.Sprint(svg.ypos-.6) + `em">` + html.EscapeString(arch) + `</text>`)
if len(loglink) > 0 {
svg.out.WriteString(`</a>`)
}
svg.out.WriteString(`<g>`)
loglink = LinkToBuildlog(r, s)
if len(loglink) > 0 {
u, err := url.Parse(loglink)
if err == nil {