aboutsummaryrefslogtreecommitdiff
path: root/build-aux/cuirass/evaluate.scm
blob: fc0744ad2aaf18cf78f293be9ca7330d3f5c32d1 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
;;; 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>
;;; Copyright © 2021 Mathieu Othacehe <othacehe@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 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.
           (n-par-for-each
            (/ (current-processor-count) 2)
            (lambda (system)
              (with-store store
                (let ((inferior
                       (open-inferior (derivation->output-path derivation)))
                      (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")))
                    (call-with-output-file file
                      (lambda (port)
                        (write jobs port)))))))
            %cuirass-supported-systems))))))
  (x
   (format (current-error-port) "Wrong command: ~a~%." x)
   (exit 1)))
raai 2021-05-22Merge branch 'master' into core-updatesMarius Bakke 2021-05-19gnu: Add Rust 1.52.1....* gnu/packages/rust.scm (rust-1.52): New variable. Jakub Kądziołka 2021-05-13gnu: Rust: Export all versions....* gnu/packages/rust.scm (rust-1.29, rust-1.30, rust-1.31, rust-1.32, rust-1.33, rust-1.34, rust-1.35, rust-1.36, rust-1.37, rust-1.38, rust-1.39, rust-1.40, rust-1.41, rust-1.42, rust-1.43, rust-1.44, rust-1.45, rust-1.46, rust-1.47, rust-1.48): Export. (rust): Rename to .... rust-1.49): ... this. (rust-1.50): Refer to RUST-1.49 instead of RUST. (rust): Turn into alias for RUST-1.49. Marius Bakke 2021-05-04gnu: rust: Re-use llvm versions....* gnu/packages/rust.scm (rust-1.35)[inputs]: Don't replace llvm. (rust-1.38)[inputs]: Same. (rust-1.44)[inputs]: Switch to llvm-10. (rust-1.45)[inputs]: Don't replace llvm. (rust-1.47)[inputs]: Same. Efraim Flashner 2021-04-16Merge remote-tracking branch 'origin/master' into core-updates... Conflicts: gnu/local.mk gnu/packages/boost.scm gnu/packages/chez.scm gnu/packages/compression.scm gnu/packages/crates-io.scm gnu/packages/docbook.scm gnu/packages/engineering.scm gnu/packages/gcc.scm gnu/packages/gl.scm gnu/packages/gtk.scm gnu/packages/nettle.scm gnu/packages/python-check.scm gnu/packages/python-xyz.scm gnu/packages/radio.scm gnu/packages/rust.scm gnu/packages/sqlite.scm guix/build-system/node.scm Efraim Flashner 2021-03-26gnu: rust: Add Rust 1.51...* gnu/packages/rust.scm (rust-1.51): New variable. Jakub Kądziołka 2021-03-10gnu: rust: Make it "supported" on all systems but i686-linux....* gnu/packages/rust.scm (rust-1.30)[supported-systems]: Instead of hard-coding this to just "x86_64-linux", calculate the supported systems by deleting "i686-linux" from %supported-systems. Chris Marusich 2021-03-09gnu: rust-1.26: Remove aarch64-linux from the supported systems....Because this package is a transitive input to many rust packages, Cuirass is spending lots of time failing to build it on ci.guix.gnu.org. This change will hopefully help with that issue. * gnu/packages/rust.scm (rust-1.26)[supported-systems]: Remove aarch64-linux. Christopher Baines 2021-03-08gnu: rust-1.19: Don't include i686-linux in supported-systems....Currently rust fails to build for i686-linux, so this will avoid computing lots of derivations that depend on rust, but won't be possible to build. * gnu/packages/rust.scm (rust-1.19)[supported-systems]: Switch hardcoding only supporting x86_64-linux for supporting all supported systems, other than i686-linux. Christopher Baines 2021-03-06Merge branch 'master' into core-updatesChristopher Baines 2021-02-13gnu: Add Rust 1.50....* gnu/packages/rust.scm (rust-1.50): New variable. Jakub Kądziołka 2021-02-11gnu: rust: Only test the current release....By only testing the final Rust in the bootstrap chain, the total build time is reduced by approximately 30%, from about 11 hours to 8 hours on a fast machine. Combined with commit df93fc21a4, the total Rust bootstrap chain build time should have been halved. * gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch: Delete file. * gnu/local.mk (dist_patch_DATA): De-register it. * gnu/packages/rust.scm (rust-1.29): Do not apply the above patch. (rust-1.30): Remove the "doc" output. Disable tests. [phases]{set-env}: Do not set CFG_DISABLE_CROSS_TESTS. {relax-gdb-auto-load-safe-path, patch-tests, patch-cargo-index-update} {patch-aarch64-test, remove-unsupported-tests, disable-amd64-avx-test} {patch-cargo-tests, patch-cargo-env-shebang} {ignore-cargo-package-tests}: Remove phases. {configure}: Remove the doc and gdb bindings and their respective configuration entries in the generated config.toml file. {check}: Remove phase. [native-inputs]{bison, flex, gdb, procps}: Remove inputs. {python-2}: Replace by python-wrapper. {rust-1.29}: Do not export variable. {rust-1.30}: Likewise. (rust-1.31): Likewise. [arguments]: Remove field. (rust-1.32): Do not export variable. [source]: Remove patch. [phases]{override-jemalloc}: Order following 'configure. {remove-flaky-test, patch-aarch64-test}: Remove deletions. (rust-1.33): Do not export variable. [arguments]: Remove field. (rust-1.34): Do not export variable. (rust-1.35): Likewise. (rust-1.36): Likewise. [arguments]: Remove field. (rust-1.37): Do not export variable. (rust-1.38): Do not export variable. [arguments]: Likewise. (rust-1.39): Do not export variable. (rust-1.40): Do not export variable. [phases]: Do not alter the #:phases argument. (rust-1.41, rust-1.42, rust-1.43): Do not export variables. (rust-1.44): Likewise. [arguments]: Remove field. (rust-1.45): Do not export variable. [phases]{skip-shebang-tests, skip-networking-test}: Remove phases. (rust-1.46): Do not export variable. (rust-1.47): Do not export variable. [arguments]: Remove field. (rust-1.48): Do not export variable. [arguments]: Remove field. (rust-1.49): Rename to... (rust): ... this. [outputs]: Add a "doc" output. [phases]{enable-docs, add-gdb-to-config} {relax-gdb-auto-load-safe-path, patch-cargo-env-shebang} {disable-tests-requiring-git, disable-interrupt-tests} {patch-command-exec-tests, patch-command-uid-gid-test} {skip-shebang-tests, patch-process-tests}: New phases. [native-inputs]{gdb-9.2, procps}: New inputs. Maxim Cournoyer 2021-02-05gnu: rust: Bootstrap rust@1.29.2 by mrustc@0.9....This reduced bootstrap reduces the complete Rust bootstrap chain build time by approximately 30% compared to the original (about 11 hours instead of 16 hours, on a fast machine). * gnu/packages/patches/rust-1.45-linker-locale.patch: Delete file. * gnu/packages/patches/rust-1.48-linker-locale.patch: Likewise. * gnu/local.mk (dist_patch_DATA): De-register deleted files. * gnu/packages/rust.scm (%mrustc-source): New variable. (rust-1.29): New variable. It is bootstrapped from mrust 0.9, which is used in source form. (rust-1.30): New variable. (rust-1.31)[phases]{patch-command-exec-tests-phase}: Rewrite so that it doesn't need to be redefined later when the file is moved. {enable-docs}: New phase. (rust-1.32): Disable tests. [inputs]: Remove field. [phases]{override-jemalloc}: Reorder after the configure phase. (rust-1.33): Enable tests. [phases]{disable-codegen-tests}: New phase. (rust-1.34)[phases]{disable-codegen-tests}: Delete phase. (rust-1.35)[arguments]: Remove field. The disable-tidy-bins-check phase is now defined in rust-1.30. (rust-1.38)[phases]{patch-command-exec-tests-phase}: Remove. {patch-command-uid-gid-test}: Do not worry about the Tidy lint test, which is disabled. (rust-1.40)[phases]: Move #:validate-runpath? inside the use of 'substitute-keyword-arguments'. {neuter-tidy}: Delete. {patch-command-uid-gid-test}: Make the regexp more precise. Remove the TODO comment, which has been addressed. (rust-1.44)[inputs]: Replace python2 by python-wrapper. [phases]{use-python3}: New phase. (rust-1.45)[source]: Remove field. The linker locale fix is now made via ... [phases]{set-linker-locale-to-utf8}: ... this phase. (rust-1.46)[phases]{build, check}: Allow parallel execution. Add comments. {delete-install-logs}: Delete phase; it's now done in rust-1.30. (rust-1.47)[phases]{patch-cargo-checksums}: Do not reorder phase. The initial ordering of the phase has been fixed with in the rust-1.30 package. (rust-1.48)[source]: Remove field. Danny Milosavljevic 2021-02-05rust: Cleanup commit to prepare for new bootstrap....This commit is not atomic and is not functional by itself; this is done so to make the next set of changes more comprehensible. * gnu/packages/patches/rust-1.19-mrustc.patch: Delete file. * gnu/packages/patches/rust-1.30-gdb-llvm.patch: Likewise. * gnu/packages/patches/rust-bootstrap-stage0-test.patch: Likewise. * gnu/local.mk (dist_patch_DATA): Un-register files. * gnu/packages/rust.scm (mrustc): Delete variable. (rust-1.19, rust-1.20, rust-1.21 rust-1.22, rust-1.23, rust-1.24) (rust-1.25, rust-1.26, rust-1.27, rust-1.28, rust-1.29) (rust-1.30): Delete variables. (rust-1.31 through rust-1.49): Fix indentation and do other cosmetic changes. (rust): Define as rust-1.49. Maxim Cournoyer 2021-01-10Merge branch 'master' into stagingEfraim Flashner 2021-01-02gnu: Add Rust 1.49....* gnu/packages/rust.scm (rust-1.49): New variable. Jakub Kądziołka 2021-01-02gnu: Add Rust 1.48....* gnu/packages/rust.scm (rust-1.48): New variable. Signed-off-by: Jakub Kądziołka <kuba@kadziolka.net> Matthew Kraai 2021-01-02gnu: Add Rust 1.47....* gnu/packages/rust.scm (rust-1.47): New variable. Signed-off-by: Jakub Kądziołka <kuba@kadziolka.net> Matthew Kraai