Skip to content

Comments

FEAT: Integrate mssql_py_core wheel installation into Dev workflow PR validation, official and release pipelines#440

Open
saurabh500 wants to merge 35 commits intomainfrom
dev/saurabh/integrate-mssql-py-core
Open

FEAT: Integrate mssql_py_core wheel installation into Dev workflow PR validation, official and release pipelines#440
saurabh500 wants to merge 35 commits intomainfrom
dev/saurabh/integrate-mssql-py-core

Conversation

@saurabh500
Copy link
Contributor

@saurabh500 saurabh500 commented Feb 18, 2026

Work Item / Issue Reference

AB#42668


Summary

PR Review Guide — Integrate mssql-py-core into mssql-python

Testing: Official build at https://sqlclientdrivers.visualstudio.com/mssql-python/_build?definitionId=2199&_a=summary
PR pipeline works.


What this PR does

Ships mssql_py_core (the Rust-native bulk-copy engine) inside every mssql-python wheel. After this PR, import mssql_py_core works out of the box after pip install mssql-python.

Before / After

                        BEFORE                                          AFTER
                        ──────                                          ─────

  ┌─────────────────────────┐                          ┌─────────────────────────┐
  │     mssql-rs repo       │                          │     mssql-rs repo       │
  │  (builds mssql_py_core) │                          │  (builds mssql_py_core) │
  └────────┬────────────────┘                          └────────┬────────────────┘
           │                                                    │
           │ NuGet publish                                      │ NuGet publish
           ▼                                                    ▼
  ┌─────────────────────┐                              ┌─────────────────────┐
  │  Azure Artifacts    │                              │  Azure Artifacts    │
  │  (nupkg with .whl)  │                              │  (nupkg with .whl)  │
  └─────────────────────┘                              └────────┬────────────┘
                                                                │
           (no connection)                              install-mssql-py-core.sh/.ps1
                                                                │ downloads + extracts
                                                                ▼
  ┌─────────────────────────┐                          ┌─────────────────────────┐
  │   mssql-python repo     │                          │   mssql-python repo     │
  │                         │                          │                         │
  │   setup.py bdist_wheel  │                          │   setup.py bdist_wheel  │
  │   └── mssql_python/     │                          │   ├── mssql_python/     │
  │                         │                          │   └── mssql_py_core/  ◄─── NEW
  └────────┬────────────────┘                          └────────┬────────────────┘
           │                                                    │
           ▼                                                    ▼
  ┌─────────────────────┐                              ┌─────────────────────┐
  │  .whl (PyPI)        │                              │  .whl (PyPI)        │
  │  └── mssql_python/  │                              │  ├── mssql_python/  │
  └─────────────────────┘                              │  └── mssql_py_core/ │
                                                       └─────────┬───────────┘
                                                                 │
                                                       ┌─────────▼───────────┐
                                                       │  Release pipelines  │
                                                       │  validate version   │
                                                       │  is NOT dev/alpha   │
                                                       └─────────────────────┘

Key design decisions

Decision Rationale
mssql_py_core binary is pre-built in mssql-rs, not compiled here It depends on OpenSSL 3 / glibc 2.34 (manylinux_2_34). Building it inside mssql-python's 2_28 container isn't possible.
mssql-python wheels stay on manylinux_2_28 Broader distro compatibility (RHEL 8, Debian 10+, Ubuntu 20.04+). The pre-built .so from mssql-rs is just byte-copied in.
Version pinned in eng/versions/mssql-py-core.version Single source of truth. All install scripts read from here. Release pipelines validate it.
Release pipelines reject pre-release versions Prevents accidentally shipping dev/alpha/beta/rc builds of mssql_py_core to PyPI.

Recommended review order

The PR has three areas. Review them in this order:

Area 1 — Install infrastructure (core of this PR)

Read these together — they form a single pipeline:

