# radicle-ci-broker Add integration to CI engines/systems/services to [Radicle](https://radicle.xyz/), a distributed git hosting and collaboration system. This is not quite production ready code yet, but it will eventually become a thing that listens for changes in a Radicle node, and triggers CI on the relevant ones. ## Architecture See the `doc` directory for architecture documentation. Quick summary: the CI broker gets events from the Radicle node, filters them based on its own config, and for any event that gets past the filter, runs the configured adapter executable. The broker and adapter use a simple JSON based message protocol over stdin/stdout. Each CI system has its own adapter. To build the documentation, run `make` in the `doc` directory. You'll need some tools installed: Pandoc, graphviz (dot), PlantUML, pikchr-cli. The others are widely packaged, pikchr-cli is a Rust crate, so you can install it with `cargo install pikchr-cli` Build and publish the documentation like this: ~~~ RADICLE_CI_BROKER_WEBROOT=/tmp/ci make -C doc publish ~~~ ## Binaries The crate contains several binaries: * `ci-broker` --- the actual CI broker - this is the only one you need to care about, the rest are for debugging * `broker-messages` --- helper program to print sample messages between the broker and adapters * `filter-events` --- a helper program to see what events a CI broker config allows * `list_runs` --- list all CI runs in a broker database * `pagegen` -- helper program to produce sample report pages - mostly only useful for testing changes to the page generating code ## Packaging There is simple, simplistic, rudimentary, personal-use-only packaging for Debian in the `debian` directory, used by Lars to build packages for his own use. ## Running tests To run the test suite for the CI broker: ~~~sh cargo test ~~~ (The usual way, for a Rust program.) ## Configuration The configuration file is named on the command line. It is a YAML file, for example: ~~~yaml default_adapter: native db: ci-broker.sqlite adapters: native: command: radicle-native-ci env: RADICLE_NATIVE_CI: /home/liw/radicle/radicle-native-ci/x/config.yaml sensitive_env: some_secret: some_secret_value_that_is_not_logged filters: - !And - !Repository "rad:z2e6URdt1we1iG1BCVqtx8QVgsX4a" - !Or - !Branch "main" - !AnyPatchRef ~~~ Or if you only want to filter for patch COB updates (e.g. comments), to the specified repository: ~~~yaml default_adapter: native db: ci-broker.sqlite adapters: native: command: radicle-native-ci env: RADICLE_NATIVE_CI: /home/liw/radicle/radicle-native-ci/x/config.yaml sensitive_env: some_secret: some_secret_value_that_is_not_logged filters: - !And - !Repository "rad:z2e6URdt1we1iG1BCVqtx8QVgsX4a" - !And - !AnyPatch - !Not - !AnyPatchRef ~~~ This runs the native CI engine as an adapter, on any repository events that pass the filter. The filter allows any changes to the `main` branch or any Radicle patch, on the specified repository. ## License Radicle CI broker is distributed under the terms of both the MIT license and the Apache License (Version 2.0). See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) for details.