Remove hydra-eval-guile-jobs

[?]
Feb 15, 2020, 2:12 PM
Q6VFUIC6XO46PDXITZ72E7V4ATKA2PWO7USK37NTCO2LBKNGCFYAC

Dependencies

  • [2] SVDJSA6U hydra-eval-guile-jobs: Adjust to multiple-output format.
  • [3] UL6TSQEA hydra-eval-guile-jobs: Use `--fresh-auto-compile'.
  • [4] 3K3GDTUQ hydra-eval-guile-jobs: Honor $NIX_STORE_DIR.
  • [5] YHDX3LB6 hydra-eval-guile-jobs: Add "This file is part of Hydra".
  • [6] 3HVZCXJR Shut up warnings
  • [7] UXRNODRJ Remove hydra-build and the old hydra-queue-runner
  • [8] SW7STLQ7 Cache flake-based jobset evaluations
  • [9] 6EAXKZCU Use the overlay from the nix flake
  • [10] UEMB7PTH Add option eval_substituter
  • [11] E6QWSAFL Add hydra-dev-server which uses the classic Catalyst server
  • [12] 5M6YEYUJ hydra-backfill-ids: create to add jobset_id values to Builds and Jobs
  • [13] VU2OLHD2 Move most of AddBuilds to hydra-eval-jobset
  • [14] KNLKTCDM Use pkgconfig to find Nix
  • [15] GBCPEGYC Add a .gitignore
  • [16] 2KJFOYGS hydra: Actually check for Nix in `configure'.
  • [17] IMQRX4MP hydra-eval-jobs: Use JSON instead of XML
  • [18] 3ZURHKX5 Update .gitignore
  • [19] RXVJFQ5A Evaluator cleanups
  • [20] FDE3BJAP * Refactoring.
  • [21] VML3XVFY hydra-eval-guile-jobs: Allow use of the installed Guix.
  • [22] G2ZB6464 first test, not yet in buildprocess
  • [23] 4YCF3KBG Concurrent hydra-evaluator
  • [24] MPFSVI5X Pedantry: CLOCK_REALTIME -> CLOCK_MONOTONIC
  • [25] ZPHREC7X hydra-eval-jobset: Support flakes
  • [26] FV2M6MOT hydra: use autoconf/-make
  • [27] M2CFFNJY Remove unused file
  • [28] 5PXVIXLH Declarative projects: Include the fetch info for the declarative input in the project eval
  • [29] W2VB36NM guile: Raise default absolute timeout to from 2h to 20h.
  • [30] P3M6UFMP Merge remote-tracking branch 'origin/master' into flake
  • [31] XHOZT4WT Add a command `hydra-create-user' for managing user accounts
  • [32] STZE4KKR Fix build against Nix master
  • [33] HP5WJLQU hydra-eval-{jobs,jobset}: Pass file name as <...>
  • [34] UGA45FNC Add a plugin for backing up builds in s3
  • [35] IS7GUIWY hydra-eval-guile-jobs: Register derivations as GC roots.
  • [36] DBPIYHMA hydra: add nix-prefetch-* to tarball
  • [37] N22GPKYT * Put info about logs / build products in the DB.
  • [38] 6MGFQDR2 deleted some old scripts
  • [39] IE2PRAQU hydra-queue-runner: Send build notifications
  • [40] NNQ7IQJX set scripts to executable
  • [41] Q6SOGMDQ Hydra/28: Rename "scheduler" to "evaluator"
  • [42] M3A5PZIH hydra: Clarify the dependency on BDW-GC.
  • [43] FJILMA6G configure: Preserve the user's $CPPFLAGS and $LDFLAGS.
  • [44] L4AI5YL6 Rename hydra_*.pl to hydra-*
  • [45] 6WRGCITD Enable declarative projects.
  • [46] 4CELXP7P Remove the longDescription field
  • [47] RFE6T5LG * Store jobset evaluations in the database explicitly. This includes
  • [48] Y6H7Y3OT Capture the path to `guile', when available.
  • [49] 5SHCWE7X * Prevent repeated evaluation of a jobset with the same inputs. This
  • [50] 3ZCEPLNO
  • [51] QMW24O5S Add support for Guile & Guix.
  • [52] QAJK5MCE Remove obsolete hydra-control script
  • [53] D5QIOJGP * Move everything up one directory.
  • [54] OVR2RWBI hydra-evaluator: Always pick the jobset that hasn't been evaluated longest
  • [55] FAIJDQKZ
  • [56] WQXF2T3D hydra-evaluator: Don't require $HYDRA_CONFIG
  • [57] DODOGD7M Send queue runner stats to statsd
  • [58] POPU2ATH * hydra_scheduler: use eval-jobs.
  • [59] KX5L74EY add nix-prefetch- scripts for now, were externals in svn
  • [60] AMFMXR52 Provide a command ‘hydra-init’ to initialise/upgrade the database
  • [61] HXS5NUHW hydra-eval-guile-jobs: Adjust to <license> objects.
  • [62] ARD6Z67T Do incremental SVN checkouts
  • [*] T4LLYESZ * Nix expression for building Hydra.