# File What changed
1 eng/versions/mssql-py-core.version New. Single-line version file (0.1.0-dev.20260222.140833). All scripts read from here.
2 eng/scripts/resolve_nuget_feed.py New. Fetches NuGet v3 service index, prints PackageBaseAddress URL. Used by the shell script.
3 eng/scripts/extract_wheel.py New. Extracts mssql_py_core/ entries from a .whl (ZIP), skipping .dist-info and .libs. Used by both PS1 and SH.
4 eng/scripts/install-mssql-py-core.ps1 New. Windows install script: read version → resolve feed → download nupkg → find matching wheel → extract → verify import.
5 eng/scripts/install-mssql-py-core.sh New. Unix install script: same flow as PS1, plus musl/glibc detection for Alpine.
6 OneBranchPipelines/scripts/validate-release-versions.ps1 New. Reads a .version file, rejects dev|alpha|beta|rc. Called by OneBranch release pipelines.

Area 2 — Pipeline integration

These files wire the install scripts into every pipeline:

# File What changed
7 eng/pipelines/steps/install-mssql-py-core.yml New. Step template with 3 variants: windows, unix, container. Calls PS1 or SH.
8 eng/pipelines/pr-validation-pipeline.yml Modified. Adds install-mssql-py-core.yml template ref in all 12 test jobs (Windows, macOS, Linux containers ×2, RHEL ×2, Alpine ×2, Azure SQL ×3, codecov).
9 OneBranchPipelines/stages/build-linux-single-stage.yml Modified. Adds install-mssql-py-core.sh call inside the per-Python-version build loop. Adds curl to package installs. Updates comment about manylinux_2_28 vs 2_34.
10 OneBranchPipelines/stages/build-windows-single-stage.yml Modified. Adds PowerShell install step before testing.
11 OneBranchPipelines/stages/build-macos-single-stage.yml Modified. Adds bash install step before testing.
12 OneBranchPipelines/jobs/consolidate-artifacts-job.yml Modified. checkout: self instead of checkout: none so we can copy the version file into dist/ for traceability.
13 OneBranchPipelines/official-release-pipeline.yml Modified. Adds version validation step — calls validate-release-versions.ps1 to block pre-release versions before ESRP release.
14 OneBranchPipelines/dummy-release-pipeline.yml Modified. Same version validation gate as official pipeline.
15 OneBranchPipelines/build-release-package-pipeline.yml Trivial. Comment fix (manylinux_2_28manylinux_2_34).

Area 3 — Build packaging and tests

# File What changed
16 setup.py Modified. Adds validate_mssql_py_core() pre-flight check, includes mssql_py_core in packages and package_data, uses manylinux_2_28 tags.
17 tests/test_019_bulkcopy.py New. Basic bulkcopy integration test — insert 3 rows via _bulkcopy(), verify round-trip.

Ancillary

# File What changed
18 .gitignore Adds mssql_py_core/ (extracted at dev time, not checked in).

Things to look for

  1. Version file path consistency — every script resolves eng/versions/mssql-py-core.version relative to repo root. Verify the consolidation job copies it correctly into the artifact.

  2. musl/glibc detection in install-mssql-py-core.sh — Alpine uses musl. The script gracefully exits 0 (skip) when no musllinux wheel is available rather than failing the build.

  3. setup.py validationvalidate_mssql_py_core() runs at wheel-build time. Must not block pip install from PyPI (the check only runs during bdist_wheel).

  4. manylinux_2_28 everywhere in mssql-pythonsetup.py platform tags and build-linux-single-stage.yml container selection both use manylinux_2_28. The mssql_py_core .so is built on manylinux_2_34 in the mssql-rs repo but byte-copied in here.

  5. Release pipeline gating — both OneBranch release pipelines (OneBranchPipelines/official-release-pipeline.yml and OneBranchPipelines/dummy-release-pipeline.yml) validate the version file from build artifacts and reject pre-release versions before ESRP submission. The script lives at OneBranchPipelines/scripts/validate-release-versions.ps1.

