aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-04-13 13:58:07 +0100
committerChristopher Baines <mail@cbaines.net>2020-04-13 14:00:25 +0100
commit6ffd98ba3689418f4c47efa666c018f3e443fba5 (patch)
treef51f888414c605f433be5706e311108513b4c3da /guix-build-coordinator
parent732d20b4ac6133acf8f991f0dcfc54b639e14a54 (diff)
downloadbuild-coordinator-6ffd98ba3689418f4c47efa666c018f3e443fba5.tar
build-coordinator-6ffd98ba3689418f4c47efa666c018f3e443fba5.tar.gz
Re-work how agents handle missing inputs
Don't start the build if there are missing inputs.
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r--guix-build-coordinator/agent.scm41
1 files changed, 30 insertions, 11 deletions
diff --git a/guix-build-coordinator/agent.scm b/guix-build-coordinator/agent.scm
index f091401..0db99eb 100644
--- a/guix-build-coordinator/agent.scm
+++ b/guix-build-coordinator/agent.scm
@@ -42,14 +42,33 @@
already-allocated-builds))))
(for-each (lambda (build)
(let ((derivation-name (assoc-ref build "derivation-name")))
- (pre-build-process derivation-name)
- (let ((result (perform-build derivation-name)))
- (post-build uuid coordinator-uri password
- (assoc-ref build "uuid")
- derivation-name))))
+ (let ((pre-build-status (pre-build-process derivation-name)))
+ (if (eq? (assq-ref pre-build-status 'result) 'success)
+ (let ((result (perform-build derivation-name)))
+ (post-build uuid coordinator-uri password
+ (assoc-ref build "uuid")
+ derivation-name))
+ (simple-format #t "failure: ~A\n" pre-build-status)))))
builds)))
(define (pre-build-process derivation-name)
+ (define (find-missing-inputs inputs)
+ (let ((output-paths
+ (append-map derivation-input-output-paths inputs)))
+
+ (with-store store
+ (fold (lambda (file result)
+ (if (file-exists? file)
+ result
+ (if (has-substitutes? store file)
+ (begin
+ (with-store store
+ (build-things store output-paths))
+ result)
+ (cons file result))))
+ '()
+ output-paths))))
+
(let ((derivation
(if (file-exists? derivation-name)
(read-derivation-from-file derivation-name)
@@ -63,12 +82,12 @@
(with-store store
(delete-paths store output-file-names)))
- (let* ((inputs (derivation-inputs derivation))
- (output-paths
- (append-map derivation-input-output-paths inputs)))
-
- (with-store store
- (build-things store output-paths))))))
+ (let ((missing-inputs
+ (find-missing-inputs (derivation-inputs derivation))))
+ (if (null? missing-inputs)
+ '((result . success))
+ `((result . failure)
+ (missing-inputs . ,missing-inputs)))))))
(define (perform-build derivation-name)
(with-store store