Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions COMPATIBILITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Driver-Server Version Compatibility Matrix

<!-- Generated by resources/generate_compatibility.py; do not edit. -->

`resources/bump_version.py` adds a row for every client release. Published rows are kept as they are, so each row reflects what was known on that release date.

Engine versions in support come from the [SingleStore software EOL policy](https://docs.singlestore.com/db/latest/support/singlestore-software-end-of-life-eol-policy/). An engine is listed when it had been released and its end-of-life date was still in the future on the client release date. These engine versions are not each tested in CI; the smoke tests run against a single managed SingleStore cluster. A version marked RC was the [latest release candidate](https://release.memsql.com/rc/index/singlestoredbserver/latest.json) when that client version was released.

Tested Python versions come from the smoke-test CI workflow at each release tag.

| Driver Version | Release date | Engine versions in support | Tested Python versions |
| -------------- | ------------ | -------------------------- | ---------------------- |
| 1.18.1 | 2026-10-02 | 8.9, 9.0 | 3.9–3.14 |
| 1.18.0 | 2026-10-01 | 8.9, 9.0 | 3.9–3.14 |
| 1.17.3 | 2026-09-10 | 8.9, 9.0 | 3.9–3.13 |
| 1.17.2 | 2026-08-26 | 8.9, 9.0 | 3.9–3.13 |
| 1.17.1 | 2026-08-11 | 8.9, 9.0 | 3.9–3.13 |
| 1.17.0 | 2026-06-18 | 8.9, 9.0 | 3.9–3.13 |
| 1.16.10 | 2026-04-13 | 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.16.9 | 2026-02-05 | 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.16.8 | 2026-01-09 | 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.16.7 | 2026-01-07 | 8.5, 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.16.6 | 2025-12-11 | 8.5, 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.16.5 | 2025-12-03 | 8.5, 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.16.4 | 2025-12-01 | 8.5, 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.16.3 | 2025-11-20 | 8.5, 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.16.2 | 2025-11-13 | 8.5, 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.16.1 | 2025-11-05 | 8.5, 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.16.0 | 2025-10-23 | 8.5, 8.7, 8.9, 9.0 | 3.9–3.13 |
| 1.15.8 | 2025-09-26 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.15.7 | 2025-09-23 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.15.6 | 2025-09-16 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.15.5 | 2025-09-16 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.15.4 | 2025-09-04 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.15.3 | 2025-08-27 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.15.2 | 2025-08-18 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.15.1 | 2025-08-07 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.15.0 | 2025-07-21 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.14.2 | 2025-06-16 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.14.1 | 2025-06-10 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.14.0 | 2025-05-29 | 8.5, 8.7, 8.9 | 3.9–3.13 |
| 1.13.0 | 2025-04-16 | 8.1, 8.5, 8.7, 8.9 | 3.8–3.13 |
| 1.12.4 | 2025-04-02 | 8.1, 8.5, 8.7, 8.9 | 3.8–3.12 |
| 1.12.3 | 2025-04-01 | 8.1, 8.5, 8.7, 8.9 | 3.8–3.12 |
| 1.12.2 | 2025-03-19 | 8.1, 8.5, 8.7, 8.9 | 3.8–3.12 |
| 1.12.1 | 2025-03-10 | 8.1, 8.5, 8.7, 8.9 | 3.8–3.12 |
| 1.12.0 | 2025-02-27 | 8.1, 8.5, 8.7, 8.9 | 3.8–3.12 |
| 1.11.0 | 2025-01-09 | 8.1, 8.5, 8.7, 8.9 | 3.8–3.12 |
| 1.10.0 | 2024-12-10 | 8.0, 8.1, 8.5, 8.7, 8.9 | 3.8–3.12 |
| 1.9.0 | 2024-12-04 | 8.0, 8.1, 8.5, 8.7, 8.9 | 3.8–3.12 |
| 1.8.0 | 2024-11-19 | 8.0, 8.1, 8.5, 8.7, 8.9 | 3.8–3.12 |
| 1.7.2 | 2024-10-16 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.7.1 | 2024-09-20 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.7.0 | 2024-09-20 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.6.3 | 2024-09-05 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.6.2 | 2024-08-06 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.6.1 | 2024-07-31 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.6.0 | 2024-07-29 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.5.0 | 2024-07-12 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.4.3 | 2024-07-10 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.4.2 | 2024-07-09 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.4.1 | 2024-07-02 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.4.0 | 2024-06-13 | 8.0, 8.1, 8.5, 8.7 | 3.8–3.12 |
| 1.3.1 | 2024-05-23 | 8.0, 8.1, 8.5 | 3.8–3.12 |
| 1.3.0 | 2024-05-10 | 8.0, 8.1, 8.5 | 3.8–3.12 |
| 1.2.0 | 2024-04-25 | 8.0, 8.1, 8.5 | 3.8–3.12 |
| 1.1.0 | 2024-04-18 | 8.0, 8.1, 8.5 | 3.8–3.12 |
| 1.0.4 | 2024-04-03 | 7.8, 8.0, 8.1, 8.5 | 3.8–3.12 |
| 1.0.3 | 2024-04-02 | 7.8, 8.0, 8.1, 8.5 | 3.8–3.12 |
| 1.0.2 | 2024-03-08 | 7.8, 8.0, 8.1, 8.5 | 3.8–3.12 |
| 1.0.1 | 2024-02-16 | 7.8, 8.0, 8.1, 8.5 | 3.8–3.12 |
| 1.0.0 | 2024-02-12 | 7.8, 8.0, 8.1, 8.5 | 3.8–3.12 |
19 changes: 16 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -222,9 +222,22 @@ The script performs the following steps:
3. Updates version in both `pyproject.toml` and `singlestoredb/__init__.py`
4. Generates release notes from git history (or uses provided summary)
5. Opens an editor to customize release notes for `docs/src/whatsnew.rst`
6. Builds the documentation
7. Stages all modified files for commit
8. Optionally commits and pushes changes
6. Adds the new release to `COMPATIBILITY.md`
7. Builds the documentation
8. Stages all modified files for commit
9. Optionally commits and pushes changes

If `COMPATIBILITY.md` cannot be generated, for example without network access, the script logs a warning and continues the release. Run `python resources/generate_compatibility.py` afterwards to add the missing row.

`COMPATIBILITY.md` is generated from the release dates in `docs/src/whatsnew.rst`, the Python matrices in each release tag's smoke-test workflow, and the [SingleStore software EOL policy](https://docs.singlestore.com/db/latest/support/singlestore-software-end-of-life-eol-policy/). An engine is listed when it had been released and its end-of-life date was still in the future on that client release date. The [latest release candidate](https://release.memsql.com/rc/index/singlestoredbserver/latest.json) is added only to a release whose tag does not exist yet, which is the release being prepared.

Rows already in `COMPATIBILITY.md` are kept as they are; only releases missing from the file are generated, and only those need network access. To add missing rows, check that the file is current, or regenerate every row, run:

```bash
python resources/generate_compatibility.py
python resources/generate_compatibility.py --verify-matrix
python resources/generate_compatibility.py --rebuild
```

### Creating a Release

Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ pip install 'singlestoredb[vectorstore,sqlalchemy]'
| `docker` | Docker SDK for automated test container management |
| `pytest` | Pytest plugin with SingleStoreDB Docker test fixtures |

### SingleStore Server Compatibility

See the [driver, server, and Python version compatibility matrix](https://github.com/singlestore-labs/singlestoredb-python/blob/main/COMPATIBILITY.md).

## Documentation

https://singlestore-labs.github.io/singlestoredb-python
Expand Down
35 changes: 27 additions & 8 deletions resources/bump_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,20 @@ def build_docs() -> None:
status('✅ Documentation built successfully')


def generate_compatibility() -> None:
"""Regenerate the driver, server, and Python compatibility matrix."""
generator = Path(__file__).parent / 'generate_compatibility.py'
result = subprocess.run([sys.executable, str(generator)])
if result.returncode != 0:
print(
'⚠️ Could not generate COMPATIBILITY.md; continuing without it. '
'Run python resources/generate_compatibility.py after the release.',
file=sys.stderr,
)
return
status('✅ Compatibility matrix generated successfully')


def stage_files() -> None:
"""Stage all modified files for commit."""
status('📦 Staging files for commit...')
Expand All @@ -397,6 +411,7 @@ def stage_files() -> None:
'pyproject.toml',
'singlestoredb/__init__.py',
'docs/src/whatsnew.rst',
'COMPATIBILITY.md',
'docs/', # All generated documentation files
]

Expand Down Expand Up @@ -435,7 +450,7 @@ def main() -> None:
print('=' * 50, file=sys.stderr)

# Step 1: Get current version
step(1, 6, 'Reading current version')
step(1, 7, 'Reading current version')
current_version = get_current_version()
status(f'Current version: {current_version}')

Expand All @@ -444,7 +459,7 @@ def main() -> None:
status(f'New version will be: {new_version}')

# Step 2: Update version in files
step(2, 6, 'Updating version in files')
step(2, 7, 'Updating version in files')
start_time = time.time()

update_version_in_file(Path(__file__).parent.parent / 'pyproject.toml', current_version, new_version)
Expand All @@ -461,7 +476,7 @@ def main() -> None:
status(f'✅ Version files updated in {elapsed:.1f}s')

# Step 3: Generate release summary
step(3, 6, 'Generating release summary')
step(3, 7, 'Generating release summary')
start_time = time.time()

if args.summary:
Expand All @@ -477,7 +492,7 @@ def main() -> None:
status(f'✅ Release summary generated in {elapsed:.1f}s')

# Step 4: Update whatsnew.rst with editor
step(4, 6, 'Updating release notes')
step(4, 7, 'Updating release notes')
start_time = time.time()

status('📝 Opening editor for release notes...')
Expand All @@ -499,12 +514,16 @@ def main() -> None:
elapsed = time.time() - start_time
status(f'✅ Release notes updated in {elapsed:.1f}s')

# Step 5: Build documentation
step(5, 6, 'Building documentation')
# Step 5: Generate compatibility matrix
step(5, 7, 'Generating compatibility matrix')
generate_compatibility()

# Step 6: Build documentation
step(6, 7, 'Building documentation')
build_docs()

# Step 6: Stage files
step(6, 6, 'Staging files for commit')
# Step 7: Stage files
step(7, 7, 'Staging files for commit')
stage_files()

total_elapsed = time.time() - total_start_time
Expand Down
Loading
Loading