TickBorg

Distributed CI bot for the Project Tick monorepo, adapted from ofborg.

v10.0.3 Active
News About

Overview

tickborg is a RabbitMQ-based distributed CI system that:

  • Automatically detects changed projects in PRs
  • Builds affected sub-projects using their native build systems (CMake, Meson, Autotools, Cargo, Gradle, Make)
  • Posts build results as GitHub check runs
  • Supports multi-platform builds (Linux, macOS, Windows, FreeBSD)

Automatic Building

PRs automatically trigger builds for affected projects based on:

  • File path detection: Changed files are mapped to sub-projects
  • Conventional Commits: Commit scopes like feat(meshmc): trigger builds for the named project

Example commit titles and the builds they will start:

Message Automatic Build
feat(meshmc): add chunk loading meshmc
cmark: fix buffer overflow cmark
fix(neozip): handle empty archives neozip
chore(ci): update workflow (CI changes only)

If the title of a PR begins with WIP: or contains [WIP] anywhere, its projects are not built automatically.

Commands

The comment parser is line-based. Commentary can be interwoven with bot instructions.

  1. To trigger the bot, the line must start with @tickbot (case insensitive).
  2. To use multiple commands, separate them on different lines.

build

@tickbot build meshmc neozip cmark

This will build the specified projects using their configured build systems.

test

@tickbot test meshmc

This will run the test suite for the specified projects.

eval

@tickbot eval

Triggers a full evaluation of the PR — detects changed projects and labels the PR.

Supported Platforms

Platform Runner
x86_64-linux ubuntu-latest
aarch64-linux ubuntu-24.04-arm
x86_64-darwin macos-15
aarch64-darwin macos-15
x86_64-windows windows-2025
aarch64-windows windows-2025
x86_64-freebsd ubuntu-latest (VM)

Sub-Projects

Project Build System Path
mnv Autotools mnv/
cgit Make cgit/
cmark CMake cmark/
neozip CMake neozip/
genqrcode CMake genqrcode/
json4cpp CMake json4cpp/
tomlplusplus Meson tomlplusplus/
libnbtplusplus CMake libnbtplusplus/
meshmc CMake meshmc/
forgewrapper Gradle forgewrapper/
corebinutils Make corebinutils/

Hacking

$ git clone https://github.com/project-tick/Project-Tick/
$ cd Project-Tick/ofborg
$ cd tickborg
$ cargo build
$ cargo check
$ cargo test

Make sure to format with cargo fmt and lint with cargo clippy.

Configuration

See example.config.json for a minimal configuration and config.public.json for the production config.