Tutorial: Continuous integration - The basics
How to push to PyPI your Python package
In this tutorial we will create a Python package and we will automatically upload the resulting .tar.gz and .whl files to the PyPI repository.

The steps were copied from https://packaging.python.org/tutorials/packaging-projects/.

We assume you already created a repository on rocketgit.com, named prj1.
If you do not have an account on PyPI, go there and create one.
To be able to push your packages to PyPI, you need to create an API token. Go there and press Add API token; fill in any name you want, and, for Scope, select Entire account (all projects) and press Add token.
Copy the API token to clipboard because you will need it later.

Clone your repository:
git clone https://rocketgit.com/prj1 cd prj1

Create a file named my_build_script.sh with the following content:
#!/bin/bash # Build the package python3 setup.py sdist bdist_wheel # Upload package python3 -m twine upload dist/*
It is the script which will get executed when you will run git push.

Create another file, setup.py. It is the build script for setuptools:
import setuptools setuptools.setup( name="example-pkg-YOUR-USERNAME-HERE", # Replace with your own username version="0.0.1", author="Example Author", author_email="author@example.com", description="A small example package", long_description="bla bla bla", long_description_content_type="text/markdown", url="https://rocketgit.com/prj1", packages=setuptools.find_packages(), classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], python_requires='>=3.6', )

Create the LICENSE file:
Put here a nice license text.

Create the directory which will contain the code for your package:
mkdir prj1 cd prj1

Create the package main file, prj1.py:
def hello(): print("Hello from prj1!") return

And the initialization file, __init__.py:
from .prj1 import hello

We will add all the files to git:
cd .. git add . git commit -m "First commit"

It is time to define a webhook which, when you do a git push, will generate a job which will be sent to one of the workers.
The worker will start a build environment (a VM, for example) and will run my_build_script.sh inside it.
Click here (opens in a new tab) or go to Settings main menu, click on Webhooks submenu and then press Add. From the list, go to type build line and click "Generic".
For Repository input field set prj1 or leave it empty to allow the webhook to execute for all your projects. Add a description to easily identify the webhook. Because we need to authenticate ourselves to PyPI, we need to set the API token: go to Secrets area, set the Name field to TWINE_USERNAME and the Value field to __token__. Go to the next secret line and set the name to TWINE_PASSWORD and, for the value, paste the PyPI token you have in your clipboard. It must start with pypi-.
Select Push trigger event, select debian-10-amd64 environment, add python-setuptools python-setuptools-wheel python3-setuptools python3-wheel twine to the Packages to install section (we add all the possible names to cover all distributions - invalid names are ignored), and, for the first command, input bash my_build_script.sh. Finally, click Add button.

We can go back to terminal, and run:
git push

If everything went OK, after few minutes, you can check the Webhooks area: go to Settings in the main menu and go to Webhooks submenu. Scroll to your webhook, and expand Last output area: here you will find the output of the package installation process and the output of your my_build_script.sh script. From this log, you can figure out why something went wrong or you can find that your upload was a success.

Go to PyPI and you should see your package uploaded there.
To install your newly uploaded package, on any machine, use:
python3 -m pip install example-pkg-YOUR-USERNAME-HERE

To use it:
python3 >>> import prj1 >>> prj1.hello();