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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
name: CI
on:
pull_request:
push:
branches:
- master
tags:
- "*"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
django-version: ["4.2", "5.2", "6.0"]
exclude:
- django-version: "6.0"
python-version: "3.10"
- django-version: "6.0"
python-version: "3.11"
- django-version: "4.2"
python-version: "3.14"
steps:
- uses: actions/checkout@v6
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- uses: actions/cache@v5
with:
path: ~/.cache/pip
key: ${{ runner.os }}-${{ matrix.python-version }}-pip-${{ hashFiles('pyproject.toml') }}
- uses: taiki-e/install-action@just
- name: Install dependencies
run: |
pip install --upgrade pip
pip install -e . --group dev
pip install Django~=${{ matrix.django-version }}
- name: Lint
run: just lint
- name: Run fast tests
if: ${{ !cancelled() }}
run: just test-fast -v2
- name: Run tests
if: ${{ !cancelled() }}
run: just test -v2 --keepdb
test-postgres:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16-alpine
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
strategy:
fail-fast: false
matrix:
django-version: ["5.2", "6.0"]
steps:
- uses: actions/checkout@v6
- name: Set up Python 3.14
uses: actions/setup-python@v6
with:
python-version: "3.14"
- uses: actions/cache@v5
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }}
- uses: taiki-e/install-action@just
- name: Install dependencies
run: |
pip install --upgrade pip
pip install -e . --group dev --group postgres
pip install Django~=${{ matrix.django-version }}
- name: Run tests
run: just test -v2
env:
DATABASE_URL: postgres://postgres:postgres@localhost/postgres
test-mysql:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.4
env:
MYSQL_ROOT_PASSWORD: django
MYSQL_DATABASE: django
ports:
- 3306:3306
strategy:
fail-fast: false
matrix:
django-version: ["5.2", "6.0"]
steps:
- uses: actions/checkout@v6
- name: Set up Python 3.14
uses: actions/setup-python@v6
with:
python-version: "3.14"
- uses: actions/cache@v5
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }}
- uses: taiki-e/install-action@just
- name: Install dependencies
run: |
pip install --upgrade pip
pip install -e . --group dev --group mysql
pip install Django~=${{ matrix.django-version }}
- name: Run tests
run: just test -v2
env:
DATABASE_URL: mysql://root:django@127.0.0.1/django
build:
permissions:
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
runs-on: ubuntu-latest
needs:
- test
- test-postgres
- test-mysql
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.14"
- name: Install dependencies
run: |
python -m pip install --upgrade pip build
- name: Build package
run: python -m build
- name: Save built package
uses: actions/upload-artifact@v6
with:
name: package
path: dist
- name: Publish to PyPi
if: ${{ github.ref_type == 'tag' }}
uses: pypa/gh-action-pypi-publish@release/v1
with:
print-hash: true
|