# Monogon Source Monorepo

This is the main repository containing Monogon's public source code, including Metropolis.

## Environment

We assume a Fedora host system provisioned using rW, and IntelliJ as the IDE.

For better reproducibility, all builds are executed in containers.

#### Usage

Spinning up: `scripts/create_container.sh` 

Spinning down: `scripts/destroy_container.sh` 

Running commands: `scripts/run_in_container.sh <...>`

Using bazel using a wrapper script: `scripts/bin/bazel <...>` (add to your local $PATH for convenience)

#### IntelliJ

This repository is compatible with the IntelliJ Bazel plugin. All commands run inside the container, and
necessary paths are mapped into the container.

The following steps are necessary:

- Install Google's [Bazel plugin](https://plugins.jetbrains.com/plugin/8609-bazel) in IntelliJ.

- Add the absolute path to your `~/.cache/bazel-nxt` folder to your `idea64.vmoptions` (Help → Edit Custom VM Options)
  and restart IntelliJ:

  `-Dbazel.bep.path=/home/leopold/.cache/bazel-nxt`
  
- Set "*Bazel Binary Location*" in Other Settings → Bazel Settings to the absolute path of `scripts/bin/bazel`.
  This is a wrapper that will execute Bazel inside the container.
  
- Use _File → Import Bazel project_... to create a new project from `.bazelproject`.

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

It's strongly recommend to use our project presets for file watchers and other IDE features. Run this command and
re-open the project in order to install them:

    bazel run intellij/localconfig $(pwd)

## Metropolis

### Run a single node cluster

Launch the node:

    bazel run //:launch
    
Run a kubectl command:

    bazel run //metropolis/cli/dbg -- kubectl describe
 
