diff --git a/appview/db/pipeline.go b/appview/db/pipeline.go --- a/appview/db/pipeline.go +++ b/appview/db/pipeline.go @@ -168,7 +168,7 @@ } // this is a mega query, but the most useful one: // get N pipelines, for each one get the latest status of its N workflows -func GetPipelineStatuses(e Execer, filters ...filter) ([]models.Pipeline, error) { +func GetPipelineStatuses(e Execer, limit int, filters ...filter) ([]models.Pipeline, error) { var conditions []string var args []any for _, filter := range filters { @@ -205,7 +205,9 @@ pipelines p join triggers t ON p.trigger_id = t.id %s - `, whereClause) + order by p.created desc + limit %d + `, whereClause, limit) rows, err := e.Query(query, args...) if err != nil { diff --git a/appview/pipelines/pipelines.go b/appview/pipelines/pipelines.go --- a/appview/pipelines/pipelines.go +++ b/appview/pipelines/pipelines.go @@ -82,6 +82,7 @@ repoInfo := f.RepoInfo(user) ps, err := db.GetPipelineStatuses( p.db, + 30, db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), @@ -124,6 +125,7 @@ } ps, err := db.GetPipelineStatuses( p.db, + 1, db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), @@ -193,6 +195,7 @@ } ps, err := db.GetPipelineStatuses( p.db, + 1, db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -178,6 +178,7 @@ } ps, err := db.GetPipelineStatuses( s.db, + len(shas), db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), @@ -648,6 +649,7 @@ repoInfo := f.RepoInfo(user) ps, err := db.GetPipelineStatuses( s.db, + len(shas), db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), diff --git a/appview/repo/repo_util.go b/appview/repo/repo_util.go --- a/appview/repo/repo_util.go +++ b/appview/repo/repo_util.go @@ -1,8 +1,6 @@ package repo import ( - "crypto/rand" - "math/big" "slices" "sort" "strings" @@ -90,18 +88,6 @@ return } -func randomString(n int) string { - const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - result := make([]byte, n) - - for i := 0; i < n; i++ { - n, _ := rand.Int(rand.Reader, big.NewInt(int64(len(letters)))) - result[i] = letters[n.Int64()] - } - - return string(result) -} - // grab pipelines from DB and munge that into a hashmap with commit sha as key // // golang is so blessed that it requires 35 lines of imperative code for this @@ -118,6 +104,7 @@ } ps, err := db.GetPipelineStatuses( d, + len(shas), db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot),