Simple CI pipeline for Smalltown Core

Since we run as root on the build server, we can properly mount a tmpfs
as the shared build volume with exec support (this is still broken for
unprivileged create_container.sh). We'll have to see when and if this
blows up, and whether we want to use a disk-backed volume instead.

The pipeline has two stages that run the following commands:

- `scripts/run_ci.sh ${build.id} ${target.phid} bazel build //core/scripts:launch`

- `timeout 30 scripts/run_ci.sh ${build.id} ${target.phid} bazel run //core/scripts:launch; true` (for visual inspection)

Those are placeholders - we will want to integrate any and all
tests in Bazel, only trigger tests whose dependencies have been
modified in a given build step, and report individual results back
to Habormaster.

What works:

- Persistent working copies on the build server. Drydocks caches a number of
  persistent repository copies to avoid a full clone on each build, and
  uses a leasing mechanism to allocate them. Of course, this means we
  have to be careful about not polluting the repo, but Bazel takes care of that.

- Shared build cache with fast incremental rebuilds
  (a build with no changes takes ~15s including the podman build step).

- Full rebuild after volume deletion takes ~4m.

- Build output shows up in Phabricator in real time.

- Aborting a build properly cancels the running build and clean up the pod.

- Launching the QEMU VM.

- Reporting build status back to Harbormaster (noop at the moment, can
  be used to report unit test states later). This uses the awesome undocumented
  SSH conduit transport so we don't have to deploy a separate token on the host.

- Phabricator revisions are drafts until all tests complete successfully.

Test Plan: See tests :-)

Bug: T483

X-Origin-Diff: phab/D242
GitOrigin-RevId: 64eca996c8704cb0cd4f1cbb4f88f71a6fdca1eb
2 files changed
tree: e0c5dac8c237ad4e92a6c2d91427678d8a4e1691
  1. build/
  2. core/
  3. scripts/
  4. .bazelignore
  5. .bazelrc
  6. BUILD
  7. README.md
  8. WORKSPACE
README.md

Nexantic monorepo

This is the monorepo storing all of nexantic's internal projects and libraries.

Environment

All builds should be executed using the shipped nexantic-dev container which is automatically built by the create script.

The container contains all necessary dependencies and env configurations necessary to get started right away.

Usage

Spinning up: scripts/create_container.sh

Spinning down: scripts/destroy_container.sh

Running commands: scripts/run_in_container.sh @

Using bazel: scripts/bin/bazel @