From 8015a6bfa7cbb017155c518a53fda6ca2ad2ec44 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sat, 23 May 2020 17:31:46 +0100 Subject: Add a build failure hook to retry builds --- guix-build-coordinator/hooks.scm | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) 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 -- cgit v1.2.3