Get started as a contributor ============================ Prerequisites ------------- - `Python 3.9 `_ or above - `Poetry 1.3 `_ or above - (Optional) `pyenv `_ - (Optional) `pyenv-virtualenv `_ Flower uses ``pyproject.toml`` to manage dependencies and configure development tools (the ones which support it). Poetry is a build tool which supports `PEP 517 `_. Developer Machine Setup ----------------------- Preliminaries ~~~~~~~~~~~~~ Some system-wide dependencies are needed. For macOS +++++++++ - Install `homebrew `_. Don't forget the post-installation actions to add `brew` to your PATH. - Install `xz` (to install different Python versions) and `pandoc` to build the docs: :: $ brew install xz pandoc For Ubuntu ++++++++++ Ensure you system (Ubuntu 22.04+) is up-to-date, and you have all necessary packages: :: $ apt update $ apt install build-essential zlib1g-dev libssl-dev libsqlite3-dev \ libreadline-dev libbz2-dev libffi-dev liblzma-dev pandoc Create Flower Dev Environment ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Clone the `Flower repository `_ from GitHub: :: $ git clone git@github.com:adap/flower.git $ cd flower 2. Let's create the Python environment for all-things Flower. If you wish to use ``pyenv``, we provide two convenience scripts that you can use. If you prefer using something else than ``pyenv``, create a new environment, activate and skip to the last point where all packages are installed. - If you don't have ``pyenv`` installed, the following script that will install it, set it up, and create the virtual environment (with :substitution-code:`Python |python_full_version|` by default): :: $ ./dev/setup-defaults.sh # once completed, run the bootstrap script - If you already have ``pyenv`` installed (along with the ``pyenv-virtualenv`` plugin), you can use the following convenience script (with :substitution-code:`Python |python_full_version|` by default): :: $ ./dev/venv-create.sh # once completed, run the `bootstrap.sh` script 3. Install the Flower package in development mode (think ``pip install -e``) along with all necessary dependencies: :: (flower-) $ ./dev/bootstrap.sh Convenience Scripts ------------------- The Flower repository contains a number of convenience scripts to make recurring development tasks easier and less error-prone. See the ``/dev`` subdirectory for a full list. The following scripts are amongst the most important ones: Create/Delete Virtual Environment ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell :substitutions: $ ./dev/venv-create.sh # Default is |python_full_version| $ ./dev/venv-delete.sh # Default is |python_full_version| Compile ProtoBuf Definitions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :: $ python -m flwr_tool.protoc Auto-Format Code ~~~~~~~~~~~~~~~~ :: $ ./dev/format.sh Run Linters and Tests ~~~~~~~~~~~~~~~~~~~~~ :: $ ./dev/test.sh Add a pre-commit hook ~~~~~~~~~~~~~~~~~~~~~ Developers may integrate a pre-commit hook into their workflow utilizing the `pre-commit `_ library. The pre-commit hook is configured to execute two primary operations: ``./dev/format.sh`` and ``./dev/test.sh`` scripts. There are multiple ways developers can use this: 1. Install the pre-commit hook to your local git directory by simply running: :: $ pre-commit install - Each ``git commit`` will trigger the execution of formatting and linting/test scripts. - If in a hurry, bypass the hook using ``--no-verify`` with the ``git commit`` command. :: $ git commit --no-verify -m "Add new feature" 2. For developers who prefer not to install the hook permanently, it is possible to execute a one-time check prior to committing changes by using the following command: :: $ pre-commit run --all-files This executes the formatting and linting checks/tests on all the files without modifying the default behavior of ``git commit``. Run Github Actions (CI) locally ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Developers could run the full set of Github Actions workflows under their local environment by using `Act `_. Please refer to the installation instructions under the linked repository and run the next command under Flower main cloned repository folder: :: $ act The Flower default workflow would run by setting up the required Docker machines underneath. Build Release ------------- Flower uses Poetry to build releases. The necessary command is wrapped in a simple script: :: $ ./dev/build.sh The resulting ``.whl`` and ``.tar.gz`` releases will be stored in the ``/dist`` subdirectory. Build Documentation ------------------- Flower's documentation uses `Sphinx `_. There's no convenience script to re-build the documentation yet, but it's pretty easy: :: $ cd doc $ make html This will generate HTML documentation in ``doc/build/html``. Note that, in order to build the documentation locally (with ``poetry run make html``, like described below), `Pandoc `_ needs to be installed on the system.