diff options
author | Christopher Baines <mail@cbaines.net> | 2023-03-11 11:58:07 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2023-03-11 11:58:07 +0000 |
commit | aafd4643bf7231e5df703e6ea167d7eccbc2556f (patch) | |
tree | b5bffecf82fb5dcb4f3538ed6cb1d80240db5c1c /guix-qa-frontpage/issue.scm | |
parent | e69bc36d5523a505addaa9cfb5d6431758ac37c2 (diff) | |
download | qa-frontpage-aafd4643bf7231e5df703e6ea167d7eccbc2556f.tar qa-frontpage-aafd4643bf7231e5df703e6ea167d7eccbc2556f.tar.gz |
Better manage the data for issues
Don't use the full derivation changes data when trying to render the page, as
that might be quite large. Instead, compute and cache the counts, and then use
this for rendering.
Diffstat (limited to 'guix-qa-frontpage/issue.scm')
-rw-r--r-- | guix-qa-frontpage/issue.scm | 96 |
1 files changed, 37 insertions, 59 deletions
diff --git a/guix-qa-frontpage/issue.scm b/guix-qa-frontpage/issue.scm index 1c5f52d..587a070 100644 --- a/guix-qa-frontpage/issue.scm +++ b/guix-qa-frontpage/issue.scm @@ -46,7 +46,7 @@ (list-ref %overall-statuses (apply max (map status-index statuses)))) -(define (issue-patches-overall-status derivation-changes mumi-tags) +(define (issue-patches-overall-status derivation-changes-counts builds-missing? mumi-tags) (define %systems-to-consider '("x86_64-linux" ;; "i686-linux" disabled while resolving bordeaux build issues @@ -54,65 +54,43 @@ "armhf-linux")) (define builds-status - (let* ((base-builds - (builds-by-system-excluding-cross-builds - derivation-changes "base")) - (target-builds - (builds-by-system-excluding-cross-builds - derivation-changes "target")) - - (all-systems - (delete-duplicates - (append (map car base-builds) - (map car target-builds)))) - - (categorised-base-builds-by-system - (categorise-builds all-systems base-builds)) - (categorised-target-builds-by-system - (categorise-builds all-systems target-builds))) - - (if (builds-missing-for-derivation-changes? derivation-changes) - unknown-status - (if (null? target-builds) - good-status - (worst-status - (map - (match-lambda - ((system . categorised-target-builds) - (let ((categorised-base-builds - (assoc-ref categorised-base-builds-by-system - system))) - (define (count side status) - (length - (assoc-ref - (if (eq? side 'base) - categorised-base-builds - categorised-target-builds) - status))) + (if builds-missing? + unknown-status + (if (null? derivation-changes-counts) + good-status + (worst-status + (map + (match-lambda + ((system . counts) + (define (count side status) + (assoc-ref (assoc-ref + counts + side) + status)) - (let ((base-failure-count (count 'base 'failing)) - (target-failure-count (count 'target 'failing))) - (if (and (<= target-failure-count - base-failure-count) - (= (count 'target 'unknown) 0)) - good-status - (if (= (count 'target 'unknown) 0) - (let ((unblocked-builds - (- (count 'base 'blocked) - (count 'target 'blocked))) - (new-failures - (- target-failure-count - base-failure-count))) - (if (>= unblocked-builds - new-failures) - needs-looking-at-status - bad-status)) - unknown-status)))))) - (filter - (lambda (builds-by-system) - (member (car builds-by-system) - %systems-to-consider)) - categorised-target-builds-by-system))))))) + (let ((base-failure-count (count 'base 'failing)) + (target-failure-count (count 'target 'failing))) + (if (and (<= target-failure-count + base-failure-count) + (= (count 'target 'unknown) 0)) + good-status + (if (= (count 'target 'unknown) 0) + (let ((unblocked-builds + (- (count 'base 'blocked) + (count 'target 'blocked))) + (new-failures + (- target-failure-count + base-failure-count))) + (if (>= unblocked-builds + new-failures) + needs-looking-at-status + bad-status)) + unknown-status))))) + (filter + (lambda (builds-by-system) + (member (car builds-by-system) + %systems-to-consider)) + derivation-changes-counts)))))) (define tags-status (if (member "moreinfo" mumi-tags) |