Devenez un·e contributeur·ice#

Prérequis#

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.

Setup de la machine#

Preliminarities#

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 [email protected]:adap/flower.git
$ cd flower
  1. 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 Python 3.8.17 by default):

    $ ./dev/setup-defaults.sh <version> # 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 Python 3.8.17 by default):

    $ ./dev/venv-create.sh <version> # 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-<version>) $ ./dev/bootstrap.sh

Scripts pratiques#

La repo de Flower contient un certain nombre de scripts de commodité pour rendre les tâches de développement récurrentes plus faciles et moins problématiques. Voir le sous-répertoire :code :/dev pour une liste complète. Les scripts suivants sont parmis les plus importants :

Créer/Supprimer l’environment virtuel#

$ ./dev/venv-create.sh <version> # Default is 3.8.17
$ ./dev/venv-delete.sh <version> # Default is 3.8.17

Compiler les définitions ProtoBuf#

$ python -m flwr_tool.protoc

Formatter le code#

$ ./dev/format.sh

Vérifier le format et tester le code#

$ ./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.

Exécuter les GitHub Actions (CI) localement#

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

Le workflow par défaut de Flower sera exécuté en configurant les machines Docker requises en arrière plan.

Build Release#

Flower utilise Poetry pour construire les nouvelles versions. La commande nécessaire est comprise dans un script simple :

$ ./dev/build.sh

Les versions résultantes .whl et .tar.gz seront stockées dans le sous-répertoire:code:/dist.

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.