branch: main
commit 51ba6894c5a7ba5d8e6edc38f9799394be415a2d
Author: Ludovic Courtès <l...@gnu.org>
AuthorDate: Tue May 6 16:49:47 2025 +0200

    http: Let the bridge modify the database when adding a new spec.
    
    * src/cuirass/http.scm (url-handler): For /admin/gitlab/event,
    /admin/forgejo/event, and /admin/specification/add, pass the serialized
    sexp to the bridge.
    * src/cuirass/scripts/register.scm (bridge): For ‘register-jobset’,
    deserialize the spec.
    * src/cuirass/base.scm (jobset-registry): For ‘register’, call
    ‘db-add-or-update-specification’.
---
 src/cuirass/base.scm             |  1 +
 src/cuirass/http.scm             | 21 ++++++---------------
 src/cuirass/scripts/register.scm | 12 ++++--------
 3 files changed, 11 insertions(+), 23 deletions(-)

diff --git a/src/cuirass/base.scm b/src/cuirass/base.scm
index 44f9688..958be9f 100644
--- a/src/cuirass/base.scm
+++ b/src/cuirass/base.scm
@@ -1093,6 +1093,7 @@ POLLING-PERIOD seconds."
                                                   #:event-log event-log))
                    (name (specification-name spec)))
               (log-info "registering new jobset '~a'" name)
+              (db-add-or-update-specification spec)
               (put-message event-log
                            `(new-event (jobset-registered ,spec)))
               (loop (vhash-consq name monitor
diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm
index 086b506..46bcd7e 100644
--- a/src/cuirass/http.scm
+++ b/src/cuirass/http.scm
@@ -739,11 +739,8 @@ return DEFAULT."
                   ;; New merge request.
                   ((or "open" "reopen")
                    (if (not (db-get-specification (specification-name spec)))
-                       (begin
-                         (db-add-or-update-specification spec)
-
-                         (unless (call-bridge `(register-jobset 
,(specification-name spec))
-                                              bridge)
+                       (let ((sexp (specification->sexp spec)))
+                         (unless (call-bridge `(register-jobset ,sexp) bridge)
                            (log-warning
                             "cannot notify bridge of the addition of jobset 
'~a'"
                             (specification-name spec)))
@@ -808,11 +805,8 @@ return DEFAULT."
                   ;; New pull request.
                   ((or 'opened 'reopened)
                    (if (not (db-get-specification spec-name))
-                       (begin
-                         (db-add-or-update-specification spec)
-
-                         (unless (call-bridge `(register-jobset ,spec-name)
-                                              bridge)
+                       (let ((sexp (specification->sexp spec)))
+                         (unless (call-bridge `(register-jobset ,sexp) bridge)
                            (log-warning
                             "cannot notify bridge of the addition of jobset 
'~a'"
                             spec-name))
@@ -871,11 +865,8 @@ return DEFAULT."
                    ,(format #f "Specification ~a already exists" name))
              '())
             #:code 400)
-           (begin
-             (db-add-or-update-specification spec)
-
-             (unless (call-bridge `(register-jobset ,(specification-name spec))
-                                  bridge)
+           (let ((sexp (specification->sexp spec)))
+             (unless (call-bridge `(register-jobset ,sexp) bridge)
                (log-warning
                 "cannot notify bridge of the addition of jobset '~a'"
                 (specification-name spec)))
diff --git a/src/cuirass/scripts/register.scm b/src/cuirass/scripts/register.scm
index 7668a77..3e48320 100644
--- a/src/cuirass/scripts/register.scm
+++ b/src/cuirass/scripts/register.scm
@@ -141,14 +141,10 @@ accepting incoming connections."
             ;; Note: The protocol is bare-bones and unversioned; the 'cuirass'
             ;; processes are meant to be upgraded in lockstep.
             (match command
-              (`(register-jobset ,name)
-               (match (db-get-specification name)
-                 (#f
-                  (log-warning "requested spec '~a' not found" name)
-                  (write '(reply #f) socket))
-                 (spec
-                  (register-jobset registry spec)
-                  (write '(reply #t) socket))))
+              (`(register-jobset ,sexp)
+               (let ((spec (sexp->specification sexp)))
+                 (register-jobset registry spec)
+                 (write '(reply #t) socket)))
               (`(update-jobset ,sexp)
                (let* ((spec (sexp->specification sexp))
                       (name (specification-name spec))

Reply via email to