Skip to content
Snippets Groups Projects
This project is mirrored from https://git.savannah.gnu.org/git/guix/guix-cuirass.git/. Pull mirroring updated .
  1. Sep 14, 2020
    • Mathieu Othacehe's avatar
      Add metrics support. · cf11b73d
      Mathieu Othacehe authored
      * Makefile.am: Add "upgrade-11.sql", "chart.js" and "metrics.js".
      * bin/cuirass.in (main): Add 'metrics fiber.
      * src/cuirass/http.scm (%file-white-list): Add "js/chart.js".
      (url-handler): Add "/metrics" route.
      * src/cuirass/metrics.scm: New file.
      * src/cuirass/templates.scm (html-page): Add a "Global metrics" sub-menu to
      "Status" dropdown menu.
      (make-line-chart, global-metrics-content): New procedures.
      * src/schema.sql (Metrics): New table.
      * src/sql/upgrade-11.sql: New file.
      * src/static/js/chart.js: New file.
      cf11b73d
    • Mathieu Othacehe's avatar
      database: Export procedures. · 43ed8547
      Mathieu Othacehe authored
      * src/cuirass/database.scm (last-insert-rowid, expect-one-row, %sqlite-exec):
      Export them.
      43ed8547
  2. Sep 10, 2020
    • Mathieu Othacehe's avatar
      Add missing SQL upgrade files. · 713a914e
      Mathieu Othacehe authored
      * Makefile.am (dist_sql_DATA): Add upgrade-9.sql and upgrade-10.sql.
      713a914e
    • Mathieu Othacehe's avatar
      tests: Fix HTTP tests. · 00c7b4bb
      Mathieu Othacehe authored
      This is a follow-up of 154232bc.
      
      * tests/http.scm (evaluations-query-result): Add 'timestamp', 'checkouttime'
      and 'evaltime' fields.
      (fill-db): Pass a matching timestamp to "db-add-evaluation" calls.
      00c7b4bb
    • Mathieu Othacehe's avatar
      Add a status field to Evaluation table. · f5b0d393
      Mathieu Othacehe authored
      The Evaluation table currently has an 'in_progress' field. Distinction between
      succeeded and failed evaluations are based on the presence of Builds records
      for the evaluation. It it also not possible to distinguish aborted evaluations
      from failed evaluations.
      
      Rename 'in_progress' field to 'status'. The 'status' field can be equal to
      'started', 'succeeded', 'failed' or 'aborted'.
      
      * src/cuirass/database.scm (evaluation-status): New exported enumeration.
      (db-set-evaluations-done, db-set-evaluation-done): Remove them.
      (db-abort-pending-evaluations, db-set-evaluation-status): New exported procedures.
      (db-add-evaluation, db-get-builds, db-get-evaluations,
      db-get-evaluations-build-summary, db-get-evaluation-summary): Adapt to use
      'status' field instead of 'in_progress' field.
      * src/cuirass/templates.scm (evaluation-badges): Ditto.
      * src/schema.sql (Evaluations): Rename 'in_progress' field to 'status'.
      * src/sql/upgrade-10.sql: New file.
      * bin/cuirass.in (main): Use "db-abort-pending-evaluations" instead of
      "db-set-evaluations-done".
      * src/cuirass/base.scm (evaluate): Use "db-set-evaluation-status" instead of
      "db-set-evaluations-done".
      (build-packages): Use "db-set-evaluation-status" instead of
      "db-set-evaluation-done".
      * tests/database.scm (sqlite-exec): Adapt accordingly.
      * tests/http.scm (evaluations-query-result): Ditto.
      f5b0d393
  3. Sep 07, 2020
    • Mathieu Othacehe's avatar
      Do not use commit time as checkout timestamp. · af12a805
      Mathieu Othacehe authored
      Commit time can be far away from the actual push time. Thus, use the checkout
      time instead of the commit time to fill Checkouts 'timestamp' field.
      
      * src/cuirass/base.scm (fetch-input): Return the checkout time instead of the
      commit time.
      af12a805
  4. Sep 06, 2020
    • Mathieu Othacehe's avatar
      Handle evaluations without timestamp. · 33798abc
      Mathieu Othacehe authored
      This is a follow-up of d9879583.
      
      * src/cuirass/templates.scm (evaluation-build-table): Do not print evaluation
      date if the "timestamp" field equals zero.
      33798abc
    • Mathieu Othacehe's avatar
      Display evaluation date and duration. · d9879583
      Mathieu Othacehe authored
      src/cuirass/database.scm (db-get-evaluations): Add support for "timestamp",
      "checkouttime" and "evaltime" fields,
      (db-get-evaluation-summary): ditto.
      src/cuirass/templates.scm (nearest-exact-integer, seconds->string): New
      procedures,
      (evaluation-build-table): print evaluation date and duration.
      d9879583
    • Mathieu Othacehe's avatar
      Save evaluations and checkouts timestamps. · 154232bc
      Mathieu Othacehe authored
      src/cuirass/base.scm (fetch-input): Add the commit timestamp to the returned
      association list,
      (process-specs): Pass a timestamp taken at procedure start and another one
      taken after inputs are fetched to "db-add-evaluation" procedure. Once the
      evaluation is over, call "db-set-evaluation-time" to save the evaluation
      completion time.
      src/cuirass/database.scm (db-set-evaluation-time): New procedure,
      (db-add-checkout): Handle the "timestamp" field,
      (db-add-evaluation): add "checkouttime" and "evaltime" arguments. Modify the
      associated SQL query accordingly.
      (db-get-builds): Use "Builds.timestamp" instead of "timestamp" as this field
      is also part of the Evaluations table.
      src/schema.sql (Checkouts): Add "timestamp" field,
      (Evaluations): add "timestamp", "checkouttime" and "evaltime" fields.
      src/sql/upgrade-9.sql: New file.
      tests/database.scm (sqlite-exec): Adapt Evaluations table insertions to include
      "timestamp", "checkouttime" and "evaltime" required fields.
      154232bc
  5. Sep 02, 2020
    • Mathieu Othacehe's avatar
      Fix /specifications route. · b135a02b
      Mathieu Othacehe authored
      Fixes <https://issues.guix.gnu.org/43163>.
      
      * src/cuirass/http.scm (specification->json-object): New procedure,
      (url-handler): use it for "/specifications" route to convert specification
      objects into a representation suitable for json->scm.
      * tests/http.scm ("/specifications"): Test the above route.
      b135a02b
  6. Aug 25, 2020
  7. Aug 05, 2020
    • Mathieu Othacehe's avatar
      web: server: Remove with-ignored-disconnects. · 1bcccbab
      Mathieu Othacehe authored
      Use the pre-unwind-handler of a catch clause instead of nesting
      with-throw-handler inside a catch clause.
      
      * src/web/server/fiberized.scm (with-ignored-disconnects): Remove it,
      (client-loop): replace "with-ignored-disconnects" with a catch clause.
      1bcccbab
  8. Aug 04, 2020
    • Mathieu Othacehe's avatar
      web: server: Ignore all client disconnects. · 0abf1920
      Mathieu Othacehe authored
      EPIPE and ECONNRESET errors are already ignored when thrown by "sendfile" and
      "put-bytevector" procedures. It turns out "peek-char" can also cause such
      errors. So ignore such errors within the whole procedure.
      
      * src/web/server/fiberized.scm (client-loop): Wrap the whole procedure inside
      "with-ignored-disconnects" instead of wrapping individually "sendfile" and
      "put-bytevector" calls.
      0abf1920
  9. Aug 03, 2020
  10. Aug 02, 2020
    • Mathieu Othacehe's avatar
      http: Handle wrong build number. · 76968292
      Mathieu Othacehe authored
      The request "/build/1234)" causes a select query on the whole Builds table,
      because failed "string->number" conversion is not handled.
      
      * src/cuirass/http.scm (url-handler): Handle erroneous id -> number conversion
      on "/build/id" route.
      76968292
  11. Aug 01, 2020
    • Mathieu Othacehe's avatar
      database: Warn if the worker is busy for more than 5 seconds. · 153b49c9
      Mathieu Othacehe authored
      * src/cuirass/utils.scm (with-operation, get-message-with-timeout): New
      procedures,
      (call-with-worker-thread): add timeout and timeout-proc arguments.
      * src/cuirass/database.scm (with-db-worker-thread): Pass a 5 seconds timeout
      to call-with-worker-thread, and print a debug message on timeout expiration.
      153b49c9
  12. Jul 31, 2020
  13. Jul 30, 2020
    • Mathieu Othacehe's avatar
      web: server: Handle client disconnection. · 0955a11a
      Mathieu Othacehe authored
      * src/web/server/fiberized.scm (client-loop): Catch EPIPE and ECONNRESET
      errors than can be thrown if the client disconnects prematurely.
      0955a11a
    • Mathieu Othacehe's avatar
      utils: Do not block the calling fiber. · 6ad9c602
      Mathieu Othacehe authored
      Setting current-fiber to #f in %non-blocking will prevent put-message in the
      new thread to try suspending itself, but will also cause the same behavior on
      get-message, which is not desired.
      
      * src/cuirass/utils.scm (%non-blocking): Reduce the scope of current-fiber
      parameter to the newly created thread.
      6ad9c602
  14. Jul 29, 2020
  15. Jul 26, 2020
    • Mathieu Othacehe's avatar
      templates: Handle missing input case. · f71f026a
      Mathieu Othacehe authored
      It happens that some left-over checkout entries refer to removed inputs. In
      that case, input will be #f, causing commit-hyperlink to fail with the
      following error message:
      
      In cuirass/http.scm:
         475:25  9 (url-handler _ _)
          193:3  8 (evaluation-html-page ((#:id . 5103) (# . 0) (# . 39) ?) ?)
      In cuirass/templates.scm:
         612:14  7 (evaluation-build-table _ #:checkouts _ #:inputs _ # _ # ?)
      In srfi/srfi-1.scm:
         586:17  6 (map1 (((#:commit . "3a3e9f2bb586e79a7931163f0191d?") ?)))
      In cuirass/templates.scm:
         621:39  5 (_ _)
         584:15  4 (commit-hyperlink #f "3a3e9f2bb586e79a7931163f0191df615?")
      In web/uri.scm:
         308:23  3 (string->uri _)
         278:14  2 (string->uri-reference _)
      In unknown file:
                 1 (regexp-exec #<regexp 7f3a76c05980> #f #<undefined> #<u?>)
      In ice-9/boot-9.scm:
        1669:16  0 (raise-exception _ #:continuable? _)
      In procedure regexp-exec: Wrong type argument in position 2 (expecting string): #f
      
      * src/cuirass/templates.scm (evaluation-build-table): Do not call
      "commit-hyperlink" if the matching input could not be found.
      f71f026a
  16. Jul 25, 2020
    • Mathieu Othacehe's avatar
      Fix spec reading when restarting builds. · 17395e85
      Mathieu Othacehe authored
      When "spawn-builds" is called to restart builds, the spec is not known,
      preventing build products from being created as reported here:
      
      https://issues.guix.gnu.org/42523
      
      Fix this issue by reading the specification in database in
      "set-build-successful!" procedure.
      
      * src/cuirass/database.scm (db-get-specification): New exported procedure,
      (db-get-specifications): add an optional name argument.
      * tests/database.scm (db-get-specification): Add a corresponding test-case.
      * src/cuirass/base.scm (set-build-successful!): Remove spec argument and read
      it directly from database instead,
      (update-build-statuses!): also remove spec argument, adapt
      set-build-successful! call accordingly,
      (spawn-builds): remove spec argument and adapt handle-build-event and
      update-build-statuses! calls accordingly,
      (handle-build-event): remove spec argument, adapt
      set-build-successful! call accordingly,
      (build-packages): remove spec argument, adapt spawn-builds call accordingly,
      (process-specs): adapt build-packages call.
      17395e85
  17. Jul 03, 2020
    • Mathieu Othacehe's avatar
      navbar: Fix typo. · d11ce40a
      Mathieu Othacehe authored
      * src/cuirass/templates.scm (html-page): Turn "Latest builds" into "Running
      builds".
      d11ce40a
    • Mathieu Othacehe's avatar
      Add "latest builds" support. · 136a8295
      Mathieu Othacehe authored
      Add a "status" dropdown menu in the navigation bar. For now this menu only
      contains one item, a link to the "latest builds" page at "/status" location.
      
      * src/cuirass/database.scm (db-get-builds): Add support for 'started status.
      * src/cuirass/http.scm (url-handler): Add "/status" route.
      * src/cuirass/templates.scm (running-builds-table): New procedure,
      (html-page): add a dropdown menu containing one item, a link to "/status"
      route defined above.
      * src/static/css/cuirass.css: Add new class to allow bootstrap dropdown menus
      to work without javascript plugin.
      136a8295
  18. Jun 30, 2020
  19. Jun 29, 2020
    • Mathieu Othacehe's avatar
      Factorize build products creation. · 4dd9664b
      Mathieu Othacehe authored
      Make sure that build products are also created when a batch of derivations
      finishes, and not only when single build success events are received.
      
      Factorize build status update to success and build products creation into a
      single procedure.
      
      * src/cuirass/base.scm (set-build-successful!): New procedure,
      (update-build-statuses!): call it here,
      (handle-build-event): and here.
      4dd9664b
  20. Jun 26, 2020
    • Mathieu Othacehe's avatar
      Check for derivation before creating build products. · 91204db3
      Mathieu Othacehe authored
      It happens that we receive build succeeded notifications for derivations that
      are not stored in the Builds table. In that case, do not try to create build
      products.
      
      * src/cuirass/base.scm (handle-build-event): Check if the derivation is
      registered in the Builds table.
      91204db3
  21. Jun 23, 2020
    • Mathieu Othacehe's avatar
      http: Display gzipped log files in the browser. · 300f6253
      Mathieu Othacehe authored
      This is a follow-up of 2280ae18. The gzipped
      log files are supposed to be displayed directly in the browser and not
      downloaded. Set "Content-Disposition" header to "inline" to ensure that.
      
      * src/cuirass/http.scm (respond-gzipped-file): Set to "Content-Disposition" to
      "inline".
      300f6253
  22. Jun 22, 2020
    • Mathieu Othacehe's avatar
      Create build products as soon as the build succeeded. · 10b16ec0
      Mathieu Othacehe authored
      When searching for successful builds in Cuirass, it is expected that the build
      products are already available. Hence, make sure that build products are
      computed before the build is marked as successful.
      
      * src/cuirass/base.scm (spawn-builds): Add a spec argument,
      (handle-build-event): ditto, and call create-build-outputs when the
      build-succeeded event is received,
      (create-build-outputs): take a single build argument instead of a builds list
      and adapt accordingly,
      (build-packages): pass spec argument to spawn-builds and remove
      create-build-outputs call.
      10b16ec0
  23. Jun 21, 2020
  24. Jun 15, 2020
Loading