aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/hooks.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-05-23 17:31:46 +0100
committerChristopher Baines <mail@cbaines.net>2020-05-23 17:31:46 +0100
commit8015a6bfa7cbb017155c518a53fda6ca2ad2ec44 (patch)
tree082ffbb180ea6076a99214fc438a117d8234d655 /guix-build-coordinator/hooks.scm
parent6817d044a292c03411cec64cc9d17c5cca9d7605 (diff)
downloadbuild-coordinator-8015a6bfa7cbb017155c518a53fda6ca2ad2ec44.tar
build-coordinator-8015a6bfa7cbb017155c518a53fda6ca2ad2ec44.tar.gz
Add a build failure hook to retry builds
Diffstat (limited to 'guix-build-coordinator/hooks.scm')
-rw-r--r--guix-build-coordinator/hooks.scm28
1 files changed, 28 insertions, 0 deletions
diff --git a/guix-build-coordinator/hooks.scm b/guix-build-coordinator/hooks.scm
index f3edc9f..9868d37 100644
--- a/guix-build-coordinator/hooks.scm
+++ b/guix-build-coordinator/hooks.scm
@@ -33,6 +33,7 @@
build-success-publish-hook
build-success-s3-publish-hook
default-build-failure-hook
+ build-failure-retry-hook
default-build-missing-inputs-hook))
(define (default-build-success-hook build-coordinator build-id)
@@ -175,6 +176,33 @@
build-id agent-id)
(current-error-port))))
+(define* (build-failure-retry-hook #:key (retries 2))
+ (lambda (build-coordinator build-id)
+ (define datastore
+ (build-coordinator-datastore build-coordinator))
+
+ (let* ((build-details (datastore-find-build datastore build-id))
+ (derivation-name (assq-ref build-details 'derivation-name))
+ (all-builds-for-derivation (datastore-list-builds-for-derivation
+ datastore derivation-name))
+ (all-builds-for-derivation-count (length all-builds-for-derivation)))
+
+ (when (= 1 all-builds-for-derivation-count)
+ (display
+ (simple-format #f "~A: submitting ~A retries for\n ~A\n"
+ build-id retries derivation-name))
+ (for-each
+ (lambda (retry)
+ (let ((details
+ (submit-build build-coordinator derivation-name
+ #:priority (assq-ref build-details 'priority))))
+ (display
+ (simple-format #f "~A: submitted retry ~A as ~A\n"
+ build-id
+ (+ 1 retry)
+ (assq-ref details 'build-submitted)))))
+ (iota retries))))))
+
(define (default-build-missing-inputs-hook build-coordinator
build-id missing-inputs)
(define datastore