weather: Exit with non-zero when coverage is below 100%.

* guix/scripts/weather.scm (report-server-coverage): Return the coverage ratio.
(guix-weather): Exit if and only if each server's coverage is 1.
This commit is contained in:
Ludovic Courtès 2020-03-13 10:53:49 +01:00
parent 10b99ddf45
commit be764b47ad
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 24 additions and 12 deletions

View File

@ -10809,8 +10809,11 @@ guix weather @var{options}@dots{} [@var{packages}@dots{}]
When @var{packages} is omitted, @command{guix weather} checks the availability
of substitutes for @emph{all} the packages, or for those specified with
@option{--manifest}; otherwise it only considers the specified packages. It
is also possible to query specific system types with @option{--system}. The
available options are listed below.
is also possible to query specific system types with @option{--system}.
@command{guix weather} exits with a non-zero code when the fraction of
available substitutes is below 100%.
The available options are listed below.
@table @code
@item --substitute-urls=@var{urls}

View File

@ -178,7 +178,8 @@ about the derivations queued, as is the case with Hydra."
(define* (report-server-coverage server items
#:key display-missing?)
"Report the subset of ITEMS available as substitutes on SERVER.
When DISPLAY-MISSING? is true, display the list of missing substitutes."
When DISPLAY-MISSING? is true, display the list of missing substitutes.
Return the coverage ratio, an exact number between 0 and 1."
(define MiB (* (expt 2 20) 1.))
(format #t (G_ "looking for ~h store items on ~a...~%")
@ -267,7 +268,11 @@ are queued~%")
(when (and display-missing? (not (null? missing)))
(newline)
(format #t (G_ "Substitutes are missing for the following items:~%"))
(format #t "~{ ~a~%~}" missing)))))
(format #t "~{ ~a~%~}" missing))
;; Return the coverage ratio.
(let ((total (length items)))
(/ (- total (length missing)) total)))))
;;;
@ -538,16 +543,20 @@ SERVER. Display information for packages with at least THRESHOLD dependents."
(lambda (system)
(package-outputs packages system))
systems))))))
(for-each (lambda (server)
(exit
(every (lambda (server)
(define coverage
(report-server-coverage server items
#:display-missing?
(assoc-ref opts 'display-missing?))
(match (assoc-ref opts 'coverage)
(#f #f)
(threshold
(report-package-coverage server packages systems
#:threshold threshold))))
urls)))))
(assoc-ref opts 'display-missing?)))
(match (assoc-ref opts 'coverage)
(#f #f)
(threshold
(report-package-coverage server packages systems
#:threshold threshold)))
(= 1 coverage))
urls))))))
;;; Local Variables:
;;; eval: (put 'let/time 'scheme-indent-function 1)