Pre-release. HareBox is a working local build with no public service yet. Statuses on every feature say what runs today; speed and reliability figures are targets until measured. Status

CI runners with a whole VM

Run tests that need Docker, systemd or KVM on a fresh VM per job, from GitHub Actions or any CI, billed by the second.

For Platform and DevOps engineers

Why it pays

  • Tests that need a real machine Docker Compose stacks, systemd services, kernel modules and emulators work as they do in production.
  • Fresh every time Each job starts from a template and is deleted afterwards. Nothing leaks between runs.
  • Per-second billing A four-minute job pays for four minutes, with no per-minute rounding.

Step by step

  1. Build a CI template

    Install toolchains and warm caches once.

    CLI

    harebox new --name ci-base
    harebox exec current -- ./install-ci-tools.sh
    harebox template save current --name ci-base
  2. From any CI: run one job in a fresh VM

    One command starts a sandbox from your template, runs the job, deletes the sandbox and exits with the job's own code. --keep-on-failure keeps a failed job's machine for inspection, and a cancelled job still cleans up.

    CLI

    harebox run --from ci-base --size large --keep-on-failure -- make test

    Python

    box = hb.create(template="ci-base", ttl_seconds=1800, name="ci-job")
    try:
        result = box.run("make test")
        raise SystemExit(result["exit_code"])
    finally:
        box.delete()

    TypeScript

    const box = await hb.create({ template: "ci-base", ttl_seconds: 1800, name: "ci-job" });
    try {
      const r = await box.run("make test");
      process.exitCode = r.exit_code ?? 1;
    } finally {
      await hb.deleteSandbox(box.id);
    }
  3. Later: GitHub Actions labels

    Planned: once the HareBox GitHub App is connected, a runs-on label picks the machine size. It isn't connected yet, so use harebox run from any CI today.

    GitHub Actions

    # .github/workflows/test.yml
    jobs:
      test:
        runs-on: harebox-large
        steps:
          - uses: actions/checkout@v4
          - run: docker compose up -d && make test

Tips

  • Keep deployments on Shared. Spot costs the same and can be preempted with two minutes' notice.
  • Use --ttl on every CI sandbox so a crashed pipeline can't leave one running.
  • Nested KVM lets a job boot an Android emulator or a Firecracker microVM.