Github workflow can be used for building and Testing packages on Github repositories. For Python package repository, workflow/ GitHub action can be used to automate TestPYPI upload.
(TestPYPI is a separate instance of the Python Package Index that allows you to try distribution tools and processes without affecting the real index).
Prepare You Python Package
First up all you have to prepare your Python package . Make sure package consist of
- Setup.py
- Readme.md file
Setup.py
Here is a sample code of setup.py
import os with open("readme.md", "r") as fh: long_description = fh.read() setuptools.setup( name="PACAKGE-NAME-USERNAME", # Replace with your own username version="1.0.1", author="author name", author_email="email", description="short description", long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/udername/pakg-repo", packages=setuptools.find_packages(), install_requires=[ 'pacakge1','package2' ], classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], python_requires='>=3.6', )
Readme.md
Read me file consist of
- Repository/package details
- Requirements
- How to use the repo etc
Use a markdown page for serving the readme file
Github Repository and Action
Now it is time for setup workflow for the python repository you have uploaded to the Github.com
Get a TestPYPI account
As prerequisite for this tutorial you need to register an account in TestPYPi.org.
Repository secret
Go to you repository settings-Secrets and add the following secrets
PYPI_USERNAME
PYPI_PASSWORD
GitHub Secret
Add a workflow for upload a Python Package
Add a action , use manual method and copy following Upload TestPYPI workflow file also name file as UploadTestPYPI.yml
# This workflows will upload a Python Package using Twine when a release is created # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries name: Upload PYPI . release: types: [created] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.x' - name: Install dependencies run: | python -m pip install --upgrade pip pip install setuptools wheel twine - name: Build and publish env: TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | python setup.py sdist bdist_wheel twine upload --repository testpypi dist/*
The above workflow will install dependencies on a Ubuntu cloud machine, then build the package, then upload the package to testpypi repository using twine and secret you have added to your repository, namely PYPI_USERNAME and PYPI_PASSWORD.
As we specified on the on section of the workflow, will execute the action whenever you create a new release.
You can check for result of the workflow at the actions link of your repository, also on the top of repo a notification will shown if the workflow is executed.