treyhunner/django-simple-history

View on GitHub
.github/workflows/test.yml

Summary

Maintainability
Test Coverage
---
name: Test

on: [push, pull_request]

jobs:
  build:
    name: build (Python ${{ matrix.python-version }}, Django ${{ matrix.django-version }})
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13-dev']
        django-version: ['3.2', '4.2', '5.0', 'main']

        exclude:
          # Exclude py3.8 and py3.9 for Django main and 5.0
          - python-version: '3.8'
            django-version: '5.0'
          - python-version: '3.9'
            django-version: '5.0'
          - python-version: '3.8'
            django-version: 'main'
          - python-version: '3.9'
            django-version: 'main'

          # Exclude py3.11, py3.12 and py3.13 for Django 3.2
          - python-version: '3.11'
            django-version: '3.2'
          - python-version: '3.12'
            django-version: '3.2'
          - python-version: '3.13-dev'
            django-version: '3.2'

    services:

      postgres:
        image: postgres:latest
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: github_actions
        ports:
          - 5432:5432
        # needed because the postgres container does not provide a healthcheck
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

      mysql:
        image: mysql:latest
        env:
          MYSQL_DATABASE: mysql
          MYSQL_ROOT_PASSWORD: mysql
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

      mariadb:
        image: mariadb:latest
        env:
          MARIADB_DATABASE: mariadb
          MARIADB_ROOT_PASSWORD: mariadb
        ports:
          - 3307:3306
        options: --health-cmd="mariadb-admin ping" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
      - uses: actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
          cache: 'pip'
          cache-dependency-path: |
            setup.py
            tox.ini
            requirements/*.txt

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements/tox.txt

      - name: Tox tests
        run: |
          tox -v
        env:
          DJANGO: ${{ matrix.django-version }}

      - name: Upload coverage
        uses: codecov/codecov-action@v3
        with:
          name: Python ${{ matrix.python-version }}, Django ${{ matrix.django-version }}


  generated_file_checks:
    name: Check generated files
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install gettext
        run: |
          sudo apt-get update
          sudo apt-get install -y gettext

      - name: Set up newest stable Python version
        uses: actions/setup-python@v5
        with:
          python-version: 3.11
          cache: 'pip'
          # Invalidate the cache when this file updates, as the dependencies' versions
          # are pinned in the step below
          cache-dependency-path: '.github/workflows/test.yml'

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          # Install this project in editable mode, so that its package metadata can be queried
          pip install -e .
          # Install the latest minor version of Django we support
          pip install Django==5.0

      - name: Check translation files are updated
        run: python -m simple_history.tests.generated_file_checks.check_translations