# Branches
Following branches are used:
## develop
This contains all upcoming changes for the next pull request to `main`.
All feature branches should merge into this branch.
## feature branches
These branches are created on a per-feature basis and will be merged into `develop`. This merge happens without ci testing and prior review, but a pull request should be opened to trigger a notification.
## main
Changes in this branch trigger an automatic rebuild on the server, so all merges should be peer-reviewed and tested. However, exceptions can be made for changes, which close security vulnerabilities.
The only branch able to be merged into `main` is `develop`.

# Development process
If adding a new feature you should follow this loose guide:
1. Clone the repository
1. Allow the `.envrc`: `direnv allow` (see [development environment](#development-environment), if you don't know what this does)
1. Checkout your feature branch from develop: `git checkout -b <feature branch name> develop`
1. Actually make the changes
1. Commit them, while following conventional commits (See [their docs](https://www.conventionalcommits.org/en/v1.0.0/) for further guidance)
1. Push your change and open a pull request to `develop`: `git push --set-upstream origin <feature branch name>`

# Development environment
All required tools should be specified in the `devShells` output of the flake. This is because we use [Direnv](https://github.com/direnv/direnv) in combination with [Nix integration](https://github.com/direnv/direnv/wiki/Nix) — in this case [Nix-direnv](https://github.com/nix-community/nix-direnv) — to enforce reliable development environments (and some uncluttering of PATH).

Setting it up is rather easy, just see [Nix-direnv's install instructions](https://github.com/nix-community/nix-direnv#installation).