This month in Radicle CI, 2026-01
This is a monthly newsletter about the current state of Radicle CI, what has happened recently, and near future plans.
Current status
Radicle CI is in production use. There are several CI nodes, and Lars runs a public one for open source Rust projects at https://callisto.liw.fi/.
After the Ambient release in December, the Ambient adapter for Radicle CI needs a release to allow the new actions to work. CI plans that don't use the new actions work fine.
Links
- Radicle home page
- Radicle CI home page, unofficial
- Radicle CI broker repository
- Radicle CI Ambient adapter repository
- Radicle CI integrations documentation
Office hours
Lars holds a weekly office hour for Radicle CI. Alternating weeks at 08 or 17 UTC at https://meet.ffmuc.net/radicleciofficehour (it's Jitsi and you only need a web browser and mic). Each office hour is announce on
#radicle-cion the Radicle Zulip, and on Lars' fediverse account. The office hour is a place where anyone can show up and ask questions about Radicle CI or Radicle or anything related to them. Sometimes Lars or someone else will have a demo or a short talk.The next ones are January 23 at 17:00 UTC, and January 30 and 08:00 UTC.
The past month
The end of year holidays happened, and fairly little has happened in Radicle CI development over the past month.
Radicle CI broker version 0.24.0 on 2025-12-09
From NEWS.md:
The way
ciblooks up job COBs for specific commits has been optimized to use a cache. This speeds things up a lot in some circumstances: in one benchmark, creating 100 new runs for a commit went down from 600 seconds to 40.The log messages for a CI run, at the INFO level, are now easier to follow without being familiar with the code base. Especially the decision on whether an event filter should trigger CI to run is logged as one message and contains the whole decision tree as JSON.
When it loads the configuration file,
cibnow checks that a default adapter is set, if thefiltersfield is used. Previously a missing default adapter was only noticed later when starting a CI run. The new behavior exposes problems much earlier.
Ambient CI version 0.11.0 on 2025-12-20
From NEWS.md:
Breaking changes
The Rust Cargo related actions now use the
cargo-targetsubdirectory in the workspace cache directory (/ci/cache/cargo-target). This is invisible to all common uses of Rust in Ambient projects, but allows dividing the cache between different kinds of use in the future. This does mean that existing caches become obsolete and should be deleted. That makes this technically a breaking change.Ambient now checks for common problems when it loads the projects file. This is know as "the linter". Currently it checks that an
rsynctarget has been configured if anrsyncorrsync2action is used, that each file downloaded by ahttp_getaction has a unique filename, and that all shell script snippets inshellactions are OK according to theshellcheckprogram.Linting can be prevented by setting
linttofalsein the configuration. This may be necessary if, say, one of the checks is wrong.This is a breaking change because most shell script snippets will be found wanting.
The pre- and post-plan now only allow actions that are actually meant for them. Previously both allowed the same set of actions. However, actions like
cargo_fetchdon't really make sense for post-plan. Now the separation is more strict.This is technically a breaking change, but hopefully doesn't actually break anything for anyone. If you have a legitimate use for a pre- or post-plan action that is now not allowed, let us know.
Problems fixed
Some portability fixes for NixOS by invoking the Bash shell by name instead of path. NixOS does not put Bash at
/bin/bash, so using a full path doesn't work reliably. Using the name should work anywhere.Ambient now checks, when loading the projects file, that the source location for a project is a directory (following symlinks) and gives an error if it is not. This means the problem is found when Ambient starts and not much later when it starts running CI for a specific project. If there are many projects, that might be hours later.
New features added
The workspace in the VM is now
/ci. The old name/workspacewill work indefinitely. The new name is shorter and arguably clearer. The workspace is set up byambient-execute-planand so this change does not affect any VM images.There is now a user guide for Ambient, published by CI at https://doc.liw.fi/ambient-ci/userguide.html and included in the
debpackage at/usr/share/doc/ambient-ci/userguide.html. The user guide contains a description of each action that a project CI plan can use. The guide is woefully lacking, but it's easier to add things to something that exists than starting from an empty directory.The Ambient subplot document is formatted and published at https://doc.liw.fi/ambient-ci/ambient.html. It may be useful for checking how a specific aspect of Ambient is used. The subplot is the test suite that verifies most aspects. That means it's continually run and does not easily get out of date.
New action
setenvallows setting environment variables for later actions. Using theshellaction does not work for this, because each shell forgets any changes to its environment variables when it terminates.
- action: setenv
set:
foo: bar
New plan action
deb2and post-plan actionsdput2andrsync2use subdirectoriesdebianandrsyncin the artifacts directory. This means if a project both builds documentation and adebpackage, they don't get mixed into the same directory. Instead, documentation goes into/ci/artifacts/rsyncand the package into/ci/artifacts/debian.The old actions
deb,dput, andrsynccontinue to work as before and use the whole artifacts directory. The new actions were added to avoid changing the existing actions in an incompatible, breaking way. The old actions are not deprecated.The runnable plan versions of the old actions have changed. The plan and post-plan actions result in the same runnable plan action. Changes to runnable actions are not currently considered breaking changes in Ambient.
In the VM, the
gitcommand is now configured by default to have "Ambient CI" as the name for the user and "ambient@example.com" as the email address. This removes the need for each project to do that in their CI plan just to usegit.New subcommand
ambient statelists the projects in the Ambient state directory (configuration fieldstate) and the sizes of the files and subdirectories they contain. The output looks like this:
{
"projects": {
"dummy": {
"latest_commit": "09d6a5d81a5001bf210df2bf80e871e3731f6e9f",
"run_log": 21370,
"dependencies": 472923464,
"cache": 2074946410,
"artifacts": 4096
},
},
"project_count": 6
}
The
ambient qemusubcommand has been added to execute a runnable plan in a virtual machine, with or without networking. This is primarily a utility command to help develop Ambient by making it easier to experiment.The configuration file now allows enabling UEFI use for an image. The
runandqemusubcommands additionally have a--uefioption for that.The
ambient qemu --persistoptions allows creating a variant of an image. This can be used, for example, to change a generic cloud image from Debian or Arch Linux to boot fast even if the VM has no network access. Together with the optional UEFI support this paves way for using generic images instead of custom images for Ambient. That, in turn, should enable Ambient users to run CI under other operationg systems in the VM. However, Ambient needs further changes to make this convenient.Ambient now gives an error message if a virtual drives is too big. The virtual drives are created before the virtual machine starts. Previously, there was no helpful error message, only an "assert" error that only makes sense to Ambient developers.
The exported parts of the Ambient library part now all have documentation. This makes the library usable from other programs, but more importantly, makes it harder for Lars to forget what a type or method is for. Many typo fixes and other changes were made to exported names.
Note that Ambient is probably not very useful to use as a library. If you use it that way, or would like to, please be in touch and let us know so can try to avoid breaking it for you.
Ambient CI version 0.11.1 on 2016-01-14
From NEWS.md:
Bug fix:
- Always pass UEFI OVMF firmware file to QEMU, not just when UEFI support is on. The change for optional UEFI support in 0.11.0 broke some uses of Ambient. This change restores functionaliy at least for my own uses.
Future plans
Lars is still getting back up to speed with Radicle CI work and has no
concrete plans as yet. Two clear needs are making it easier to set up Radicle
CI both on a server and for local use (see rad-ci), and also automate the
release process.
New releases of the CI broker, Ambient adapter, and native CI adapter are pending and will happen soon.
The overall goal is to make CI a joy to use with Radicle.
Notes
If you have an open source Rust project and want to try Radicle and Ambient on
callisto, see https://callisto.liw.fi/callisto/ for instructions.
Quotes
No quotes yet, but please suggest something for the next issue.