@saurabh500 saurabh500 force-pushed the dev/saurabh/integrate-mssql-py-core branch from c92b05a to 6ca65a3 Compare February 18, 2026 19:26
@saurabh500 saurabh500 changed the title FEAT: Integrate mssql_py_core wheel installation into PR validation pipeline FEAT: Integrate mssql_py_core wheel installation into PR validation pipeline Feb 18, 2026
@github-actions github-actions bot added the pr-size: medium Moderate update size label Feb 18, 2026
@github-actions
Copy link

github-actions bot commented Feb 18, 2026

📊 Code Coverage Report

🔥 Diff Coverage

100%


🎯 Overall Coverage

76%


📈 Total Lines Covered: 5520 out of 7185
📁 Project: mssql-python


Diff Coverage

Diff: main...HEAD, staged and unstaged changes

No lines with coverage information in this diff.


📋 Files Needing Attention

📉 Files with overall lowest coverage (click to expand)
mssql_python.pybind.logger_bridge.hpp: 58.8%
mssql_python.pybind.logger_bridge.cpp: 59.2%
mssql_python.row.py: 66.2%
mssql_python.pybind.ddbc_bindings.cpp: 69.4%
mssql_python.pybind.ddbc_bindings.h: 69.7%
mssql_python.pybind.connection.connection.cpp: 75.3%
mssql_python.ddbc_bindings.py: 79.6%
mssql_python.pybind.connection.connection_pool.cpp: 79.6%
mssql_python.cursor.py: 84.7%
mssql_python.__init__.py: 84.9%

🔗 Quick Links

⚙️ Build Summary 📋 Coverage Details

View Azure DevOps Build

Browse Full Coverage Report

@saurabh500 saurabh500 force-pushed the dev/saurabh/integrate-mssql-py-core branch from 6ca65a3 to 63a91cf Compare February 18, 2026 20:36
- Add install-mssql-py-core.ps1 (Windows) and install-mssql-py-core.sh (Linux/macOS)
  scripts that download the mssql-py-core-wheels NuGet package from the public
  Azure Artifacts feed and pip install the platform-appropriate wheel
- Add eng/versions/mssql-py-core.version to pin the NuGet package version
  (no fallback to latest - file is required)
- Add 'Install mssql_py_core' step to all 10 test jobs in pr-validation-pipeline.yml
- No authentication required (public feed), no nuget.exe dependency (raw HTTP + unzip)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@saurabh500 saurabh500 force-pushed the dev/saurabh/integrate-mssql-py-core branch from 63a91cf to e0d975c Compare February 18, 2026 20:37
saurabh500 and others added 5 commits February 18, 2026 13:42
…o wheel available

- Detect musl vs glibc on Linux to use musllinux_1_2 vs manylinux_2_28 wheel tags
- Skip with warning (exit 0) instead of failing when no compatible wheel is found
- Allows Alpine jobs to continue without blocking on missing musllinux wheels

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Missing wheels must block the pipeline — every platform must have a matching wheel.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ldd --version exits with code 1 on musl/Alpine. Combined with
set -euo pipefail, the piped grep check always took the else branch,
misidentifying Alpine as glibc (manylinux). pip then rejected the
manylinux wheel since it cannot run on musl.

Fix: capture ldd output into a variable with || true before grepping.
Add fallback detection via /etc/alpine-release and /lib/ld-musl-*.
Skip gracefully (exit 0) when no musllinux wheel is available yet.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add eng/scripts/repackage-with-mssql-py-core.py that downloads the
mssql-py-core-wheels NuGet package, matches each mssql-python wheel
to its corresponding mssql_py_core wheel by platform/Python tags,
extracts the native extension (.pyd/.so) and supporting files, and
injects them into the mssql-python wheel with updated RECORD hashes.

Pipeline changes:
- OneBranch consolidate-artifacts-job.yml: checkout source, install
  Python, run repackaging after wheel consolidation
- eng/pipelines/build-whl-pipeline.yml: run repackaging after wheel
  build in Windows, macOS, and Linux jobs

musllinux wheels are skipped gracefully since mssql_py_core does not
yet ship musllinux builds.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Official builds now validate eng/versions/mssql-py-core.version and
fail if it contains dev, nightly, alpha, beta, rc, or preview tags.
NonOfficial builds are unaffected and can use any version.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@saurabh500 saurabh500 force-pushed the dev/saurabh/integrate-mssql-py-core branch from 4c53fdb to 67da099 Compare February 21, 2026 00:23
@github-actions github-actions bot added pr-size: large Substantial code update and removed pr-size: medium Moderate update size labels Feb 21, 2026
@saurabh500 saurabh500 changed the title FEAT: Integrate mssql_py_core wheel installation into PR validation pipeline FEAT: Integrate mssql_py_core wheel installation into Dev workflow PR validation, official and release pipelines Feb 23, 2026
@saurabh500
Copy link
Contributor Author

Devcontainer changes and developer documentation changes are out of scope

@saurabh500 saurabh500 marked this pull request as ready for review February 23, 2026 05:31
Copilot AI review requested due to automatic review settings February 23, 2026 05:31
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR integrates the mssql_py_core (Rust-based bulk copy engine) into the mssql-python package by downloading pre-built wheels from a NuGet feed and including them in every mssql-python wheel. After this change, import mssql_py_core works out of the box after pip install mssql-python.

Changes:

  • Adds installation infrastructure to download and extract mssql_py_core wheels from Azure Artifacts NuGet feed
  • Integrates mssql_py_core installation into all build and test pipelines (PR validation, official builds, release pipelines)
  • Adds version validation to prevent pre-release versions of mssql_py_core from being shipped to PyPI
  • Adds basic bulkcopy integration tests and includes mssql_py_core in the mssql-python wheel packaging

Reviewed changes

Copilot reviewed 18 out of 19 changed files in this pull request and generated 10 comments.

Show a summary per file
File Description
eng/versions/mssql-py-core.version Single-line version file specifying which mssql_py_core version to download
eng/scripts/resolve_nuget_feed.py Python script to fetch NuGet v3 service index and extract PackageBaseAddress URL
eng/scripts/extract_wheel.py Python script to extract mssql_py_core files from a wheel into the repository root
eng/scripts/install-mssql-py-core.ps1 Windows PowerShell script orchestrating download, platform detection, and extraction
eng/scripts/install-mssql-py-core.sh Unix bash script with same functionality as PS1, plus musl/glibc detection for Alpine
eng/scripts/validate-release-versions.ps1 PowerShell script to reject pre-release versions (dev/alpha/beta/rc)
eng/pipelines/steps/install-mssql-py-core.yml Reusable step template with Windows/Unix/container variants
eng/pipelines/pr-validation-pipeline.yml Adds mssql_py_core installation to all 12 test jobs
eng/pipelines/build-whl-pipeline.yml Adds mssql_py_core installation before wheel builds, adds curl dependency
OneBranchPipelines/stages/build-linux-single-stage.yml Adds install step in per-Python build loop, adds curl, updates comments
OneBranchPipelines/stages/build-windows-single-stage.yml Adds PowerShell install step before testing
OneBranchPipelines/stages/build-macos-single-stage.yml Adds bash install step before testing
OneBranchPipelines/jobs/consolidate-artifacts-job.yml Changes checkout from none to self, copies version file to dist/
eng/pipelines/official-release-pipeline.yml Downloads version file, validates it's not pre-release before ESRP submission
eng/pipelines/dummy-release-pipeline.yml Same version validation as official pipeline
OneBranchPipelines/build-release-package-pipeline.yml Comment update about manylinux version
setup.py Adds validate_mssql_py_core() check, includes mssql_py_core in packages and package_data
tests/test_019_bulkcopy.py Basic bulkcopy integration test with 3-row insert and verification
.gitignore Excludes mssql_py_core/ directory from version control

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

