Radish alpha
r
rad:z371PVmDHdjJucejRoRYJcDEvD5pp
Radicle website including documentation and guides
Radicle
Git
Blog about Radicle CI, a high level overview
Open liw opened 1 year ago

Signed-off-by: Lars Wirzenius liw@liw.fi

1 file changed +97 -0 3a643146 e281c60c
added _posts/2024-10-xx-radicle-ci.mdwn
@@ -0,0 +1,97 @@
+
---
+
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