| + |
---
|
| + |
title: "Radicle CI: high level overview"
|
| + |
layout: post
|
| + |
image: radicle-1.png
|
| + |
---
|
| + |
|
| + |
[Radicle][] being a distributed system, it also needs a distributed
|
| + |
approach to CI. Each Radicle node can opt into running CI and the node
|
| + |
owner gets to decide what it runs. One node might choose to execute
|
| + |
the CI plan defined in the repository, where another node might decide
|
| + |
to only run a tool to scan for security problems.
|
| + |
|
| + |
The Radicle CI system consists of several components:
|
| + |
|
| + |
* The [Radicle CI broker][] listens to events from its local Radicle
|
| + |
node.
|
| + |
- The node emits these events when things happen in the node.
|
| + |
- For example, repositories are created or updated, or patches are
|
| + |
created or updated.
|
| + |
- The CI broker reads a configuration file at start up to know how
|
| + |
to react to what node events.
|
| + |
* For each interesting event, the CI broker runs a **CI adapter**,
|
| + |
giving it information about the event. There is a different adapter
|
| + |
for each type of CI system, specified in the configuration file.
|
| + |
- Concourse
|
| + |
- Kraken
|
| + |
- GitHub Actions
|
| + |
- etc (see [Radicle CI integration docs][])
|
| + |
- The external CI systems are not part of Radicle CI, and are not
|
| + |
provided by the Radicle project.
|
| + |
* The adapter instructs an external CI system to actually run the
|
| + |
configured commands in response to the event.
|
| + |
- Radicle provides a simple [native CI adapter][] that just runs shell
|
| + |
commands locally, to make it easy to have simple CI without having
|
| + |
to set up an external CI system.
|
| + |
* The CI broker keeps a log for itself, and can link to the CI run log
|
| + |
from the external CI system if the adapter know it.
|
| + |
|
| + |
Any Radicle node can run the CI broker, and choose the CI systems it
|
| + |
wants to use. The delegates for a repository decide which one or ones
|
| + |
they trust and consider authoritative.
|
| + |
|
| + |
Each node that runs the CI broker configures it to run CI on the
|
| + |
repositories the node owner is interested in, and the kinds of changes
|
| + |
they care about, and what adapter to use. Each node operator owns
|
| + |
their node, and so the decision of when to run CI is theirs to make.
|
| + |
|
| + |
Each external CI system defines a way to specify what CI should do for
|
| + |
a repository. For example, this might in a file such as
|
| + |
`.github/workflows/ci.yaml` or `.gitlab-ci.yml` at the root of the
|
| + |
repository. When a Radicle CI adapter uses such an external CI system
|
| + |
that system uses the file. Radicle CI does not try to unify these.
|
| + |
|
| + |
The native CI adapter uses `.radicle/native.yaml`. A custom adapter
|
| + |
might not use anything from the repository.
|
| + |
|
| + |
The basics of this CI support already works, but is very rudimentary.
|
| + |
Currently missing parts include:
|
| + |
|
| + |
* we will add notification of CI runs so that those on other nodes can
|
| + |
know CI has run, and whether it succeeded
|
| + |
- we plan to use Radicle collaborative objects for this
|
| + |
- we may add additional notification methods to serve user needs and
|
| + |
wants
|
| + |
* we may add some kind of artifact storage
|
| + |
- external CI systems usually have this
|
| + |
* we'll add more adapters, e.g., a variant of the native CI adapter
|
| + |
that uses containers instead of running shell commands directly on
|
| + |
the host
|
| + |
* we'll improve documentation
|
| + |
* we'll make proper releases and installation methods
|
| + |
|
| + |
Watch the Radicle blog (where this is published) to hear when Radicle
|
| + |
CI is ready for you to use, or jump to Zulip to become a beta tester.
|
| + |
|
| + |
---
|
| + |
|
| + |
**Follow us** on 🐘 [Mastodon][mast], 🦋 [Bluesky][bsky] or 🐦
|
| + |
[Twitter][twitter] to stay updated.
|
| + |
|
| + |
**Contribute** to Radicle as a 🌱 [seeder](/guides/seeder), 🧙
|
| + |
[developer][heartwood] or by 🪞 [mirroring][mirror] your repositories on
|
| + |
the Radicle network.
|
| + |
|
| + |
**Join** our community on 💬 [Zulip][zulip] and discuss your ideas to
|
| + |
improve Radicle.
|
| + |
|
| + |
[heartwood]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
|
| + |
[mirror]: /guides/user/#git-going-with-repositories
|
| + |
[twitter]: https://twitter.com/radicle
|
| + |
[mast]: https://toot.radicle.xyz/@radicle
|
| + |
[bsky]: https://bsky.app/profile/radicle.xyz
|
| + |
[zulip]: https://radicle.zulipchat.com
|
| + |
[Radicle]: https://radicle.xyz/
|
| + |
[Radicle CI broker]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:zwTxygwuz5LDGBq255RA2CbNGrz8
|
| + |
[native CI adapter]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3qg5TKmN83afz2fj9z3fQjU8vaYE
|
| + |
[Radicle CI integration docs]: https://explorer.radicle.gr/nodes/seed.radicle.gr/rad:z4Uh671FzoooaHjLvmtW9BtGMF9qm
|