tests: "make check-system" includes the current commit ID, if any.
authorLudovic Courtès <ludo@gnu.org>
Thu, 5 Mar 2020 13:54:17 +0000 (14:54 +0100)
committerLudovic Courtès <ludo@gnu.org>
Thu, 5 Mar 2020 15:33:37 +0000 (16:33 +0100)
* build-aux/run-system-tests.scm (source-commit): New procedure.
(tests-for-current-guix): Add 'commit' parameter and pass it to
'channel-source->package'.
(run-system-tests): Call 'source-commit' and pass the result to
'tests-for-current-guix'.

build-aux/run-system-tests.scm

index a4c019a..b5403e0 100644 (file)
@@ -29,6 +29,7 @@
   #:use-module ((guix git-download) #:select (git-predicate))
   #:use-module (guix utils)
   #:use-module (guix ui)
+  #:use-module (git)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-34)
   #:use-module (ice-9 match)
                 lst)
          (lift1 reverse %store-monad))))
 
-(define (tests-for-current-guix source)
+(define (source-commit directory)
+  "Return the commit of the head of DIRECTORY or #f if it could not be
+determined."
+  (let ((repository #f))
+    (catch 'git-error
+      (lambda ()
+        (set! repository (repository-open directory))
+        (let* ((head   (repository-head repository))
+               (target (reference-target head))
+               (commit (oid->string target)))
+          (repository-close! repository)
+          commit))
+      (lambda _
+        (when repository
+          (repository-close! repository))
+        #f))))
+
+(define (tests-for-current-guix source commit)
   "Return a list of tests for perform, using Guix built from SOURCE, a channel
 instance."
   ;; Honor the 'TESTS' environment variable so that one can select a subset
@@ -60,7 +78,7 @@ instance."
   ;;
   ;;   make check-system TESTS=installed-os
   (parameterize ((current-guix-package
-                  (channel-source->package source)))
+                  (channel-source->package source #:commit commit)))
     (match (getenv "TESTS")
       (#f
        (all-system-tests))
@@ -69,12 +87,15 @@ instance."
                  (member (system-test-name test) tests))
                (all-system-tests))))))
 
-
-
 (define (run-system-tests . args)
   (define source
     (string-append (current-source-directory) "/.."))
 
+  (define commit
+    ;; Fetch the current commit ID so we can potentially build the same
+    ;; derivation as ci.guix.gnu.org.
+    (source-commit source))
+
   (with-store store
     (with-status-verbosity 2
       (run-with-store store
@@ -86,7 +107,7 @@ instance."
                                                     #:select?
                                                     (or (git-predicate source)
                                                         (const #t))))
-                             (tests ->  (tests-for-current-guix source))
+                             (tests ->  (tests-for-current-guix source commit))
                              (drv (mapm %store-monad system-test-value tests))
                              (out -> (map derivation->output-path drv)))
           (format (current-error-port) "Running ~a system tests...~%"