blog: Add draft "Cuirass 1.0 released" article.

* website/posts/cuirass-1.0.md: New file.
* website/static/blog/img/cuirass-build-page.png: New file.
* website/static/blog/img/cuirass-idle-chart.png: New file.
* website/static/blog/img/cuirass-machine-status.png: New file.
* website/static/blog/img/cuirass-metrics.png: New file.
* website/static/blog/img/cuirass-specification-form.png: New file.
* website/static/blog/img/cuirass-workers-status.png: New file.
* website/apps/base/templates/cuirass.scm (cuirass-p): Adapt release date.
This commit is contained in:
Mathieu Othacehe 2021-03-24 18:57:20 +01:00
parent d912db333b
commit 13886bf6f8
No known key found for this signature in database
GPG Key ID: 8354763531769CA6
8 changed files with 262 additions and 1 deletions

View File

@ -62,7 +62,7 @@ to monitor the build results."))
"."))
,(G_ `(h3 "Releases"))
(ul
(li "2021-03-23 — 1.0.0 — "
(li "2021-03-29 — 1.0.0 — "
(a (@ (href
,(guix-url "cuirass/releases/cuirass-1.0.0.tar.gz"
#:localize #f)))

View File

@ -0,0 +1,261 @@
title: Cuirass 1.0 released
date: 2021-03-29 13:00
author: Mathieu Othacehe
tags: Cuirass, Releases, CI
---
We are pleased to announce the release of Cuirass version 1.0, after almost
five years of development and around 700 commits from 14 contributors.
Cuirass is the GNU Guix continuous integration software. It's a general
purpose build automation server written in GNU Guile that checks out sources
from VCS repositories, execute build jobs and store build results in a
database. Cuirass also provides a web interface to monitor the build results.
Cuirass is running on the [GNU Guix build farm](https://ci.guix.gnu.org).
Since January, the project is funded through the NGI0 PET Fund, a fund
established by NLnet with financial support from the European Commission's
Next Generation, as explained
[here](https://othacehe.org/gnu-guix-continuous-integration---nlnet-grant.html).
Thanks to this support, we were able to speed up the developments and finally
propose a first release of this software. Many things have changed in Cuirass
over the years and now is the perfect time to give it a try.
Here are the highlights of this new release.
### Database
Let's start with the database that is the core of Cuirass. Until recently
Cuirass was using an SQLite3 database. This technological choice proved to be
quite challenging, and we had some troubles to make it scale as discussed
[here](https://lists.gnu.org/archive/html/guix-devel/2021-01/msg00127.html).
Cuirass now uses a PostgreSQL database, bringing the performance issues to an
end while providing much more stability. Almost all the SQL queries are
covered by test cases.
### Specifications
In order to build some derivations, Cuirass first needs to be told what to
build. Originally, an obscure association list describing the requested build
jobs had to be passed to Cuirass.
Cuirass now operates on specification records that are described
[here](http://guix.gnu.org/cuirass/manual/html_node/Specifications.html#Specifications).
This input format is much more easy to understand for the user. It relies on
Guix [channels](https://guix.gnu.org/manual/en/html_node/Channels.html), which
are well-adopted.
Here are a few different specifications examples.
This will build all the packages of the `my-channel` channel.
```scheme
(list (specification
(name "my-channel")
(build '(channels my-channel))
(channels
(cons (channel
(name 'my-channel)
(url "https://my-channel.git"))
%default-channels))))
```
This will build the `linux-libre` package on the default Guix channel master
branch.
```scheme
(list (specification
(name "my-linux")
(build '(packages "linux-libre"))))
```
Finally, this will build the packages declared in the `my-manifest` file of
the `my-channel` channel, against the `core-updates` branch of the default
Guix channel.
```scheme
(list (specification
(name "my-core-manifest")
(build '(manifests "my-manifest"))
(channels
(list (channel
(name 'my-channel)
(url "https://my-channel.git"))
(channel
(name 'guix)
(url %default-channel-url)
(branch "core-updates"))))))
```
For people willing to spare some parens, a specification edition form has been
implemented in the Web interface.
![Specification creation](/static/blog/img/cuirass-specification-form.png)
The Cuirass home page has also been updated to reflect this new input format.
### Notifications
This feature was rightfully requested many times as this is a basic of any
respectable CI system. Cuirass can now report failing and fixed builds in
three different ways:
- By email on the
[guix-ci@gnu.org](https://lists.gnu.org/mailman/listinfo/guix-ci) mailing
list.
- Using Mastodon thanks to the
[Guile-Mastodon](https://framagit.org/prouby/guile-mastodon) bindings.
- Using the RSS feed available [here](http://ci.guix.gnu.org/events/rss/).
### New build mode
The traditional way of building things in Cuirass is to send batches of
derivations that need to be built to the local Guix daemon. The daemon can
possibly offload those builds to other machines. While it's probably the most
sensible way to proceed, this solution doesn't scale well and suffers from
some limitations.
- There's no way to influence the scheduling decisions of the Guix daemon.
It's quite delicate to prioritize builds or build machines from Cuirass.
- The Guix daemon doesn't offer much feedback. Cuirass needs to parse the
debug output of the daemon to detect build events such as start and stop
events.
- Using a unique daemon means using unique build parameters such as build
timeout and max-silent-time properties. Some packages have different build
properties and Cuirass cannot honor them.
- When relying heavily on offloading, the Guix daemon scales badly. Builds
that often take a longer time to complete, such as emulated builds can
saturate the build queue.
For all those reasons, using a new build mode seemed like a necessary evil.
The rationale behind this new build mode is to have Cuirass communicate
directly with the Guix daemons of all the offloading machines. Instead of
dealing with a single, local, Guix daemon, Cuirass can now interact with
several Guix daemons on remote machines.
The build jobs are not submitted to the local Guix daemon. Instead, a remote
server dispatches build requests to the connect remote workers, according to
the build priorities.
The remote server and the connected workers communicate using ZMQ over
TCP. The workers are able to discover the remote server using Avahi.
The built items are exchanged as
[substitutes](https://guix.gnu.org/manual/en/html_node/Substitutes.html) by
spawning Guix publish servers both on the remote server and on each connected
remote worker.
It seems more complex, and it is indeed more complex. However, the
performance gains are real.
![Build machines CPU idle percentage](/static/blog/img/cuirass-idle-chart.png)
This chart shows the CPU idle time percentage of the GNU Guix build farm
machines. The introduction of the remote building mechanism around January
2021 results in a much higher activity of the connected machines.
This remote build mode also unlocked new features such as:
- The live streaming of build logs from remote workers to Cuirass so that they
can be browsed in real time through the web interface.
- The support for timeout and max-silent-time package properties.
- The support for specification and package priorities.
- The new "Workers status" and "Machine status" pages allowing to closely
monitor remote machine activities.
The workers status page accessible [here](http://ci.guix.gnu.org/workers).
![Workers status page](/static/blog/img/cuirass-workers-status.png)
The machine status page accessible [here](http://ci.guix.gnu.org/machine/hydra-guix-101).
![Machine status page](/static/blog/img/cuirass-machine-status.png)
### Web interface
Besides the features related to the specification record introduction, several
improvements were brought to the Web interface.
Some administration actions that previously required manual SQL intervention
can now be performed directly through the Web interface.
Any Cuirass administrator can now:
- Add a specification
- Edit a specification
- Delete a specification
- Cancel an evaluation pending builds
- Retry all builds of an evaluation
- Retry an evaluation
- Restart a build
The build page was also improved to display the build weather and a build
history.
![Build page](/static/blog/img/cuirass-build-page.png)
Several issues were also fixed such as the broken pagination and the negative
build duration.
### Metrics
Cuirass computes periodically various metrics such as:
- Average evaluation duration per specification (seconds).
- Difference between newly added derivations and built derivations per day.
- Average time required for an evaluation to start its builds.
- Evaluation completion speed.
- Sum of currently pending builds.
- Builds count per machine during the last day.
- Percentage of failed evaluations.
![Metrics](/static/blog/img/cuirass-metrics.png)
Those metrics can be browsed [here](http://ci.guix.gnu.org/metrics).
### Documentation
The Cuirass documentation is now updated to reflect those changes and can be
browsed [online](http://guix.gnu.org/cuirass/manual/).
The release itself is available on Cuirass [home
page](https://guix.gnu.org/en/cuirass/).
The Guix's Cuirass package as well as the Cuirass
[service](https://guix.gnu.org/manual/devel/en/guix.html#Continuous-Integration) were also updated.
### Going further
The NLNet grant will allow me to keep working on Cuirass for a couple more
months. This will hopefully help us to:
- Connect more armhf/aarch64 machines to the build farm.
- Fix the build dependencies [issue](https://issues.guix.gnu.org/46402)
- Add a substitutes availability API and its counterpart in GNU Guix to
improve the the `channel-with-substitute-available`
[procedure](https://guix.gnu.org/manual/devel/en/guix.html#Channels-with-Substitutes)
to take a manifest argument. This way, the `guix pull` command can be
instructed to only update to Guix revisions where the manifest packages are
all substitutable.
This release is an important milestone as, combined with the recent substitute
[improvements](https://guix.gnu.org/blog/2021/faster-substitutes), the whole
substitute availability & download speed situation is now largely mitigated,
at least on Intel architectures.
Don't hesitate to run your own Cuirass server to build stuff ahead of the GNU
Guix build farm, or to build your custom channels. Also feel free to share
the features you would like to see in the next Cuirass release.

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB