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 06, 2020
    • 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
  2. 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
  3. Aug 25, 2020
  4. 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
  5. 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
  6. Aug 03, 2020
  7. 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
  8. 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
  9. Jul 31, 2020
  10. 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
  11. Jul 29, 2020
  12. 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
  13. 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
  14. 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
  15. Jun 30, 2020
  16. 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
  17. 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
  18. 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
  19. 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
  20. Jun 21, 2020
  21. Jun 15, 2020
  22. Jun 14, 2020
  23. Jun 13, 2020
    • Christopher Baines's avatar
      Add missing sql upgrade-8.sql file. · 76ec2967
      Christopher Baines authored
      * Makefile.am (dist_sql_DATA): Add src/sql/upgrade-8.sql.
      76ec2967
    • Christopher Baines's avatar
      sql: Add a couple of indexes. · 7f71d9b7
      Christopher Baines authored
      Remove the Builds_index from the schema, as it would have been removed in
      error by the upgrade-6 upgrade.  Add a specific index on the Builds status
      field, as this helps with db-get-builds queries, and add an index on the
      Outputs derivation field, as this helps with the db-get-outputs part of
      db-get-builds.
      
      * src/sql/upgrade-8.sql: New file.
      * src/schema.sql: Update accordingly.
      7f71d9b7
  24. Jun 10, 2020
    • Mathieu Othacehe's avatar
      cuirass: Use sendfiles instead of raw copies. · 2280ae18
      Mathieu Othacehe authored
      * src/cuirass/http.scm (respond-file): Send the file name as 'x-raw-file
      header argument, instead of the raw file content,
      (respond-gzipped-file): ditto. Also set 'content-disposition header.
      * src/web/server/fiberized.scm (strip-headers, with-content-length): New procedures,
      (client-loop): Check if 'x-raw-file is set. If it's the case, use sendfiles to
      send the given file. Otherwise, keep the existing behaviour and send directly
      the received bytevector.
      2280ae18
    • Mathieu Othacehe's avatar
      Add support for build products downloading. · f44618fc
      Mathieu Othacehe authored
      * src/sql/upgrade-7.sql: New file.
      * Makefile.am: Add it.
      * src/cuirass/base.scm (create-build-outputs): New procedure,
      (build-packages): call it,
      (process-spec): add the new spec argument and pass it to create-build-outputs.
      * src/cuirass/database.scm (db-add-build-product, db-get-build-product-path,
      db-get-build-products): New exported procedures.
      * src/cuirass/http.scm (respond-static-file): Move file sending to ...
      (respond-file): ... this new procedure,
      (url-handler): add a new "download/<id>" route, serving the requested file
      with the new respond-file procedure. Also gather build products and pass them
      to "build-details" for "build/<id>/details" route.
      * src/cuirass/templates.scm (build-details): Honor the new "products" argument
      to display all the build products associated to the given build.
      * src/schema.sql (BuildProducts): New table,
      (Specifications)[build_outputs]: new field.
      * tests/database.scm: Add empty build-outputs spec.
      * tests/http.scm: Ditto.
      * examples/guix-jobs.scm: Ditto.
      * examples/hello-git.scm: Ditto.
      * examples/hello-singleton.scm: Ditto.
      * examples/hello-subset.scm: Ditto.
      * examples/random.scm: Ditto.
      * doc/cuirass.texi (overview): Document it.
      f44618fc
    • Christopher Baines's avatar
      database: Begin tuning db-get-builds for performance. · 78986d96
      Christopher Baines authored
      This commit does several things, the big change is to try and construct a
      simpler query for SQLite. I'm not confident that SQLite's query planner can
      look past handling the NULL parameters, so I think it could be helpful to try
      and create a simpler query, both to avoid that problem if it exists, but also
      move the complexity in to Guile code, which I think is a bit more manageable.
      
      The way ordering is handled is also changed. Order is one of the filters,
      although it's not a filter, and some of the other filters also influenced the
      order. I think there are things still to fix/improve with the handling of
      ordering, but at least this commit just has the ordering happen once in the
      query.
      
      * src/cuirass/database.scm (filters->order): Remove procedure, inline in to
      db-get-builds.
      (db-get-builds): Change query generation in an attempt to make it easier to
      tune the queries for performance.
      78986d96
  25. May 25, 2020
    • Christopher Baines's avatar
      cuirass: Perform some database "optimization" at startup. · 9265949c
      Christopher Baines authored
      Add a "optimize" step that occurs when starting up the main Curiass
      process. Currently this does two things, but could be extended to do more.
      
      The "PRAGMA optimize;" command prompts SQLite to ANALYZE tables where that
      might help. The "PRAGMA wal_checkpoint(TRUNCATE);" command has SQLite process
      any unprocessed changes from the WAL file, then truncate it to 0 bytes. I've
      got no data to suggest this helps with performance, but I'm hoping that going
      from a large WAL file to a small one occasionally might be useful.
      
      * src/cuirass/database.scm (db-optimize): New procedure.
      * bin/cuirass.in (main): Run it.
      9265949c
    • Christopher Baines's avatar
      build-aux: Update for Guile 3. · 68a6912c
      Christopher Baines authored
      * build-aux/guix.scm (arguments): Change 2.2 to 3.0.
      (inputs): Change guile@2.2 to guile.
      68a6912c
Loading