.
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"path"
|
||||
"regexp"
|
||||
"slices"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -60,35 +61,50 @@ func getObsProjectAssociatedWithPr(baseProject string, pr *models.PullRequest) s
|
||||
)
|
||||
}
|
||||
|
||||
type BuildStatusSummary string
|
||||
|
||||
const BuildUnresolveable = BuildStatusSummary("unresolveable")
|
||||
const BuildBuilding = BuildStatusSummary("building")
|
||||
const BuildFailed = BuildStatusSummary("failed")
|
||||
const BuildSuccess = BuildStatusSummary("success")
|
||||
|
||||
/*
|
||||
'published' => 'Repository has been published',
|
||||
'publishing' => 'Repository is being created right now',
|
||||
'unpublished' => 'Build finished, but repository publishing is disabled',
|
||||
'building' => 'Build jobs exist for the repository',
|
||||
'finished' => 'Build jobs have been processed, new repository is not yet created',
|
||||
'blocked' => 'No build possible at the moment, waiting for jobs in other repositories',
|
||||
'broken' => 'The repository setup is broken, build or publish not possible',
|
||||
'scheduling' => 'The repository state is being calculated right now'
|
||||
*/
|
||||
type BuildStatus struct {
|
||||
Status BuildStatusSummary
|
||||
Detail string
|
||||
}
|
||||
|
||||
var buildStatus map[string]BuildStatus
|
||||
|
||||
func processBuildStatusUpdate() {
|
||||
}
|
||||
|
||||
func processBuildStatus(project, refProject *common.BuildResultList) BuildStatusSummary {
|
||||
return BuildBuilding
|
||||
type BuildStatusSummary int
|
||||
|
||||
const (
|
||||
BuildStatusSummarySuccess = 1
|
||||
BuildStatusSummaryFailed = 2
|
||||
BuildStatusSummaryBuilding = 3
|
||||
BuildStatusSummaryUnknown = 4
|
||||
)
|
||||
|
||||
func processBuildStatus(h *common.RequestHandler, project, refProject *common.BuildResultList) BuildStatusSummary {
|
||||
targetResults := project.Result
|
||||
|
||||
if _, finished := project.BuildResultSummary(); !finished {
|
||||
return BuildStatusSummaryBuilding
|
||||
}
|
||||
|
||||
if _, finished := refProject.BuildResultSummary(); !finished {
|
||||
h.LogError("refProject not finished building??")
|
||||
return BuildStatusSummaryUnknown
|
||||
}
|
||||
|
||||
// the repositories should be setup equally between the projects. We
|
||||
// need to verify that packages that are building in `refProject` are not
|
||||
// failing in the `project`
|
||||
BuildResultSorter := func(a, b common.BuildResult) int {
|
||||
if c := strings.Compare(a.Project, b.Project); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := strings.Compare(a.Repository, b.Repository); c != 0 {
|
||||
return c
|
||||
}
|
||||
if c := strings.Compare(a.Arch, b.Arch); c != 0 {
|
||||
return c
|
||||
}
|
||||
|
||||
panic("Should not happen -- BuiltResultSorter equal repos?")
|
||||
}
|
||||
slices.SortFunc(project.Result, BuildResultSorter)
|
||||
slices.SortFunc(refProject.Result, BuildResultSorter)
|
||||
|
||||
return BuildStatusSummaryUnknown
|
||||
}
|
||||
|
||||
func startBuild(h *common.RequestHandler, pr *models.PullRequest, obsClient *common.ObsClient) error {
|
||||
@@ -267,16 +283,19 @@ func processPullNotification(h *common.RequestHandler, thread *models.Notificati
|
||||
}
|
||||
|
||||
h.Log("repo content fetching ...")
|
||||
refProject := string(h.GitCatFile(dir, pr.Head.Sha, "project.build"))
|
||||
// buildPrjBytes, err := h.GetPullRequestFileContent(pr, "project.build")
|
||||
refPrj := string(bytes.TrimSpace(h.GitCatFile(dir, pr.Head.Sha, "project.build")))
|
||||
|
||||
if len(refPrj) < 1 {
|
||||
_, err := h.AddReviewComment(pr, common.ReviewStateRequestChanges, "Cannot find reference project")
|
||||
if err != nil {
|
||||
h.LogPlainError(err)
|
||||
return
|
||||
}
|
||||
h.LogError("Cannot find reference project for %s PR#%d", pr.Base.Name, pr.Index)
|
||||
return
|
||||
}
|
||||
if h.HasError() {
|
||||
h.LogPlainError(h.Error)
|
||||
/*
|
||||
_, err := h.AddReviewComment(pr, common.ReviewStateRequestChanges, "Cannot find reference project")
|
||||
if err != nil {
|
||||
h.LogPlainError(err)
|
||||
}
|
||||
*/
|
||||
return
|
||||
}
|
||||
|
||||
@@ -287,33 +306,32 @@ func processPullNotification(h *common.RequestHandler, thread *models.Notificati
|
||||
// recreate missing project
|
||||
h.LogError("missing OBS project ... recreating '%s': %v", obsProject, err)
|
||||
startBuild(h, pr, obsClient)
|
||||
|
||||
return
|
||||
}
|
||||
h.LogError("failed fetching build status for '%s': %v", obsProject, err)
|
||||
return
|
||||
}
|
||||
refProjectResult, err := obsClient.BuildStatus(refProject)
|
||||
refProjectResult, err := obsClient.BuildStatus(refPrj, prjResult.GetPackageList()...)
|
||||
if err != nil {
|
||||
h.LogError("failed fetching ref project status for '%s': %v", refProject, err)
|
||||
h.LogError("failed fetching ref project status for '%s': %v", refPrj, err)
|
||||
}
|
||||
buildStatus := processBuildStatus(prjResult, refProjectResult)
|
||||
buildStatus := processBuildStatus(h, prjResult, refProjectResult)
|
||||
|
||||
switch buildStatus {
|
||||
case BuildSuccess:
|
||||
case BuildStatusSummarySuccess:
|
||||
_, err := h.AddReviewComment(pr, common.ReviewStateApproved, "Build successful")
|
||||
if err != nil {
|
||||
h.LogPlainError(err)
|
||||
}
|
||||
case BuildFailed:
|
||||
case BuildStatusSummaryFailed:
|
||||
_, err := h.AddReviewComment(pr, common.ReviewStateRequestChanges, "Build failed")
|
||||
if err != nil {
|
||||
h.LogPlainError(err)
|
||||
}
|
||||
case BuildBuilding:
|
||||
}
|
||||
// waiting for build results -- nothing to do
|
||||
|
||||
// waiting for build results
|
||||
// project := getObsProjectAssociatedWithPr(obsClient.HomeProject, pr)
|
||||
case common.ReviewStateApproved:
|
||||
// done, mark notification as read
|
||||
h.Log("processing request for success build ...")
|
||||
|
Reference in New Issue
Block a user