DEV Community

John  Ajera
John Ajera

Posted on

1

How to Configure GitHub Actions CI for Python Using Poetry on Multiple Versions

How to Configure GitHub Actions CI for Python Using Poetry on Multiple Versions πŸš€

Learn how to set up a robust GitHub Actions CI pipeline for your Python project using Poetry, testing across multiple Python versions to ensure compatibility and reliability.

Continuous Integration (CI) is a critical part of any modern software development workflow. If you’re managing dependencies and environments with Poetry, this guide will help you configure a robust GitHub Actions CI pipeline for your Python project across multiple Python versions. For a practical example, you can refer to the actual code in this GitHub repository: jdevto/python-poetry-hello. πŸŽ‰


Why Poetry for Python Projects? 🐍

Poetry simplifies Python dependency management and packaging. It provides:

  • A clear pyproject.toml file for dependencies and project metadata.
  • A virtual environment management system.
  • Commands to build, publish, and manage dependencies.

Configuring GitHub Actions for Python Using Poetry on Multiple Versions

Below is a complete GitHub Actions workflow configuration to automate your CI pipeline with Poetry across Python versions 3.9 to 3.13. This example includes three types of triggers: on push to the main branch, on pull requests, and on a scheduled daily cron job. You can adjust these triggers to suit your own requirements.

name: ci

on:
  push:
    branches:
      - main
  pull_request:
  schedule:
    - cron: 0 12 * * *
  workflow_dispatch:

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
      fail-fast: false

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install Poetry
        run: |
          curl -sSL https://install.python-poetry.org | python3 -
          echo "PATH=$HOME/.local/bin:$PATH" >> $GITHUB_ENV

      - name: Install dependencies with Poetry
        run: |
          cd hello-world
          poetry install --with dev

      - name: Set PYTHONPATH to include the source directory
        run: echo "PYTHONPATH=$PWD/hello-world" >> $GITHUB_ENV

      - name: Run tests
        run: |
          cd hello-world
          poetry run pytest --cov=hello-world --cov-report=term-missing
Enter fullscreen mode Exit fullscreen mode

Key Steps in the Workflow

1. Checkout Code

The actions/checkout@v4 action fetches your code from the repository so it can be used in subsequent steps.

2. Set Up Python

The actions/setup-python@v4 action installs the specified Python versions using a matrix strategy, enabling tests to run on multiple Python versions.

3. Install Poetry

The script installs the latest version of Poetry using its official installation method and ensures it’s added to the PATH.

4. Install Dependencies

poetry install --with dev installs all the project’s dependencies, including development dependencies.

5. Set PYTHONPATH

The PYTHONPATH environment variable is configured to include the src directory, enabling proper module imports during testing.

6. Run Tests

poetry run pytest runs the tests defined in your project, with coverage reporting enabled via --cov=src --cov-report=term-missing.


Enhancements

1. Add Caching for Dependencies

To speed up your workflow, you can cache Poetry dependencies:

      - name: Cache Poetry dependencies
        uses: actions/cache@v4
        with:
          path: ~/.cache/pypoetry
          key: ${{ runner.os }}-poetry-${{ hashFiles('poetry.lock') }}
          restore-keys: |
            ${{ runner.os }}-poetry-
Enter fullscreen mode Exit fullscreen mode

Add this step before installing dependencies to skip re-installing dependencies if nothing has changed.


Conclusion

By configuring this GitHub Actions workflow, you can automate testing across multiple Python versions and ensure that your Python project using Poetry is always in top shape. This setup includes steps to install dependencies, run tests, and even cache dependencies for faster builds. πŸš€

If you have any questions or suggestions, feel free to share! πŸ™Œ For more inspiration and a working example, visit the GitHub repository: jdevto/python-poetry-hello.

Image of Docusign

πŸ› οΈ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

πŸ‘‹ Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay