FIX: Separate ODBC wheel payloads by Linux libc family - #798
Conversation
Select only matching libc distro trees for manylinux and musllinux wheels. Update release assertions, Conda inventory expectations, existing audit coverage, and packaging documentation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🟢 Approval recommended
The packaging, release validation, Conda audits, tests, and documentation consistently implement the requested libc separation.
Pull request overview
Separates ODBC wheel payloads by Linux libc family while preserving architecture and runtime layout.
Changes:
- Restricts manylinux wheels to glibc trees and musllinux wheels to Alpine/musl.
- Updates release checks and Conda audits for the new inventories.
- Documents libc-specific packaging and legacy audit compatibility.
File summaries
| File | Description |
|---|---|
setup_odbc.py |
Selects libc-specific Linux payloads. |
OneBranchPipelines/stages/build-odbc-all-stage.yml |
Validates wheel contents and rejects foreign libc trees. |
eng/conda_tools/contracts.py |
Updates required Linux driver inventories. |
eng/conda_tools/__main__.py |
Updates audit documentation. |
tests/test_029_bundled_binary_audit.py |
Covers glibc-only and legacy musl payloads. |
PyPI_Description_ODBC.md |
Documents libc-specific wheels. |
Review details
- Files reviewed: 6/6 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
📊 Code Coverage Report
Diff CoverageDiff: main...HEAD, staged and unstaged changesNo lines with coverage information in this diff. 📋 Files Needing Attention📉 Files with overall lowest coverage (click to expand)mssql_python.pybind.performance_counter.hpp: 0.7%
mssql_python.pybind.logger_bridge.cpp: 57.9%
mssql_python.pybind.ddbc_bindings.h: 64.1%
mssql_python.pybind.logger_bridge.hpp: 70.8%
mssql_python.row.py: 77.6%
mssql_python.pybind.ddbc_bindings.cpp: 77.7%
mssql_python.pybind.connection.connection_pool.cpp: 81.8%
mssql_python.logging.py: 86.2%
mssql_python.pooling.py: 90.1%
mssql_python.pybind.py_type_cache.hpp: 91.6%🔗 Quick Links
|
PR Performance ReportPerformance assessment pending. Waiting for the matching performance run for head |
There was a problem hiding this comment.
🔵 Needs a closer look
It changes cross-platform wheel packaging and release gates, with ARM64 runtime validation limited to archive and ELF inspection.
Review details
- Files reviewed: 6/6 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🟢 Approval recommended
The reviewed changes consistently enforce libc-specific payload selection and update corresponding release audits and tests.
Review details
- Files reviewed: 6/6 changed files
- Comments generated: 0 new
- Review effort level: Lite
Work Item / Issue Reference
Summary
Separate Linux ODBC wheel payloads by libc family: manylinux wheels retain the glibc-based Debian/Ubuntu, RHEL, and available SUSE variants; musllinux wheels retain only Alpine/musl. Preserve architecture filtering, driver resources, and the existing runtime layout.
Validation completed in Docker with native-built CPython 3.12 extensions on glibc and musl x86-64. Installed-wheel dependency, connection, and cursor/lifecycle checks passed on both (67 passed, 4 skipped per environment), along with live SQL queries, Unicode, DDL/DML, commit, and rollback. Confirmed ODBC libraries loaded from the installed package, not the checkout or system. Existing Conda audit tests passed, and all four Linux wheels passed archive/ELF inspection. Formatting and release-gate checks passed.
ARM64 validation was limited to archive/ELF inspection. The full nonstress/Rust/bulkcopy suite was not run; Rust package downloads were TLS-blocked.