Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
dcafa6d
FEAT: Add conda packaging recipes and publish tooling for mssql-python
jahnvi480 Aug 14, 2026
a1ff766
FIX: Address PR review on conda recipes and harness
jahnvi480 Aug 14, 2026
0013f70
FIX: address round-2 conda recipe review (#563)
jahnvi480 Aug 14, 2026
ca0be45
Merge branch 'main' into jahnvi/conda-onboarding
jahnvi480 Aug 17, 2026
e10a4de
CHORE: sync conda build/validate/publish architecture from ADO
jahnvi480 Aug 18, 2026
8e7f217
CHORE: build mssql-python-odbc conda once (python-agnostic) in ODBC_B…
jahnvi480 Aug 18, 2026
43f23a8
Merge branch 'main' into jahnvi/conda-onboarding
jahnvi480 Aug 18, 2026
1f749d1
FIX: fail-closed conda driver-load probe + metadata-based release gate
jahnvi480 Aug 18, 2026
a8d42d6
FIX: genuinely cross-build osx-arm64 conda on the Intel macOS agent (…
jahnvi480 Aug 18, 2026
4695f6b
FIX: declare conda security deps for the ODBC driver companion (P1-4)
jahnvi480 Aug 18, 2026
599f03f
FIX: complete self-contained glibc ODBC payload (bundle libltdl.so.7)
jahnvi480 Aug 18, 2026
6d67a12
FIX: bundle musl libltdl too, add LGPL notice, add binary-audit gate
jahnvi480 Aug 18, 2026
d6e790c
FIX: drop unused libodbc.2.dylib (removes macOS Homebrew-libtool lan…
jahnvi480 Aug 18, 2026
81a34cf
FIX: keep shipped libodbc.2.dylib; make audit reachability-aware
jahnvi480 Aug 18, 2026
4722248
FIX: make conda-declared openssl/krb5 reachable from the ODBC driver …
jahnvi480 Aug 18, 2026
7d2fc1e
FEAT: add a live Encrypt=yes TLS gate that proves the OpenSSL backend…
jahnvi480 Aug 18, 2026
9a2f4c3
FIX: bundle Linux libltdl.so.7 + dual-RUNPATH driver binaries (glibc …
jahnvi480 Aug 18, 2026
e136c1e
FIX: conda openssl Linux-only + pinned <4; surface dlopen error text …
jahnvi480 Aug 19, 2026
50d02fa
FIX: splat DriverCondaDir as hashtable in conda-build step (fixes CON…
jahnvi480 Aug 19, 2026
79eec5c
FIX: skip conda-only unit tests when conda/ sources absent (installed…
jahnvi480 Aug 19, 2026
abd0f66
Declare libtool (libltdl) for conda instead of vendoring it on Linux
jahnvi480 Aug 19, 2026
a0923d1
Merge branch 'main' into jahnvi/conda-onboarding
jahnvi480 Aug 19, 2026
6435a8a
Revert "Declare libtool (libltdl) for conda instead of vendoring it o…
jahnvi480 Aug 19, 2026
9372689
FEAT: make the mssql-python conda package self-contained (vendor the …
jahnvi480 Aug 19, 2026
5386d9b
CHORE: scope PR #720 to conda packaging (drop ODBC driver self-contai…
jahnvi480 Aug 19, 2026
414905f
FEAT: build only the self-contained mssql-python conda package (retir…
jahnvi480 Aug 19, 2026
30bcf81
FEAT: rewire conda release gate for the single self-contained package
jahnvi480 Aug 19, 2026
3e612a2
FEAT: finish single-package conda pipeline wiring (publish/consolidat…
jahnvi480 Aug 19, 2026
cb9bfd3
DOC: drop stale #706/companion references from official-release-pipel…
jahnvi480 Aug 19, 2026
a418428
DOC: drop remaining stale conda #706/companion comments (single self-…
jahnvi480 Aug 19, 2026
e8c6e10
FEAT: add standalone conda-build + conda-release pipelines
jahnvi480 Aug 19, 2026
350e1e0
REFACTOR: remove conda from the PyPI build/release pipelines (conda i…
jahnvi480 Aug 19, 2026
63d90f6
Merge branch 'main' into jahnvi/conda-onboarding
jahnvi480 Aug 19, 2026
61fd60c
REFACTOR: remove conda from the wheel build stage templates (+ odbc-a…
jahnvi480 Aug 19, 2026
12c4d63
REFACTOR: keep wheel-build stage templates + release pipelines pristine
jahnvi480 Aug 19, 2026
c4c7fee
FIX: make the conda package actually fix #563 (RPATH reachability) + …
jahnvi480 Aug 19, 2026
6cf5540
FIX: address conda PR review comments
jahnvi480 Aug 19, 2026
837ac60
FIX: harden the conda #563 fix -- exact RUNPATH audit, assertion-only…
jahnvi480 Aug 19, 2026
43958df
FIX: install pytest in the conda-audit PR workflow
jahnvi480 Aug 19, 2026
6491112
FIX: unblock the conda-audit PR gate + tighten the audit (round-3 rev…
jahnvi480 Aug 20, 2026
433c643
FIX: run conda-audit unit tests with --noconftest
jahnvi480 Aug 20, 2026
9e71d51
FIX: build conda in a dedicated env (GitHub runner base pins python 3…
jahnvi480 Aug 20, 2026
de3b21a
FIX: exempt musl/alpine ODBC variants from the glibc DT_NEEDED audit
jahnvi480 Aug 20, 2026
5169149
FIX: unblock OneBranch conda legs (macOS index, win import shadow, Li…
jahnvi480 Aug 20, 2026
1353360
FIX: create empty noarch/repodata.json so the local conda channel is …
jahnvi480 Aug 20, 2026
7906e59
FIX: verify conda against a token-free channel dir (posix legs)
jahnvi480 Aug 20, 2026
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
85 changes: 85 additions & 0 deletions .github/workflows/conda-audit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
---
# N3: PR-triggered conda build + masking-immune RUNPATH audit.
#
# The OneBranch conda-build pipeline is `trigger: none` / `pr: none`, so its blocking
# audit never runs on a PR. This lightweight GitHub Actions job builds ONE real
# linux-64 conda package from the SHIPPED PyPI wheels and runs
# eng/scripts/audit_bundled_binaries.py on it, so a regression in the $ORIGIN climb,
# the declared conda deps (krb5/libtool/openssl), or the expected DT_NEEDED set fails
# the PR automatically -- the full-agent runtime masking cannot hide it.
#
# The PyPI mssql-python-odbc binaries are not yet pre-baked with the climb, so the
# recipe's assertion-only default would (correctly) refuse to mutate them; this PR
# gate sets CONDA_ALLOW_UNSIGNED_PATCH=1 to build a DEV-patched climb and audit THAT.
# The signed release path stays assertion-only (see conda/mssql-python/build.sh).
name: conda-audit

on:
pull_request:
paths:
- 'conda/**'
- 'eng/scripts/audit_bundled_binaries.py'
- 'OneBranchPipelines/scripts/build-conda-packages.sh'
- 'tests/test_027_conda_release_metadata.py'
- 'tests/test_029_bundled_binary_audit.py'
- '.github/workflows/conda-audit.yml'

permissions:
contents: read

jobs:
linux-conda-audit:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Unit-test the audit + release validator
run: |
python -m pip install --quiet pytest zstandard
# --noconftest: tests/conftest.py imports mssql_python (the native ddbc_bindings
# extension), which is NOT built in this repackage-only gate. test_027/test_029
# are pure conda validator/audit tests using only built-in fixtures, so skip
# conftest to avoid that unrelated import.
python -m pytest --noconftest \
tests/test_029_bundled_binary_audit.py \
tests/test_027_conda_release_metadata.py -q

- name: Fetch the shipped linux wheels from PyPI
run: |
set -euo pipefail
mkdir -p wheels
# --no-deps: pull ONLY the two wheels we repackage (not azure-identity etc).
python -m pip download --no-deps mssql-python mssql-python-odbc -d wheels
echo "Downloaded:"; ls -1 wheels

- name: Build + audit a linux-64 conda package
env:
# PyPI odbc binaries are not pre-baked; build a DEV-patched climb here and
# audit it. NEVER used on the signed release path.
CONDA_ALLOW_UNSIGNED_PATCH: '1'
run: |
set -euo pipefail
mssql_whl="$(ls wheels/mssql_python-*.whl | grep -v mssql_python_odbc | head -1)"
odbc_whl="$(ls wheels/mssql_python_odbc-*.whl | head -1)"
MSSQL_VER="$(basename "$mssql_whl" | sed -nE 's/^mssql_python-([^-]+)-.*/\1/p')"
ODBC_VER="$(basename "$odbc_whl" | sed -nE 's/^mssql_python_odbc-([^-]+)-.*/\1/p')"
echo "mssql-python=$MSSQL_VER mssql-python-odbc=$ODBC_VER"
bash OneBranchPipelines/scripts/build-conda-packages.sh \
"$PWD/wheels" \
"$PWD/conda" \
"$RUNNER_TEMP/conda-bld" \
"$MSSQL_VER" \
"$ODBC_VER" \
"3.11" \
"linux-64"

- name: Explicit standalone audit of the built package
run: |
set -euo pipefail
python -m pip install --quiet zstandard
python eng/scripts/audit_bundled_binaries.py --root "$RUNNER_TEMP/conda-bld/bld"
Loading
Loading