Test and publish your Python packages to PyPI with poetry and GitHub Actions
Python tip:
Use poetry and Github Actions to:
- run tests for your packages - on every push
- check code quality - on every push
- publish the packages to PyPI - on every release
https://testdriven.io/blog/python-project-workflow/
An example👇
Test and check for code quality:
name: Push on: [push] jobs: test: strategy: fail-fast: false matrix: python-version: [3.9] poetry-version: [1.1.2] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Run image uses: abatilo/[email protected] with: poetry-version: ${{ matrix.poetry-version }} - name: Install dependencies run: poetry install - name: Run tests run: poetry run pytest --cov=./ --cov-report=xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v1 code-quality: strategy: fail-fast: false matrix: python-version: [3.9] poetry-version: [1.1.2] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Run image uses: abatilo/[email protected] with: poetry-version: ${{ matrix.poetry-version }} - name: Install dependencies run: poetry install - name: Run black run: poetry run black . --check - name: Run isort run: poetry run isort . --check-only - name: Run flake8 run: poetry run flake8 . - name: Run bandit run: poetry run bandit . - name: Run saftey run: poetry run safety check
Release:
name: Release on: release: types: - created jobs: publish: strategy: fail-fast: false matrix: python-version: [3.9] poetry-version: [1.1.2] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Run image uses: abatilo/[email protected] with: poetry-version: ${{ matrix.poetry-version }} - name: Publish env: PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} run: | poetry config pypi-token.pypi $PYPI_TOKEN poetry publish --build