diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..00167a6f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,55 @@ +# Contribution Guide + +## Required Tools and Dependencies + +The backend of FreeDATA is built with python, with a couple dependencies written +in C/C++, and the frontend is build with VueJS, so you will need Python (from +3.10 to 3.13) to work on the backend, and node+npm to work on the frontend. + +System dependencies required: + - python3 (with virtual environment support) + - portaudio + - hamlib (optional, there is a vendored version bundled with the freedata + server, or you can build it from source) + - nodejs + npm + +Example for debian trixie: `sudo apt update && sudo apt install python3 +python3-venv nodejs npm portaudio19-dev` + +Example for MacOS: `brew install python pyenv-virtualenv npm node@24 portaudio` + +To fetch the python dependencies create a virtual environment and next use pip: + +- Create a virtual environment: `python -m venv venv` +- Load the virtual environment `source venv/bin/activate` +- There are several sets of dependencies you can install: + - `pip install .` installs only the libraries required to run freedata + - `pip install .[test]` installs the libraries required for running and testing + freedata + - `pip install .[dev]` installs the libraries required for running, testing + and linting/checking freedata + - `pip install .[build]` installs only the libraries required to run and build + the freedata pip module + - `pip install .[nuitka]` installs only the libraries required to run and + build the freedata windows executable + +To fetch the `npm` dependencies go inside `./freedata_gui` and run `npm +install`. See `./freedata_gui/README.md` for additional informations. + +## Linting and Formatting (python-only) +The python sources must be formatted and checked using `ruff`. There is a CI +workflow that block all PRs that do not pass the linter/formatter checks. + +- To check formatting run `ruff format --check` (lists file that needs formatting) +- To see what the automatic formatter will change run `ruff format --diff` (shows + diff-style changes). +- To automatically format files run `ruff format` + +- To run the checker/linter execute `ruff check` +- Some errors can be automatically fixed running `ruff check --fix`, but always + check and test the changes made by ruff. There are errors that ruff cannot safely + fix automatically, you must fix them manually. + +## Testing backend +To run the backend tests run inside the virtual environment `python -m unittest +discover tests`