# Contributing This document describes how to: - Set up your dev environment - Become familiar with [Elm](http://elm-lang.org/) - Develop against AlertManager ## Dev Environment Setup To set up your environment and install all dependencies, run: ```sh npm ci ``` To run the tests: ```sh make test ``` In addition for easier development you can [configure](https://guide.elm-lang.org/install.html#configure-your-editor) your editor. **All submitted elm code must be formatted with `elm-format`**. Install and execute it however works best for you. We recommend having formatting the file on save, similar to how many developers use `gofmt`. If you prefer, there's a make target available to format all elm source files: ``` # make format ``` ## Elm Resources - The [Official Elm Guide](https://guide.elm-lang.org/) is a great place to start. Going through the entire guide takes about an hour, and is a good primer to get involved in our codebase. Once you've worked through it, you should be able to start writing your feature with the help of the compiler. - Check the [syntax reference](http://elm-lang.org/docs/syntax) when you need a reminder of how the language works. - Read up on [how to write elm code](http://elm-lang.org/docs/style-guide). - Watch videos from the latest [elm-conf](https://www.youtube.com/channel/UCOpGiN9AkczVjlpGDaBwQrQ) - Learn how to use the debugger! Elm comes packaged with an excellent [debugger](http://elm-lang.org/blog/the-perfect-bug-report). We've found this tool to be invaluable in understanding how the app is working as we're debugging behavior. ## Local development workflow At the top level of this repo, follow the HA AlertManager instructions. Compile the binary, then run with `goreman`. Add example alerts with the file provided in the HA example folder. Then start the development server: ``` # cd ui/app # make dev-server ``` Your app should be available at `http://localhost:`. Navigate to `src/Main.elm`. Any changes to the file system are detected automatically, triggering a recompile of the project. ## Committing changes Before you commit changes, please run `make build-all` on the root level Makefile.