;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016-2018, 2020, 2022 Ludovic Courtès ;;; Copyright © 2017 Jan Nieuwenhuizen ;;; Copyright © 2021 Mathieu Othacehe ;;; ;;; 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 . ;;; This program replicates the behavior of Cuirass's 'evaluate' process. ;;; It displays the evaluated jobs on the standard output. (use-modules (guix channels) (guix derivations) (guix git-download) (guix inferior) (guix packages) (guix store) (guix ui) ((guix ui) #:select (build-notifier)) (ice-9 match) (ice-9 threads)) (define %top-srcdir (and=> (assq-ref (current-source-location) 'filename) (lambda (file) (canonicalize-path (string-append (dirname file) "/../.."))))) (match (command-line) ((command directory) (let ((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)))) (define instances (list (checkout->channel-instance source))) (define channels (map channel-instance-channel instances)) (define derivation ;; Compute the derivation of Guix for COMMIT. (run-with-store store (channel-instances->derivation instances))) ;; 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)) ;; Evaluate jobs on a per-system basis for two reasons. It speeds ;; up the evaluation speed as the evaluations can be performed ;; concurrently. It also decreases the amount of memory needed per ;; evaluation process. ;; ;; Fork inferior processes upfront before we have created any ;; threads. (let ((inferiors (map (lambda _ (open-inferior (derivation->output-path derivation))) %cuirass-supported-systems))) (n-par-for-each (min (length %cuirass-supported-systems) (current-processor-count)) (lambda (system inferior) (with-store store (let ((channels (map channel-instance->sexp instances))) (inferior-eval '(use-modules (gnu ci)) inferior) (let ((jobs (inferior-eval-with-store inferior store `(lambda (store) (cuirass-jobs store '((subset . all) (systems . ,(list system)) (channels . ,channels)))))) (file (string-append directory "/jobs-" system ".scm"))) (close-inferior inferior) (call-with-output-file file (lambda (port) (write jobs port))))))) %cuirass-supported-systems inferiors))))))) (x (format (current-error-port) "Wrong command: ~a~%." x) (exit 1))) ces/file-sharing.scm (serialize-maybe-string): Use maybe-value. (serialize-maybe-file-object): Use maybe-value-set?. * gnu/services/getmail.scm (getmail-retriever-configuration): Don't use internals in unset field declarations. (getmail-destination-configuration): Ditto. * gnu/services/messaging.scm (raw-content?): Use maybe-value-set?. (prosody-configuration): Use %unset-value. * gnu/services/telephony.scm (jami-shepherd-services): Use maybe-value-set?. (archive-name->username): Use maybe-value-set?. * tests/services/configuration.scm ("maybe type, no default"): Use %unset-value. Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Attila Lendvai 2021-11-30services: Accept <inferior-package>s in lieu of <package>s....* gnu/services/authentication.scm (fprintd-configuration) (nslcd-configuration): Substitute file-like objects for package ones. * gnu/services/cgit.scm (cgit-configuration, opaque-cgit-configuration): Likewise. * gnu/services/cups.scm (package-list?, cups-configuration): Likewise. * gnu/services/dns.scm (verify-knot-configuration) (ddclient-configuration): Likewise. * gnu/services/docker.scm (docker-configuration): Likewise. * gnu/services/file-sharing.scm (transmission-daemon-configuration): Likewise. * gnu/services/getmail.scm (getmail-configuration): Likewise. * gnu/services/mail.scm (dovecot-configuration) (opaque-dovecot-configuration): Likewise. * gnu/services/messaging.scm (prosody-configuration) (opaque-prosody-configuration): Likewise. * gnu/services/monitoring.scm (zabbix-server-configuration) (zabbix-agent-configuration): Likewise. * gnu/services/networking.scm (opendht-configuration): Likewise. * gnu/services/pm.scm (tlp-configuration): Likewise. * gnu/services/telephony.scm (jami-configuration): Likewise. * gnu/services/virtualization.scm (libvirt-configuration) (qemu-guest-agent-configuration): Likewise. * gnu/services/vpn.scm (openvpn-client-configuration): Likewise. Tobias Geerinckx-Rice