# Architectures: x86_64 (AMD/Intel), aarch64 (ARM64)
# Each stage:
# 1. Starts PyPA Docker container (manylinux_2_28 or musllinux_1_2)
# 1. Starts PyPA Docker container (manylinux_2_34 or musllinux_1_2)
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Incorrect comment update: The comment was changed from manylinux_2_28 to manylinux_2_34, but the actual container image used is quay.io/pypa/manylinux_2_28_$(ARCH) as specified in build-linux-single-stage.yml line 113. The comment at line 107 correctly states "manylinux_2_28 = AlmaLinux 8 (glibc 2.28)".

Revert this comment back to "manylinux_2_28" to match the actual container being used. The note about mssql_py_core requiring glibc 2.34 is correctly explained in the build-linux-single-stage.yml file (lines 108-109).

Suggested change
# 1. Starts PyPA Docker container (manylinux_2_34 or musllinux_1_2)
# 1. Starts PyPA Docker container (manylinux_2_28 or musllinux_1_2)

Copilot uses AI. Check for mistakes.
if echo "$ldd_output" | grep -qi musl || [ -f /etc/alpine-release ]; then
WHEEL_PLATFORM="musllinux_1_2_${ARCH_TAG}"
else
# auditwheel=skip: wheels are tagged linux_* not manylinux_2_34_*
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unclear platform tag expectation: The comment states that mssql_py_core wheels are tagged as linux_* (not manylinux_2_34_*), but this contradicts standard Python wheel naming conventions and creates confusion with the manylinux_2_28 tags used by mssql-python itself.

For clarity and to prevent future issues:

  1. Document in a comment why mssql_py_core uses non-standard linux_* tags instead of proper manylinux_* tags
  2. Consider whether the mssql-rs build should be updated to use proper manylinux tags
  3. Add a note in the PR description explaining this platform tag discrepancy and its implications for pip installation

If the wheels are actually tagged as manylinux_2_34_* (not linux_*), then this line needs to be updated accordingly.

Suggested change
# auditwheel=skip: wheels are tagged linux_* not manylinux_2_34_*
# NOTE: The mssql_py_core Linux wheels produced by the mssql-rs build
# are currently tagged with a non-standard 'linux_${ARCH_TAG}' tag
# instead of a PEP 600 manylinux tag such as 'manylinux_2_34_${ARCH_TAG}'.
# This comes from running auditwheel in a mode that preserves the
# original linux_* platform tag (e.g. auditwheel repair --skip).
#
# This script installs from a wheel extracted from a NuGet package,
# so pip accepts the wheel even though it is not manylinux-tagged.
# If the mssql-rs build is updated to emit proper manylinux_2_34_*
# tags, update WHEEL_PLATFORM (and the comment above) to match the
# new tag and call out the change in the PR description, as it can
# affect how pip resolves platform-specific wheels.

