Test against mysql and postgres in addition to sqlite #27
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Continuous Integration" | |
| on: | |
| push: | |
| branches: [master] | |
| pull_request: | |
| schedule: | |
| - cron: "0 2 * * *" | |
| jobs: | |
| tests: | |
| name: python ${{ matrix.python-version }}, ${{ matrix.database }}, ${{ matrix.uv-resolution }} deps | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: | |
| - "3.9" | |
| - "3.10" | |
| - "3.11" | |
| - "3.12" | |
| - "3.13" | |
| database: | |
| - sqlite | |
| uv-resolution: | |
| - highest | |
| include: | |
| # Add lowest-direct resolution test for oldest and newest Python | |
| - python-version: "3.9" | |
| database: sqlite | |
| uv-resolution: lowest-direct | |
| - python-version: "3.13" | |
| database: sqlite | |
| uv-resolution: lowest-direct | |
| # Also test against Postgres and MySQL for oldest and newest Python | |
| - python-version: "3.9" | |
| database: postgres | |
| uv-resolution: highest | |
| - python-version: "3.13" | |
| database: postgres | |
| uv-resolution: highest | |
| - python-version: "3.9" | |
| database: mysql | |
| uv-resolution: highest | |
| - python-version: "3.13" | |
| database: mysql | |
| uv-resolution: highest | |
| services: | |
| postgres: | |
| # workaround for https://github.com/actions/runner/issues/822 | |
| image: ${{ matrix.database == 'postgres' && 'postgres:latest' || '' }} | |
| env: | |
| POSTGRES_PASSWORD: postgres | |
| POSTGRES_USER: postgres | |
| POSTGRES_DB: test_db | |
| ports: | |
| - 5432:5432 | |
| options: >- | |
| --health-cmd pg_isready | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| mysql: | |
| # workaround for https://github.com/actions/runner/issues/822 | |
| image: ${{ matrix.database == 'mysql' && 'mysql:latest' || '' }} | |
| env: | |
| MYSQL_ROOT_PASSWORD: mysql | |
| MYSQL_DATABASE: test_db | |
| ports: | |
| - 3306:3306 | |
| options: >- | |
| --health-cmd "mysqladmin ping -h localhost" | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv and set the python version | |
| uses: astral-sh/setup-uv@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache-dependency-glob: "**/pyproject.toml" | |
| cache-suffix: ${{ matrix.uv-resolution }} | |
| - name: Install the project | |
| run: uv sync | |
| - name: Run tests with SQLite | |
| if: matrix.database == 'sqlite' | |
| run: | | |
| uv run --all-extras --dev --resolution ${{ matrix.uv-resolution }} -m pytest --sqlalchemy-connect-url="sqlite:///foo.sqlite" | |
| - name: Run tests with PostgreSQL | |
| if: matrix.database == 'postgres' | |
| run: | | |
| uv run --all-extras --dev --with psycopg2 --resolution ${{ matrix.uv-resolution }} -m pytest --sqlalchemy-connect-url="postgresql://postgres:postgres@localhost:5432/test_db" | |
| - name: Run tests with MySQL | |
| if: matrix.database == 'mysql' | |
| run: | | |
| uv run --all-extras --dev --with mysqlclient --resolution ${{ matrix.uv-resolution }} -m pytest --sqlalchemy-connect-url="mysql+pymysql://root:mysql@localhost:3306/test_db" |