* src/cuirass/database.scm (db-get-jobs-history): New procedure.
* src/cuirass/http.scm (jobs-history->json-object): New procedure.
(url-handler): New "/api/jobs/history" route.
* tests/database.scm ("db-get-jobs-history"): New test.
* src/cuirass/database.scm (db-get-evaluations-absolute-summary): New
procedure.
* src/cuirass/http.scm (url-handler): Pass the evaluation absolute summary to
"evaluation-info-table".
* src/cuirass/templates.scm (evaluation-info-table): Adapt it.
* src/static/css/cuirass.css (job-abs): New section.
* tests/database.scm ("db-get-evaluations-absolute-summary"): New test.
* src/sql/upgrade-4.sql: New file.
* Makefile.am (dist_sql_DATA): Add it.
* src/schema.sql (Specifications)[period]: New field.
* src/cuirass/base.scm (process-specs): Honor the specification period.
* src/cuirass/database.scm (db-get-time-since-previous-build): Rename it into ...
(db-get-time-since-previous-eval): ... this new procedure.
* src/cuirass/specification.scm (<specification>)[period]: New field.
(specification->sexp, sexp->specification): Adapt accordingly.
* src/cuirass/templates.scm (specification-edit): Ditto.
* tests/database.scm ("db-get-time-since-previous-build"): Remame it into ...
("db-get-time-since-previous-eval"): ... this new procedure.
* src/cuirass/database.scm (db-get-specifications-summary): Return the latest
evaluation.
* src/cuirass/templates.scm (specifications-table): Add a monitor and a toggle
button.
Join Build and Jobs tables using the build id instead of the build derivation
to speed queries.
* src/sql/upgrade-3.sql: New file.
* Makefile.am (dist_sql_DATA): Add it.
* src/schema.sql (Jobs)[derivation]: Replace it by ...
[build]: this new column.
* src/cuirass/database.scm (db-add-job, db-get-jobs): Adapt them.
Different derivations may result in a same build output. If a job registers a
derivation D2 with the output O1, Cuirass may already have processed another
derivation D1 with the same O1 output.
In that case, the new job must point to the D1 derivation and not the D2
derivation, for which no build will be triggered.
* src/cuirass/database.scm (db-add-job): Fix it.
* tests/database.scm ("db-register-builds same-outputs", "db-get-jobs
same-outputs"): New tests.
* src/static/js/d3.v6.min.js: New file.
* Makefile.am (dist_js_DATA): Add it.
* src/cuirass/http.scm (%file-white-list): Add it.
* src/cuirass/templates.scm (html-page): Add it.
Each evaluation registration produces a list of new jobs. Until now, only the
jobs which build outputs were not stored in the "Outputs" table were added to
the "Builds" table.
It means that Cuirass looses track of the job list associated to a given
evaluation. This is problematic to provide the overall build status of an
evaluation or to find the evaluation providing the best build coverage.
Add a new "Jobs" table that stores the job list of each evaluation. Also add
a new "/api/jobs" API to consult it.
* src/sql/upgrade-2.sql: New file.
* Makefile.am (dist_sql_DATA): Add it.
* src/schema.sql (Jobs): New table.
* src/cuirass/database.scm (db-add-job, db-get-jobs): New procedures.
(db-register-builds): Call db-add-job.
* src/cuirass/http.scm (url-handler): New "/api/jobs" route.
* tests/database.scm ("db-get-jobs", "db-get-jobs names"): New tests.
* doc/cuirass.texi (Web API, Database): Document it.
* src/cuirass/http (respond-gzipped-file): Rename it to ...
(respond-compressed-file): ... this new procedure. Add support for bzip2
compressed files.
(url-handler): Adapt it.
When a new evaluation is triggered by a single channel update, the
matching specification can have other channels that are not updated. In that
case, "db-get-checkouts" will only return the checkout corresponding to the
channel update.
This cause "channel-instances->profile" to fail this way:
In guix/channels.scm:
911:32 3 (channel-instances->derivation _)
871:36 2 (channel-instances->manifest (#<<channel-instance> cha?>))
759:6 1 (channel-instance-derivations (#<<channel-instance> ch?>))
In ice-9/boot-9.scm:
1669:16 0 (raise-exception _ #:continuable? _)
ice-9/boot-9.scm:1669:16: In procedure raise-exception:
ERROR:
1. &message: "'guix' channel is lacking"
2. &fix-hint: "Make sure your list of channels\ncontains one channel named @code{guix} providing the core of Guix."
3. &error-location: #<<location> file: "guix/channels.scm" line: 557 column: 18>
Introduce a db-get-latest-checkout procedure that returns the last checkout of
a given channel. Use it to request the checkouts of all the channels before
creating the profile.
* src/cuirass/database.scm (db-get-latest-checkout): New procedure.
* tests/database.scm ("db-get-latest-checkout"): New test.
* src/cuirass/scripts/evaluate.scm (latest-checkouts): New procedure.
(cuirass-evaluate): Use it.