Copilot uses AI. Check for mistakes.
Comment on lines +92 to +94
sys.exit(
f"ERROR: No mssql_py_core native extension ({ext}) found "
f"in mssql_py_core/. Run eng/scripts/install-mssql-py-core to extract it."
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error message suggests running "eng/scripts/install-mssql-py-core" without specifying the file extension (.ps1 or .sh), which could be confusing for users.

Consider making the error message more specific by indicating the appropriate script for each platform (e.g., "Run eng/scripts/install-mssql-py-core.ps1 on Windows or eng/scripts/install-mssql-py-core.sh on Unix").

Copilot uses AI. Check for mistakes.
if command -v unzip &>/dev/null; then
unzip -q "$NUPKG_PATH" -d "$extract_dir"
else
python -c "import zipfile; zipfile.ZipFile('$NUPKG_PATH').extractall('$extract_dir')"
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Potential command injection vulnerability: The variable $NUPKG_PATH is used in a Python command string without proper quoting. If the version contains special characters that make it through the lowercase transformation, this could lead to command injection.

Consider using proper quoting or passing the path as an argument to a separate Python script instead of embedding it in the command string.

Suggested change
python -c "import zipfile; zipfile.ZipFile('$NUPKG_PATH').extractall('$extract_dir')"
python - "$NUPKG_PATH" "$extract_dir" << 'EOF'
import sys, zipfile
zipfile.ZipFile(sys.argv[1]).extractall(sys.argv[2])
EOF

Copilot uses AI. Check for mistakes.
Comment on lines +27 to +34
out_path = os.path.join(target_dir, entry)
if entry.endswith("/"):
os.makedirs(out_path, exist_ok=True)
continue

os.makedirs(os.path.dirname(out_path), exist_ok=True)
with open(out_path, "wb") as f:
f.write(zf.read(entry))
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Potential path traversal vulnerability: The code directly joins ZIP entry names with the target directory without validating that the resulting path is actually within the target directory. A malicious wheel could contain entries like "../../../etc/passwd" that would write outside the intended directory.

Use os.path.commonpath or os.path.realpath to validate that the final path is within the target directory before writing, or use zipfile.extractall() with a filter (Python 3.12+) or manual validation.

Copilot uses AI. Check for mistakes.
We need this base URL because we download the mssql-py-core-wheels
nupkg directly via HTTP rather than using the NuGet CLI.
"""
with urllib.request.urlopen(feed_url) as resp:
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The urllib.request.urlopen call does not validate the URL scheme or set a timeout, which could lead to SSRF (Server-Side Request Forgery) vulnerabilities or hanging requests. The feed URL can be passed from the command line or environment.

Validate that the URL uses https:// scheme and add a timeout parameter to prevent hanging. Consider using a more robust HTTP library like requests if available, or at minimum validate the URL scheme before making the request.

Copilot uses AI. Check for mistakes.
Comment on lines +79 to +81
sys.exit(
"ERROR: mssql_py_core/ directory not found in project root. "
"Run eng/scripts/install-mssql-py-core to extract it before building."
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error message suggests running "eng/scripts/install-mssql-py-core" without specifying the file extension (.ps1 or .sh), which could be confusing for users.

Consider making the error message more specific by indicating the appropriate script for each platform (e.g., "Run eng/scripts/install-mssql-py-core.ps1 on Windows or eng/scripts/install-mssql-py-core.sh on Unix").

Copilot uses AI. Check for mistakes.
}

detect_platform() {
read -r PY_VERSION PLATFORM ARCH <<< "$(python -c "
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency in Python command usage: Line 24 defines PYTHON variable that respects environment or falls back to python or python3, but line 41 and subsequent calls directly use python instead of $PYTHON. This could cause the script to detect platform information from a different Python version than intended.

Replace hardcoded python calls with $PYTHON or "$PYTHON" throughout the script (lines 41, 89, 123, 124, 161, 165) to ensure consistent Python version usage.

Suggested change
read -r PY_VERSION PLATFORM ARCH <<< "$(python -c "
read -r PY_VERSION PLATFORM ARCH <<< "$("$PYTHON" -c "

Copilot uses AI. Check for mistakes.

# Insert data
cursor.execute(f"INSERT INTO {table_name} (id, name) VALUES (?, ?)", (1, "Alice"))
cursor.execute(f"INSERT INTO {table_name} (id, name) VALUES (?, ?)", (2, "Bob"))
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing commit after INSERT operations: The test commits after CREATE TABLE (line 23) but not after the INSERT statements (lines 26-27). If the connection is in autocommit=False mode, the inserted rows may not be visible to the subsequent SELECT query, causing the test to fail.

Add cursor.connection.commit() after line 27 to ensure the inserted data is committed before verification.

Suggested change
cursor.execute(f"INSERT INTO {table_name} (id, name) VALUES (?, ?)", (2, "Bob"))
cursor.execute(f"INSERT INTO {table_name} (id, name) VALUES (?, ?)", (2, "Bob"))
cursor.connection.commit()

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-size: large Substantial code update

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants