Next: , Previous: , Up: Software Development   [Contents][Index]

7.5 Level 3: Setting Up Continuous Integration

The channel we defined above (see Level 2: The Repository as a Channel) becomes even more interesting once we set up continuous integration (CI). There are several ways to do that.

You can use one of the mainstream continuous integration tools, such as GitLab-CI. To do that, you need to make sure you run jobs in a Docker image or virtual machine that has Guix installed. If we were to do that in the case of Guile, we’d have a job that runs a shell command like this one:

guix build -L $PWD/.guix/modules guile@3.0.99-git

Doing this works great and has the advantage of being easy to achieve on your favorite CI platform.

That said, you’ll really get the most of it by using Cuirass, a CI tool designed for and tightly integrated with Guix. Using it is more work than using a hosted CI tool because you first need to set it up, but that setup phase is greatly simplified if you use its Guix System service (see Continuous Integration in GNU Guix Reference Manual). Going back to our example, we give Cuirass a spec file that goes like this:

;; Cuirass spec file to build all the packages of the ‘guile’ channel.
(list (specification
        (name "guile")
        (build '(channels guile))
         (append (list (channel
                         (name 'guile)
                         (url "")
                         (branch "main")))

It differs from what you’d do with other CI tools in two important ways:

From a developer’s viewpoint, the end result is this status page listing evaluations: each evaluation is a combination of commits of the guix and guile channels providing a number of jobs—one job per package defined in guile-package.scm times the number of target architectures.

As for substitutes, they come for free! As an example, since our guile jobset is built on, which runs guix publish (see Invoking guix publish in GNU Guix Reference Manual) in addition to Cuirass, one automatically gets substitutes for guile builds from; no additional work is needed for that.

Next: Bonus: Build manifest, Previous: Bonus: Package Variants, Up: Software Development   [Contents][Index]