Change contents

  • edit in .gitignore at line 18
    [10.178][10.0:34]()
    /src/script/hydra-eval-guile-jobs
  • edit in configure.ac at line 55
    [10.56][10.60:61](),[10.60][10.60:61](),[10.39][10.0:75]()
    PKG_CHECK_MODULES([GUILE], [guile-2.0], [HAVE_GUILE=yes], [HAVE_GUILE=no])
  • edit in configure.ac at line 56
    [10.1][10.35:147]()
    if test "x$HAVE_GUILE" = xyes; then
    AC_PATH_PROG([GUILE], [guile])
    else
    GUILE="guile"
    fi
    AC_SUBST([GUILE])
  • edit in configure.ac at line 74
    [10.16583][10.148:183]()
    src/script/hydra-eval-guile-jobs
  • replacement in configure.ac at line 78
    [10.712][10.184:272]()
    AC_CONFIG_COMMANDS([executable-scripts],
    [chmod +x src/script/hydra-eval-guile-jobs])
    [10.712]
    [6.34]
    AC_CONFIG_COMMANDS([executable-scripts], [])
  • edit in flake.nix at line 109
    [10.3972][10.3972:4029]()
    guile # optional, for Guile + Guix support
  • edit in flake.nix at line 110
    [9.555]
    [10.4062]
    boehmgc
  • file deletion: hydra-eval-guile-jobs.in (----------)hydra-eval-guile-jobs (---r------)
    [10.2543][10.667:715](),[10.715][10.2679:2679](),[10.2543][10.11339:11384](),[10.11384][10.2679:2679]()
    #!/bin/sh
    # Aside from this initial boilerplate, this is actually -*- scheme -*- code.
    main="(module-ref (resolve-interface '(hydra-eval-guile-jobs)) 'eval-guile-jobs)"
    # Keep the host's GUILE_LOAD_PATH unchanged to allow the installed Guix to
    # be used. This moves Guix modules possibly out of control, but solves
    # bootstrapping issues.
    #
    # Use `--fresh-auto-compile' to ignore any available .go, and force
    # recompilation. This is because checkouts in the store has mtime set to
    # the epoch, and thus .go files look newer, even though they may not
    # correspond.
    exec ${GUILE:-@GUILE@} --no-auto-compile --fresh-auto-compile \
    -l "$0" -c "(apply $main (cdr (command-line)))" "$@"
    !#
    ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
    ;;;
    ;;; This file is part of Hydra.
    ;;;
    ;;; Hydra 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.
    ;;;
    ;;; Hydra 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 Hydra. If not, see <http://www.gnu.org/licenses/>.
    (define-module (hydra-eval-guile-jobs)
    #:use-module (sxml simple)
    #:use-module (ice-9 match)
    #:use-module (ice-9 regex)
    #:use-module (srfi srfi-1)
    #:use-module (srfi srfi-11)
    #:export (job-evaluations->xml
    eval-guile-jobs))
    (define (guix-variable module name)
    "Dynamically link variable NAME under Guix module MODULE and return it.
    Note: this is used instead of `@', because when using `@' in an uncompiled
    file, Guile tries to load the module directly as it reads the source, which
    fails in our case, leading to the creation of empty (guix ...) modules."
    ;; TODO: fail with an XML error description
    (let ((m (resolve-interface `(guix ,module))))
    (module-ref m name)))
    (define (%derivation-system drv)
    ;; XXX: Awful hack to workaround the fact that `derivation-system', which
    ;; is a macro, cannot be referred to dynamically.
    (struct-ref drv 3))
    (define strip-store-path
    (let* ((store (or (getenv "NIX_STORE_DIR") "/nix/store"))
    (store-path-rx
    (make-regexp (string-append "^.*" (regexp-quote store)
    "/[^-]+-(.+)$"))))
    (lambda (path)
    (or (and=> (regexp-exec store-path-rx path)
    (lambda (match)
    (let ((path (match:substring match 1)))
    path)))
    path))))
    (define (derivation-path->name drv)
    "Return the base name of DRV, sans hash and `.drv' extension."
    (let ((d (strip-store-path drv)))
    (if (string-suffix? ".drv" d)
    (string-drop-right d 4)
    d)))
    (define (register-gc-root drv roots-dir)
    "Register a permanent garbage collector root under ROOTS-DIR for DRV."
    (let ((root (string-append roots-dir "/" (basename drv))))
    (unless (file-exists? root)
    (symlink drv root))))
    (define* (job-evaluations->sxml jobs
    #:key gc-roots-dir)
    "Return the hydra-eval-jobs SXML form for the result of JOBS, a list of
    symbol/thunk pairs."
    `(*TOP*
    (*PI* xml "version='1.0' encoding='utf-8'")
    "\n"
    (jobs "\n"
    ,@(map (match-lambda
    (((? symbol? name) . (? thunk? thunk))
    (let* ((result (save-module-excursion
    (lambda ()
    (set-current-module %user-module)
    (with-output-to-port (%make-void-port "w")
    thunk))))
    (drv (assoc-ref result 'derivation)))
    (define (opt-attr xml-name name)
    (match (assoc name result)
    ((_ . value)
    `((,xml-name ,value)))
    (_
    '())))
    ;; XXX: Add <arg ...> tags?
    `(job (@ (jobName ,name)
    (drvPath ,drv)
    ,@(opt-attr 'homepage 'home-page)
    (license
    ,(let loop ((license (assoc-ref result 'license)))
    (match license
    ((? struct?)
    (struct-ref license 0))
    ((l ...)
    (string-join (map loop l)))
    (_ ""))))
    ,@(opt-attr 'description 'description)
    (maintainers
    ,(string-join (or (assoc-ref result 'maintainers)
    '())
    ", "))
    (maxSilent
    ,(number->string (or (assoc-ref result
    'max-silent-time)
    3600)))
    (timeout
    ,(number->string (or (assoc-ref result 'timeout)
    72000)))
    (nixName ,(derivation-path->name drv))
    (schedulingPriority
    ,(number->string (or (assoc-ref result
    'scheduling-priority)
    10)))
    (system
    ,(call-with-input-file drv
    (compose %derivation-system
    (guix-variable 'derivations
    'read-derivation)))))
    "\n"))))
    jobs))))
    (define* (job-evaluations->xml jobs port
    #:key gc-roots-dir)
    (set-port-encoding! port "UTF-8")
    (sxml->xml (job-evaluations->sxml jobs #:gc-roots-dir gc-roots-dir)
    port))
    ;;;
    ;;; Command-line entry point.
    ;;;
    (define (parse-arguments args)
    "Traverse ARGS, a list of command-line arguments compatible with
    `hydra-eval-jobs', and return the name of the file that defines the jobs, an
    expression that returns the entry point in that file (a unary procedure), the
    list of name/value pairs passed to that entry point, as well as a GC root
    directory or #f."
    (define (module-directory dir)
    (let ((d (string-append dir "/share/guile/site/2.0")))
    (if (file-exists? d)
    d
    dir)))
    (let loop ((args args)
    (result '())
    (file #f)
    (entry 'hydra-jobs)
    (roots-dir #f))
    (match args
    (()
    (if (not file)
    (error "hydra-eval-guile-jobs: no expression file given")
    (values file entry (reverse result) roots-dir)))
    (("-I" name=dir rest ...)
    (let* ((dir (match (string-tokenize name=dir
    (char-set-complement (char-set
    #\=)))
    ((_ dir) dir)
    ((dir) dir)))
    (dir* (module-directory dir)))
    (format (current-error-port) "adding `~a' to the load path~%" dir*)
    (set! %load-path (cons dir* %load-path))
    (set! %load-compiled-path (cons dir* %load-compiled-path)))
    (loop rest result file entry roots-dir))
    (("--argstr" name value rest ...)
    (loop rest (alist-cons (string->symbol name) value result)
    file entry roots-dir))
    (("--arg" name expr rest ...)
    (let ((value (eval (call-with-input-string expr read)
    (current-module))))
    (loop rest (alist-cons (string->symbol name) value result)
    file entry roots-dir)))
    (("--gc-roots-dir" dir rest ...)
    (loop rest result file entry dir))
    (("-j" _ rest ...) ; XXX: what's this?
    (loop rest result file entry roots-dir))
    (("--entry" expr rest ...) ; entry point, like `guile -e'
    (let ((expr (call-with-input-string expr read)))
    (loop rest result file expr roots-dir)))
    ((file rest ...) ; source file that defines the jobs
    (loop rest result file entry roots-dir))
    (_
    (error "hydra-eval-guile-jobs: invalid arguments" args)))))
    (define %user-module
    ;; Hydra user module.
    ;; TODO: Make it a sandbox.
    (let ((m (make-module)))
    (beautify-user-module! m)
    m))
    (define (eval-guile-jobs . args)
    (setlocale LC_ALL "")
    (let-values (((file entry args gc-roots-dir)
    (parse-arguments args)))
    (save-module-excursion
    (lambda ()
    (set-current-module %user-module)
    ;; The standard output must contain only XML.
    (with-output-to-port (%make-void-port "w")
    (lambda ()
    (primitive-load file)))))
    (let* ((entry (eval entry %user-module))
    (store ((guix-variable 'store 'open-connection)))
    (jobs (entry store args)))
    (unless (string? gc-roots-dir)
    (format (current-error-port)
    "warning: --gc-roots-dir not specified~%"))
    (job-evaluations->xml jobs (current-output-port)
    #:gc-roots-dir gc-roots-dir))))
    ;; Resolve Guix modules lazily.
    ,(map (match-lambda
    ((name . path)
    `(output (@ (name ,name) (path ,path)))))
    ((guix-variable 'derivations
    'derivation-path->output-paths)
    drv))
    (when gc-roots-dir
    ;; Register DRV as a GC root so that it's not collected by
    ;; the time 'hydra-queue-runner' attempts to build it.
    (register-gc-root drv gc-roots-dir))
  • replacement in src/script/Makefile.am at line 2
    [10.293][10.293:324](),[10.346][10.346:373]()
    $(distributable_scripts) \
    hydra-eval-guile-jobs.in
    [10.293]
    [10.97]
    $(distributable_scripts)
  • replacement in src/script/Makefile.am at line 19
    [10.611][10.611:666]()
    $(distributable_scripts) \
    hydra-eval-guile-jobs
    [10.611]
    $(distributable_scripts)
  • replacement in src/script/hydra-eval-jobset at line 267
    [10.7572][10.7572:7859]()
    my ($exprType, $value) = @_;
    my $result;
    if ($exprType eq "guile") {
    if ($value eq "true") {
    $result = "#t";
    } else {
    $result = "#f";
    }
    $result = $value;
    } else {
    $result = $value;
    }
    return $result;
    [10.7572]
    [10.7859]
    my ($value) = @_;
    return $value;
  • replacement in src/script/hydra-eval-jobset at line 273
    [10.7888][10.7888:9575]()
    my ($exprType, $input) = @_;
    my $result;
    if ($exprType eq "guile") {
    $result = "'((file-name . \"" . ${input}->{storePath} . "\")" .
    (defined $input->{revision} ? "(revision . \"" . $input->{revision} . "\")" : "") .
    (defined $input->{revCount} ? "(revision-count . " . $input->{revCount} . ")" : "") .
    (defined $input->{gitTag} ? "(git-tag . \"" . $input->{gitTag} . "\")" : "") .
    (defined $input->{shortRev} ? "(short-revision . \"" . $input->{shortRev} . "\")" : "") .
    (defined $input->{version} ? "(version . \"" . $input->{version} . "\")" : "") .
    ")";
    } else {
    $result = "{ outPath = builtins.storePath " . $input->{storePath} . "" .
    "; inputType = \"" . $input->{type} . "\"" .
    (defined $input->{uri} ? "; uri = \"" . $input->{uri} . "\"" : "") .
    (defined $input->{revNumber} ? "; rev = " . $input->{revNumber} . "" : "") .
    (defined $input->{revision} ? "; rev = \"" . $input->{revision} . "\"" : "") .
    (defined $input->{revCount} ? "; revCount = " . $input->{revCount} . "" : "") .
    (defined $input->{gitTag} ? "; gitTag = \"" . $input->{gitTag} . "\"" : "") .
    (defined $input->{shortRev} ? "; shortRev = \"" . $input->{shortRev} . "\"" : "") .
    (defined $input->{version} ? "; version = \"" . $input->{version} . "\"" : "") .
    (defined $input->{outputName} ? "; outputName = \"" . $input->{outputName} . "\"" : "") .
    (defined $input->{drvPath} ? "; drvPath = builtins.storePath " . $input->{drvPath} . "" : "") .
    ";}";
    }
    return $result;
    [10.7888]
    [10.9575]
    my ($input) = @_;
    return
    "{ outPath = builtins.storePath " . $input->{storePath} . "" .
    "; inputType = \"" . $input->{type} . "\"" .
    (defined $input->{uri} ? "; uri = \"" . $input->{uri} . "\"" : "") .
    (defined $input->{revNumber} ? "; rev = " . $input->{revNumber} . "" : "") .
    (defined $input->{revision} ? "; rev = \"" . $input->{revision} . "\"" : "") .
    (defined $input->{revCount} ? "; revCount = " . $input->{revCount} . "" : "") .
    (defined $input->{gitTag} ? "; gitTag = \"" . $input->{gitTag} . "\"" : "") .
    (defined $input->{shortRev} ? "; shortRev = \"" . $input->{shortRev} . "\"" : "") .
    (defined $input->{version} ? "; version = \"" . $input->{version} . "\"" : "") .
    (defined $input->{outputName} ? "; outputName = \"" . $input->{outputName} . "\"" : "") .
    (defined $input->{drvPath} ? "; drvPath = builtins.storePath " . $input->{drvPath} . "" : "") .
    ";}";
  • replacement in src/script/hydra-eval-jobset at line 291
    [10.9598][10.9598:9635]()
    my ($inputInfo, $exprType) = @_;
    [10.9598]
    [10.9635]
    my ($inputInfo) = @_;
  • replacement in src/script/hydra-eval-jobset at line 308
    [10.1227][10.1227:1310]()
    push @res, "--arg", $input, booleanToString($exprType, $alt->{value});
    [10.1227]
    [10.1310]
    push @res, "--arg", $input, booleanToString($alt->{value});
  • edit in src/script/hydra-eval-jobset at line 311
    [10.1360][10.1360:1465]()
    die "input type ‘nix’ only supported for Nix-based jobsets\n" unless $exprType eq "nix";
  • edit in src/script/hydra-eval-jobset at line 314
    [10.1571][10.1571:1677]()
    die "input type ‘eval’ only supported for Nix-based jobsets\n" unless $exprType eq "nix";
  • replacement in src/script/hydra-eval-jobset at line 322
    [10.1975][10.1975:2052]()
    push @res, "--arg", $input, buildInputToString($exprType, $alt);
    [10.1975]
    [10.2052]
    push @res, "--arg", $input, buildInputToString($alt);
  • replacement in src/script/hydra-eval-jobset at line 331
    [10.11074][10.0:81]()
    my ($inputInfo, $exprType, $nixExprInputName, $nixExprPath, $flakeRef) = @_;
    [10.11074]
    [10.81]
    my ($inputInfo, $nixExprInputName, $nixExprPath, $flakeRef) = @_;
  • edit in src/script/hydra-eval-jobset at line 343
    [10.434][10.11508:11509](),[10.11508][10.11508:11509](),[10.11509][10.435:529]()
    my $evaluator = ($exprType eq "guile") ? "hydra-eval-guile-jobs" : "hydra-eval-jobs";
  • replacement in src/script/hydra-eval-jobset at line 344
    [10.11600][10.530:558]()
    @cmd = ($evaluator,
    [10.11600]
    [10.558]
    @cmd = ("hydra-eval-jobs",
  • replacement in src/script/hydra-eval-jobset at line 348
    [10.708][10.708:762]()
    inputsToArgs($inputInfo, $exprType));
    [10.708]
    [10.762]
    inputsToArgs($inputInfo));
  • edit in src/script/hydra-eval-jobset at line 581
    [10.3692][10.11385:11455]()
    my $exprType = $jobset->nixexprpath =~ /.scm$/ ? "guile" : "nix";
  • replacement in src/script/hydra-eval-jobset at line 616
    [10.2206][10.11456:11555]()
    my @args = ($jobset->nixexprinput, $jobset->nixexprpath, inputsToArgs($inputInfo, $exprType));
    [10.2206]
    [10.2294]
    my @args = ($jobset->nixexprinput, $jobset->nixexprpath, inputsToArgs($inputInfo));
  • replacement in src/script/hydra-eval-jobset at line 631
    [10.217][8.855:959]()
    my $jobs = evalJobs($inputInfo, $exprType, $jobset->nixexprinput, $jobset->nixexprpath, $flakeRef);
    [10.217]
    [10.218]
    my $jobs = evalJobs($inputInfo, $jobset->nixexprinput, $jobset->nixexprpath, $flakeRef);