Skip to content

DB compatibility: add MySQL 8.4 (LTS/RDS) to CI matrix; pin documented support to tested versions (scope out 9.x) #1497

Description

@dimitri-yatsenko

Summary

Our database compatibility story has a gap between what we claim, what we test, and what we
actually deploy to (AWS RDS). Most importantly, MySQL 8.4 — the current LTS and what AWS RDS runs
— is not tested in CI
, and our open-ended version wording implicitly promises MySQL 9.x, which is an
Innovation series (never an LTS, not an RDS target) that we should not be committing to.

Current state

Documented claims (minimums only, open-ended):

  • reference/specs/database-backends.md — "Supported Backends" table: MySQL min 8.0.13, PostgreSQL
    min 15, both "Production."
  • how-to/installation.md: "MySQL 8.0.13+ or PostgreSQL 15+."
  • about/whats-new-21.md: "PostgreSQL 15+ … alongside MySQL 8+."
  • connection.py warns MariaDB is not officially supported in 2.x (best-effort).

Actually tested in CI: only MySQL 8.0 and PostgreSQL 15, pinned via testcontainers
(tests/conftest.py:117 datajoint/mysql:8.0, :146 postgres:15). The CI matrix
(.github/workflows/test.yaml) varies Python only (3.10 / 3.14) — the DB version is not a
matrix axis. So MySQL 8.0 + PG 15 are the only combinations we prove.

Gaps

  1. MySQL 8.4 (LTS / AWS RDS) is untested. We test 8.0, not 8.4 — yet 8.4 is the version we most
    need to guarantee for RDS deployments.
  2. Open-ended 8.0.13+ implicitly promises 9.x. MySQL 9.x are Innovation releases — never an LTS,
    not offered as a standard RDS engine. We have fielded 9.6 bug reports for a version we do not deploy
    to; the docs should bound this, not invite it.
  3. PostgreSQL claimed 15+ but only 15 is tested (16/17 unverified).

Proposed work

  1. Make the DB version a real CI matrix axis. Add MySQL 8.4 alongside 8.0 (parameterize the
    testcontainers image, e.g. MYSQL_VER in tests/conftest.py + a matrix in test.yaml). Optionally
    add PostgreSQL 16/17 if we want to claim beyond 15.
  2. Tighten the documented support policy to match tested versions. State explicit tested versions
    (MySQL 8.0 and 8.4 LTS; PostgreSQL 15) in database-backends.md and installation.md, and
    explicitly scope out MySQL 9.x (Innovation, non-LTS, not RDS → best-effort at most, not a support
    commitment).
  3. Establish the principle: supported == LTS versions we test in CI.

References

  • tests/conftest.py:117 (MySQL image), :146 (PostgreSQL image)
  • .github/workflows/test.yaml (Python-only matrix)
  • reference/specs/database-backends.md:10-13, how-to/installation.md:94 (datajoint-docs)
  • src/datajoint/connection.py_warn_if_mariadb

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementIndicates new improvements

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions