# CI Rethink slides

## Background
* guix-forge is an independent general purpose project that powers our CI
* guix-forge is built on laminar
* CI jobs are just simple scripts
* scripts are written in G-expressions, but don't have to be

## So far
* purpose-written scripts that were executed in profiles with the necessary dependencies
* dependencies are from current Guix
* container had to be rebuilt to update dependencies
* jobs did not have access to high-level Guix features (package definitions, build systems, manifests, etc.)
* jobs only understood low-level features (profile paths, store paths, etc.)
* One advantage: job runs were fast

## What's new?
* jobs have access to the full expressive power of Guix
* project repositories are channels
* jobs pull from the channels and build all packages defined therein
* job script definitions now in package definitions from channels
* container need not be rebuilt each time dependencies change
* Perfect reproducibility: Make Fred's life easier
* One disadvantage: job runs will take a while

## Why now?
* Ludo's blog post “From development environments to continuous integration”
* realization that project repositories could be channels