# Overview GRM is still in very early development. I started GRM mainly to scratch my own itches (and am heavily dogfooding it). If you have a new use case for GRM, go for it! ## Contributing To contribute, just fork the repo and create a pull request against `develop`. If you plan bigger changes, please consider opening an issue first, so we can discuss it. If you want, add yourself to the `CONTRIBUTORS` file in your pull request. ## Branching strategy The branching strategy is a simplified [git-flow](https://nvie.com/posts/a-successful-git-branching-model/). * `master` is the "production" branch. Each commit is a new release. * `develop` is the branch where new stuff is coming in. * feature branches branch off of `develop` and merge back into it. Feature branches are not required, there are also changes happening directly on `develop`. ## Required tooling You will need the following tools: * Rust (obviously) (easiest via `rustup`), with the nightly toolchain * Python3 * [`just`](https://github.com/casey/just), a command runner like `make`. See [here](https://github.com/casey/just#installation) for installation instructions (it's most likely just a simple `cargo install just`). * Docker & docker-compose for the e2e tests * `isort`, `black` and `shfmt` for formatting. * `ruff` and `shellcheck` for linting. * `mdbook` for the documentation Here are the tools: | Distribution | Command | | ------------- | --------------------------------------------------------------------------------------------------- | | Arch Linux | `pacman -S --needed python3 rustup just docker docker-compose python-black shfmt shellcheck mdbook` | | Ubuntu/Debian | `apt-get install --no-install-recommends python3 docker.io docker-compose black shellcheck` | Note that you will have to install `just` and `mdbook` manually on Ubuntu (e.g. via `cargo install just mdbook` if your rust build environment is set up correctly). Same for `shfmt`, which may just be a `go install mvdan.cc/sh/v3/cmd/shfmt@latest`, depending on your go build environment. For details about rustup and the toolchains, see [the installation section](./installation.md). ## FAQ ### Why nightly? For now, GRM requires the nightly toolchain for two reasons: * [`io_error_more`](https://github.com/rust-lang/rust/issues/86442) to get better error messages on IO errors * [`const_option_ext`](https://github.com/rust-lang/rust/issues/91930) to have static variables read from the environment that fall back to hard coded defaults Honestly, both of those are not really necessary or can be handled without nightly. It's just that I'm using nightly anyway.