# Monogon Monorepo

This is the main repository containing the source code for the [Monogon Platform](https://monogon.tech).

*This is pre-release software - take a look, and check back later!*

## Environment

Our build environment is self-contained and requires only minimal host dependencies:

- A Linux machine or VM.
- [Bazelisk](https://github.com/bazelbuild/bazelisk) >= v1.15.0
- A reasonably recent kernel with user namespaces enabled.
- Working KVM with access to `/dev/kvm` (if you want to run tests).

Our docs assume that Bazelisk is available as `bazel` on your PATH.

### IntelliJ support

This repository is compatible with the IntelliJ Bazel plugin out of the box, which enables
full autocompletion for external dependencies and generated code.

The following steps are necessary:

- Install Google's [Bazel plugin](https://plugins.jetbrains.com/plugin/8609-bazel) in IntelliJ.
 
- Make sure that Bazel "*Bazel Binary Location*" in Other Settings → Bazel Settings points to Bazelisk.
  
- Use _File → Import Bazel project_... and select your monorepo checkout.

After running the first sync, everything should now resolve in the IDE, including generated code.

## Monogon OS

### Run a single node demo cluster

Launch the node:

    bazel run //:launch -c dbg
    
Run a kubectl command:

    bazel run //metropolis/cli/dbg -c dbg -- kubectl describe node
 
### Test suite

Run full test suite:

    bazel test -c dbg //...
