Skip to content

Development

Version Python versions Pull requests welcome

Run tests CodeQL Coverage

Publish to PyPI Publish docs

📥 Install for development

Clone the repository and go in the project folder:

git clone https://github.com/MaastrichtU-IDS/fair-workflow
cd fair-workflow

To install the project for development you can either use venv to create a virtual environment yourself, or use hatch to automatically handle virtual environments for you.

=== “venv”

Create the virtual environment in the project folder :

```bash
python3 -m venv .venv
```

Activate the virtual environment:

```bash
source .venv/bin/activate
```

Install all dependencies required for development:

```bash
pip install -e ".[dev,doc,test]"
```

Install `pre-commit` to enable automated formatting and linting of the code at each commit:

```bash
pre-commit install
```

=== “hatch”

Install [Hatch](https://hatch.pypa.io), this will automatically handle virtual environments and make sure all dependencies are installed when you run a script in the project:

```bash
pip install hatch
```

??? note "Optionally you can improve `hatch` terminal completion"

    See the [official documentation](https://hatch.pypa.io/latest/cli/about/#tab-completion) for more details. For ZSH you can run these commands:

    ```bash
    _HATCH_COMPLETE=zsh_source hatch > ~/.hatch-complete.zsh
    echo ". ~/.hatch-complete.zsh" >> ~/.zshrc
    ```

🧑‍💻 Development workflow

=== “venv”

Try to sign a nanopublication with the code defined in `scripts/dev.py` to test your changes:

```bash
./scripts/dev.sh
```

The code will be automatically formatted when you commit your changes using `pre-commit`. But you can also run the script to format the code yourself:

```bash
./scripts/format.sh
```

Check the code for errors, and if it is in accordance with the PEP8 style guide, by running `flake8` and `mypy`:

```bash
./scripts/lint.sh
```

=== “hatch”

Try to sign a nanopublication with the code defined in `scripts/dev.py` to test your changes:

```bash
hatch run dev
```

The code will be automatically formatted when you commit your changes using `pre-commit`. But you can also run the script to format the code yourself:

```bash
hatch run format
```

Check the code for errors, and if it is in accordance with the PEP8 style guide, by running `flake8` and `mypy`:

```bash
hatch run lint
```

✅ Run the tests

Python application

Tests are automatically run by a GitHub Actions workflow when new code is pushed to the GitHub repository.

The tests use the nanopub-java tool for validating the signing process implemented in python produces similar nanopublications. This is automatically installed by the library, just make sure java is available where you run the tests.

=== “venv”

Run the tests locally:

```bash
./scripts/test.sh
```

You can also run only a specific test:

```bash
./scripts/test.sh tests/cli.py::test_cli
```

=== “hatch”

Run the tests locally:

```bash
hatch run test
```

You can also run only a specific test:

```bash
hatch run test tests/cli.py::test_cli
```

📖 Generate docs

Publish docs

The documentation (this website) is automatically generated from the markdown files in the docs folder and python docstring comments, and published by a GitHub Actions workflow.

Serve the docs on http://localhost:8008

=== “venv”

```bash
./scripts/docs.sh
```

=== “hatch”

```bash
hatch run docs
```

🏷️ Publish a new release

Publish to PyPI

  1. Increment the __version__ in fair_workflow/__init__.py
  2. Push to GitHub
  3. Create a new release on GitHub
  4. A GitHub Action workflow will automatically publish the new version to PyPI