Subject: [PATCH] ci: Restrict substitute search to guix jobset.

From: Andrew Whatson <[email-masked]>
Date: Thu, 16 Dec 2021 01:14:02 +0000

Hi!

I've been using channel-with-substitutes-available recently, and
noticed that at one point it's returned a commit from the staging
branch instead of master.  On further investigation, it seems the API
needs a jobset parameter to restrict the results to only main guix
builds.

eg. http://ci.guix.gnu.org/api/latestbuilds?nr=5&job=guix.x86_64-linux
vs. http://ci.guix.gnu.org/api/latestbuilds?nr=5&job=guix.x86_64-linux&jobset=guix

Hopefully the above shows the problem, the first link includes builds
with jobset "staging" which probably shouldn't be returned as a
suitable guix revision for guix pull.

This patch adds a jobset parameter to restrict the substitute search.

Cheers,
Andrew
commit 2206caf8851068109078a48bd6651f4a9b0d7ef3
Author: Andrew Whatson <[email-masked]>
Date:   Thu Dec 16 11:00:35 2021 +1000

    ci: Restrict substitute search to guix jobset.
    
    * guix/ci.scm (latest-builds): Add jobset keyword.
    (find-latest-commit-with-substitutes): Pass jobset "guix".

diff --git a/guix/ci.scm b/guix/ci.scm
index 01b493b3af..88b80f781d 100644
--- a/guix/ci.scm
+++ b/guix/ci.scm
@@ -208,7 +208,7 @@ (define* (queued-builds url #:optional (limit %query-limit))
     (map json->build (vector->list queue))))
 
 (define* (latest-builds url #:optional (limit %query-limit)
-                        #:key evaluation system job status)
+                        #:key evaluation system job jobset status)
   "Return the latest builds performed by the CI server at URL.  If EVALUATION
 is an integer, restrict to builds of EVALUATION.  If SYSTEM is true (a system
 string such as \"x86_64-linux\"), restrict to builds for SYSTEM."
@@ -218,6 +218,7 @@ (define* (latest-builds url #:optional (limit %query-limit)
                  `("evaluation" ,evaluation)
                  `("system" ,system)
                  `("job" ,job)
+                 `("jobset" ,jobset)
                  `("status" ,status))))
     ;; Note: Hydra does not provide a "derivation" field for entries in
     ;; 'latestbuilds', but Cuirass does.
@@ -286,6 +287,7 @@ (define (find-latest-commit-with-substitutes url)
   (let* ((job-name (string-append "guix." (%current-system)))
          (build (match (latest-builds url 1
                                       #:job job-name
+                                      #:jobset "guix"
                                       #:status 0) ;success
                   ((build) build)
                   (_ #f)))