blob: 0116605ea9c140c51e88c65264902a5a13535356 (
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
|
;;; Guix Build Coordinator
;;;
;;; Copyright © 2020 Christopher Baines <mail@cbaines.net>
;;;
;;; This file is part of the guix-build-coordinator.
;;;
;;; The Guix Build Coordinator 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.
;;;
;;; The Guix Build Coordinator 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 the guix-data-service. If not, see
;;; <http://www.gnu.org/licenses/>.
(define-module (guix-build-coordinator hooks)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
#:use-module (guix-build-coordinator datastore)
#:use-module (guix-build-coordinator coordinator)
#:export (default-build-success-hook
default-build-failure-hook
default-build-missing-inputs-hook))
(define (default-build-success-hook datastore build-id)
(let ((agent-id
(datastore-agent-for-build datastore build-id)))
(display
(simple-format #f
"build ~A succeeded (on agent ~A)\n"
build-id agent-id)
(current-error-port))))
(define (default-build-failure-hook datastore build-id)
(let ((agent-id
(datastore-agent-for-build datastore build-id)))
(display
(simple-format #f
"build ~A failed (on agent ~A)\n"
build-id agent-id)
(current-error-port))))
(define (default-build-missing-inputs-hook datastore build-id missing-inputs)
(let ((build (datastore-find-build datastore build-id)))
(let ((derivation-inputs
(datastore-find-derivation-inputs datastore
(assq-ref build 'derivation-name))))
(simple-format #t "missing-inputs: ~A\n~A\n"
build-id
(string-join (map (lambda (input)
(string-append " - " input))
missing-inputs)
"\n"))
(for-each (lambda (missing-input)
(let ((input-derivation
(any (lambda (derivation-input)
(if (string=? (assq-ref derivation-input 'output)
missing-input)
(assq-ref derivation-input 'derivation)
#f))
derivation-inputs)))
(unless input-derivation
(error "couldn't find a derivation for " missing-input))
(let ((builds-for-output
(datastore-list-builds-for-output datastore
missing-input)))
(if (null? builds-for-output)
(begin
(simple-format #t
"submitting build for ~A\n"
input-derivation)
(submit-build datastore input-derivation))
(simple-format #t "~A builds exist for ~A, skipping\n"
(length builds-for-output)
missing-input)))))
missing-inputs))))
|