We currently deploy production by hand. Not only is this more work, it is also prone to errors. Instead, we want to deploy production genenetwork in a Guix system container. This will give us strong reproducibility and enable us to version control the configuration. If a machine fails, setting up production on a new machine will be effortless.
This new system container may not immediately replace our current production, it is still worth having as a model for a robust production deployment.
Our CI system runs on complex G-expression hacks that pull in dependencies and sources from the "current Guix". We want to be more like cuirass, that is, we want to use an inferior Guix process running on a Guix profile specified by a list of channels. This will significantly reduce the complexity of our G-expressions and avoid duplication of some package building code.
The first step of this process is to turn our project repos (genenetwork2 and genenetwork3) into Guix channels. This is described in the following Guix blog post, specifically under "Level 2: The repository as a channel".
We need a CI job to run on every commit to guix-bioinformatics and check if guix pull still succeeds. It would be doubly nice to build every package defined in the guix-bioinformatics channel and offer substitutes. This would make our CI system more or less feature-compatible with cuirass.
Since our repositories are now Guix channels too, we can rewrite our existing genenetwork2/genenetwork3 CI jobs to be built and tested just like guix-bioinformatics.
The code we develop in this section will eventually move to guix-forge. Arun can handle this section.
Our programmers work with the CD to ensure that all their code works correctly. When this code is deployed to production, there should be no surprises; everything that worked on CD should work on production. So, it is preferable that CD and production share as much Guix configuration code as possible.
It is not yet clear how best to do this. But, things should clear up as we work out the earlier sections.
Arun gave a short presentation about this CI rethink in a GNSoC meeting. The slides are at