guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

branch master updated: blog: Add draft "Cuirass 1.0 released" article.


From: Mathieu Othacehe
Subject: branch master updated: blog: Add draft "Cuirass 1.0 released" article.
Date: Wed, 24 Mar 2021 13:59:42 -0400

This is an automated email from the git hooks/post-receive script.

mothacehe pushed a commit to branch master
in repository guix-artwork.

The following commit(s) were added to refs/heads/master by this push:
     new 13886bf  blog: Add draft "Cuirass 1.0 released" article.
13886bf is described below

commit 13886bf6f85e8089a111a1261ac8cfc180290b34
Author: Mathieu Othacehe <othacehe@gnu.org>
AuthorDate: Wed Mar 24 18:57:20 2021 +0100

    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.
---
 website/apps/base/templates/cuirass.scm            |   2 +-
 website/posts/cuirass-1.0.md                       | 261 +++++++++++++++++++++
 website/static/blog/img/cuirass-build-page.png     | Bin 0 -> 106335 bytes
 website/static/blog/img/cuirass-idle-chart.png     | Bin 0 -> 40946 bytes
 website/static/blog/img/cuirass-machine-status.png | Bin 0 -> 102970 bytes
 website/static/blog/img/cuirass-metrics.png        | Bin 0 -> 81589 bytes
 .../static/blog/img/cuirass-specification-form.png | Bin 0 -> 49399 bytes
 website/static/blog/img/cuirass-workers-status.png | Bin 0 -> 103830 bytes
 8 files changed, 262 insertions(+), 1 deletion(-)

diff --git a/website/apps/base/templates/cuirass.scm 
b/website/apps/base/templates/cuirass.scm
index 82d1141..50060d7 100644
--- a/website/apps/base/templates/cuirass.scm
+++ b/website/apps/base/templates/cuirass.scm
@@ -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)))
diff --git a/website/posts/cuirass-1.0.md b/website/posts/cuirass-1.0.md
new file mode 100644
index 0000000..5c5ce1c
--- /dev/null
+++ b/website/posts/cuirass-1.0.md
@@ -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.
diff --git a/website/static/blog/img/cuirass-build-page.png 
b/website/static/blog/img/cuirass-build-page.png
new file mode 100644
index 0000000..0791c12
Binary files /dev/null and b/website/static/blog/img/cuirass-build-page.png 
differ
diff --git a/website/static/blog/img/cuirass-idle-chart.png 
b/website/static/blog/img/cuirass-idle-chart.png
new file mode 100644
index 0000000..3c0bfea
Binary files /dev/null and b/website/static/blog/img/cuirass-idle-chart.png 
differ
diff --git a/website/static/blog/img/cuirass-machine-status.png 
b/website/static/blog/img/cuirass-machine-status.png
new file mode 100644
index 0000000..3fc2f85
Binary files /dev/null and b/website/static/blog/img/cuirass-machine-status.png 
differ
diff --git a/website/static/blog/img/cuirass-metrics.png 
b/website/static/blog/img/cuirass-metrics.png
new file mode 100644
index 0000000..fa7b492
Binary files /dev/null and b/website/static/blog/img/cuirass-metrics.png differ
diff --git a/website/static/blog/img/cuirass-specification-form.png 
b/website/static/blog/img/cuirass-specification-form.png
new file mode 100644
index 0000000..65aca0a
Binary files /dev/null and 
b/website/static/blog/img/cuirass-specification-form.png differ
diff --git a/website/static/blog/img/cuirass-workers-status.png 
b/website/static/blog/img/cuirass-workers-status.png
new file mode 100644
index 0000000..9dc23ab
Binary files /dev/null and b/website/static/blog/img/cuirass-workers-status.png 
differ



reply via email to

[Prev in Thread] Current Thread [Next in Thread]