This project is mirrored from https://git.savannah.gnu.org/git/guix/guix-cuirass.git/.
Pull mirroring updated .
- Jul 30, 2020
-
-
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.
-
- Jul 29, 2020
-
-
Mathieu Othacehe authored
* src/cuirass/http.scm (url-handler): Handle the error case on /download route.
-
- Jul 26, 2020
-
-
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.
-
- Jul 25, 2020
-
-
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.
-
- Jul 03, 2020
-
-
Mathieu Othacehe authored
* src/cuirass/templates.scm (html-page): Turn "Latest builds" into "Running builds".
-
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.
-
- Jun 30, 2020
-
-
Mathieu Othacehe authored
* src/cuirass/base.scm (create-build-outputs): Add a debug message.
-
Mathieu Othacehe authored
Ignore errors when trying to insert an already existing build product. * src/cuirass/database.scm (db-add-build-product): Ignore insertion errors.
-
- Jun 29, 2020
-
-
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.
-
- Jun 26, 2020
-
-
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.
-
- Jun 23, 2020
-
-
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".
-
- Jun 22, 2020
-
-
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.
-
- Jun 21, 2020
-
-
Mathieu Othacehe authored
* src/cuirass/http.scm (url-handler): Add "/search/latest" and "/search/latest/<product-type>" routes.
-
- Jun 15, 2020
-
-
Mathieu Othacehe authored
* src/cuirass/http.scm (build->hydra-build)[build-products]: New variable, added to "buildproducts" field. * tests/http.scm (build-query-result): Adapt accordingly.
-
- Jun 14, 2020
-
-
Mathieu Othacehe authored
* src/cuirass/templates.scm (build-details): Display build product type.
-
- Jun 13, 2020
-
-
Christopher Baines authored
* Makefile.am (dist_sql_DATA): Add src/sql/upgrade-8.sql.
-
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.
-
- Jun 10, 2020
-
-
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.
-
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.
-
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.
-
- May 25, 2020
-
-
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.
-
Christopher Baines authored
* build-aux/guix.scm (arguments): Change 2.2 to 3.0. (inputs): Change guile@2.2 to guile.
-
- Apr 17, 2020
-
-
Ludovic Courtès authored
* src/cuirass/templates.scm (%vcs-web-views): New variable. (commit-hyperlink): New procedure. (evaluation-build-table): Use it in the input/commit table.
-
Ludovic Courtès authored
* src/cuirass/database.scm (db-get-inputs, db-get-checkouts): Export. * src/cuirass/http.scm (evaluation-html-page): Pass #:checkouts and #:inputs to 'evaluation-build-table'. * src/cuirass/templates.scm (evaluation-build-table): Add #:checkouts and #:inputs. Emit a table with "Input" and "Commit" columns.
-
Ludovic Courtès authored
This is required on Guile 3 for 'current-processor-count'. * src/cuirass/database.scm: Use (ice-9 threads).
-
Ludovic Courtès authored
* src/cuirass/templates.scm (time->string): Remove ~z for old builds.
-
Ludovic Courtès authored
This is a followup to a1d353b1. Until now we'd never display the year. * src/cuirass/templates.scm (time->string): Check for (= year current).
-
- Apr 16, 2020
-
-
Ricardo Wurmus authored
* src/cuirass/templates.scm (html-page): Fix indentation.
-
Ricardo Wurmus authored
* src/static/css/cuirass.css: New file. * Makefile.am (dist_css_DATA): Add it. * src/cuirass/http.scm (%file-white-list): Add css/cuirass.css. * src/cuirass/templates.scm (search-form): Add search-hints div. (html-page): Load cuirass.css.
-
Ricardo Wurmus authored
* src/cuirass/database.scm (query->bind-arguments): Handle "status" query. (db-get-builds-by-search, db-get-builds-query-min, db-get-builds-query-max): Add status filter.
-
- Feb 24, 2020
-
-
Ludovic Courtès authored
* src/cuirass/http.scm (url-handler): Move inline code for ('GET "eval" id) to... (evaluation-html-page): ... here. New procedure. * src/cuirass/templates.scm (evaluation-build-table): New procedure.
-
Ludovic Courtès authored
* src/cuirass/templates.scm (build-details): Define 'evaluation'. Add "Evaluation" row with a link to EVALUATION.
-
Ludovic Courtès authored
* src/cuirass/database.scm (db-get-builds): Fetch 'Builds.evaluation' and return it as #:eval-id.
-
- Feb 06, 2020
-
-
Christopher Baines authored
Previously, if an error occurred, the worker fiber simply never sends a reply. In the case of HTTP requests to Cuirass, where an exception occurs when performing a database query, the fiber handling the request blocks as it never gets a response. I think that this has the potential to cause the process to hit file descriptor limits, as the connections are never responded to. This is fixed by responding with the details of the exception, and then throwing it within the fiber that made the call. * src/cuirass/utils.scm (make-worker-thread-channel): Catch exceptions when calling proc. (call-with-worker-thread): Handle receiving exceptions from the worker thread.
-
- Jan 26, 2020
-
-
Christopher Baines authored
The number of threads is copied from bin/cuirass.in. When you have at least two processors, this will allow database queries to be executed in parallel. With some crude testing using the Apache HTTP server benchmarking tool (ab from the httpd package), the max request latency does seem to drop when multiple threads are used, especially when the database queries are slow (I tested by adding usleep to the worker thread code). * src/cuirass/database.scm (with-database): Pass #:parallelism to make-worker-thread-channel.
-
Christopher Baines authored
This will allow running multiple threads, that all listen on the same channel, enabling processing multiple jobs at one time. * src/cuirass/utils.scm (make-worker-thread-channel): Add a #:parallelism argument, and create as many threads as the given parallelism.
-
Christopher Baines authored
While this is a generic method, and initializer function will give the flexibility required to create multiple worker threads for performing SQLite queries, each with it's own database connection (as a result of calling the initializer once for each thread). Without this change, they'd all have to use the same connection, which would not work. * src/cuirass/utils.scm (make-worker-thread-channel): Change procedure to take an initializer, rather than arguments directly. * src/cuirass/database.scm (with-database): Adjust to call make-worker-thread-channel with an initializer. * tests/database.scm (db-init): Change to use make-worker-thread-channel initializer. * tests/http.scm (db-init): Change to use make-worker-thread-channel initializer.
-
Christopher Baines authored
As far as I'm aware, it's necessary to use a separate thread for interacting with SQLite as one of the threads used for fibers will be blocked while the SQLite query is running. This doesn't mean all queries have to be executed one at a time though, providing the queries are executed outside the threads used by fibers, and a single connection isn't used in multiple threads. These changes start to move in this direction, first by just changing the terminology. * src/cuirass/base.scm (clear-build-queue, cancel-old-builds): Change with-db-critical-section to with-db-worker-thread. * src/cuirass/database.scm (with-db-critical-section): Rename syntax rule to with-db-worker-thread. (db-add-input, db-add-checkout, db-add-specification, db-remove-specification, db-get-inputs, db-get-specification, db-add-evaluation, db-set-evaluations-done, db-set-evaluation-done, db-add-derivation-output, db-add-build, db-update-build-status!, db-get-output, db-get-outputs, db-get-builds-by-search, db-get-builds, db-get-build derivation-or-id, db-add-event, db-get-events, db-delete-events-with-ids-<=-to, db-get-pending-derivations, db-get-checkouts, db-get-evaluations, db-get-evaluations-build-summary, db-get-evaluations-id-max, db-get-evaluation-summary, db-get-builds-query-min, db-get-builds-query-max, db-get-builds-min, db-get-builds-max, db-get-evaluation-specification): Change from using with-db-critical-section to with-db-worker-thread. (with-database): Change syntax rule to use make-worker-thread-channel, renaming from make-critical-section. * src/cuirass/utils.scm (%critical-section-args): Rename parameter to %worker-thread-args. (make-critical-section): Rename to make-worker-thread-channel, and adjust parameter and docstring. (call-with-critical-section): Rename to call-with-worker-thread and adjust parameter. (with-critical-section): Rename to with-worker-thread, and adjust to call call-with-worker-thread. * tests/database.scm (db-init): Use make-worker-thread-channel rather than make-critical-section. * tests/http.scm (db-init): Use make-worker-thread-channel rather than make-critical-section.
-
Christopher Baines authored
The internal rowid's are used for builds as you can request builds by using the rowid in the URL. The motivation here is to enable running VACUUM operations in SQLite, without risking the rowid's for Builds changing. It would be bad if they change, as they're used in the URL's for builds. * src/schema.sql (Builds): Add id column. * src/curiass/dataabse.scm (db-add-build): Change PRIMARYKEY constraint to UNIQUE constraint. * src/sql/upgrade-6.sql: New file. * Makefile.am (dist_sql_DATA): Add it.
-
- Jan 25, 2020
-
-
Christopher Baines authored
As it is unused from where db-add-input is called. * src/cuirass/database.scm (db-add-input): Don't call and return (last-insert-rowid).
-