diff options
Diffstat (limited to 'build-aux/hydra')
-rw-r--r-- | build-aux/hydra/evaluate.scm | 131 | ||||
-rw-r--r-- | build-aux/hydra/gnu-system.scm | 88 | ||||
-rw-r--r-- | build-aux/hydra/guix-modular.scm | 91 | ||||
-rw-r--r-- | build-aux/hydra/guix.scm | 106 |
4 files changed, 0 insertions, 416 deletions
diff --git a/build-aux/hydra/evaluate.scm b/build-aux/hydra/evaluate.scm deleted file mode 100644 index c74fcdb763..0000000000 --- a/build-aux/hydra/evaluate.scm +++ /dev/null @@ -1,131 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -;;; This program replicates the behavior of Hydra's 'hydra-eval-guile-job'. -;;; It evaluates the Hydra job defined by the program passed as its first -;;; arguments and outputs an sexp of the jobs on standard output. - -(use-modules (guix store) - (guix git-download) - ((guix build utils) #:select (with-directory-excursion)) - ((guix ui) #:select (build-notifier)) - (srfi srfi-19) - (ice-9 match) - (ice-9 pretty-print) - (ice-9 format)) - -(define %top-srcdir - (and=> (assq-ref (current-source-location) 'filename) - (lambda (file) - (canonicalize-path - (string-append (dirname file) "/../.."))))) - -(define %user-module - ;; Hydra user module. - (let ((m (make-module))) - (beautify-user-module! m) - m)) - -(define (call-with-time thunk kont) - "Call THUNK and pass KONT the elapsed time followed by THUNK's return -values." - (let* ((start (current-time time-monotonic)) - (result (call-with-values thunk list)) - (end (current-time time-monotonic))) - (apply kont (time-difference end start) result))) - -(define (call-with-time-display thunk) - "Call THUNK and write to the current output port its duration." - (call-with-time thunk - (lambda (time . results) - (format #t "~,3f seconds~%" - (+ (time-second time) - (/ (time-nanosecond time) 1e9))) - (apply values results)))) - -(define (assert-valid-job job thing) - "Raise an error if THING is not an alist with a valid 'derivation' entry. -Otherwise return THING." - (unless (and (list? thing) - (and=> (assoc-ref thing 'derivation) - (lambda (value) - (and (string? value) - (string-suffix? ".drv" value))))) - (error "job did not produce a valid alist" job thing)) - thing) - - -;; Without further ado... -(match (command-line) - ((command file cuirass? ...) - ;; Load FILE, a Scheme file that defines Hydra jobs. - (let ((port (current-output-port)) - (real-build-things build-things)) - (with-store store - ;; Make sure we don't resort to substitutes. - (set-build-options store - #:use-substitutes? #f - #:substitute-urls '()) - - ;; The evaluation of Guix itself requires building a "trampoline" - ;; program, and possibly everything it depends on. Thus, allow builds - ;; but print a notification. - (with-build-handler (build-notifier #:use-substitutes? #f) - - ;; Add %TOP-SRCDIR to the store with a proper Git predicate so we work - ;; from a clean checkout - (let ((source (add-to-store store "guix-source" #t - "sha256" %top-srcdir - #:select? (git-predicate %top-srcdir)))) - (with-directory-excursion source - (save-module-excursion - (lambda () - (set-current-module %user-module) - (format (current-error-port) - "loading '~a' relative to '~a'...~%" - file source) - (primitive-load file)))) - - ;; Call the entry point of FILE and print the resulting job sexp. - (pretty-print - (match ((module-ref %user-module - (if (equal? cuirass? "cuirass") - 'cuirass-jobs - 'hydra-jobs)) - store `((guix - . ((file-name . ,source))))) - (((names . thunks) ...) - (map (lambda (job thunk) - (format (current-error-port) "evaluating '~a'... " job) - (force-output (current-error-port)) - (cons job - (assert-valid-job job - (call-with-time-display thunk)))) - names thunks))) - port)))))) - ((command _ ...) - (format (current-error-port) "Usage: ~a FILE [cuirass] -Evaluate the Hydra or Cuirass jobs defined in FILE.~%" - command) - (exit 1))) - -;;; Local Variables: -;;; eval: (put 'call-with-time 'scheme-indent-function 1) -;;; End: - diff --git a/build-aux/hydra/gnu-system.scm b/build-aux/hydra/gnu-system.scm deleted file mode 100644 index a03324daeb..0000000000 --- a/build-aux/hydra/gnu-system.scm +++ /dev/null @@ -1,88 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org> -;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -;;; -;;; This file defines build jobs for the Hydra continuation integration -;;; tool. -;;; - -(use-modules (guix inferior) (guix channels) - (guix) - (guix ui) - (srfi srfi-1) - (ice-9 match)) - -;; XXX: Debugging hack: since `hydra-eval-guile-jobs' redirects the output -;; port to the bit bucket, let us write to the error port instead. -(setvbuf (current-error-port) 'line) -(set-current-output-port (current-error-port)) - -(define (find-current-checkout arguments) - "Find the first checkout of ARGUMENTS that provided the current file. -Return #f if no such checkout is found." - (let ((current-root - (canonicalize-path - (string-append (dirname (current-filename)) "/../..")))) - (find (lambda (argument) - (and=> (assq-ref argument 'file-name) - (lambda (name) - (string=? name current-root)))) arguments))) - -(define (hydra-jobs store arguments) - "Return a list of jobs where each job is a NAME/THUNK pair." - - (define checkout - (find-current-checkout arguments)) - - (define commit - (assq-ref checkout 'revision)) - - (define source - (assq-ref checkout 'file-name)) - - (define instance - (checkout->channel-instance source #:commit commit)) - - (define derivation - ;; Compute the derivation of Guix for COMMIT. - (run-with-store store - (channel-instances->derivation (list instance)))) - - ;; TODO: Remove 'show-what-to-build' call when Cuirass' 'evaluate' scripts - ;; uses 'with-build-handler'. - (show-what-to-build store (list derivation)) - (build-derivations store (list derivation)) - - ;; Open an inferior for the just-built Guix. - (let ((inferior (open-inferior (derivation->output-path derivation)))) - (inferior-eval '(use-modules (gnu ci) (ice-9 match)) inferior) - - (map (match-lambda - ((name . fields) - ;; Hydra expects a thunk, so here it is. - (cons name (lambda () fields)))) - (inferior-eval-with-store - inferior store - `(lambda (store) - (map (match-lambda - ((name . thunk) - (cons name (thunk)))) - (hydra-jobs store '((superior-guix-checkout . ,checkout) - ,@arguments)))))))) diff --git a/build-aux/hydra/guix-modular.scm b/build-aux/hydra/guix-modular.scm deleted file mode 100644 index 060b84b8ef..0000000000 --- a/build-aux/hydra/guix-modular.scm +++ /dev/null @@ -1,91 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -;;; -;;; This file defines a continuous integration job to build the same modular -;;; Guix as 'guix pull', which is defined in (guix self). -;;; - -(use-modules (guix store) - (guix config) - (guix utils) - ((guix packages) #:select (%hydra-supported-systems)) - (guix derivations) - (guix monads) - ((guix licenses) #:prefix license:) - (srfi srfi-1) - (ice-9 match)) - -;; XXX: Debugging hack: since `hydra-eval-guile-jobs' redirects the output -;; port to the bit bucket, let us write to the error port instead. -(setvbuf (current-error-port) 'line) -(set-current-output-port (current-error-port)) - -(define* (build-job store source version system) - "Return a Hydra job a list building the modular Guix derivation from SOURCE -for SYSTEM. Use VERSION as the version identifier." - (lambda () - (define build - (primitive-load (string-append source "/build-aux/build-self.scm"))) - - (let ((drv (run-with-store store - (build source #:version version #:system system - #:pull-version 1 - #:guile-version "2.2")))) - `((derivation . ,(derivation-file-name drv)) ;the latest 2.2.x - (log . ,(log-file store (derivation-file-name drv))) - (outputs . ,(filter-map (lambda (res) - (match res - ((name . path) - `(,name . ,path)))) - (derivation->output-paths drv))) - (nix-name . ,(derivation-name drv)) - (system . ,(derivation-system drv)) - (description . "Modular Guix") - (long-description - . "This is the modular Guix package as produced by 'guix pull'.") - (license . ,license:gpl3+) - (home-page . ,%guix-home-page-url) - (maintainers . (,%guix-bug-report-address)))))) - -(define (hydra-jobs store arguments) - "Return Hydra jobs." - (define systems - (match (assoc-ref arguments 'systems) - (#f %hydra-supported-systems) - ((lst ...) lst) - ((? string? str) (call-with-input-string str read)))) - - (define guix-checkout - (or (assq-ref arguments 'guix) ;Hydra on hydra - (assq-ref arguments 'guix-modular))) ;Cuirass on berlin - - (define version - (or (assq-ref guix-checkout 'revision) - "0.unknown")) - - (let ((file (assq-ref guix-checkout 'file-name))) - (format (current-error-port) "using checkout ~s (~s; arguments: ~s)~%" - guix-checkout file arguments) - - (map (lambda (system) - (let ((name (string->symbol - (string-append "guix." system)))) - `(,name - . ,(build-job store file version system)))) - systems))) diff --git a/build-aux/hydra/guix.scm b/build-aux/hydra/guix.scm deleted file mode 100644 index 08193ec82e..0000000000 --- a/build-aux/hydra/guix.scm +++ /dev/null @@ -1,106 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -;;; -;;; This file defines build jobs of Guix itself for the Hydra continuation -;;; integration tool. -;;; - -;; Attempt to use our very own Guix modules. -(eval-when (expand load eval) - - ;; Ignore any available .go, and force recompilation. This is because our - ;; checkout in the store has mtime set to the epoch, and thus .go files look - ;; newer, even though they may not correspond. - (set! %fresh-auto-compile #t) - - ;; Display which files are loaded. - (set! %load-verbosely #t) - - (and=> (assoc-ref (current-source-location) 'filename) - (lambda (file) - (let ((dir (string-append (dirname file) "/../.."))) - (format (current-error-port) "prepending ~s to the load path~%" - dir) - (set! %load-path (cons dir %load-path)))))) - - -(use-modules (guix store) - (guix packages) - (guix utils) - (guix grafts) - (guix derivations) - (guix build-system gnu) - (gnu packages package-management) - (srfi srfi-1) - (srfi srfi-26) - (ice-9 match)) - -;; XXX: Debugging hack: since `hydra-eval-guile-jobs' redirects the output -;; port to the bit bucket, let us write to the error port instead. -(setvbuf (current-error-port) _IOLBF) -(set-current-output-port (current-error-port)) - -(define* (package->alist store package system - #:optional (package-derivation package-derivation)) - "Convert PACKAGE to an alist suitable for Hydra." - `((derivation . ,(derivation-file-name - (parameterize ((%graft? #f)) - (package-derivation store package system - #:graft? #f)))) - (description . ,(package-synopsis package)) - (long-description . ,(package-description package)) - (license . ,(package-license package)) - (home-page . ,(package-home-page package)) - (maintainers . ("bug-guix@gnu.org")))) - -(define (hydra-jobs store arguments) - "Return Hydra jobs." - (define systems - (match (filter-map (match-lambda - (('system . value) - value) - (_ #f)) - arguments) - ((lst ..1) - lst) - (_ - (list (%current-system))))) - - (define guix-checkout - (assq-ref arguments 'guix)) - - (let ((file (assq-ref guix-checkout 'file-name))) - (format (current-error-port) "using checkout ~s (~s)~%" - guix-checkout file) - - `((tarball . ,(cute package->alist store - (dist-package guix file) - (%current-system))) - - ,@(map (lambda (system) - (let ((name (string->symbol - (string-append "guix." system)))) - `(,name - . ,(cute package->alist store - (package - (inherit guix) - (version "latest") - (source file)) - system)))) - %hydra-supported-systems)))) |