ci: add Scylla test.py driver subset - #943
Conversation
📝 WalkthroughWalkthroughAdds a GitHub Actions pipeline for Scylla Python driver compatibility testing. The workflow installs required tools and dependencies, resolves and checks out a matching Scylla release, caches CCM data, and invokes a new Bash runner. The runner validates selected tests, locates or downloads the Scylla executable, supports dry-run and collection modes, builds pytest arguments, and executes the curated compatibility test list. Sequence Diagram(s)sequenceDiagram
participant GitHubActions
participant get-version
participant ScyllaCheckout
participant CCM
participant PytestRunner
GitHubActions->>get-version: resolve matching stable release
GitHubActions->>ScyllaCheckout: checkout Scylla revision
GitHubActions->>CCM: install or restore Scylla binary
GitHubActions->>PytestRunner: run selected compatibility tests
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
Adds CI coverage for Python driver compatibility against the latest stable Scylla release.
Changes:
- Adds an Ubuntu 24.04 compatibility workflow.
- Downloads Scylla through CCM and invokes its pytest runner.
- Defines a focused 32-test compatibility manifest.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
.github/workflows/scylla-driver-testpy.yml |
Configures the compatibility CI job. |
scripts/run_scylla_driver_testpy.sh |
Resolves Scylla and runs selected tests. |
scripts/scylla-driver-testpy-tests.txt |
Lists the 32 compatibility tests. |
Comments suppressed due to low confidence (1)
.github/workflows/scylla-driver-testpy.yml:85
- The downloaded
get-versionexecutable is run without verifying its contents. Pinning the release number does not authenticate a mutable GitHub release asset; verify a trusted SHA-256 digest (or use a commit-SHA-pinned action) before making the binary executable.
curl -fsSLo "$RUNNER_TEMP/get-version.zip" \
"https://github.com/scylladb-actions/get-version/releases/download/v${GET_VERSION_VERSION}/get-version_${GET_VERSION_VERSION}_linux_amd64v3.zip"
unzip -q -o "$RUNNER_TEMP/get-version.zip" -d "$RUNNER_TEMP/bin"
chmod +x "$RUNNER_TEMP/bin/get-version"
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| curl -fsSLo "$RUNNER_TEMP/bin/minio" https://dl.min.io/server/minio/release/linux-amd64/minio | ||
| curl -fsSLo "$RUNNER_TEMP/bin/mc" https://dl.min.io/client/mc/release/linux-amd64/mc | ||
| chmod +x "$RUNNER_TEMP/bin/minio" "$RUNNER_TEMP/bin/mc" | ||
| curl -fsSL "https://github.com/Shopify/toxiproxy/releases/download/v${TOXIPROXY_VERSION}/toxiproxy_${TOXIPROXY_VERSION}_linux_amd64.tar.gz" \ |
| - name: Install ccm and Scylla test.py Python dependencies | ||
| run: | | ||
| uv pip install \ | ||
| "ccm @ git+https://github.com/scylladb/scylla-ccm.git@master" \ |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
.github/workflows/scylla-driver-testpy.yml (2)
127-147: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win
ccmis installed from an unpinnedmasterbranch.
ccm @ git+https://github.com/scylladb/scylla-ccm.git@mastertracks a moving branch rather than a tag/commit, so CI behavior can change without any change in this repo, and results are not reproducible across runs.♻️ Proposed fix
- "ccm @ git+https://github.com/scylladb/scylla-ccm.git@master" \ + "ccm @ git+https://github.com/scylladb/scylla-ccm.git@<pinned-commit-or-tag>" \🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/scylla-driver-testpy.yml around lines 127 - 147, Pin the ccm dependency in the “Install ccm and Scylla test.py Python dependencies” step to a specific immutable commit or release tag instead of the moving master branch, preserving the existing uv pip install flow and all other dependencies.
40-41: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick winSet
persist-credentials: falseon checkouts.Neither checkout step disables credential persistence, so the
GITHUB_TOKENremains in the local git config for the rest of the job. Given later steps install an unpinned git dependency (ccm@master) and run third-party pytest code against it, an unpinned/compromised dependency could exfiltrate the token. Since this workflow never pushes back to either repo, disable persistence on both checkouts.🔒 Proposed fix
- name: Checkout driver uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false- name: Checkout matching Scylla test.py uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: repository: scylladb/scylladb ref: scylla-${{ steps.scylla-release.outputs.version }} path: scylladb fetch-depth: 1 + persist-credentials: falseAlso applies to: 105-111
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/scylla-driver-testpy.yml around lines 40 - 41, Update both checkout steps in the workflow to set persist-credentials to false, including the driver checkout and the other checkout identified by the comment. Keep the existing checkout actions and pinned revisions unchanged.Source: Linters/SAST tools
scripts/run_scylla_driver_testpy.sh (1)
4-4: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winFilter string duplicated with the workflow.
stable_release_filtermirrors the identical string in.github/workflows/scylla-driver-testpy.yml(stable_filter). Since the workflow always setsSCYLLA_VERSION, this copy is a standalone-invocation fallback only, but the two definitions can silently drift if one is edited without the other.Also applies to: 23-52
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/run_scylla_driver_testpy.sh` at line 4, Remove the duplicated stable release filter definition from scripts/run_scylla_driver_testpy.sh and rely on the workflow-provided SCYLLA_VERSION when invoked through .github/workflows/scylla-driver-testpy.yml; if standalone fallback behavior must remain, centralize or reuse a single shared definition so it cannot drift from the workflow’s stable_filter.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/scylla-driver-testpy.yml:
- Around line 88-103: Update both get-version invocations in the “Resolve latest
stable Scylla release” step to use the documented --filters option spelling,
preserving the existing stable_filter value and all other arguments.
In `@scripts/run_scylla_driver_testpy.sh`:
- Around line 156-166: Update the fallback `find_scylla_executable` call in the
executable discovery flow to run in a conditional or otherwise suppress `set -e`
termination when it fails. Preserve the subsequent `scylla_exe` validation so
failures reach the existing descriptive error message and return path.
---
Nitpick comments:
In @.github/workflows/scylla-driver-testpy.yml:
- Around line 127-147: Pin the ccm dependency in the “Install ccm and Scylla
test.py Python dependencies” step to a specific immutable commit or release tag
instead of the moving master branch, preserving the existing uv pip install flow
and all other dependencies.
- Around line 40-41: Update both checkout steps in the workflow to set
persist-credentials to false, including the driver checkout and the other
checkout identified by the comment. Keep the existing checkout actions and
pinned revisions unchanged.
In `@scripts/run_scylla_driver_testpy.sh`:
- Line 4: Remove the duplicated stable release filter definition from
scripts/run_scylla_driver_testpy.sh and rely on the workflow-provided
SCYLLA_VERSION when invoked through .github/workflows/scylla-driver-testpy.yml;
if standalone fallback behavior must remain, centralize or reuse a single shared
definition so it cannot drift from the workflow’s stable_filter.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: addf001c-2994-4e24-b5c2-8ba9c40dafe4
📒 Files selected for processing (3)
.github/workflows/scylla-driver-testpy.ymlscripts/run_scylla_driver_testpy.shscripts/scylla-driver-testpy-tests.txt
| - name: Resolve latest stable Scylla release | ||
| id: scylla-release | ||
| run: | | ||
| stable_filter='^[0-9]{4}$.^[0-9]+$.^[0-9]+$ and LAST.LAST.LAST' | ||
| docker_version="$(get-version --source dockerhub-imagetag --repo scylladb/scylla -filters "$stable_filter" | tr -d '"')" | ||
| github_version="$(get-version --source github-tag --repo scylladb/scylladb --prefix scylla- --out-no-prefix --filters "$stable_filter" | tr -d '"')" | ||
| if [[ -z "$docker_version" || -z "$github_version" ]]; then | ||
| echo "Failed to resolve latest stable Scylla release" >&2 | ||
| exit 1 | ||
| fi | ||
| if [[ "$docker_version" != "$github_version" ]]; then | ||
| echo "Latest stable Scylla release mismatch: DockerHub=$docker_version GitHub=$github_version" >&2 | ||
| exit 1 | ||
| fi | ||
| git ls-remote --exit-code --refs --tags https://github.com/scylladb/scylladb.git "refs/tags/scylla-$docker_version" | ||
| echo "version=$docker_version" >> "$GITHUB_OUTPUT" |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🌐 Web query:
scylladb-actions get-version v0.4.3 CLI filters flag syntax documentation
💡 Result:
The scylladb-actions/get-version tool, including version v0.4.3, utilizes a filter syntax that supports pattern matching and global position selection to filter software versions [1]. Filter Syntax Overview The tool's filter system allows for combining different types of filters using 'and' / 'or' operators [1]. 1. Pattern Filters (Component-Level): These match specific semantic version components (e.g., Major.Minor.Patch) [1]. Regular expressions are commonly used here to match version segments, such as "^[0-9]{4}$.^[0-9]+$.^[0-9]+$" [2][3][4]. 2. Global Position Filters (List-Level): These allow selection of versions based on their position in the sorted list, such as using 'LAST' to get the newest version, or 'LAST-1' to get the second-newest [1][2][3]. CLI Usage The syntax for applying filters in the CLI is:./get-version --source
Citations:
- 1: https://github.com/scylladb-actions/get-version
- 2: https://github.com/scylladb/csharp-driver/actions/runs/23798491992/workflow
- 3: https://github.com/scylladb/csharp-driver/actions/runs/24165370759/workflow
- 4: https://github.com/scylladb/csharp-driver/actions/runs/24423979420/workflow
🌐 Web query:
GitHub scylladb-actions get-version v0.4.3 command line options single dash filters
💡 Result:
In the scylladb-actions/get-version tool, command-line arguments are typically specified using double dashes (e.g., --filters, --source, --repo) [1]. While some real-world usage examples in CI workflows have occasionally used a single dash for the filters flag (e.g., -filters) [2][3][4][5][6], this is a deviation from standard CLI conventions rather than a supported feature for "single dash filters." The official documentation and repository usage demonstrate the use of double dashes for flags [1]. The filters option accepts a specific syntax for semantic version filtering, which can include pattern matching and positional keywords like LAST [1]. If you encounter documentation or scripts referencing -filters, it should be interpreted as the --filters option [1][2]. It is recommended to use the standard double-dash syntax (--filters) to ensure compatibility and adhere to the tool's intended interface [1].
Citations:
- 1: https://github.com/scylladb-actions/get-version
- 2: https://github.com/scylladb/csharp-driver/actions/runs/23798491992/workflow
- 3: https://github.com/scylladb/csharp-driver/actions/runs/24187604143/workflow
- 4: https://github.com/scylladb/csharp-driver/actions/runs/24187341233/workflow
- 5: https://github.com/scylladb/csharp-driver/actions/runs/24165370759/workflow
- 6: https://github.com/scylladb/csharp-driver/actions/runs/23469603118/workflow
🌐 Web query:
site:github.com/scylladb-actions/get-version v0.4.3 "long-flags" "short-flags" "-filter"
💡 Result:
There is no widely recognized software documentation or standard library for v0.4.3 that explicitly defines the terms long-flags and short-flags as formal nomenclature in the context of a -filter argument [1]. The terms long flags and short flags are common industry vernacular used to describe command-line interface arguments, where short flags are typically single characters preceded by a single dash (e.g., -f) and long flags are descriptive names preceded by double dashes (e.g., --filter) [1]. The provided search results indicate that the scylladb-actions/get-version tool uses a --filters argument to support complex version matching, but it does not use the specific phrasing long-flags or short-flags in its documentation [1]. If you are encountering these terms in a specific software package or library, it is likely that the author is using these descriptive names to distinguish between flag formats rather than referencing a version-specific feature of v0.4.3.
Citations:
🌐 Web query:
scylladb csharp-driver .github get-version -filters "and LAST"
💡 Result:
The latest release version of the ScyllaDB C# Driver as of July 27, 2026, is v3.22.0.2, which was released on December 1, 2025 [1]. You can find this package on NuGet under the name ScyllaDBCSharpDriver [1][2]. To get the version of the driver in your own project, you can typically inspect the assembly version or the package version defined in your project file (e.g.,.csproj) [2]. For further details: - GitHub Repository: https://github.com/scylladb/csharp-driver [1] - Official Documentation: https://csharp-driver.docs.scylladb.com/ [3] - NuGet Gallery: https://www.nuget.org/packages/ScyllaDBCSharpDriver [2]
Citations:
- 1: https://github.com/scylladb/csharp-driver/
- 2: https://www.nuget.org/packages/ScyllaDBCSharpDriver/
- 3: https://csharp-driver.docs.scylladb.com/
🌐 Web query:
scylladb driver tests get-version -filters LAST.scylla-"
💡 Result:
The syntax LAST.scylla-" or more commonly LAST.LAST.LAST-X is used within ScyllaDB's CI/CD automation and helper scripts to dynamically resolve and fetch specific versions of ScyllaDB from container registries (such as Docker Hub) [1][2]. These strings are arguments passed to a utility tool typically called get-version (or a similar version-fetching script like version_fetch.py) [1][2][3]. This tool parses version tags from a repository (e.g., scylladb/scylla) based on defined filters to automate the testing of drivers against various ScyllaDB releases [1][2]. The components of these strings generally follow a pattern based on MAJOR.MINOR.PATCH semantic versioning [4]: 1. LAST.LAST.LAST-X: This refers to the most recent release, where X is an offset to select previous patch or minor versions (e.g., LAST.LAST.LAST-1 selects the prior patch version) [1][2]. 2. LAST.1.LAST or LAST-1.1.LAST: These variations are often used to identify specific Long-Term Support (LTS) release streams by targeting the appropriate MAJOR.MINOR segments [1][2]. These mechanisms ensure that integration tests for ScyllaDB drivers (such as the C#, Go, and C++ drivers) can be automatically configured to run against the latest supported or prior versions without manual hardcoding [1][2][3].
Citations:
- 1: https://github.com/scylladb/csharp-driver/blob/0ea7820d4061290e5d2687b82d5405fa04258f21/.github/workflows/main.yml
- 2: https://github.com/scylladb/csharp-driver/actions/runs/23798491992/workflow
- 3: https://github.com/scylladb/cpp-rs-driver/blob/9d9d7b9cc5d4ae7686a52a127ea0f6ee551b753d/.github/workflows/build-lint-and-test.yml
- 4: https://docs.scylladb.com/stable/versioning/version-support.html
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== workflow target =="
if [ -f .github/workflows/scylla-driver-testpy.yml ]; then
sed -n '70,115p' .github/workflows/scylla-driver-testpy.yml
else
echo "workflow file missing"
fi
echo
echo "== get-version usage and references in repository =="
rg -n -- hidden --glob '!node_modules/**' --glob '!build/**' --glob '!dist/**' 'get-version|--source|--repo|--filters|-filters|scylladb-actions/get-version' .github workflows . 2>/dev/null | head -200
echo
echo "== files likely defining provider CLI options =="
rg -n --hidden --glob '!node_modules/**' --glob '!build/**' --glob '!dist/**' 'long-flags|AcceptMultiple\(--filters|--Filters|-filters|--filters|flag\.String\|--filters|Flags' . 2>/dev/null | head -200Repository: scylladb/python-driver
Length of output: 3029
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== exact matches for get-version option syntax =="
rg -n --hidden --glob '!node_modules/**' --glob '!build/**' --glob '!dist/**' --glob '!docs/**' --glob '!tests/**' --glob '!*.lock' '(\bget-version\b|scylladb-actions/get-version)' . 2>/dev/null | head -200
echo
echo "== inspect variable declaration for GET_VERSION_VERSION =="
rg -n --hidden --glob '!node_modules/**' --glob '!build/**' --glob '!dist/**' 'GET_VERSION_VERSION|github\.scylladb' .github workflows 2>/dev/null || trueRepository: scylladb/python-driver
Length of output: 1913
🏁 Script executed:
#!/bin/bash
set -euo pipefail
tmp="$(mktemp -d)"
echo "$tmp" > /tmp/get-version-dl-tmp.txt
echo "== download v0.4.3 go-getversion docs/list of binary? =="
python3 - <<'PY'
import http.client, urllib.request
url = "https://github.com/scylladb-actions/get-version/releases/download/v0.4.3/get-version_0.4.3_linux_amd64v3.zip"
try:
with urllib.request.urlopen(url, timeout=20) as r:
print("status=", r.status, "content-type=", r.getheader("Content-Type"), "len=", len(r.read()))
except Exception as e:
print("download error:", type(e).__name__, e)
PY
echo
echo "== fetch Go source from release assets? =="
python3 - <<'PY'
import urllib.request
for asset in (
"https://github.com/scylladb-actions/get-version/releases/download/v0.4.3/get-version.go",
"https://raw.githubusercontent.com/scylladb-actions/get-version/v0.4.3/get-version.go",
"https://raw.githubusercontent.com/scylladb-actions/get-version/v0.4.3/main.go",
):
try:
data = urllib.request.urlopen(asset, timeout=20).read().decode("utf-8")
except Exception as e:
print("asset", asset, "ERROR", type(e).__name__, e)
continue
print("asset", asset, "FOUND", len(data), "bytes")
for needle in ("filters", "Flags", "flag.", "--filters", "-filters"):
if needle in data:
print(" contains", needle)
print("--- relevant lines ---")
nums = [str(n+1) for n, line in enumerate(data.splitlines()) if needle in line for needle in ("filters", "flag.", "--filters", "-filters", "Positional")]
# not used in previous line because undefined but ok
for i,line in enumerate(data.splitlines()[70:190], start=71):
if "filters" in line or "Source" in line or "Repo" in line:
print(f"{i}: {line}")
PYRepository: scylladb/python-driver
Length of output: 1140
Use the documented get-version option spellings.
-filters is not the standard long flag for this CLI; use --filters consistently with --source, --repo, --prefix, and --out-no-prefix so DockerHub tag resolution doesn’t fail parsing the command-line contract.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/scylla-driver-testpy.yml around lines 88 - 103, Update
both get-version invocations in the “Resolve latest stable Scylla release” step
to use the documented --filters option spelling, preserving the existing
stable_filter value and all other arguments.
| scylla_exe="${SCYLLA_EXE:-}" | ||
| if [[ -z "$scylla_exe" ]]; then | ||
| if ! scylla_exe="$(find_scylla_executable "$version")"; then | ||
| pull_scylla_with_ccm "$version" | ||
| scylla_exe="$(find_scylla_executable "$version")" | ||
| fi | ||
| fi | ||
| if [[ ! -x "$scylla_exe" ]]; then | ||
| echo "Scylla executable is not available or executable: $scylla_exe" >&2 | ||
| return 1 | ||
| fi |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Second find_scylla_executable call can abort before the intended error message.
After pull_scylla_with_ccm, scylla_exe="$(find_scylla_executable "$version")" (line 160) is a plain assignment, not inside a conditional. Under set -e, if find_scylla_executable still can't find the binary (returns 1), the script exits immediately here rather than reaching the descriptive "Scylla executable is not available or executable" message on lines 163-166, making CI failures harder to diagnose.
🐛 Proposed fix
if ! scylla_exe="$(find_scylla_executable "$version")"; then
pull_scylla_with_ccm "$version"
- scylla_exe="$(find_scylla_executable "$version")"
+ scylla_exe="$(find_scylla_executable "$version")" || true
fi📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| scylla_exe="${SCYLLA_EXE:-}" | |
| if [[ -z "$scylla_exe" ]]; then | |
| if ! scylla_exe="$(find_scylla_executable "$version")"; then | |
| pull_scylla_with_ccm "$version" | |
| scylla_exe="$(find_scylla_executable "$version")" | |
| fi | |
| fi | |
| if [[ ! -x "$scylla_exe" ]]; then | |
| echo "Scylla executable is not available or executable: $scylla_exe" >&2 | |
| return 1 | |
| fi | |
| scylla_exe="${SCYLLA_EXE:-}" | |
| if [[ -z "$scylla_exe" ]]; then | |
| if ! scylla_exe="$(find_scylla_executable "$version")"; then | |
| pull_scylla_with_ccm "$version" | |
| scylla_exe="$(find_scylla_executable "$version")" || true | |
| fi | |
| fi | |
| if [[ ! -x "$scylla_exe" ]]; then | |
| echo "Scylla executable is not available or executable: $scylla_exe" >&2 | |
| return 1 | |
| fi |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/run_scylla_driver_testpy.sh` around lines 156 - 166, Update the
fallback `find_scylla_executable` call in the executable discovery flow to run
in a conditional or otherwise suppress `set -e` termination when it fails.
Preserve the subsequent `scylla_exe` validation so failures reach the existing
descriptive error message and return path.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (2)
.github/workflows/scylla-driver-testpy.yml:71
- These service executables are downloaded without integrity checks, and the MinIO URLs are mutable
release/linux-amd64endpoints. A changed or compromised upstream artifact can therefore execute in CI, and even a legitimate update can make identical commits behave differently. Pin MinIO andmcto immutable release artifacts and verify committed SHA-256 digests for all three downloads before making or extracting them.
curl -fsSLo "$RUNNER_TEMP/bin/minio" https://dl.min.io/server/minio/release/linux-amd64/minio
curl -fsSLo "$RUNNER_TEMP/bin/mc" https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x "$RUNNER_TEMP/bin/minio" "$RUNNER_TEMP/bin/mc"
curl -fsSL "https://github.com/Shopify/toxiproxy/releases/download/v${TOXIPROXY_VERSION}/toxiproxy_${TOXIPROXY_VERSION}_linux_amd64.tar.gz" \
| tar -xz -C "$RUNNER_TEMP/bin" toxiproxy-server toxiproxy-cli
.github/workflows/scylla-driver-testpy.yml:130
- Installing CCM from the moving
masterbranch makes this compatibility result depend on whichever commit happens to be current and executes unreviewed upstream changes in CI. Pin an audited commit SHA (or consume a locked dependency) so CCM changes are updated deliberately and failures remain attributable to the driver or selected Scylla release.
"ccm @ git+https://github.com/scylladb/scylla-ccm.git@master" \
| - setup.py | ||
| workflow_dispatch: | ||
|
|
||
| jobs: |
| curl -fsSLo "$RUNNER_TEMP/get-version.zip" \ | ||
| "https://github.com/scylladb-actions/get-version/releases/download/v${GET_VERSION_VERSION}/get-version_${GET_VERSION_VERSION}_linux_amd64v3.zip" | ||
| unzip -q -o "$RUNNER_TEMP/get-version.zip" -d "$RUNNER_TEMP/bin" | ||
| chmod +x "$RUNNER_TEMP/bin/get-version" |
| - name: Resolve latest stable Scylla release | ||
| id: scylla-release | ||
| run: | | ||
| version="$(scripts/run_scylla_driver_testpy.sh --resolve-scylla-version)" |
| jobs="${SCYLLA_TESTPY_JOBS:-1}" | ||
| max_failures="${SCYLLA_TESTPY_MAX_FAILURES:-1}" | ||
| timeout="${SCYLLA_TESTPY_TIMEOUT:-1800}" | ||
| session_timeout="${SCYLLA_TESTPY_SESSION_TIMEOUT:-7200}" |
Summary
get-version, checks out the matchingscylladb/scylladbtag, and runs a narrow Scyllatest.pydriver subsetccm create --scylla --version release:<version>to pull the Scylla release binary, then run Scylla's pytest runner with--exe-pathccm, and verifying downloaded tool checksumsDriver Surface
CQL native protocol startup options, control-connection behavior, prepared/result metadata IDs, custom payloads, prepared routing-key indexes, and selected serializer binding behavior.
Compatibility Risks
This is CI-only and does not change runtime driver behavior. The workflow tracks the latest stable Scylla release and fails if DockerHub and GitHub tag resolution disagree. It uses Scylla's pytest runner plugin directly because the top-level
test.pywrapper probes configured build modes before--exe-pathcan switch tocustom_exe, which does not work for a source checkout plus a ccm-downloaded binary. The helper creates a temporarybuild.ninjamarker so release-tagcustom_exepath resolution succeeds before--exe-pathreplaces the binary.Required Integration Scenario
Run the new
Scylla test.py driver compatibilityworkflow on Ubuntu 24.04 against the latest stable Scylla release pulled by ccm.Testing
bash -n scripts/run_scylla_driver_testpy.sh.github/workflows/scylla-driver-testpy.ymlwith PyYAMLSCYLLA_VERSION=release:2026.2.2 scripts/run_scylla_driver_testpy.sh --resolve-scylla-versionSCYLLA_TESTPY_DRY_RUN=1 SCYLLA_SOURCE_DIR=/extra/scylladb/scylladb SCYLLA_VERSION=2026.2.2 scripts/run_scylla_driver_testpy.shSCYLLA_SOURCE_DIR=/tmp/scylla-2026.2.2-source SCYLLA_VERSION=2026.2.2 SCYLLA_TESTPY_TMPDIR=/tmp/scylla-driver-testpy-release-exact SCYLLA_TESTPY_JOBS=1 scripts/run_scylla_driver_testpy.shpassed: 29 passed, 7 warnings8ec3ee48c9946b6d2ebf139693ab30841ab3628c