1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
name: django-cte tests
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
jobs:
configure:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Read Python versions from pyproject.toml
id: read-python-versions
# produces output like: python_versions=[ "3.9", "3.10", "3.11", "3.12" ]
run: >-
echo "python_versions=$(
grep -oP '(?<=Language :: Python :: )\d\.\d+' pyproject.toml
| jq --raw-input .
| jq --slurp .
| tr '\n' ' '
)" >> $GITHUB_OUTPUT
- name: Read Django versions from pyproject.toml
id: read-django-versions
# django_versions=[ "Django~=4.2.0", "Django~=5.1.0", "Django~=5.2.0" ]
run: >-
echo "django_versions=$(
grep -oP '(?<=Framework :: Django :: )\d+\.\d+' pyproject.toml
| sed -E 's/(.+)/Django~=\1.0/'
| jq --raw-input .
| jq --slurp .
| tr '\n' ' '
)" >> $GITHUB_OUTPUT
outputs:
python_versions: ${{ steps.read-python-versions.outputs.python_versions }}
django_versions: ${{ steps.read-django-versions.outputs.django_versions }}
tests:
needs: [configure]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python: ${{ fromJSON(needs.configure.outputs.python_versions) }}
django: ${{ fromJSON(needs.configure.outputs.django_versions) }}
exclude:
- {python: '3.9', django: 'Django~=5.1.0'}
- {python: '3.9', django: 'Django~=5.2.0'}
env:
allowed_python_failure: '3.14'
services:
postgres:
image: postgres:latest
env:
POSTGRES_DB: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v6
with:
version: '>=0.7'
python-version: ${{ matrix.python }}
- name: Setup
run: |
uv sync --locked --no-install-package=django
uv pip install "${{ matrix.django }}"
- name: Run tests on PostgreSQL
env:
DB_SETTINGS: >-
{
"ENGINE":"django.db.backends.postgresql_psycopg2",
"NAME":"django_cte",
"USER":"postgres",
"PASSWORD":"postgres",
"HOST":"localhost",
"PORT":"5432"
}
run: .venv/bin/pytest -v
continue-on-error: ${{ matrix.python == env.allowed_python_failure }}
- name: Run tests on SQLite
run: .venv/bin/pytest -v
continue-on-error: ${{ matrix.python == env.allowed_python_failure }}
- name: Check style
run: .venv/bin/ruff check
|