2023-12-12 13:50:15 +03:00
|
|
|
name: Test
|
2025-08-25 10:13:19 +03:00
|
|
|
|
|
|
|
|
permissions:
|
|
|
|
|
contents: read
|
|
|
|
|
|
2023-12-12 13:50:15 +03:00
|
|
|
on:
|
2025-08-25 10:13:19 +03:00
|
|
|
push:
|
|
|
|
|
tags-ignore:
|
|
|
|
|
- '*'
|
|
|
|
|
branches:
|
|
|
|
|
- '*'
|
|
|
|
|
pull_request:
|
|
|
|
|
workflow_call:
|
|
|
|
|
workflow_dispatch:
|
|
|
|
|
inputs:
|
|
|
|
|
debug:
|
|
|
|
|
description: 'Open ssh debug session.'
|
|
|
|
|
required: true
|
|
|
|
|
default: false
|
|
|
|
|
type: boolean
|
|
|
|
|
schedule:
|
|
|
|
|
- cron: '0 13 * * *' # Runs at 6 am pacific every day
|
|
|
|
|
|
|
|
|
|
|
2023-12-12 13:50:15 +03:00
|
|
|
jobs:
|
2025-08-25 10:13:19 +03:00
|
|
|
|
|
|
|
|
postgres:
|
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
|
permissions:
|
|
|
|
|
contents: read
|
|
|
|
|
actions: write
|
|
|
|
|
# Service containers to run with `container-job`
|
|
|
|
|
strategy:
|
|
|
|
|
fail-fast: false
|
|
|
|
|
matrix:
|
2025-11-29 11:41:29 +03:00
|
|
|
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
|
|
|
|
|
postgres-version: ['12', '14', 'latest']
|
2025-08-25 10:13:19 +03:00
|
|
|
psycopg-version: ['psycopg2', 'psycopg3']
|
|
|
|
|
django-version:
|
|
|
|
|
- '4.2' # LTS April 2026
|
|
|
|
|
- '5.1' # December 2025
|
|
|
|
|
- '5.2' # LTS April 2028
|
2025-12-04 07:55:53 +03:00
|
|
|
- '6.0' #
|
2025-08-25 10:13:19 +03:00
|
|
|
exclude:
|
|
|
|
|
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.10'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.11'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- python-version: '3.13'
|
|
|
|
|
django-version: '4.2'
|
2025-08-25 10:13:19 +03:00
|
|
|
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.14'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
- python-version: '3.14'
|
|
|
|
|
django-version: '5.1'
|
|
|
|
|
- python-version: '3.14'
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version: '5.2'
|
|
|
|
|
|
2025-11-29 11:41:29 +03:00
|
|
|
- postgres-version: '12'
|
|
|
|
|
django-version: '5.1'
|
2025-08-25 10:13:19 +03:00
|
|
|
- postgres-version: '12'
|
|
|
|
|
django-version: '5.2'
|
2025-11-29 11:41:29 +03:00
|
|
|
- postgres-version: '12'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-08-25 10:13:19 +03:00
|
|
|
|
2025-11-29 11:41:29 +03:00
|
|
|
- postgres-version: '14'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
- postgres-version: '14'
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version: '5.2'
|
2025-11-29 11:41:29 +03:00
|
|
|
- postgres-version: '14'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- postgres-version: 'latest'
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version: '4.2'
|
2025-11-29 11:41:29 +03:00
|
|
|
- postgres-version: 'latest'
|
|
|
|
|
django-version: '5.1'
|
|
|
|
|
|
|
|
|
|
- postgres-version: '12'
|
|
|
|
|
psycopg-version: 'psycopg3'
|
|
|
|
|
- postgres-version: 'latest'
|
|
|
|
|
psycopg-version: 'psycopg2'
|
2025-08-25 10:13:19 +03:00
|
|
|
|
|
|
|
|
# https://github.com/psycopg/psycopg2/pull/1695
|
|
|
|
|
- python-version: '3.13'
|
|
|
|
|
psycopg-version: 'psycopg2'
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.14'
|
|
|
|
|
psycopg-version: 'psycopg2'
|
|
|
|
|
|
2025-08-25 10:13:19 +03:00
|
|
|
env:
|
|
|
|
|
RDBMS: postgres
|
|
|
|
|
POSTGRES_PASSWORD: postgres
|
|
|
|
|
PGPASSWORD: postgres
|
|
|
|
|
POSTGRES_USER: postgres
|
|
|
|
|
POSTGRES_HOST: localhost
|
|
|
|
|
POSTGRES_PORT: 5432
|
|
|
|
|
COVERAGE_FILE: linux-py${{ matrix.python-version }}-dj${{ matrix.django-version }}-${{ matrix.psycopg-version }}-pg${{ matrix.postgres-version }}.coverage
|
|
|
|
|
TEST_PYTHON_VERSION: ${{ matrix.python-version }}
|
|
|
|
|
TEST_DJANGO_VERSION: ${{ matrix.django-version }}
|
|
|
|
|
TEST_DATABASE_CLIENT_VERSION: ${{ matrix.psycopg-version }}
|
|
|
|
|
TEST_DATABASE_VERSION: ${{ matrix.postgres-version }}
|
|
|
|
|
|
|
|
|
|
# Service containers to run with `runner-job`
|
|
|
|
|
services:
|
|
|
|
|
# Label used to access the service container
|
|
|
|
|
postgres:
|
|
|
|
|
# Docker Hub image
|
|
|
|
|
image: postgres:${{ matrix.postgres-version }}
|
|
|
|
|
# Provide the password for postgres
|
|
|
|
|
env:
|
|
|
|
|
POSTGRES_PASSWORD: postgres
|
|
|
|
|
# Set health checks to wait until postgres has started
|
|
|
|
|
options: >-
|
|
|
|
|
--health-cmd pg_isready
|
|
|
|
|
--health-interval 10s
|
|
|
|
|
--health-timeout 5s
|
|
|
|
|
--health-retries 5
|
|
|
|
|
ports:
|
|
|
|
|
# Maps tcp port 5432 on service container to the host
|
|
|
|
|
- 5432:5432
|
|
|
|
|
|
2023-12-12 13:50:15 +03:00
|
|
|
steps:
|
2025-08-25 10:13:19 +03:00
|
|
|
- uses: actions/checkout@v5
|
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
|
|
|
id: sp
|
|
|
|
|
uses: actions/setup-python@v5
|
|
|
|
|
with:
|
|
|
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
|
- name: Create test databases
|
|
|
|
|
run: |
|
|
|
|
|
psql -h localhost -p 5432 -U postgres -d postgres -c "CREATE DATABASE test1;"
|
|
|
|
|
psql -h localhost -p 5432 -U postgres -d postgres -c "CREATE DATABASE test2;"
|
|
|
|
|
- name: Install uv
|
|
|
|
|
uses: astral-sh/setup-uv@v6
|
|
|
|
|
with:
|
|
|
|
|
enable-cache: true
|
|
|
|
|
- name: Setup Just
|
|
|
|
|
uses: extractions/setup-just@v3
|
|
|
|
|
- name: Install Emacs
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
run: |
|
|
|
|
|
sudo apt install emacs
|
|
|
|
|
- name: Setup tmate session
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
uses: mxschmitt/action-tmate@v3.22
|
|
|
|
|
with:
|
|
|
|
|
detached: true
|
|
|
|
|
timeout-minutes: 60
|
|
|
|
|
- name: Install Release Dependencies
|
|
|
|
|
run: |
|
|
|
|
|
just setup ${{ steps.sp.outputs.python-path }}
|
2025-11-29 11:41:29 +03:00
|
|
|
if [[ "${{ matrix.django-version }}" =~ (a|b|rc) ]]; then
|
|
|
|
|
just test-lock Django==${{ matrix.django-version }}
|
|
|
|
|
else
|
|
|
|
|
just test-lock Django~=${{ matrix.django-version }}.0
|
|
|
|
|
fi
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Run Unit Tests
|
|
|
|
|
run: |
|
|
|
|
|
just test-db ${{ matrix.psycopg-version }}
|
2026-01-11 10:01:36 +03:00
|
|
|
just test-integrations ${{ matrix.psycopg-version }}
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Store coverage files
|
|
|
|
|
uses: actions/upload-artifact@v4
|
|
|
|
|
with:
|
|
|
|
|
name: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
path: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sqlite:
|
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
|
permissions:
|
|
|
|
|
contents: read
|
|
|
|
|
actions: write
|
|
|
|
|
env:
|
|
|
|
|
RDBMS: sqlite
|
|
|
|
|
COVERAGE_FILE: linux-py${{ matrix.python-version }}-dj${{ matrix.django-version }}-sqlite.coverage
|
|
|
|
|
TEST_PYTHON_VERSION: ${{ matrix.python-version }}
|
|
|
|
|
TEST_DJANGO_VERSION: ${{ matrix.django-version }}
|
|
|
|
|
TEST_DATABASE_VERSION: "sqlite"
|
|
|
|
|
strategy:
|
|
|
|
|
fail-fast: false
|
|
|
|
|
matrix:
|
2025-11-29 11:41:29 +03:00
|
|
|
python-version: [ '3.10', '3.12', '3.14']
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version:
|
|
|
|
|
- '4.2' # LTS April 2026
|
|
|
|
|
- '5.2' # LTS April 2028
|
2025-12-04 07:55:53 +03:00
|
|
|
- '6.0' # LTS April 2028
|
2025-08-25 10:13:19 +03:00
|
|
|
exclude:
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.10'
|
|
|
|
|
django-version: '5.2'
|
|
|
|
|
- python-version: '3.10'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- python-version: '3.12'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
- python-version: '3.12'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- python-version: '3.14'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
- python-version: '3.14'
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version: '5.2'
|
|
|
|
|
|
|
|
|
|
steps:
|
|
|
|
|
- uses: actions/checkout@v5
|
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
|
|
|
uses: actions/setup-python@v5
|
|
|
|
|
id: sp
|
|
|
|
|
with:
|
|
|
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
|
- name: Install uv
|
|
|
|
|
uses: astral-sh/setup-uv@v6
|
|
|
|
|
with:
|
|
|
|
|
enable-cache: true
|
|
|
|
|
- name: Setup Just
|
|
|
|
|
uses: extractions/setup-just@v3
|
|
|
|
|
- name: Install Emacs
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
run: |
|
|
|
|
|
sudo apt install emacs
|
|
|
|
|
- name: Setup tmate session
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
uses: mxschmitt/action-tmate@v3.22
|
|
|
|
|
with:
|
|
|
|
|
detached: true
|
|
|
|
|
timeout-minutes: 60
|
|
|
|
|
- name: Install Release Dependencies
|
|
|
|
|
run: |
|
|
|
|
|
just setup ${{ steps.sp.outputs.python-path }}
|
|
|
|
|
just install
|
2025-11-29 11:41:29 +03:00
|
|
|
if [[ "${{ matrix.django-version }}" =~ (a|b|rc) ]]; then
|
|
|
|
|
just test-lock Django==${{ matrix.django-version }}
|
|
|
|
|
else
|
|
|
|
|
just test-lock Django~=${{ matrix.django-version }}.0
|
|
|
|
|
fi
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Run Unit Tests
|
|
|
|
|
run: |
|
|
|
|
|
just test-db
|
2026-01-11 10:01:36 +03:00
|
|
|
just test-integrations
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Store coverage files
|
|
|
|
|
uses: actions/upload-artifact@v4
|
|
|
|
|
with:
|
|
|
|
|
name: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
path: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mysql:
|
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
|
permissions:
|
|
|
|
|
contents: read
|
|
|
|
|
actions: write
|
|
|
|
|
strategy:
|
|
|
|
|
fail-fast: false
|
|
|
|
|
matrix:
|
2025-11-29 11:41:29 +03:00
|
|
|
python-version: ['3.10', '3.12', '3.14']
|
|
|
|
|
mysql-version: ['8.0', 'latest']
|
2025-08-25 10:13:19 +03:00
|
|
|
mysqlclient-version: ['1.4.3', '']
|
|
|
|
|
django-version:
|
2025-11-29 11:41:29 +03:00
|
|
|
- '4.2' # LTS April 2024
|
|
|
|
|
- '5.2' # LTS April 2028
|
2025-12-04 07:55:53 +03:00
|
|
|
- '6.0' # April 2027
|
2025-08-25 10:13:19 +03:00
|
|
|
exclude:
|
|
|
|
|
- django-version: '4.2'
|
2025-11-29 11:41:29 +03:00
|
|
|
mysql-version: 'latest'
|
|
|
|
|
|
2025-12-04 07:55:53 +03:00
|
|
|
- django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
mysql-version: '8.0'
|
2025-08-25 10:13:19 +03:00
|
|
|
|
|
|
|
|
- mysql-version: 'latest'
|
|
|
|
|
mysqlclient-version: '1.4.3'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- python-version: '3.12'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
- python-version: '3.14'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
|
|
|
|
|
- python-version: '3.10'
|
|
|
|
|
django-version: '5.2'
|
|
|
|
|
- python-version: '3.14'
|
|
|
|
|
django-version: '5.2'
|
|
|
|
|
- django-version: '5.2'
|
|
|
|
|
mysqlclient-version: '1.4.3'
|
|
|
|
|
|
|
|
|
|
- python-version: '3.10'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.12'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-08-25 10:13:19 +03:00
|
|
|
|
|
|
|
|
env:
|
|
|
|
|
RDBMS: mysql
|
|
|
|
|
MYSQL_VERSION: ${{ matrix.mysql-version }}
|
|
|
|
|
COVERAGE_FILE: linux-py${{ matrix.python-version }}-dj${{ matrix.django-version }}-${{ matrix.mysqlclient-version }}-mysql${{ matrix.mysql-version }}.coverage
|
|
|
|
|
TEST_PYTHON_VERSION: ${{ matrix.python-version }}
|
|
|
|
|
TEST_DJANGO_VERSION: ${{ matrix.django-version }}
|
|
|
|
|
TEST_DATABASE_CLIENT_VERSION: ${{ matrix.mysqlclient-version }}
|
|
|
|
|
TEST_DATABASE_VERSION: ${{ matrix.mysql-version }}
|
|
|
|
|
|
|
|
|
|
services:
|
|
|
|
|
mysql:
|
|
|
|
|
# Docker Hub image
|
|
|
|
|
image: mysql:${{ matrix.mysql-version }}
|
|
|
|
|
# Provide the password for mysql
|
|
|
|
|
env:
|
|
|
|
|
MYSQL_ROOT_PASSWORD: root
|
|
|
|
|
MYSQL_MULTIPLE_DATABASES: test1,test2
|
|
|
|
|
# Set health checks to wait until mysql has started
|
|
|
|
|
options: >-
|
|
|
|
|
--health-cmd "mysqladmin ping"
|
|
|
|
|
--health-interval 10s
|
|
|
|
|
--health-timeout 5s
|
|
|
|
|
--health-retries 5
|
|
|
|
|
ports:
|
|
|
|
|
# Maps tcp port 3306 on service container to the host
|
|
|
|
|
- 3306:3306
|
|
|
|
|
|
|
|
|
|
steps:
|
2026-01-09 01:04:36 +03:00
|
|
|
# make text comparisons case sensitive (some tests)
|
|
|
|
|
- name: Set default collation for MySQL
|
|
|
|
|
run: |
|
|
|
|
|
mysql -h 127.0.0.1 -u root -proot <<EOF
|
|
|
|
|
SET GLOBAL character_set_server='utf8mb4';
|
|
|
|
|
SET GLOBAL collation_server='utf8mb4_0900_as_cs';
|
|
|
|
|
EOF
|
2025-08-25 10:13:19 +03:00
|
|
|
- uses: actions/checkout@v5
|
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
|
|
|
uses: actions/setup-python@v5
|
|
|
|
|
id: sp
|
|
|
|
|
with:
|
|
|
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
|
- name: Install Emacs
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
run: |
|
|
|
|
|
sudo apt install emacs
|
|
|
|
|
- name: Setup tmate session
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
uses: mxschmitt/action-tmate@v3.22
|
|
|
|
|
with:
|
|
|
|
|
detached: true
|
|
|
|
|
timeout-minutes: 60
|
|
|
|
|
- name: Install uv
|
|
|
|
|
uses: astral-sh/setup-uv@v6
|
|
|
|
|
with:
|
|
|
|
|
enable-cache: true
|
|
|
|
|
- name: Setup Just
|
|
|
|
|
uses: extractions/setup-just@v3
|
|
|
|
|
- name: Install Release Dependencies
|
|
|
|
|
run: |
|
|
|
|
|
just setup ${{ steps.sp.outputs.python-path }}
|
2025-11-29 11:41:29 +03:00
|
|
|
if [[ "${{ matrix.django-version }}" =~ (a|b|rc) ]]; then
|
|
|
|
|
just test-lock Django==${{ matrix.django-version }}
|
|
|
|
|
else
|
|
|
|
|
just test-lock Django~=${{ matrix.django-version }}.0
|
|
|
|
|
fi
|
2025-08-25 10:13:19 +03:00
|
|
|
|
|
|
|
|
- name: Install mysqlclient if needed
|
|
|
|
|
if: ${{ matrix.mysqlclient-version != '' }}
|
|
|
|
|
run: just test-lock mysqlclient==${{ matrix.mysqlclient-version }}
|
|
|
|
|
- name: Run Unit Tests
|
|
|
|
|
run: |
|
|
|
|
|
just test-db mysql
|
2026-01-11 10:01:36 +03:00
|
|
|
just test-integrations mysql
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Store coverage files
|
|
|
|
|
uses: actions/upload-artifact@v4
|
|
|
|
|
with:
|
|
|
|
|
name: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
path: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
|
|
|
|
|
mariadb:
|
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
|
permissions:
|
|
|
|
|
contents: read
|
|
|
|
|
actions: write
|
|
|
|
|
env:
|
|
|
|
|
RDBMS: mariadb
|
|
|
|
|
COVERAGE_FILE: linux-py${{ matrix.python-version }}-dj${{ matrix.django-version }}-${{ matrix.mysqlclient-version }}-mariadb${{ matrix.mariadb-version }}.coverage
|
|
|
|
|
TEST_PYTHON_VERSION: ${{ matrix.python-version }}
|
|
|
|
|
TEST_DJANGO_VERSION: ${{ matrix.django-version }}
|
|
|
|
|
TEST_DATABASE_CLIENT_VERSION: ${{ matrix.mysqlclient-version }}
|
|
|
|
|
TEST_DATABASE_VERSION: ${{ matrix.mariadb-version }}
|
|
|
|
|
|
|
|
|
|
strategy:
|
|
|
|
|
fail-fast: false
|
|
|
|
|
matrix:
|
2025-11-29 11:41:29 +03:00
|
|
|
python-version: ['3.10', '3.12', '3.14']
|
2025-08-25 10:13:19 +03:00
|
|
|
mysqlclient-version: ['1.4.3', '']
|
2025-11-29 11:41:29 +03:00
|
|
|
mariadb-version: ['10.4', 'latest']
|
2025-08-25 10:13:19 +03:00
|
|
|
mariadb-healthcheck: ["mysqladmin ping", "healthcheck.sh --connect --innodb_initialized"]
|
|
|
|
|
django-version:
|
2025-11-29 11:41:29 +03:00
|
|
|
- '4.2' # LTS April 2024
|
|
|
|
|
- '5.2' # LTS April 2028
|
2025-12-04 07:55:53 +03:00
|
|
|
- '6.0' # April 2027
|
2025-08-25 10:13:19 +03:00
|
|
|
exclude:
|
|
|
|
|
- django-version: '4.2'
|
2025-11-29 11:41:29 +03:00
|
|
|
mariadb-version: 'latest'
|
|
|
|
|
|
2025-08-25 10:13:19 +03:00
|
|
|
- django-version: '5.2'
|
2025-11-29 11:41:29 +03:00
|
|
|
mariadb-version: '10.4'
|
2025-12-04 07:55:53 +03:00
|
|
|
- django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
mariadb-version: '10.4'
|
2025-08-25 10:13:19 +03:00
|
|
|
|
|
|
|
|
- mariadb-version: 'latest'
|
|
|
|
|
mysqlclient-version: '1.4.3'
|
|
|
|
|
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.12'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
- python-version: '3.14'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
|
|
|
|
|
- python-version: '3.10'
|
|
|
|
|
django-version: '5.2'
|
|
|
|
|
- python-version: '3.14'
|
|
|
|
|
django-version: '5.2'
|
|
|
|
|
- django-version: '5.2'
|
|
|
|
|
mysqlclient-version: '1.4.3'
|
|
|
|
|
|
|
|
|
|
- python-version: '3.10'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.12'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- mariadb-version: '10.4'
|
|
|
|
|
mysqlclient-version: ''
|
|
|
|
|
|
2025-08-25 10:13:19 +03:00
|
|
|
- mariadb-version: 'latest'
|
|
|
|
|
mariadb-healthcheck: "mysqladmin ping"
|
2025-11-29 11:41:29 +03:00
|
|
|
- mariadb-version: '10.4'
|
2025-08-25 10:13:19 +03:00
|
|
|
mariadb-healthcheck: "healthcheck.sh --connect --innodb_initialized"
|
|
|
|
|
|
|
|
|
|
services:
|
2026-01-09 01:04:36 +03:00
|
|
|
mariadb:
|
2025-08-25 10:13:19 +03:00
|
|
|
# Docker Hub image
|
|
|
|
|
image: mariadb:${{ matrix.mariadb-version }}
|
|
|
|
|
# Provide the password for mysql
|
|
|
|
|
env:
|
|
|
|
|
MYSQL_ROOT_PASSWORD: root
|
|
|
|
|
MYSQL_MULTIPLE_DATABASES: test1,test2
|
|
|
|
|
# Set health checks to wait until mysql has started
|
|
|
|
|
options: >-
|
|
|
|
|
--health-cmd="${{ matrix.mariadb-healthcheck }}"
|
|
|
|
|
--health-interval 10s
|
|
|
|
|
--health-timeout 5s
|
|
|
|
|
--health-retries 5
|
|
|
|
|
ports:
|
|
|
|
|
# Maps tcp port 3306 on service container to the host
|
|
|
|
|
- 3306:3306
|
|
|
|
|
|
|
|
|
|
steps:
|
2026-01-09 01:04:36 +03:00
|
|
|
# make text comparisons case sensitive (some tests)
|
|
|
|
|
- name: Set default collation for MariaDB
|
|
|
|
|
run: |
|
|
|
|
|
mysql -h 127.0.0.1 -u root -proot <<EOF
|
|
|
|
|
SET GLOBAL character_set_server='utf8mb4';
|
|
|
|
|
SET GLOBAL collation_server='utf8mb4_bin';
|
|
|
|
|
EOF
|
2025-08-25 10:13:19 +03:00
|
|
|
- uses: actions/checkout@v5
|
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
|
|
|
uses: actions/setup-python@v5
|
|
|
|
|
id: sp
|
|
|
|
|
with:
|
|
|
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
|
- name: Install Emacs
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
run: |
|
|
|
|
|
sudo apt install emacs
|
|
|
|
|
- name: Setup tmate session
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
uses: mxschmitt/action-tmate@v3.22
|
2023-12-12 13:50:15 +03:00
|
|
|
with:
|
2025-08-25 10:13:19 +03:00
|
|
|
detached: true
|
|
|
|
|
timeout-minutes: 60
|
|
|
|
|
- name: Install uv
|
|
|
|
|
uses: astral-sh/setup-uv@v6
|
|
|
|
|
with:
|
|
|
|
|
enable-cache: true
|
|
|
|
|
- name: Setup Just
|
|
|
|
|
uses: extractions/setup-just@v3
|
|
|
|
|
- name: Install Release Dependencies
|
|
|
|
|
run: |
|
|
|
|
|
just setup ${{ steps.sp.outputs.python-path }}
|
2025-11-29 11:41:29 +03:00
|
|
|
if [[ "${{ matrix.django-version }}" =~ (a|b|rc) ]]; then
|
|
|
|
|
just test-lock Django==${{ matrix.django-version }}
|
|
|
|
|
else
|
|
|
|
|
just test-lock Django~=${{ matrix.django-version }}.0
|
|
|
|
|
fi
|
2025-08-25 10:13:19 +03:00
|
|
|
|
|
|
|
|
- name: Install mysqlclient if needed
|
|
|
|
|
if: ${{ matrix.mysqlclient-version != '' }}
|
|
|
|
|
run: just test-lock mysqlclient==${{ matrix.mysqlclient-version }}
|
|
|
|
|
- name: Run Unit Tests
|
|
|
|
|
run: |
|
|
|
|
|
just test-db mysql
|
2026-01-11 10:01:36 +03:00
|
|
|
just test-integrations mysql
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Store coverage files
|
|
|
|
|
uses: actions/upload-artifact@v4
|
|
|
|
|
with:
|
|
|
|
|
name: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
path: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
|
|
|
|
|
oracle:
|
2023-12-18 15:45:36 +03:00
|
|
|
runs-on: ubuntu-latest
|
2025-08-25 10:13:19 +03:00
|
|
|
permissions:
|
|
|
|
|
contents: read
|
|
|
|
|
actions: write
|
|
|
|
|
env:
|
|
|
|
|
RDBMS: oracle
|
|
|
|
|
COVERAGE_FILE: linux-py${{ matrix.python-version }}-dj${{ matrix.django-version }}-oracle${{ matrix.oracle-version }}.coverage
|
|
|
|
|
TEST_PYTHON_VERSION: ${{ matrix.python-version }}
|
|
|
|
|
TEST_DJANGO_VERSION: ${{ matrix.django-version }}
|
|
|
|
|
TEST_DATABASE_VERSION: ${{ matrix.oracle-version }}
|
|
|
|
|
strategy:
|
|
|
|
|
fail-fast: false
|
|
|
|
|
matrix:
|
2025-11-29 11:41:29 +03:00
|
|
|
python-version: [ '3.10', '3.12', '3.14']
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version:
|
|
|
|
|
- '4.2' # LTS April 2026
|
|
|
|
|
- '5.2' # LTS April 2028
|
2025-12-04 07:55:53 +03:00
|
|
|
- '6.0' # LTS April 2028
|
2025-08-25 10:13:19 +03:00
|
|
|
oracle-version:
|
2025-11-29 11:41:29 +03:00
|
|
|
- 'oracle-xe:21'
|
|
|
|
|
- 'oracle-free:latest'
|
2025-08-25 10:13:19 +03:00
|
|
|
exclude:
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- django-version: '4.2'
|
|
|
|
|
oracle-version: 'oracle-free:latest'
|
|
|
|
|
|
|
|
|
|
- django-version: '5.2'
|
|
|
|
|
oracle-version: 'oracle-free:latest'
|
|
|
|
|
|
2025-12-04 07:55:53 +03:00
|
|
|
- django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
oracle-version: 'oracle-xe:21'
|
|
|
|
|
|
2025-08-25 10:13:19 +03:00
|
|
|
- python-version: '3.10'
|
|
|
|
|
django-version: '5.2'
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.10'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
2025-08-25 10:13:19 +03:00
|
|
|
- python-version: '3.12'
|
|
|
|
|
django-version: '4.2'
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.12'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- python-version: '3.14'
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version: '4.2'
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.14'
|
|
|
|
|
django-version: '5.2'
|
2025-08-25 10:13:19 +03:00
|
|
|
|
|
|
|
|
services:
|
|
|
|
|
oracle1:
|
2025-11-29 11:41:29 +03:00
|
|
|
image: gvenzl/${{ matrix.oracle-version }}
|
2025-08-25 10:13:19 +03:00
|
|
|
env:
|
|
|
|
|
ORACLE_PASSWORD: password
|
|
|
|
|
ORACLE_DATABASE: test1
|
|
|
|
|
# Forward Oracle port
|
|
|
|
|
ports:
|
|
|
|
|
- 1521:1521
|
|
|
|
|
# Provide healthcheck script options for startup
|
|
|
|
|
options: >-
|
|
|
|
|
--health-cmd healthcheck.sh
|
|
|
|
|
--health-interval 10s
|
|
|
|
|
--health-timeout 5s
|
|
|
|
|
--health-retries 10
|
|
|
|
|
|
|
|
|
|
oracle2:
|
2025-11-29 11:41:29 +03:00
|
|
|
image: gvenzl/${{ matrix.oracle-version }}
|
2025-08-25 10:13:19 +03:00
|
|
|
env:
|
|
|
|
|
ORACLE_PASSWORD: password
|
|
|
|
|
ORACLE_DATABASE: test2
|
|
|
|
|
# Forward Oracle port
|
|
|
|
|
ports:
|
|
|
|
|
- 1522:1521
|
|
|
|
|
# Provide healthcheck script options for startup
|
|
|
|
|
options: >-
|
|
|
|
|
--health-cmd healthcheck.sh
|
|
|
|
|
--health-interval 10s
|
|
|
|
|
--health-timeout 5s
|
|
|
|
|
--health-retries 10
|
|
|
|
|
|
|
|
|
|
steps:
|
2025-11-29 11:41:29 +03:00
|
|
|
- name: Set coverage file
|
|
|
|
|
run: |
|
|
|
|
|
ORACLE_TAG=$(echo "${{ matrix.oracle-version }}" | cut -d':' -f2)
|
|
|
|
|
echo "COVERAGE_FILE=linux-py${{ matrix.python-version }}-dj${{ matrix.django-version }}-oracle${ORACLE_TAG}.coverage" >> $GITHUB_ENV
|
2025-08-25 10:13:19 +03:00
|
|
|
- uses: actions/checkout@v5
|
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
|
|
|
id: sp
|
|
|
|
|
uses: actions/setup-python@v5
|
|
|
|
|
with:
|
|
|
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
|
- name: Install Emacs
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
run: |
|
|
|
|
|
sudo apt install emacs
|
|
|
|
|
- name: Setup tmate session
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
uses: mxschmitt/action-tmate@v3.22
|
|
|
|
|
with:
|
|
|
|
|
detached: true
|
|
|
|
|
timeout-minutes: 60
|
|
|
|
|
- name: Install uv
|
|
|
|
|
uses: astral-sh/setup-uv@v6
|
|
|
|
|
with:
|
|
|
|
|
enable-cache: true
|
|
|
|
|
- name: Setup Just
|
|
|
|
|
uses: extractions/setup-just@v3
|
|
|
|
|
- name: Install Oracle Client
|
|
|
|
|
# https://askubuntu.com/questions/1512196/libaio1-on-noble
|
|
|
|
|
run: |
|
|
|
|
|
sudo apt install alien libaio1t64
|
|
|
|
|
sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
|
2025-11-29 11:41:29 +03:00
|
|
|
if [[ "${{ matrix.oracle-version }}" == oracle-xe* ]]; then
|
|
|
|
|
curl --output oracle-client.rpm https://download.oracle.com/otn_software/linux/instantclient/2116000/oracle-instantclient-basiclite-21.16.0.0.0-1.el8.x86_64.rpm
|
|
|
|
|
sudo alien -i oracle-client.rpm
|
|
|
|
|
sudo sh -c "echo /usr/lib/oracle/21/client64/lib/ > /etc/ld.so.conf.d/oracle.conf"
|
|
|
|
|
else
|
|
|
|
|
curl --output oracle-client.rpm https://download.oracle.com/otn_software/linux/instantclient/2326000/oracle-instantclient-basiclite-23.26.0.0.0-1.el9.x86_64.rpm
|
|
|
|
|
sudo alien -i oracle-client.rpm
|
|
|
|
|
sudo sh -c "echo /usr/lib/oracle/23/client64/lib/ > /etc/ld.so.conf.d/oracle.conf"
|
|
|
|
|
fi
|
2025-08-25 10:13:19 +03:00
|
|
|
sudo ldconfig
|
|
|
|
|
- name: Install Release Dependencies
|
|
|
|
|
run: |
|
|
|
|
|
just setup ${{ steps.sp.outputs.python-path }}
|
2025-11-29 11:41:29 +03:00
|
|
|
if [[ "${{ matrix.django-version }}" =~ (a|b|rc) ]]; then
|
|
|
|
|
just test-lock Django==${{ matrix.django-version }}
|
|
|
|
|
else
|
|
|
|
|
just test-lock Django~=${{ matrix.django-version }}.0
|
|
|
|
|
fi
|
2026-01-11 10:01:36 +03:00
|
|
|
|
|
|
|
|
# we don't run integration tests against Oracle in CI, these are slow enough
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Run Full Unit Tests
|
|
|
|
|
run: |
|
2025-11-29 11:41:29 +03:00
|
|
|
if [[ "${{ matrix.oracle-version }}" == oracle-xe* ]]; then
|
|
|
|
|
just test-db cx_oracle
|
|
|
|
|
else
|
|
|
|
|
just test-db oracledb
|
|
|
|
|
fi
|
2025-08-25 10:13:19 +03:00
|
|
|
|
|
|
|
|
- name: Store coverage files
|
|
|
|
|
uses: actions/upload-artifact@v4
|
|
|
|
|
with:
|
|
|
|
|
name: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
path: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
windows:
|
|
|
|
|
runs-on: windows-latest
|
|
|
|
|
permissions:
|
|
|
|
|
contents: read
|
|
|
|
|
actions: write
|
|
|
|
|
env:
|
|
|
|
|
RDBMS: sqlite
|
|
|
|
|
COVERAGE_FILE: windows-py${{ matrix.python-version }}-dj${{ matrix.django-version }}-sqlite.coverage
|
|
|
|
|
TEST_PYTHON_VERSION: ${{ matrix.python-version }}
|
|
|
|
|
TEST_DJANGO_VERSION: ${{ matrix.django-version }}
|
|
|
|
|
TEST_DATABASE_VERSION: "sqlite"
|
|
|
|
|
strategy:
|
|
|
|
|
fail-fast: false
|
|
|
|
|
matrix:
|
2025-11-29 11:41:29 +03:00
|
|
|
python-version: [ '3.10', '3.12', '3.14']
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version:
|
2025-11-29 11:41:29 +03:00
|
|
|
- '4.2' # LTS April 2026
|
2025-08-25 10:13:19 +03:00
|
|
|
- '5.2' # LTS April 2028
|
2025-12-04 07:55:53 +03:00
|
|
|
- '6.0' # LTS April 2028
|
2025-08-25 10:13:19 +03:00
|
|
|
exclude:
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.10'
|
|
|
|
|
django-version: '5.2'
|
|
|
|
|
- python-version: '3.10'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- python-version: '3.12'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
- python-version: '3.12'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- python-version: '3.14'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
- python-version: '3.14'
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version: '5.2'
|
|
|
|
|
|
|
|
|
|
steps:
|
|
|
|
|
- uses: actions/checkout@v5
|
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
|
|
|
uses: actions/setup-python@v5
|
|
|
|
|
id: sp
|
|
|
|
|
with:
|
|
|
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
|
- name: Install uv
|
|
|
|
|
uses: astral-sh/setup-uv@v6
|
|
|
|
|
with:
|
|
|
|
|
enable-cache: true
|
|
|
|
|
- name: Setup Just
|
|
|
|
|
uses: extractions/setup-just@v3
|
|
|
|
|
- name: install-vim-windows
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
uses: rhysd/action-setup-vim@v1
|
|
|
|
|
- name: Setup tmate session
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
uses: mxschmitt/action-tmate@v3.22
|
|
|
|
|
with:
|
|
|
|
|
detached: true
|
|
|
|
|
timeout-minutes: 60
|
|
|
|
|
- name: Install Release Dependencies
|
|
|
|
|
run: |
|
|
|
|
|
just setup ${{ steps.sp.outputs.python-path }}
|
|
|
|
|
just install
|
2025-11-29 11:41:29 +03:00
|
|
|
$version = "${{ matrix.django-version }}"
|
|
|
|
|
if ($version -match "(a|b|rc)") {
|
|
|
|
|
just test-lock "Django==$version"
|
|
|
|
|
} else {
|
|
|
|
|
just test-lock "Django~=$version.0"
|
|
|
|
|
}
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Run Unit Tests
|
|
|
|
|
run: |
|
|
|
|
|
just test
|
2026-01-11 10:01:36 +03:00
|
|
|
just test-integrations
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Store coverage files
|
|
|
|
|
uses: actions/upload-artifact@v4
|
|
|
|
|
with:
|
|
|
|
|
name: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
path: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
macos:
|
|
|
|
|
runs-on: macos-latest
|
|
|
|
|
permissions:
|
|
|
|
|
contents: read
|
|
|
|
|
actions: write
|
|
|
|
|
env:
|
|
|
|
|
RDBMS: sqlite
|
|
|
|
|
COVERAGE_FILE: macos-py${{ matrix.python-version }}-dj${{ matrix.django-version }}-sqlite.coverage
|
|
|
|
|
TEST_PYTHON_VERSION: ${{ matrix.python-version }}
|
|
|
|
|
TEST_DJANGO_VERSION: ${{ matrix.django-version }}
|
|
|
|
|
TEST_DATABASE_VERSION: "sqlite"
|
2023-12-12 13:50:15 +03:00
|
|
|
strategy:
|
2025-08-25 10:13:19 +03:00
|
|
|
fail-fast: false
|
2023-12-12 13:50:15 +03:00
|
|
|
matrix:
|
2025-11-29 11:41:29 +03:00
|
|
|
python-version: [ '3.10', '3.12', '3.14']
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version:
|
2025-11-29 11:41:29 +03:00
|
|
|
- '4.2' # LTS April 2026
|
2025-08-25 10:13:19 +03:00
|
|
|
- '5.2' # LTS April 2028
|
2025-12-04 07:55:53 +03:00
|
|
|
- '6.0' # LTS April 2028
|
2025-08-25 10:13:19 +03:00
|
|
|
exclude:
|
2025-11-29 11:41:29 +03:00
|
|
|
- python-version: '3.10'
|
|
|
|
|
django-version: '5.2'
|
|
|
|
|
- python-version: '3.10'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- python-version: '3.12'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
- python-version: '3.12'
|
2025-12-04 07:55:53 +03:00
|
|
|
django-version: '6.0'
|
2025-11-29 11:41:29 +03:00
|
|
|
|
|
|
|
|
- python-version: '3.14'
|
|
|
|
|
django-version: '4.2'
|
|
|
|
|
- python-version: '3.14'
|
2025-08-25 10:13:19 +03:00
|
|
|
django-version: '5.2'
|
|
|
|
|
|
|
|
|
|
steps:
|
|
|
|
|
- uses: actions/checkout@v5
|
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
2023-12-12 13:50:15 +03:00
|
|
|
uses: actions/setup-python@v5
|
2025-08-25 10:13:19 +03:00
|
|
|
id: sp
|
|
|
|
|
with:
|
|
|
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
|
- name: Install uv
|
|
|
|
|
uses: astral-sh/setup-uv@v6
|
|
|
|
|
with:
|
|
|
|
|
enable-cache: true
|
|
|
|
|
- name: Setup Just
|
|
|
|
|
uses: extractions/setup-just@v3
|
|
|
|
|
- name: install-emacs-macos
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
run: |
|
|
|
|
|
brew install emacs
|
|
|
|
|
- name: Setup tmate session
|
|
|
|
|
if: ${{ github.event.inputs.debug == 'true' }}
|
|
|
|
|
uses: mxschmitt/action-tmate@v3.22
|
|
|
|
|
with:
|
|
|
|
|
detached: true
|
|
|
|
|
timeout-minutes: 60
|
|
|
|
|
- name: Install Release Dependencies
|
|
|
|
|
run: |
|
|
|
|
|
just setup ${{ steps.sp.outputs.python-path }}
|
|
|
|
|
just install
|
2025-11-29 11:41:29 +03:00
|
|
|
if [[ "${{ matrix.django-version }}" =~ (a|b|rc) ]]; then
|
|
|
|
|
just test-lock Django==${{ matrix.django-version }}
|
|
|
|
|
else
|
|
|
|
|
just test-lock Django~=${{ matrix.django-version }}.0
|
|
|
|
|
fi
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Run Unit Tests
|
|
|
|
|
run: |
|
|
|
|
|
just test
|
2026-01-11 10:01:36 +03:00
|
|
|
just test-integrations
|
2025-08-25 10:13:19 +03:00
|
|
|
- name: Store coverage files
|
|
|
|
|
uses: actions/upload-artifact@v4
|
|
|
|
|
with:
|
|
|
|
|
name: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
path: ${{ env.COVERAGE_FILE }}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
coverage-combine:
|
|
|
|
|
needs: [postgres, sqlite, mysql, mariadb, oracle, windows, macos]
|
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
|
permissions:
|
|
|
|
|
contents: read
|
|
|
|
|
steps:
|
|
|
|
|
- uses: actions/checkout@v5
|
|
|
|
|
- uses: actions/setup-python@v5
|
|
|
|
|
id: sp
|
|
|
|
|
- name: Install uv
|
|
|
|
|
uses: astral-sh/setup-uv@v6
|
|
|
|
|
with:
|
|
|
|
|
enable-cache: true
|
|
|
|
|
- name: Setup Just
|
|
|
|
|
uses: extractions/setup-just@v3
|
|
|
|
|
- name: Install Release Dependencies
|
|
|
|
|
run: |
|
|
|
|
|
just setup ${{ steps.sp.outputs.python-path }}
|
|
|
|
|
just install
|
|
|
|
|
|
|
|
|
|
- name: Get coverage files
|
|
|
|
|
uses: actions/download-artifact@v5
|
|
|
|
|
with:
|
|
|
|
|
pattern: "*.coverage"
|
|
|
|
|
merge-multiple: true
|
|
|
|
|
- run: ls -la *.coverage
|
|
|
|
|
- run: just coverage
|
|
|
|
|
|
|
|
|
|
- name: Upload coverage to Codecov
|
|
|
|
|
uses: codecov/codecov-action@v5
|
2023-12-12 13:50:15 +03:00
|
|
|
with:
|
2025-08-25 10:13:19 +03:00
|
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
|
|
|
files:
|
|
|
|
|
./coverage.xml
|