Logo

dev-resources.site

for different kinds of informations.

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

Published at
1/6/2025
Categories
python
poetry
github
actions
Author
jajera
Categories
4 categories in total
python
open
poetry
open
github
open
actions
open
Author
6 person written this
jajera
open
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.

actions Article's
30 articles in total
Favicon
How to upload Markdown files to Dev.to from GitHub
Favicon
How to Configure GitHub Actions CI for Python Using Poetry on Multiple Versions
Favicon
Proposal: Standard Communication API Channels for AI Agents (AI Generated)
Favicon
Understanding GitHub Actions Working Directory
Favicon
Automating Mastodon Posts with GitHub Actions
Favicon
Getting Started with GitHub Actions: A Beginner's Guide to Automation
Favicon
Configure GitHub for Dev.to Publishing
Favicon
Getting Started with GitHub Actions: A Beginner's Guide to Automation
Favicon
Configure GitHub for Dev.to Publishing
Favicon
github action services: mysql, redis and elasticsearch
Favicon
Future-Proofing Your Auth0 Integration: Moving from Rules and Hooks to Actions
Favicon
6 GitHub Actions Every DevOps Team Needs
Favicon
GitHub Workflow and Automation: Streamlining Project Management πŸš€
Favicon
Server actions in Next.js
Favicon
Actions - React 19
Favicon
NextJs Server Actions: Why and How
Favicon
The truth about Mindset and how it can influence your actions positively
Favicon
Optimizing Parallel Jobs in a Github Workflow
Favicon
How to set preconfigured actions in the CloudBees platform
Favicon
Auto-deploy docker images to Docker Hub using GitHub actions
Favicon
Secure NextJS Server Actions Using Body Validation
Favicon
Github action to detect ip addresses
Favicon
Vegaration: Visualising continuous integration using Github actions and vega-lite
Favicon
GitHub Action for Commit Message Validation
Favicon
Query GitHub Repo Topics Using GraphQL
Favicon
Setup a Dynamic GitHub User Profile README
Favicon
How to publish React App (CRA) on Github Pages using Github Actions with Turborepo
Favicon
Guide: Automate the deployment of a virtual machine on AWS using Terraform and Github Actions
Favicon
Netlify Nextjs Deployment β€” Page Not Found Issue Solution
Favicon
Github Actions

Featured ones: