WORKFLOW#

Instruction steps how to implement the release version and documentation site.

CODING PYTHON PACKAGE#

For Python coding we’re using Visual Studio Code and we love this editor so much. Editor configuration setup is defined in .editorconfig and pyproject.toml file, we use black and isort configuration defined in this file.

Before starting writing code make sure to create isolated environment in your local system typing virtualenv .venv and activating source .venv/bin/activate then install requirements dependencies typing pip install -r docs/requirements-dev.txt in the terminal.

ADD NEW MODULE#

Write a new module to an existing package. Use the black code formatter. We always try to write Python code with limit all lines to a maximum of 79 characters. In addition, we try to keep the documentation and the .md markdown files according to this specification, not to exceed this limit as well. In some cases, unfortunately, this cannot be avoided, such as pasting long links.

Important

Please check the official PEP 8 - Style Guide for Python Code specification on section maximum line length.

ADD DOCUMENTATION#

After writing the new module, write documentation in the .py file and in the docs folder, add the appropriate .md files along with the Sphinx directives for generate documentation site.

BUILD PACKAGE#

We just need to create an installable Python package, type in to terminal:

python3 setup.py sdist bdist_wheel

The package build creates new directories where the installation files are located the build and dist directories. Then install the package, type in the terminal:

pip install --force-reinstall dist/mdsanima_dev-0.1.1-py3-none-any.whl

In this case I used the --force-reinstall option because I had an earlier version of this package already installed.

Now you’re ready to Build Documentation site localy and upload your distributions to PyPI using Twine.

Tip

If you have trouble, please check Packaging Python Projects tutorial and Packaging and Distributing Projects guides on official Python site.

BUILD DOCUMENTATION#

Documentation are created automatically using Sphinx based on Python files and the information they contain written in comments.

Warning

This options build documentaiton localy only for testing. Directory build/dirhtml is not pushing on this repository. We’re using GitHub Action for build documentation deployments.

The first thing you need to do is Add New Module along with the documentation. Then install it using the wheel option and finally build the documentation typing in the terminal:

python3 setup.py build_sphinx

You can also use the easy install options typing python3 setup.py install build_sphinx in the terminal, but this is not recommended.

The documentation build creates in build/dirhtml directory, check the docs/conf.py file for the configuration settings.

The documentation build HTML pages with a single directory per document. Makes for prettier URLs no .html in documentation pages address.

To see the documentation site in your local environment, just enter the command in the terminal:

python3.7 -m http.server 8080 --directory build/dirhtml/

To use the --directory option you must use Python 3.7 or later, but if you don’t have one, you can just go to the above-mentioned directory and type python3 -m http.server 8080 in the terminal. If you want to listen to a specific interface use the --bind 127.0.0.1 options.

Now just go to your browser and enter the localhost:8080 address.

AUTOMATE RELEASE#

Automate versioning and CHANGELOG generation, with Semantic Versioning and Conventional Commits . Generate changelogs and release notes from a project’s commit messages and metadata.

Added a standard-version npm package to automatically create CHANGELOG.md files and tracking version. This option allow to generate automatically changelog file for the project and tracking version on the Python package based on commit messages.

Important

Please check the Commit Guide site for proper commit message to generate CHANGELOG file.

For some reason that features are only for the development mode not allow and access for the Python package.

Now in package.json file on section standard-version we’re configure to skip commit and tag, only bump version and changelog are active because when generate changelog typing in the terminal standard-version release-test labels are broken and we’re manually fixing it.

Make release version and changelog, type in the terminal:

standard-version release

Command above for create release run script defined in package.json file on script section standard-version --commit-all --sign which means bumping version, adding changes in changelog, commiting all files and adding tag with Signing Commits using GPG keys.

For checking if everything is ok, type in the terminal:

standard-version release-test

Command above for checking run script defined in package.json file on script section standard-version --dry-run which means only printing in the terminal, no bumping version, not adding changes in changelog and no commit and tag. This option is only for checking if everything is ok and we recommend using this option first.

Also you can checking if everything is ok, type in the terminal:

standard-version --skip.commit --skip.tag

After run this command you will create a new version in the package.json file, bumping version in __init __.py and automatically create CHANGELOG.md based on commit messages.

Now you just need to execute this command in the terminal:

standard-version --skip.bump --skip.changelog --commit-all --sign

After executing this command all changed files will be committed with the current version and new tag will be created. Commiting package.json, __init__.py, CHANGELOG.md and other file with Signed Commits approval with GPG keys.

SEND TO PYPI#

We’re almost done. If all steps is done, finally you can uploading your project to PyPI .

When you ran the command to create your distribution, a new directory dist was created under your project’s root directory. That’s where you’ll find your distribution files to upload.

Firs you should check the build are valid, type in the terminal:

twine check dist/*

Before releasing on main PyPI repo, you might prefer training with the TestPyPI which is cleaned on a semi regular basis.

Send to TestPyPI using Twine, type in the terminal:

twine upload --repository pypi-test dist/*

Then go to test.pypi.org site and check the package, if everything is ok, install it using TestPyPI with pip. You can tell pip to download packages from TestPyPI instead of PyPI by specifying the --index-url flag, type in the terminal:

python3 -m pip install --index-url https://test.pypi.org/simple/ mdsanima-dev

Finally we can send our package to pypi.org main site.

Send to PyPI using Twine, type in the terminal:

twine upload dist/*

Tip

If you have trouble, please check Using TestPyPI guides and Uploading your Project to PyPI guides on official Python site.