From 74c33652914ff923f7a8ab0e7c3ed81a4ed76458 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 16:59:34 +0530 Subject: [PATCH 01/93] REFACTOR: Shift get_driver_path from Python to ddbc bindings --- mssql_python/helpers.py | 39 ----------- mssql_python/pybind/ddbc_bindings.cpp | 97 ++++++++++++++++++++++----- tests/test_000_dependencies.py | 62 ++++++++++++----- 3 files changed, 125 insertions(+), 73 deletions(-) diff --git a/mssql_python/helpers.py b/mssql_python/helpers.py index 267ede75c..e1125b8f8 100644 --- a/mssql_python/helpers.py +++ b/mssql_python/helpers.py @@ -146,45 +146,6 @@ def detect_linux_distro(): return distro_name -def get_driver_path(module_dir, architecture): - """ - Get the platform-specific ODBC driver path. - - Args: - module_dir (str): Base module directory - architecture (str): Target architecture (x64, arm64, x86, etc.) - - Returns: - str: Full path to the ODBC driver file - - Raises: - RuntimeError: If driver not found or unsupported platform - """ - - platform_name = platform.system().lower() - normalized_arch = normalize_architecture(platform_name, architecture) - - if platform_name == "windows": - driver_path = Path(module_dir) / "libs" / "windows" / normalized_arch / "msodbcsql18.dll" - - elif platform_name == "darwin": - driver_path = Path(module_dir) / "libs" / "macos" / normalized_arch / "lib" / "libmsodbcsql.18.dylib" - - elif platform_name == "linux": - distro_name = detect_linux_distro() - driver_path = Path(module_dir) / "libs" / "linux" / distro_name / normalized_arch / "lib" / "libmsodbcsql-18.5.so.1.1" - - else: - raise RuntimeError(f"Unsupported platform: {platform_name}") - - driver_path_str = str(driver_path) - - # Check if file exists - if not driver_path.exists(): - raise RuntimeError(f"ODBC driver not found at: {driver_path_str}") - - return driver_path_str - def sanitize_connection_string(conn_str: str) -> str: """ diff --git a/mssql_python/pybind/ddbc_bindings.cpp b/mssql_python/pybind/ddbc_bindings.cpp index 49c7c7af4..8cd0fdf01 100644 --- a/mssql_python/pybind/ddbc_bindings.cpp +++ b/mssql_python/pybind/ddbc_bindings.cpp @@ -637,20 +637,80 @@ std::string GetLastErrorMessage() { #endif } -// Function to call Python get_driver_path function -std::string GetDriverPathFromPython(const std::string& moduleDir, const std::string& architecture) { - try { - py::module_ helpers = py::module_::import("mssql_python.helpers"); - py::object get_driver_path = helpers.attr("get_driver_path"); - py::str result = get_driver_path(moduleDir, architecture); - return std::string(result); - } catch (const py::error_already_set& e) { - LOG("Python error in get_driver_path: {}", e.what()); - ThrowStdException("Failed to get driver path from Python: " + std::string(e.what())); - } catch (const std::exception& e) { - LOG("Error calling get_driver_path: {}", e.what()); - ThrowStdException("Failed to get driver path: " + std::string(e.what())); - } + +/* + * DRIVER PATH RESOLUTION: C++ Only Implementation + * + * This function handles all ODBC driver path resolution in C++ rather than calling + * Python helpers to avoid circular import issues on Alpine Linux. + * + * BACKGROUND: + * Originally, driver path resolution was handled by a Python function in helpers.py + * (get_driver_path) that was called from C++ during module initialization. This worked + * fine on most platforms but caused a critical circular import issue specifically on + * Alpine Linux. + * + * THE ALPINE PROBLEM: + * 1. Alpine Linux uses musl libc instead of glibc (used by Ubuntu/RHEL/macOS) + * 2. musl's dynamic loader has stricter rules about circular dependencies during + * module initialization + * 3. The circular import chain was: + * - ddbc_bindings.cpp starts loading + * - LoadDriverOrThrowException() calls GetDriverPathFromPython() + * - This tries to import mssql_python.helpers + * - helpers.py tries to import ddbc_bindings (not fully loaded yet) + * - Alpine/musl fails with circular import error + * - Ubuntu/macOS/glibc systems handle this gracefully + * + * THE SOLUTION: + * By implementing driver path resolution entirely in C++, we: + * 1. Eliminate all Python dependencies during critical driver initialization + * 2. Avoid the circular import issue completely on all platforms +*/ +std::string GetDriverPathCpp(const std::string& moduleDir) { + namespace fs = std::filesystem; + fs::path basePath(moduleDir); + + std::string platform; + std::string arch; + + // Detect architecture + #if defined(__aarch64__) || defined(_M_ARM64) + arch = "arm64"; + #elif defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) + arch = "x86_64"; // maps to "x64" on Windows + #else + throw std::runtime_error("Unsupported architecture"); + #endif + + // Detect platform and set path + #ifdef __linux__ + if (fs::exists("/etc/alpine-release")) { + platform = "alpine"; + } else if (fs::exists("/etc/redhat-release") || fs::exists("/etc/centos-release")) { + platform = "rhel"; + } else { + platform = "ubuntu"; + } + + fs::path driverPath = basePath / "libs" / "linux" / platform / arch / "lib" / "libmsodbcsql-18.5.so.1.1"; + return driverPath.string(); + + #elif defined(__APPLE__) + platform = "macos"; + fs::path driverPath = basePath / "libs" / platform / arch / "lib" / "libmsodbcsql.18.dylib"; + return driverPath.string(); + + #elif defined(_WIN32) + platform = "windows"; + // Normalize x86_64 to x64 for Windows naming + if (arch == "x86_64") arch = "x64"; + fs::path driverPath = basePath / "libs" / platform / arch / "lib" / "msodbcsql18.dll"; + return driverPath.string(); + + #else + throw std::runtime_error("Unsupported platform"); + #endif } DriverHandle LoadDriverOrThrowException() { @@ -662,8 +722,11 @@ DriverHandle LoadDriverOrThrowException() { std::string archStr = ARCHITECTURE; LOG("Architecture: {}", archStr); - // Use Python function to get the correct driver path for the platform - std::string driverPathStr = GetDriverPathFromPython(moduleDir, archStr); + // Use only C++ function for driver path resolution + // Not using Python function since it causes circular import issues on Alpine Linux + // and other platforms with strict module loading rules. + std::string driverPathStr = GetDriverPathCpp(moduleDir); + fs::path driverPath(driverPathStr); LOG("Driver path determined: {}", driverPath.string()); @@ -2448,7 +2511,7 @@ PYBIND11_MODULE(ddbc_bindings, m) { // Expose the C++ functions to Python m.def("ThrowStdException", &ThrowStdException); - m.def("get_driver_path", &GetDriverPathFromPython, "Get platform-specific ODBC driver path"); + m.def("GetDriverPathCpp", &GetDriverPathCpp, "Get the path to the ODBC driver"); // Define parameter info class py::class_(m, "ParamInfo") diff --git a/tests/test_000_dependencies.py b/tests/test_000_dependencies.py index 08d16fef5..8404ae521 100644 --- a/tests/test_000_dependencies.py +++ b/tests/test_000_dependencies.py @@ -9,6 +9,9 @@ import sys from pathlib import Path +from mssql_python.ddbc_bindings import normalize_architecture +from mssql_python.helpers import detect_linux_distro + class DependencyTester: """Helper class to test platform-specific dependencies.""" @@ -164,8 +167,31 @@ def get_expected_python_extension(self): return self.module_dir / extension_name + def get_expected_driver_path(self): + platform_name = platform.system().lower() + normalized_arch = normalize_architecture(platform_name, self.normalized_arch) + + if platform_name == "windows": + driver_path = Path(self.module_dir) / "libs" / "windows" / normalized_arch / "msodbcsql18.dll" + + elif platform_name == "darwin": + driver_path = Path(self.module_dir) / "libs" / "macos" / normalized_arch / "lib" / "libmsodbcsql.18.dylib" + + elif platform_name == "linux": + distro_name = detect_linux_distro() + driver_path = Path(self.module_dir) / "libs" / "linux" / distro_name / normalized_arch / "lib" / "libmsodbcsql-18.5.so.1.1" + + else: + raise RuntimeError(f"Unsupported platform: {platform_name}") + + driver_path_str = str(driver_path) + + # Check if file exists + if not driver_path.exists(): + raise RuntimeError(f"ODBC driver not found at: {driver_path_str}") + + return driver_path_str -# Create global instance for use in tests dependency_tester = DependencyTester() @@ -314,21 +340,6 @@ def test_python_extension_imports(self): except Exception as e: pytest.fail(f"Failed to import or use ddbc_bindings: {e}") - - def test_helper_functions_work(self): - """Test that helper functions can detect platform correctly.""" - try: - from mssql_python.helpers import get_driver_path - - # Test that get_driver_path works for current platform - driver_path = get_driver_path(str(dependency_tester.module_dir), dependency_tester.normalized_arch) - - assert Path(driver_path).exists(), \ - f"Driver path returned by get_driver_path does not exist: {driver_path}" - - except Exception as e: - pytest.fail(f"Failed to use helper functions: {e}") - # Print platform information when tests are collected def pytest_runtest_setup(item): @@ -349,4 +360,21 @@ def test_ddbc_bindings_import(): import mssql_python.ddbc_bindings assert True, "ddbc_bindings module imported successfully." except ImportError as e: - pytest.fail(f"Failed to import ddbc_bindings: {e}") \ No newline at end of file + pytest.fail(f"Failed to import ddbc_bindings: {e}") + + + +def test_get_driver_path_from_ddbc_bindings(): + """Test the GetDriverPathCpp function from ddbc_bindings.""" + try: + import mssql_python.ddbc_bindings as ddbc + module_dir = dependency_tester.module_dir + + driver_path = ddbc.GetDriverPathCpp(str(module_dir)) + + # The driver path should be same as one returned by the Python function + expected_path = dependency_tester.get_expected_driver_path() + assert driver_path == str(expected_path), \ + f"Driver path mismatch: expected {expected_path}, got {driver_path}" + except Exception as e: + pytest.fail(f"Failed to call GetDriverPathCpp: {e}") From e4bf7b8488b23d2d540707effaede8ac91da5142 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 17:04:41 +0530 Subject: [PATCH 02/93] Fix windows path Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- mssql_python/pybind/ddbc_bindings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mssql_python/pybind/ddbc_bindings.cpp b/mssql_python/pybind/ddbc_bindings.cpp index 8cd0fdf01..324b42c41 100644 --- a/mssql_python/pybind/ddbc_bindings.cpp +++ b/mssql_python/pybind/ddbc_bindings.cpp @@ -705,7 +705,7 @@ std::string GetDriverPathCpp(const std::string& moduleDir) { platform = "windows"; // Normalize x86_64 to x64 for Windows naming if (arch == "x86_64") arch = "x64"; - fs::path driverPath = basePath / "libs" / platform / arch / "lib" / "msodbcsql18.dll"; + fs::path driverPath = basePath / "libs" / platform / arch / "msodbcsql18.dll"; return driverPath.string(); #else From dcabb6644bb2eb9b1d2fef22d8bd4e86e9cce8fb Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 17:06:10 +0530 Subject: [PATCH 03/93] fix ubuntu path Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- mssql_python/pybind/ddbc_bindings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mssql_python/pybind/ddbc_bindings.cpp b/mssql_python/pybind/ddbc_bindings.cpp index 324b42c41..1ee64864b 100644 --- a/mssql_python/pybind/ddbc_bindings.cpp +++ b/mssql_python/pybind/ddbc_bindings.cpp @@ -690,7 +690,7 @@ std::string GetDriverPathCpp(const std::string& moduleDir) { } else if (fs::exists("/etc/redhat-release") || fs::exists("/etc/centos-release")) { platform = "rhel"; } else { - platform = "ubuntu"; + platform = "debian_ubuntu"; } fs::path driverPath = basePath / "libs" / "linux" / platform / arch / "lib" / "libmsodbcsql-18.5.so.1.1"; From 7aa619ed86b74cdbeb9fd24f389a7246b277db28 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 17:20:59 +0530 Subject: [PATCH 04/93] removed detect_linux_distro as well --- mssql_python/helpers.py | 33 ---------------------------- tests/test_000_dependencies.py | 39 ++++++++++++++++++---------------- 2 files changed, 21 insertions(+), 51 deletions(-) diff --git a/mssql_python/helpers.py b/mssql_python/helpers.py index e1125b8f8..f15365c99 100644 --- a/mssql_python/helpers.py +++ b/mssql_python/helpers.py @@ -114,39 +114,6 @@ def add_driver_name_to_app_parameter(connection_string): return ";".join(modified_parameters) + ";" -def detect_linux_distro(): - """ - Detect Linux distribution for driver path selection. - - Returns: - str: Distribution name ('debian_ubuntu', 'rhel', 'alpine', etc.) - """ - import os - - distro_name = "debian_ubuntu" # default - - try: - if os.path.exists("/etc/os-release"): - with open("/etc/os-release", "r") as f: - content = f.read() - for line in content.split("\n"): - if line.startswith("ID="): - distro_id = line.split("=", 1)[1].strip('"\'') - if distro_id in ["ubuntu", "debian"]: - distro_name = "debian_ubuntu" - elif distro_id in ["rhel", "centos", "fedora"]: - distro_name = "rhel" - elif distro_id == "alpine": - distro_name = "alpine" - else: - distro_name = distro_id # use as-is - break - except Exception: - pass # use default - - return distro_name - - def sanitize_connection_string(conn_str: str) -> str: """ Sanitize the connection string by removing sensitive information. diff --git a/tests/test_000_dependencies.py b/tests/test_000_dependencies.py index 8404ae521..f76a74134 100644 --- a/tests/test_000_dependencies.py +++ b/tests/test_000_dependencies.py @@ -10,7 +10,6 @@ from pathlib import Path from mssql_python.ddbc_bindings import normalize_architecture -from mssql_python.helpers import detect_linux_distro class DependencyTester: @@ -60,23 +59,26 @@ def _normalize_architecture(self): def _detect_linux_distro(self): """Detect Linux distribution for driver path selection.""" distro_name = "debian_ubuntu" # default - + ''' + #ifdef __linux__ + if (fs::exists("/etc/alpine-release")) { + platform = "alpine"; + } else if (fs::exists("/etc/redhat-release") || fs::exists("/etc/centos-release")) { + platform = "rhel"; + } else { + platform = "ubuntu"; + } + + fs::path driverPath = basePath / "libs" / "linux" / platform / arch / "lib" / "libmsodbcsql-18.5.so.1.1"; + return driverPath.string(); + ''' try: - if os.path.exists("/etc/os-release"): - with open("/etc/os-release", "r") as f: - content = f.read() - for line in content.split("\n"): - if line.startswith("ID="): - distro_id = line.split("=", 1)[1].strip('"\'') - if distro_id in ["ubuntu", "debian"]: - distro_name = "debian_ubuntu" - elif distro_id in ["rhel", "centos", "fedora"]: - distro_name = "rhel" - elif distro_id == "alpine": - distro_name = "alpine" - else: - distro_name = distro_id - break + if (Path("/etc/alpine-release").exists()): + distro_name = "alpine" + elif (Path("/etc/redhat-release").exists() or Path("/etc/centos-release").exists()): + distro_name = "rhel" + else: + distro_name = "debian_ubuntu" except Exception: pass # use default @@ -178,7 +180,7 @@ def get_expected_driver_path(self): driver_path = Path(self.module_dir) / "libs" / "macos" / normalized_arch / "lib" / "libmsodbcsql.18.dylib" elif platform_name == "linux": - distro_name = detect_linux_distro() + distro_name = self._detect_linux_distro() driver_path = Path(self.module_dir) / "libs" / "linux" / distro_name / normalized_arch / "lib" / "libmsodbcsql-18.5.so.1.1" else: @@ -192,6 +194,7 @@ def get_expected_driver_path(self): return driver_path_str +# Create global instance for use in tests dependency_tester = DependencyTester() From d56329eff9b7f58a542ed42d617a113769acc0bc Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 17:24:34 +0530 Subject: [PATCH 05/93] changed comment --- mssql_python/pybind/ddbc_bindings.cpp | 42 +++++++++------------------ 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/mssql_python/pybind/ddbc_bindings.cpp b/mssql_python/pybind/ddbc_bindings.cpp index 1ee64864b..1b37b8f0f 100644 --- a/mssql_python/pybind/ddbc_bindings.cpp +++ b/mssql_python/pybind/ddbc_bindings.cpp @@ -639,34 +639,20 @@ std::string GetLastErrorMessage() { /* - * DRIVER PATH RESOLUTION: C++ Only Implementation - * - * This function handles all ODBC driver path resolution in C++ rather than calling - * Python helpers to avoid circular import issues on Alpine Linux. - * - * BACKGROUND: - * Originally, driver path resolution was handled by a Python function in helpers.py - * (get_driver_path) that was called from C++ during module initialization. This worked - * fine on most platforms but caused a critical circular import issue specifically on - * Alpine Linux. - * - * THE ALPINE PROBLEM: - * 1. Alpine Linux uses musl libc instead of glibc (used by Ubuntu/RHEL/macOS) - * 2. musl's dynamic loader has stricter rules about circular dependencies during - * module initialization - * 3. The circular import chain was: - * - ddbc_bindings.cpp starts loading - * - LoadDriverOrThrowException() calls GetDriverPathFromPython() - * - This tries to import mssql_python.helpers - * - helpers.py tries to import ddbc_bindings (not fully loaded yet) - * - Alpine/musl fails with circular import error - * - Ubuntu/macOS/glibc systems handle this gracefully - * - * THE SOLUTION: - * By implementing driver path resolution entirely in C++, we: - * 1. Eliminate all Python dependencies during critical driver initialization - * 2. Avoid the circular import issue completely on all platforms -*/ + * Resolve ODBC driver path in C++ to avoid circular import issues on Alpine. + * + * Background: + * On Alpine Linux, calling into Python during module initialization (via pybind11) + * causes a circular import due to musl's stricter dynamic loader behavior. + * + * Specifically, importing Python helpers from C++ triggered a re-import of the + * partially-initialized native module, which works on glibc (Ubuntu/macOS) but + * fails on musl-based systems like Alpine. + * + * By moving driver path resolution entirely into C++, we avoid any Python-layer + * dependencies during critical initialization, ensuring compatibility across + * all supported platforms. + */ std::string GetDriverPathCpp(const std::string& moduleDir) { namespace fs = std::filesystem; fs::path basePath(moduleDir); From 79e248cdcd74ab7485c6d9e526219f1723be38a0 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 17:41:22 +0530 Subject: [PATCH 06/93] FEAT: Alpine Support --- eng/pipelines/pr-validation-pipeline.yml | 255 +++++++++++++++--- .../alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 | Bin 0 -> 1858688 bytes .../linux/alpine/arm64/lib/libodbcinst.so.2 | Bin 0 -> 132864 bytes .../share/resources/en_US/msodbcsqlr18.rll | Bin 0 -> 200704 bytes 4 files changed, 225 insertions(+), 30 deletions(-) create mode 100755 mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 create mode 100755 mssql_python/libs/linux/alpine/arm64/lib/libodbcinst.so.2 create mode 100644 mssql_python/libs/linux/alpine/arm64/share/resources/en_US/msodbcsqlr18.rll diff --git a/eng/pipelines/pr-validation-pipeline.yml b/eng/pipelines/pr-validation-pipeline.yml index 5b8083ae2..47f6bc976 100644 --- a/eng/pipelines/pr-validation-pipeline.yml +++ b/eng/pipelines/pr-validation-pipeline.yml @@ -156,13 +156,7 @@ jobs: testResultsFiles: '**/test-results.xml' testRunTitle: 'Publish pytest results on macOS' - - task: PublishCodeCoverageResults@1 - inputs: - codeCoverageTool: 'Cobertura' - summaryFileLocation: 'coverage.xml' - displayName: 'Publish code coverage results' - -- job: PytestOnLinux +- job: PytestOnLinux_Ubuntu pool: vmImage: 'ubuntu-latest' @@ -355,13 +349,7 @@ jobs: testResultsFiles: '**/test-results-$(distroName).xml' testRunTitle: 'Publish pytest results on $(distroName)' - - task: PublishCodeCoverageResults@1 - inputs: - codeCoverageTool: 'Cobertura' - summaryFileLocation: 'coverage-$(distroName).xml' - displayName: 'Publish code coverage results for $(distroName)' - -- job: PytestOnLinux_ARM64 +- job: PytestOnLinux_Ubuntu_ARM64 pool: vmImage: 'ubuntu-latest' @@ -573,12 +561,6 @@ jobs: testResultsFiles: '**/test-results-$(distroName)-$(archName).xml' testRunTitle: 'Publish pytest results on $(distroName) ARM64' - - task: PublishCodeCoverageResults@1 - inputs: - codeCoverageTool: 'Cobertura' - summaryFileLocation: 'coverage-$(distroName)-$(archName).xml' - displayName: 'Publish code coverage results for $(distroName) ARM64' - - job: PytestOnLinux_RHEL9 pool: vmImage: 'ubuntu-latest' @@ -785,12 +767,6 @@ jobs: testResultsFiles: '**/test-results-rhel9.xml' testRunTitle: 'Publish pytest results on RHEL 9' - - task: PublishCodeCoverageResults@1 - inputs: - codeCoverageTool: 'Cobertura' - summaryFileLocation: 'coverage-rhel9.xml' - displayName: 'Publish code coverage results for RHEL 9' - - job: PytestOnLinux_RHEL9_ARM64 pool: vmImage: 'ubuntu-latest' @@ -1009,8 +985,227 @@ jobs: testResultsFiles: '**/test-results-rhel9-arm64.xml' testRunTitle: 'Publish pytest results on RHEL 9 ARM64' - - task: PublishCodeCoverageResults@1 +- job: PytestOnLinux_Alpine_ARM64 + pool: + vmImage: 'ubuntu-latest' + + steps: + - script: | + # Set up Docker buildx for multi-architecture support + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker buildx create --name multiarch --driver docker-container --use + docker buildx inspect --bootstrap + displayName: 'Setup Docker buildx for ARM64 emulation' + + - script: | + # Create a Docker container for testing on ARM64 + docker run -d --name test-container-alpine-arm64 \ + --platform linux/arm64 \ + -v $(Build.SourcesDirectory):/workspace \ + -w /workspace \ + --network bridge \ + alpine:latest \ + tail -f /dev/null + displayName: 'Create Alpine ARM64 container' + + - script: | + # Start SQL Server container (x86_64 - SQL Server doesn't support ARM64) + docker run -d --name sqlserver-alpine-arm64 \ + --platform linux/amd64 \ + -e ACCEPT_EULA=Y \ + -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ + -p 1433:1433 \ + mcr.microsoft.com/mssql/server:2022-latest + + # Wait for SQL Server to be ready + echo "Waiting for SQL Server to start..." + for i in {1..60}; do + if docker exec sqlserver-alpine-arm64 \ + /opt/mssql-tools18/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P "$(DB_PASSWORD)" \ + -C -Q "SELECT 1" >/dev/null 2>&1; then + echo "SQL Server is ready!" + break + fi + echo "Waiting... ($i/60)" + sleep 2 + done + + # Create test database + docker exec sqlserver-alpine-arm64 \ + /opt/mssql-tools18/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P "$(DB_PASSWORD)" \ + -C -Q "CREATE DATABASE TestDB" + displayName: 'Start SQL Server container for Alpine ARM64' + env: + DB_PASSWORD: $(DB_PASSWORD) + + - script: | + # Install dependencies in the Alpine ARM64 container + docker exec test-container-alpine-arm64 sh -c " + # Update package index + apk update + + # Install build tools and system dependencies + apk add --no-cache \ + build-base \ + cmake \ + clang \ + git \ + bash \ + wget \ + curl \ + gnupg \ + unixodbc \ + unixodbc-dev \ + libffi-dev \ + openssl-dev \ + zlib-dev \ + py3-pip \ + python3-dev \ + patchelf + + # Create symlinks for Python compatibility + ln -sf python3 /usr/bin/python || true + ln -sf pip3 /usr/bin/pip || true + + # Verify installation and architecture + uname -m + python --version + which cmake + " + displayName: 'Install basic dependencies in Alpine ARM64 container' + + - script: | + # Install ODBC driver in the Alpine ARM64 container + docker exec test-container-alpine-arm64 bash -c " + # Detect architecture for ODBC driver download + case \$(uname -m) in + x86_64) architecture='amd64' ;; + arm64|aarch64) architecture='arm64' ;; + *) architecture='unsupported' ;; + esac + + if [[ 'unsupported' == '\$architecture' ]]; then + echo 'Alpine architecture \$(uname -m) is not currently supported.' + exit 1 + fi + + echo 'Detected architecture: '\$architecture + + # Download the packages + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.apk + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Download signatures for verification + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.sig + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.sig + + # Import Microsoft GPG key and verify packages + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - + gpg --verify msodbcsql18_18.5.1.1-1_\$architecture.sig msodbcsql18_18.5.1.1-1_\$architecture.apk + gpg --verify mssql-tools18_18.4.1.1-1_\$architecture.sig mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Install the packages + apk add --allow-untrusted msodbcsql18_18.5.1.1-1_\$architecture.apk + apk add --allow-untrusted mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Cleanup + rm -f msodbcsql18_18.5.1.1-1_\$architecture.* mssql-tools18_18.4.1.1-1_\$architecture.* + + # Add mssql-tools to PATH + export PATH=\"\$PATH:/opt/mssql-tools18/bin\" + echo 'export PATH=\"\$PATH:/opt/mssql-tools18/bin\"' >> ~/.bashrc + " + displayName: 'Install ODBC Driver in Alpine ARM64 container' + + - script: | + # Install Python dependencies in the Alpine ARM64 container + docker exec test-container-alpine-arm64 bash -c " + # Upgrade pip and install dependencies + python -m pip install --upgrade pip + python -m pip install -r requirements.txt + " + displayName: 'Install Python dependencies in Alpine ARM64 container' + + - script: | + # Build pybind bindings in the Alpine ARM64 container + docker exec test-container-alpine-arm64 bash -c " + cd mssql_python/pybind + chmod +x build.sh + ./build.sh + " + displayName: 'Build pybind bindings (.so) in Alpine ARM64 container' + + - script: | + # Uninstall ODBC Driver before running tests to use bundled libraries + docker exec test-container-alpine-arm64 bash -c " + # Remove system ODBC installation + apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'ODBC packages not installed via apk' + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql18 + rm -f /usr/lib/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled system ODBC Driver and cleaned up libraries' + echo 'Verifying arm64 alpine driver library signatures:' + ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 || echo 'Driver library not found' + " + displayName: 'Uninstall system ODBC Driver before running tests in Alpine ARM64 container' + + - script: | + # Run tests in the Alpine ARM64 container + # Get SQL Server container IP + SQLSERVER_IP=$(docker inspect sqlserver-alpine-arm64 --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') + echo "SQL Server IP: $SQLSERVER_IP" + + docker exec \ + -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ + -e DB_PASSWORD="$(DB_PASSWORD)" \ + test-container-alpine-arm64 bash -c " + echo 'Build successful, running tests now on Alpine ARM64' + echo 'Architecture:' \$(uname -m) + echo 'Alpine version:' \$(cat /etc/alpine-release) + echo 'Using connection string: Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=***;TrustServerCertificate=yes' + + # Test basic Python import first + python -c 'import mssql_python; print(\"mssql_python imported successfully\")' + + # Run main.py if it exists + if [ -f main.py ]; then + echo 'Running main.py...' + python main.py + fi + + # Run pytest + python -m pytest -v --junitxml=test-results-alpine-arm64.xml --cov=. --cov-report=xml:coverage-alpine-arm64.xml --capture=tee-sys --cache-clear + " + displayName: 'Run pytest with coverage in Alpine ARM64 container' + env: + DB_PASSWORD: $(DB_PASSWORD) + + - script: | + # Copy test results from container to host + docker cp test-container-alpine-arm64:/workspace/test-results-alpine-arm64.xml $(Build.SourcesDirectory)/ || echo 'Failed to copy test results' + docker cp test-container-alpine-arm64:/workspace/coverage-alpine-arm64.xml $(Build.SourcesDirectory)/ || echo 'Failed to copy coverage results' + displayName: 'Copy test results from Alpine ARM64 container' + condition: always() + + - script: | + # Clean up containers + docker stop test-container-alpine-arm64 || true + docker rm test-container-alpine-arm64 || true + docker stop sqlserver-alpine-arm64 || true + docker rm sqlserver-alpine-arm64 || true + displayName: 'Clean up Alpine ARM64 containers' + condition: always() + + - task: PublishTestResults@2 + condition: succeededOrFailed() inputs: - codeCoverageTool: 'Cobertura' - summaryFileLocation: 'coverage-rhel9-arm64.xml' - displayName: 'Publish code coverage results for RHEL 9 ARM64' \ No newline at end of file + testResultsFiles: '**/test-results-alpine-arm64.xml' + testRunTitle: 'Publish pytest results on Alpine ARM64' diff --git a/mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 b/mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 new file mode 100755 index 0000000000000000000000000000000000000000..e0b424186eb87e1f9bd8f5c9088d282ff5ab93c4 GIT binary patch literal 1858688 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 @KD_pyaNFNLIEH!4BI55Zo`P=;?IZH(6Zi2= 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êGV@QjJ)N`h>EI1uxc{kj?Is;?sG6dm#I0BzJkzduS1q+hek z>(_ZOU-voc-cG;&?f&$Cnm3;o4CfC-FE`M(n~#68jekl&TdBalszQ83e0*?L+41(@ zzYARRsq3znems4P=bsavnA3~U6P1tgG5)(bU+jIN-LJicZ<74Lq9@sHF>g<(t^}V4 zzF6eUG$-UVC3qj=zgaZ7M7gf}{~u=m-#gTF&SD&7ih3?w%&RgxEa~mlsp_P}Wycto>928}2Bmr+%=uEQReSN90&{uLRQACHBN z@c@f^zsTf{9@fCN>ySZ318FVuXTQB$^6ibLy=Q1oxOY5WpCS*m3-ii69*0uy3Cb;n z7bV!^9&EQ^ z{oR^}>vi~uazpFA*1d~|Tk`Pq@_z8T*WMdRLE8$)5+O&l+jf85=c#)KZOaz8$%Ao4 z0gRF_A7ni^Ift&j5w)55gO5M%H1p;oONre?q0@( zjypY^tiXPdEuv2@IOI9vvWdqFw7 zhmt=r*zrzdfLP^W?Vkab`}vq4u_TiYYS($A(3pYe6%BV24bTldJ>v>wlk&1f$=9O# z(f!2fNY^-%IkWG%PdQ5aiuV%TY{6Gp3Qb0d=W5{2_xcq3&gdOyEMwmSd&_WNVvo`J zCGv6>oL_1{KUdj#$W_?`<)1OxM%s1TV1Ij18;;|(A)I}vow5DxJP^p9&fY!nH4PZA zrweI6=@{nV{Uyq+P)f|!EMm4!CuZvmVzy=zvvp=W^I>DQT$*G*xX9Ioj-y@|G-%Iw z;?GH+VCJ3$50S6OOtfby7S{27ZNa&{Cj!`UpE7g57=cc(@nqZSna=eHpQ)?J4TUdM zzN8PW74ZJ|2aU~7pq$*%TKd2i4|6BBJtHX}(>b!W$S*W2kZeR2^x|h!JCleTD1|0+ z#3RK&?fR_LM^1MP%`tQBz7;Pr`2V|?OYino>Fu4 zkvx=ks%&16rvDeL%bEw&7O)Ul2d z=r%e_TgMr!y-R)FW?aW<&G4z$b1pr;?yjl%^yQely3ud!Int%{OW&L$9p~yd^eg>F zbM?*tbK1@TK6fpy$j{&7^nC%(uVvpsaXZm-T$=aspPKpM7_}be;8y0qo)evEIz{V~ zIj{IYa6&T9-v3{BbFQ?zD62KMXPD_saOO@v3;1tmhP~z%d?V2Ki3XfYhY?*XzEOK2 zM-VSnZ`VjsYrxWXpw;q(0{Tv1!>Meo^iO{K@r^ANZo6@GTJ`zw+Lm7Hpw||zn*+6L zpMM08n>pv&mc5KJBeCy2LC(qqiEuJ8n5shhI z44N7K6nD|eN7BRmiY|%!Y>VR$mYtA3CRF{CGfZb3y4612YV;TbjkV1-ozb;lsF`e* zcBeUarg6)^yXLs!s>$!gyC<9VyLzw@3^b&BS`*ycxr{P_8@_e_Qts$!WdD2V94(!2f3AG`%kmnS~gMbMxg)nSE~XJB5{Blep$EXJADunY&Dv?g;K>4@tV5a-1vQ zipHeaq3QTKGfPcZ`Xm?LztoPlF}#UdQ{~4Q)$eihJVs7O_X9T3Q49D@Kud=G-Fj#v zf6$H+n8n>@x*_@d~z?h>;>{RfC0aP`gdl8QO(4TEdlgQ|RRhJD#I@#|Wv{j&Y0 z?u5q+cd*6=^Q$`U9{9yKnP0{eYdI2MIzF^rF3g$8KASrs!8javpw^sn2LR{JH2bMH zQ|B`L@PekHDz>s&Lq~E#?GDY7N*E0*t(Rxp1hiC`rI?N`Yjyn z;eWzAPc)s_By%p}qd23?QsiIAoxghgHo*}5 zg#F=p#KkKUXo4}7F+-N?-w<_<7(|YFietv9@ z?dQjFfA72vnay39sqtn;?&R{TGL^)(YaJbfoEXYp!`dTjT9`9?7u=!=_WsQN{}TuO zpKSk|s7aQmhU~1fy35#(t;mS^tTp8cM&FpDeXBaYbL`1J4SW%FL-Bn-UVPx(-`Ty< zoBJ>BXYLg*{(sCpgfr(rvgKNM z;f6-K-~o!W}jm7zzD~g>8?)Y%b|A4+;G)P?CTcL5%eKCI@F^h z<(1tsJhJ%hk_XBps z;E!?}9;I*5?wI>c+c&f(tX*_xcaJys|2)lUtLC}RU>?u6A|q$5oad_eq($JZ&dtJXB{B9Hbe^0Ajj zJsrd9=)mots|Z1ZQFL^{`r0bxDRX)8>*(e^tmBX|mFbzTe9!Z*#QohdZyY~k9E16n z?A1FT0D9n!vffhY7j|t=sDIzhc`(`LJcyPIeSd#C*W<7Cuknm*Oi!=VI!<)zUPtu3 zV_m+Lcs$oB{{JuV_4X{zz0hY4`5`%@`Am}sM0~&~9~Qa&)8gIemA(#HOFoD==d;zu zL*U6!UohK8|4vcCPZx_ga>=NNc?ig}i- zY=HMDE>34wg!{XpWwk54G&{{q9xJH#XTd=vKd=U0>geJer$(6aS@`-OqQP&vB+fXAp!>U-s#K z5Xrjm)4936oa?*W9Y>dkWXV0?W`otY z$93HHCGn|o9rufVSVQ07TlmT>^>Go;xG zYL{qX?kTPv=JTi!xV8HrtTmOn+QX~n#4*eAZAp%(t@-ex`p~hqy*k=DpLyKKeuebM z#E{~=&U?3fG_&yc%a;UC6zoy-OVQZlqAkri=Obd?e14LC_0H0Ta!s*TgSuHKk2#;kE*g~ji7(wXI+!KPTqLehw-L7tsg^u#j*G{VCqfo!k}I8HJ`_c$6T__ zeSTxWnoH8>(Y*6zYJl=n_PVm| zZRYY~#x6b+S3B^=zHhm>dWi9T8(8EUc!=+{eETuHe}G1WlNZp340~OL`7X9x@_{{f zYi(cTm%rDid|zv<(o&-TNdhgUhHX)94-h|T2A zwVGht80;|Ys=0{(u~*DR82dr{d*H&JRrdEV3*m7L{3l>KElgfM7z-EAWmC)}USSRX zPQe)hW*^q!z#1=rRXFzH9R|GOj}iLz$Kv;?yJXeAzt5??&9}(!uDquv6REid*!LWT z|AG7k8ix@~w0Th7`(FJvH`3;-=vXo8j03jo!2gDp z(&P|gtsU^A_yy_XDRSocb;95;%2+I}C#cVHJLKb4f1-!o&~71|f(<81XCb^ktQ(1; z*I0!EXz~J$_dB9L`a2NpduKVK5%?SVlRgdJ$SD#1>1}hi1jkoKMy|aoc-F1meeA*Z z)^g|0jj8+Vul~-ip3?Mb;rG7qe8^n(U}&uKtl|DPV$Pn8k2J03hT#2X@`UruvYzwI zsT0mCH-Q~@LU+Js%Hlt_L?Sf}2cf{IsDSe%$@9(vG_|Z}N+KbEW)l193Ed zN4x+>%GXkUG5$q((7E9AQN|;`L;5Xr-DAuJyK_G%(SL)Td38&?Y`w}q<}AE0gq_a2 zs{`>e<$Lqz+3z>ClYXI*&>J~RBhuN@wEZb?dLVr2{dv5PQC4?k-J@^jF*C(U9>ckO z@tz;^UNog(eZjxh0k_Q#qzlOPm=Va{~hVDft@`H6xg7fC# z_dHXXcw=tmT^?>-eD>$d)g0(}HM(Aa5e!J)>^aJ=NWvo5q>n4Iv z`5ZKFUR(#UAMXDsdWeIbAYU?jzY8Mh7{BGbUJt%@KgZV^`cxi=y$8AZ4N};Y8DgpY zzSNJN*?7)T`}YA4`-ZW3SVPd+Ul@0&n6*ut*h$@j!H|zg@tF2J0PsgEu(kO7{}C4& zB9DBO`2X_d$JSg+tlA5fmd16QZRvho$4JdRF}L>w6bCY<@` zV7YR1`#3iSJ#7fNHpYma<8u^m6fVFs`9SCTbyPOO-o11Q<-p$v-&*JS92z6Ttga{@ zL_Oyje>{`e2HJ|yra#ZO3ZMK}TIP&+GJZ;y^l1(KS zG%PN;pn08H_zW_k;R|Cfi1L5lxn^O*+OZeZ$Kz$QZU|l&>Kl`+x}kYReX%KdaZ|X} zoYgpU9k$7fyT10knYyVg!`<4^%dcBhvD{oB*bMvc(aWnA_1?lh5p5sz5%!0?wwr1D zYT6dx-~IB{`|4@85Bg{%M{)B|&Ws@U>c_UMYFN~;?*V*f@1V10&fZs@qCdUwWgnr9 ze0mQ3)tN~rIrOtSFkwdm9uW%8tvLl)<%^3RU0faEoJ{l-Qyndh)WlB+RY$nX8y&GK za`;qxpFMhARi>8TW_DBRFjEyjY-;uM__Y)-HuhI5=0w4DYHo4$Psw9bh7OJ1TbaR6 z0o~-|RfgSX+P=;F*4{^)D=|g2%b64Oo?3Vr@_ue3I2Jt3DR6wenY#o$Tqm4=!Yuq4 zIKK{D2)|F=7`$-fa8vRga^9RZf2Ntbu`E<=s&>D8!@kI7&L4r($mT%PNk^Iu*lz3V z@$U;)JC4cOo+V25-Js|C{-aFyF$VKi_tqne*s5(V3d> z`DT2p<~$N~=iHxbwRsRWbs-J;^W4ik3)ZO~oaPkZ#E0q7mi2|B`_|!)a?mj}uVL5#=ZYZ^RBs0zlmOTUh~nXfp@)cq@7T1Sk+qOE&FThwQsDrRe#^)WOBS& zeq3Q@h#sE_?;p;dmrvTaoi>Fh(VNE9j{j$Wb5`Na*^|r}cLrA0GiUWvpDe>RAXev0 z_!7QL&aNdmFRk~zFNgO@Rufoo%Zs{#+$W>n$b0?moH9Dil85{NJryTk@ z8v2TQ^i$3{^65wOm4<$v0+wI$t+_H&pDN2h>$_jRZeJul+ohlM(54GVn@+7GOGCuc z)|(ZpG&c!i)6-ve*IVS|L3BiYOGnffzmGw`8vhjdf$V`Jpc#Ms4Wrd(Y@fz2JfN%W z>|@Qwj5*2S&U@ii_tvL~ZHkePR`@WHp~=9an5B`8!1165M{4>YIH+ggpq;M)hvI@Y z-;opQ2E^e%evWGcBXd`UE()NVx%d{Y3-Rpp!K)dM;&Sx;N!m@(F8+ne7U*aeYrP2F zP3yh|-_Oz~xziE4xB`9?^LScq0Z)s8|Erk?$t@FlzO3P#*vyCt4Ue7^o_RiPYwc^k zG*_Cl!ud+=8djYjQzv6$er}-eEmxbat;CByz+EVcfxMaVS-%Bi*Z*+jsATT~(-rr| z-Mb({dG2~4pWBwJv9;Jg!8WuyNap3Leb#Rv9zs3IwOQ~<%S-TwHNt0RZ64B8ab{ii zRG%J*NlW?rQH$!3`=<44#3-#{F3V|Gye32&5%_V4y5e_={|PW(S_AcDa}Ygf4UD3{ z=HZ+>rhn0((K<~Z2_42){gyiZ8a8$fPsy+0k1@6itts}w#52V|&)S-sD|~8wDF!VK z@AmH#2|aD~j`d;ZR(u#`l^eagKBCCylj&y`@pX30oJp}`K7V*q#cpyD;#YeInG?s~ zt#MrK(S>3SMIYi3f8&|>muOFOWIR45m?PlkaBm)Tu4fBnZ=jxdd}4&w%jC*s&A|(O z9&er-R{fAq$B)6c;Oi~Sc^~tswnoraAM;6mmKlceXI?&apZsH@ldYU<-Lk}V*)>o= zFFu{TM~MCzvwBp z;PW$G`hKb`B-&o^k(t^P(z;QddT6BQe)b&-*3Aa$N2f$McXoJ5l=FJRZ5eemb~{$a zu5oDW!hy#ATi~=~$9JKzOEzl!H>xim|Is6psxMw|XhZcL_v%GPx%GT{DaKY3y{H}e zj`OlU?aKOedQ=s*!1}ew`>=CQcMAV#0J$&P>8^I^B8pCseqvOW-h~s1?jGJ9$Ga?k zu>;ZWD&P_ArvKo^@>{wY6ziX)OpE51JD?m1FtNx+gb;bHIgq6Qg+dxvhnZx?cOq=>-(0r_(95z&J1S4a;h zdu7F|Bohqxqe>q;>kSvbZmjP>y5B-OT3^FN_pFmG^i@A-9?Z9V+^(|tig~y_6MPXL zGGHE3>wMfUwPh1t*;6Syeo)!STEE?u1InIA*%6fOr_oj27Zu`(*s8*Ld5?ThmOq2f z-Z3q!+fj%WTC%foadjI z*zsAOzly&j?fE;>4JP?8`sJ(mJD$hi@xmZ~$7x=BpD1Xr(BJU|#vp&-nY_>8Uy*)h zbp>L%q&K|3#Pu!8*OBgZeH~9-^ubDvgB)rbba#dIjWpsL0arH(7RIYRPUUw#ZC-BW zxfl1xc51wSzDwW6bN#G=O8JTp!Zu$Ek3`R&G3%@KO~|Mc&Z~3=@g0iy){(bi<2X|- z8Mc=H8?gf>BfIdcRE8$IvMWNpC})OMMzVGdW$M#Yle53*mWz1h0_fTDV~T&D{yk!? z;iXabz+#-yN)Y>@zMMm*R-K;ee;&r?TSxne;;B{gQMHlNB3{9H)Co&!;>Db0Idno* zp-;~D%S0ly!Tx`g`h~Fn(}U?za^gs@2+^m(4hW?JO^VYHOauDoOv&JJjrQ6|9qhFM ze723R2AbqQXnZR-eK+@&L})wm*08FR81s`n59q!g{MPmM4m|D(1W)fTaB=kLySb`D zej0W6ve)Yjgz{{LJs-i@RqlSaJ`|VeA9@F|d*f-Rj^}4TK=T|hZ zb$rvt@_OA@oVc%BIoc)n>S*g#+S$YV809wd?U>u_KBjnbWBTAEYh|7xBK^9$gprvJjS z(QSTNHxF&t8~cwai@$mh|NaGcl0&Nndo=Q?%Kyk2)s@kqoQXhB(mhDCLh)|NhA?zM zu5mke_8c|mLQZGy8kxI#=8id;fy`)%v7Xc9)0o2CFH;-Jt4#f6@CU_JY3~1B{VB`2 zLy@{ItX)IBdT3sGWmK;LnjyFI+yMQC>DSONdzUks=~uB4tZQo@%O~ga4eebHz*CX$ z-}3X%yR@}Yd!_g*%b|@Bey}*Sp*yQ}U$y33b7yIS`zn2!h=Jov!0%hUA6#E~f&1&A zLwR(hIv=Ob-@P`&&K=C{xJo@2EzIVfr4^nPj>8{Avq!t3cMIFUcR>3yXhS~CetG@# zcINI`f4()>tRp+$pM0-w#olt0oj23$oQm%jx>Nkw&NzO;agN#0L!SBAP?IfR6ka5_ zT$rA+en9Q>XiwL`8=&*-zbl&v5F5%o{ikw0eTLi|@$Tm@WWOt5+%|{1_gwqqQ5>x^ z*<29jyHhXj=~H|OzQ4IXGA^mRg0}}J5Jyk^X0X(YqaWYVdJ;M`W$Rc+@G~1nAHye~ zUFvve1SfVZVBaRqeM~AB=e`TUGN0d$xvBf}v@duRBhtW!oT(k(;tuvk`cxdf;C*(Q z)AoJA%AUcfB>oWa_C@^M+z;@qo(08M`MkzmQ@Z<3_d$l(*RlO^Z;w0nJM&}w8!)TA z-v5i-?bq+2{!9C-zsIlt^?d!`Q(rPJP}^TWj0}IepnjTjeYSshKLTFdU;lCHf1UcG zC(T_4{{_c-biwzR{3O2zXxAFL@{Gx*#MP0DDs{G(GdGpGqqUc_yyIu$Luej#bgsF$ zJx$(@ax-Q}1|MP{=ggiU-!ZhB+={=%#tCw-uXu*~`tduaZ83KUP4MuQVcq(?g0h zy~|l&+Besfu@5n+GWxe6HdpWd)`|8-^jtU@ye2z&=e99zIQgk!XU}drg0X5oh}EqOo6>3X%Yt38 zvxhcq-L3g3lmCNw*m0FFR1q`U9O=@W)M7iDNp&Y@@a37N6nwE4WR^nn#~M9Yzbi}5X&TKa)c=JzCeS(EBx0?)1ye)_OU zXiKB3;R zE0*(UtS9#O#LJGa%f1eODD~eX-}Ee;AQuYn`*^2#D(NlXw4dr`RW#uaHy5^VAt#b&B6$Y|XodF}AUGZ19juop;k&H|pBhtG&q3y~qk;2cQ{p_x$mUE}gf~ zeC3*lw%?HzZPsUfzK(1kFi#;z`{d&~CIXv#mQM1IvvkNlzYjYu?p|_+xU%naj7xDf zibEPgKcZFX-%~hOEgj+#cw^exS5=5_#R^LP%64$^L~d8Fy|Zag?__&LxpytsY{=`& zJzK<$ZQ-2c7fMQ#y1OUH`5cYQ;rE~SIc@PleHiY6c46f#t=INRUfaK>?cRAVEeTf1 zJldIa4SKh5vzoXggUs{S&W1;ow_;q!^W+N_E=2pijc$$v^*;o?qUTclymhzE(Yk{V z&yAi8A4cEKaMnoU>Cjlg&9u8r+w1&x>0n&Pq|Cd{Eoq)}&BNNqdh@IMo+P)^jG++karXWd>%E3P-T9TS-hWn-{w*De z)>6*JRnf=cFN+Sps%XMli^JF&*CAh`pF+-{6JEn_?5n%u{FdIYF-3QsY2!iC_-g-% zuBZDm67aeh>%SZxTz}t+Id!ZZjkj)eqO6ebJp_-8Q&u!cdnGRlUzRuB)V^|AObL^Gv=D>(#6CW8Mj_4DTYq8GU_9jp$VLs<{`v_A!T|)gOSr!F0s^ z8Xg_NBfU1)c>U=#nn<-96qIzUuWO|LOk5pg#QeE5MWJJoom8*I6pBliikY`_o?A zpWjd0gJJjEeyzXl{Jrw&H%5tXyct%Wd=Kt=ukG__+m{E6{#Ngvb#dXG(?X7Jodb|; zL^fNwu;_0AY}jI}kGv>4{yI9qZ*J0k-p>(l*D9KxPAp(_(;4}grs(haE!`ot`VvE) z0nvJhKBDm9798 zh|$;|?e0%ToDY5dyS5y3CAD=HF!(ZOTOapNd2+{J3%<;G4g8++pW4J`m3?I<%{n=O zOpxAx=4_`;dSnCgA%d^L3^yBc>rB_HC8ow7%aG>g73x>^q1O5K#z2yD2_=5thyAC1 z;nlt9zE-X<9$&uw{5^Mm@GYEZfX%06?IRDMW#qH?=@R!j>yO;v-kdcsXL={yw6IPb zUyGez{B?fWi@dT|3@RJS(*ozXy>`#_%6@K8*);suZI@hKUfDXY?1hwF2VbgRKi0+r zD_`k@r@QuOA#5r9zHS?wgYeoo!D~bNLjIb3onf;x#7%v*swm+KAg2(<82|;a{A<)#asC^Am) z%;&cgZ;_v6z2|3HkDtZOS0F!&;KI)$m=*%lO~52PZ@9y>-NtWpBG%Ha_H0l5xVr3J zz+v&blXE)!*FC7Jdz+q9uTVeId|%3ZFSBiyb^RqhnM2oBp1r^1 z2iEtZHS!|s#@_#C?}K#xev*gsfok1c1ifX~IZ63pGQ=#T>36Z#!jM5eK=|4KIxJW} zQPz)m?cN*7J5V<3%G%tD100CkA>eg9xEs)R0gaDiY_4Bs z{J?lj>z8@X`ei&HpG$LQd@>w55+7gbARphvj=RCF;HiW5@;<&SwD)8`?OpX{%COg^ za&dITe%ibHz_dr7qP-Y%)P1be_G9MU_YG^^jpiJ;{Dx1AH#;xKPg-}>hkdDa#E78h zcZP_CL3i5u48Eh8@YhM^SKKdZ#_IWmVVplV6L$3BL#h~w{2GS-R1~;h`vl0>o%2f~ z?@0d-{G&cwUo`jbd1lfMomDT*l(YUzJ8pqL<4fBSVqVnW4olBtI}$t>zgl7cbN;v0 zwB5mPd=_siAEL&UVvTG9f0|3-CdInZvv4A5a~S-LcZxe6Fg9-<#c!D7Ihi3BSL-g+ zb?-DkABAVuh2q_Zk~i?$q2pSg*fpw2<$Rtb-B>(Cayy(lI=Km4972w~_&>p88S$=r ziDmTPXO2$x@_wk^|06g3VLOh}4u1}ep6|=e*dJ^f%k*!om=oGDs>&VjEp|K_+s%wg z@1CMP`5XQ7Ti2lDj%VG-&Z~PpH}_fI`)lzE>WId_a(@4wb#9hxTf$Si2kMuBO4U;y zqP^IE(lOp<9roZ4^?eA^BfqxSv|W!5>Gz2)EZZ`#-$gv%!Eo+hb9Kn^{kA3Rg#P>W zNA!7L4xb0CI&&g;gQt+=qTg=Kw=I8x*5_-Kb9vF-`TGAyeZA|kZItd;kF0qsZ`bA9 zjQcuBqAlOnN4>UwPg}k&=G$Bc@;&@?5Azx%4+gp;{Ac0i;IDWH`BFT;#WwW$1L}~? zrmKVc8FJGV;!^%2J5Ky=KAws^*gRgIABXO|cFS^Cho{?QS^vVx0|yw#Hv9{N_1Rm2 z!|byA<@vUw_{Cg&a~{=eyVq-5vdyKpaUFMZ$A;$b`A_uIn;)Oz=}z1sDqp+lP#pZb z@coVG!;>f1H+_b?b`?7zIZ*_Uc@H`5|G##rNmfIzilv`^czn)C`CH*R%ZknYadLo% z$N_gB_jHv9odqfQz3iyBhZ1KTEM0)!F!yTilHWp{s{E`g=8n0)Ay8K{?+$0-tXs_m zr;nbyxRJep=!Ck(Q{jgdzlL8eo55W65P#c{FD-%25B&;WUO6xh){SjJp3V_}YXHW1_@Fl8 z4<$|kKgUFP5OL`RFgn~DQ%G<9`uMHgYqST7jK7?D_WSH(uG0q*8%XY-dCLL|tlzcmTO%g2TgR{50n;L%JG>J#wI(Fn;%WUo~A7)Ybo5 z6IgH?cBkqWQKyGJf?43WfqliBpqudMA@|o(-j)qbSwPYPw|n5mBb6dm$$ z)1`YxBJ3xr{l-nRvUb1P3`>SDjy|@ITzk=9)icg9)661h;zpBo?NO&vyyR`xtj~*- zf2+{{W5>@rc@0?Z-HqN#>_BW&q)X-1hH~0XT~vOd+9@7#cu8?0Q6`>L?2MTf<35Rh z*Ioz?a8AIc8GX${KxFmA7ZMeu+Qu6 zXN}AId(b($&)-9?;SsJJtsP?)`tq|Pgg*vaeaNg{RX=)l*%zjbwDb5RXAK{gyy%)dP>KlXYx=iz;|%rcfYY>eZJ=fr zKAhkoW#A4eQ>_MT}b`@+GdQ~4?)PXnt(RL*Q>2cX*yY zDsXf?GDkEQJ=p33dAc$svi-+)j6TPmJJC3MpUL&)lK#;8^YR_~x|Uso7ZvB%plG6y z)>5tx1g$OaPIx}c*FWm!>@F-9b?tHJ?ACm_4CSa=A|J zlPsjnUayY6CBOXmS2v$Spaa?86u8))N!WP==MfT&efNm|7_if!?{KlhzI4$JV&dnX zE_p29`_uK=zT?q-ii_?Khaz1s4USEaHLt( zY@F}X&pX1gV$lq7Xcfev#n82y@m>y$bBcsoi*5!VPZ9E)966NS?(!XRL$PvLh*@r zh-Z+$oB6eSPp6+!e&MLy@W4Uzong;TIe0SH!)x);J$~*7D-Q<`G0E59q3z(~&=~Ty zu&<5it?|Rn1r0A^%Q7}{m{hVZ>33pf{C48B=zk0P=gha={2zY@KR#`?olJg2;JW6# zp-nONIn=jN3=6q`GP8=3ciX)Er=y1|&*~ZN!t35kXA^IICb?G6BG>B2+QD_6*(TW1L;|`N-QV zg4W)W?lV}gLC#p2@p0PClyMgmZLKchoFF=54BaaiH24nPyG$xlE)OE79=;Fq?tq6M zC?6HL5Db2Q>c{of57f#0zNXPv>QKf&{x8lHmFW!4>hb*kHTJdslS7AjIXc9e301go zG!xST-sgm{N6be}XYZ52WRU-Q*2`U2xu2P?BG%Kptc`}lmCLYbNB#0;tLBBK?D!aa zA_4hj;wE{6bl+g$e%VavL)hDT5POL6ZNCVa#rtBOYkZ;yjd97S;`^u4N8^-8(`(@3 zYR22U1ik1|ViPBrA7@GNqNlPr%rJD=gc`^?X@??Al5 zC6TOj_{`FSl1mf74L`}u6E7Xpu@hdFnMY0@c&%h=W`VJLA?c&chVl`}&y!3|&w@yn z7`cvZl+)gakMED%(EPmcE&bQW@t@x$E{1cDf|YaCKTJ*H%-kK$4~L@zM9XG%WjJ?s z12~oKkpXwgrxQIMp7F&A&^9qj$K&f}{+HHr_79wg_L4V^afHgr)x|o1-d(iy z@j-P=#;1I4O|qBmwezo|mFH-3WuHg)!f748=Jc)j3#pUA_aYn!|LIq9o#I{XJDj#xILGCV zjYE=K77R&Nu%CdhDmx6GsQaiS2kP-% zPRZZP!#zI82lilRh==y93no`1t9qbCGtP8wnRHG&yfM2K+Ue^HCL5pw+DTr{S-I_f zM<@G+IqiM71e2L5Mf^6|zSbc7Csv2+-X09J_klan^lK+^Pd#)jy(RWE`zoGqZsU>A z4LKS5Zkbh+xh0Z4qL_1?D?icxb|6uoUv;=3M}y?5+IxHa>N3e;(XCI{I-{z&5}y$7M}L?jc@u%ZC6EWATgB@(vlm`# z&-xcnlRQwYl;nZrgk*%q^Fwk&NuN_+2D@)wkn>k%^@|gnYg0QH(Y7%o>>8-0-zYr8 zOf`o}-jpA~`K&G2)@Q}<4oyw3%JdDZ{xN>sL3Fr2oVd5U$D@gJ4?u^9`*etJ6gpb3 z{B(YuTIzh7zAbEuhXcM4zKy8jRv2Hnk9-!t<~O=T=GjOW{+GoO?q4$OJw&fES*^{% z?=$$N_Ydn$-Qi)bZzN2=!V&l_fiK^!HM8;ZJ4$xn!Z}Ii!-$69rR1&$HRwSsy>dO?I1KB;12tJ#K>q)7~6?)WS;0*b8aTo zFOIT*#ksFa`A=iy4OFa|=qZY<)SCVI>$J&wPW{4%`d>_|}-rD}Emj=IcC0oo@Pg7x^PR>W&7ZLcB@MKr@+o@g=@fe-vH*Eyg2L#2;wgYRsG zA4wn4IK*G1i`+qe)EIRggG`05M3`sjJWIY$JLmY`y7kVs-=a8Uvtup!k)tgpdm;U= zqaE2iKFw_=Kb&lj!nuoV_Tf+F*IWbelUH;=Im7)7?%L#T5pSFqQx02bK)Lkq{BqyS zmphMg_RhWnnu&Agg4-UkB3^r^Q|@!LXYH0*MaehqJv?JNs<2JO2SDxy0)A316@Olj+Lk4sOpik8aQ1MNU+7dk3Fh+Vgj$@agqES)2?w32=-~ zv2=K{`G%qGqdxY*$}K!+EXVqI>mwGf*+vYmP5Fb<2}eldQ={qQ>D9 z;1hgg^?SqGIkU&_A$*2Dl4}igy?2(oM{ckm%CR3(#HZ{j?zbPdpgStw9lg!k5X)wk zUkD%S{@@MvIz|p$gOL%Q4e=G1P96bH?yF9&28Zu2DbVG?;em8{>r1$Fbl#Vc7Jr$N zZo=1bV$p=UlQ&Lwb#T$)2j~YsVLlZrk?Gev;P)%LH+u8A`6#XFvJdGUYi}mjvak+! zko$F>q>i0~g825Q!>&Iyv3N9ok?|dpYr=`}Bfd8UoCq(%&rgJ#vO&0U{RhByXLq>R z#qB=caHiO zzE)!Q2CP9h_5iteSH9f@?P_ln8)$hLyU1^UD)y1ufBV9q^%Wn;{&@}h9!Xyr@+9o# z_y1x8efb-n4MaV^-$Kcl$d{PolAz9Lqo^> z?{?6MjJfw}WVvStr93+*R$vF20z2sM*g=2sY#{9Z&i7^w_hisyD}#Rcu5#B+?sy8G zYwe##W94q-BL((PqwYeT?8+Pb_P*Vdm%9b=VBY}0nHuaLV3hq6LGQ8l59b|Z|AZ!+ z8H=%hP6dbivweI$@{$7k=Yh#)y6m1fdYrX^_GA0}1AaW11`f1O`c+`m9bAR99rfil z`3?NF_nRY~wigD;4bO&Pjoy=A18K_1hEV@gO{za;58C(FnD0ZBeg^;T7Tuo*90t0N zac(S*ucMlGVe*j0rg1I~-T5B)SMCS!}X(4|= zujm$kh%I)wPrTp9BEBJ>@mKC!_VwvF`nd9eC!R-7qwOedOP{_^;~At|ui#ml_slD*xTQgkEa!QZjdUb}io&AzAlZM4|o=+e#T z0oXcQR-R{VGTCXDW0T2F>$yz62zM>w7s>XWIjg4kJ9SOlfLnH2*FT`CN&neS)A~D# zc^QEJCw*OKRelW|1pdc@e|*Q4;(5}MGf%j7%(CHUEM9|;XaDk*xLi+$?fc07ZIs_E zLvKXi)Vc{{r}PXpond(C8ondY{wVAOD}SHz;Uf0aYqO6wp`j1yj&&zHZGW`z4zyQ( zduPAB5|X_Fz7(&fzSY;BzaKzPKy~+N@mKV@KRw|-#vwT4i?Y7$V@6{8O!?n!pPA4=bjU#dminpRA9}IZ-`({0 z2m15*jAEhc$p5~Vxn@5)kDEshh?{Tb$JtC<`@_uz9&S=U_WSRza}{-dK>vef68vk< zh<9=;-&t2#U>8mH?4mMj7ya7a4^-AMp1jWk?V_>++C{t21=GK?cF|_vCd`lnhdEoW zeao6Cpp2?UVTA z9*@r*PaWNvTv*OL;=`8A>zyB=T!YuPPgAdL8`S=H{d%qW_DiWZ_y1$<-Q%OK?)?8V zGYJWx0^uIe%mlo}t}6;eyfI0*XzjLZz}9NJ%p|n6(A^r*HUVp95>za<5{P2KHWR!i zwkxgBnrh1gytVFbG4`%oXA-W(Zp9k}!TCL3=kxhYh7@XlkH`0qJZAEl^Eu~z-sgQg z@AH1Y5AWGM3-N-)-(cF)+knb(*K4YhrIB+Z{hf3jd4hHorf` z*K+70Cw^D?MP6*#F5&^M{9ns!Mcjp07j*A0i}IQJ6n%`OelPKQx^GPT2;DapCw?n^ zb(lPBv$GfZXs9C}AL3j6X=-dG&^O+DVYTNy<(eLvgl_;kvA#Cmja?tD=iY<5h=mWI zGrxH;BVNr}`9pm5>_73zrSV6SM`2?N<9vUYb@gCqvM`ic7-j&2IZEuUU}tRER+>Wv zHJOiVpK#irOZyo0i;nv(<@{Ev`B1k=eQjsFUOt5{;ZJ#zTm8P5RpY&txqJA0@AUy( zvJ1Ck+PS_QR zyXL37;p9eWO;Xs?cAt?$6F>M9_w(|bV!&kIWdeb}Iqz3qnLYC-Ht#*o`D{E(?91HvwNm<%epejM@6cWH^);O&U!sxQpDp%M~9n_q1wWo}jOjt>2eE zqCe&648~=gx!sq8%Lug{)#fIiwXtWZz}8l5$Ss`t7<0Of4^b?$o=xXn-7l+{krZ(< zH&9RBiK%e&UUi40jcIanpR{g%(?mUY-3#HI6Q0i*s<)0YWU9uDasDb8J_QWQixiAn zcg4Bpu5-+Z0bre5dn(*@{^k^ConIf+Hu%I;d^f@y#=jyRvPsbK79%bh)HX<+9y@1Zi#>SD-L`kr*6Lu^xR;vdTAOp`YOQ~M zTzv@XUG3q*(2Vv@L(!j#qmy1kf7NxfPm_N0?stfsRn;FOMq&$ghH_nF@>@|`#HG<9 z_wCi+s}UVje!%{_6~rYQh^wRPezv6rZ+wq~#6q3L>wkTQo~!IHMISFhA1hWf=<4GXv8?*t>o3!s z|H>X{WABc(*DqdWe*-?Zu;)3{>EIIl=AWpDNY{vh}#cl{IGORF=ETUj%QFHdr} zYjeJhIZUxP4Bl$C#Lz#U-xTWsUL4c8>S=Pc`91Zd=}K|7jNhq$>^XD0w%%lB#L46L z|7)UJafrl_E+oU^AE5DQk!=M$zYhF#N5{n6e-#M?e@ z>L#<7nnO+^XW0ww__vHGigB*CD1pyw6}A@bX8#xV*An1)l5-g98K>C8a!$V`&1agu za*)`T*w?@X`_0s9(?9tZXD-QQ7u$Qqj|4`Sl>{$3;9Ij{LueT>5Y47VF~8J`=*g@m zp5SWJALUsZKUMb-GfHv4>qdn8`}tJ7DmF&{g1pfiqtx9C>D~+Gpm#&J=pH(=@6%t2DYj$1Q5srGZAu#}8-F{$D^6^b&Rn%G&b$LIzJ^U_do*<^V7kkH0Q!mVYaOP?=BgXoL&w9GN*S_mt`V#l%rNObOA5zo|Ezn-(DR#>juGjZnrG2V+n6Mf7vT1vmCn2jlH zJ3F?in05B=*;ilW-0jr965R={BqQK|zV;iVJ4G|ruNDk9D0W0=RKg*)T@Q9f&mL+a zh`w}(2{95cN5(;u&=l3^vA0jZFnYde(Aku5VMfL`M9Sc)f^h$0;Igz`8?J`%kPTEHhH*;JvuR0f)oJ&yb^7tj{pUGxU_ zMT|l2$AQ%Cw1Lk{evb~R=R5s@|Nht#vsHAY^?L6eVj4K7)tberlOmba_Ch`}?BV{Q z&;xx=GuJUM+LmZtqfS49Nqy+u-nWR$qn`}bO{fM#mJly71mBnfsYrfxEnz=V|eD(jG3~=@kN?%fV&aCuHWI4(73VP z+h)eWU5s^rpAPh11YGc>;l8dk{LA&U)xF2IQM1Z4Sl%{NW;7!%lnlHG-e#Y94Y7E2 z_&|$Bk6dT(w+v2!PkEQ$Mg$%_u&kd~OQgSWmv!X#XdFT|=s#wgY{@Kh>o87dHARlX?|1>%Z-g{*#Gy&~*?dAVn z!%bK3LwVG`3vA4ccIf&}eiv;w^CuhrPj7$d#CPI*U0hsoNvIN7TzO&sJfd9m%AU>2 z1Ic-_%*>GN5j++2HDXF;y=YmoMsh*l4MrUVi&>K*)Bm`BD;xN&&=**}xHQ~<;~9#_He0@s{VjjvO5XcI zX|iGQS*HJ?Pnc_JS?9(Js6U0@pmJ%=;ofKbk{8uAXC)hYxA_}thp^wGk1z5L`{{m* zZ`NogzH4G8x;XRZo+xOLHQ5y??A(hE6Ao_&|DGRR_eKz3JtNKg5n`)@CV9CrvCD(W z4rRCsdoM%DP?aWK-Tu~pa_r_0=Klcv# zebRsM$=d=yGHi$1Mm~Xad4J`g$yo(Qnvr@+E1@BrDt%G!fvj(ayKBn_@cMW{x zj>~5rhv$;`GW5SD6>C`wYhEqiqzLux*fmj&AZFsKQQH zAJX-ethYX!&|9SI`irpNl6?Io&n&G_JJ92kCrf;-`fUfli7$QNJkB`n z^ikoiL(E_&yZAf@e})GOHD<9c&YEZ*$q$|Ni1F#Y|I)&N z_l3h)mxJd^=}WpbbePyyoi!4pW^uv&zMed2e*;=ZpEPrC`by|5PW}tHvUaWZZUGZ0 zYePT!jL*_!$TSz<5*j#j?1uMZ)Tg($OCmhWJWH(JWMcJ@2RFjMTEn0}IkSnrz4fld zMs7lX?_Y0P#pms`ligv=_%hL;Yzom7cHTca^+^IB4zb1JszT3||_SJ4%`g*YGCdsEHA8?iM@@Ha%pJAMe^U3ivU z7Ejbbo1wfjie{rRvdyD0TxtKBcK?(OV9l5bZxME*Q}rbo9y@GH7K${nnZ?4o|A ztK(zzGh6e4Z~jU@xwwqrHxWF-oA}DomG&?0ek5^kW^4T3duM*lc@LY1b2PW#CG@K^ z3p+<&b5FZF$Hh5w%+kJ#SNRmh3!)i)Ci!&WU1R4gnZJ; zMxJz+pohSp_*n8qdfR`x1LtA(4DUDRwTuOiqYKR|XRwdkMH|&R(|%cdWT*Dbm`*RR zq?xsuL_Dwf)~CJBddD6{=Jlu6Ip480$vt%Rx9*FIH}RVb1Msy7jx_K|o^?zB7X2?i zwZ8#3_v}TMN9yUbE^orT`q57P?6LKD8AL@;!w{`bXVcGO+(^ly8BvP0{Gx*n*xfV>auFpTX|^Qsj&w z2du6Y4>aPRNZ+QIp3!B8kP8;pyvdfIUY!lThXuM)uU5^9{oj;Xq80I+)|ng#^s%q3 z8Nc6W=x0$F-SO3ojXQcncUU8Hle@C=wp#M`Vdm|%#hzK1{`Y%lewnt?{hRpA)$wQE zj(-~+uQQey`u$aKsdxadXp|s^H&BAG!AB@S*U-2jEz~;Wslg!u-Yj6I!C! zjlyqeYWSE*e*UPL96HS;Pe1xFV|4rq{g>+l;(xXMA-_omO7_u@T_@u1#+$c@S^Ww= zN$e?TX^p4bm1pO*XK%Fd*8A604`=>;;86Tu1ODJSTPrZV%-A~oHR4tH?C7$B&`fmfjc$bJZ46U6G@lVShj_YZ4ycRb~2vBag2iWzZd8--N$q zzUetW8q)5vX|;b<=*pHF2zF>joUKih|IQ)d>?XZj-3FWWhR zJt7}K1$iS8(SK>MJc4WtfBd?cdBkqFC856{_tu+HMd4HHXErQ{me5t($2qzx_6gOg zLaz-E9|__=Z_mkVl<(woW6aiV>O;GA#e6hB$;3+z4xC@gZ>96gXD6C1 zu}eyd^6<48eD-bZr7QR>M6U_A;Yr+0%lWD5+Nxjh;hdp@w_&Vd7Ox}ar%+A(Nu6_` ziNC3-zjO}kraMhvwKcSad!MbpHlg!}HxRc${WXoJ`fJGRos0SIi{0NdSNG6rAF2Ci z`IDY~#MWPPYGB2=3uF{`AS<7tmUq~9u0e*ZsZ3CpEA=sQSH@76Yb^EPCgayoZS6^& z->1FCx`lTd=CRl2Q+VIc8hin~Zv*eK5Nk!gXcT{c>zUwMYk^Ji;HhS-YLkb|*b8@D zK>PzbUvVxG@U7b9qJiX@& zy!sKwex&~NqDPpE@Kb@kB|MD%-nwehMu_({PvKQ~aP{?0ofAjhIy3(R-pQfk9NMX+ zul(zqW+Ay@w_oI6=TLf2IAaLLp?B{CO=e_scb=88w z0K+2S_2AfgVXRoNsAhrYr&?O#4e>}WZ-`es+$?)*fHzX?$;A^|f5SSY&N9=*D?#v~ z&z0n!p_LZOCKugAXz$UD54-Cd@J{sqYG=)U9GQXc5scTecl6*BY^qtHu{-Kb>tB(J zqWMt#yFH?3(R(wvDy7XrU_8?uCx))7p|9Jx$Ep(gOL1n49;&-?6gY$aYCQVmf9?~n z^PvkxccQZ@{7`?uzY$t`8#jxbZr5tIXqxjg#fXNWpSXU%@wR$Bj}gmKiEXKO9~^F4 z7MZ|-q1Xi;zG{HWN8hKrH09wX%zWR4wwD02m51mtt$}dg$o@PlpXgUIN^~i@15UdZ zqgV&YTAnd};npNvPuibXqY0V9|jUX$4 zv#$Msv&QcYTI0*L#>XDBHD$n6_4mlJKESi+&Di;Q=7;V73mrEFY`%bS`N6)NxdZ=Y zf6i=`evv+re(7aw@mK6sM@EL?Z9O5Ew+w9*lE%?#S*3 zvTHMj{%7%AcB|@`SeqBS<>%D@P7zl)wMscblRA$~XU>~GnMP3+vM6mV_g{Eq3!N-r)a0X}+(8Ax%jUj?{Dm)LuSf|848AnTE7 z#Bf?3XP<24H}_vUHUaTrzXhJZiHURT41KU{eg|;b*c)qCQ=5W~k!x2^>S~%Hr%m|&9Licdht0iY=(&Pwdv%Oj%_%u z^Gx~|9&_;*;?5+&=-I3JpJmU*-F#{nrry5R-?3NkJGs5eSgP3?f(E}Z!Pjc*HDV*k z&lN$xd3acugNL7sFTqa~p73yk-mqtD75MiBliF{goxY2f?)#c?@({71sBN*u@-;RT zXLeico`-hY^X#g1+H2plo!F*W%CxRvza#sw7+tFUr{kFjd7;bc3DCTfs*k|nj|VwE5ZIi*+_84Z1W z3_XI~9iqMbqUko%C7IoXE&41zsRsiEEf0>?JREyobC|;){mb{$b8#Bq&yh^|iQ-XD zl#BV?8}Q-b6Sr4h-r(G_r)kfcl`lsBI59C!uD0|mXPDUlUFRjzo0Xie_RY6`5ld&!)7Mmf z6TaVa>ql6ft9>Q?M5P;8^Mzb`<To~iygdGVsrAaR%)YmCb~k{yQ}xx6{V{ecy(-2YGb zPW4u7TVVI#dN}U z&u`P`1w8lk!6nq5Pd(&sNmNK5jO+XwziV!{UBca9(8~w3l{_09&rfa2>>V-h5z8X_ zSA6F0CsU^q{`Ttl>AnarUQ<4jUF-ZUy~K*B=9px3GkFEK!SkwTD*IVHAIr(jk8lR2 z*z%FU>F9;xf%=cRdLiJ%OfLopF*k=jhV351o+iHGK!UTa$P1h~PBPQ`SDUWcA1#t&e6Ux!oS0UxCb$4Vt(4 z`sH~eZ&+SI%>O^i^Dq9%$sh3E?N%J&>MQO2LtY=sKTtk^cy``7q1CzZ@IM*!eu($I z_r&L3Ug{p?>|puv_@H;&*=vM&ci2B|G&E(3E z-2T((Wyywn2aS))-wo@~Ugxad;uwgWGV*5McKg3uDJ3saI`0{)8tQUClhTR;dhR)P|kCpdTh5P0E)13yYzfWHL zhMFcv2P5;>^M18zuz9>Fzj^MQggebOgnvOfL>5NQW-N@zKl0{_#`0YAR&0xvN7arz zl3Y^VpHuaG6Sj>nR{a!pi?kMYU48gy+;#l|>)Mrl{+*r*_xU28YYh3nbH@%-FVg9Q znlEnKg>GAFe;wC0MQuo@E%mG2wpY1r_Y7(q;~o#&7N3aM_6oPH>QUvw5Tu5-)0P|v zx8IB0wmS#4O;Q`ufq~osx9vG@+vjQP$ma2#uToE4G%|6PWZzGZ%N=m;0ry*<^x;6B za~}vY`4Z%)eACY$hYKzUH=I2-Sbjfr_uFsJ*SWS+#~ymR1$t`5FDM;oh)+{Jzn~dg z4!EYPq_g2PHUczti ziN$2Movk|u2mEa4e`_Z{f2(OtN@o(=noHN>nP0v@E}R*EbrkwI5Bd-d$)@)1*gLsT z*QrbG!J9yi$?q+A6QbJ!Q@0nt<|5$TMGR{@&jh=^SMc4lQQ@^M5$2W%^2z&=pqV~9 zZ`{oZcrHFwS0^%!6|1gWxwIwmEyxe@JkllihV1bd;6s@Yl6(M@^d$HlMl?5Th;4a zznkLlWN%Fcm)+W5A(s-oWBXyQ;(N_8M$TmJoFq?P29CRznbyznS;Jn0`x};qiBtAy zNj}RM?u%&C^H6%*m% zML0x!?y6T}k|I_oPRd9Pedj+&Lp6Bf8x5TuMI>*%gH$E`We$u{SZ8LR8$+xw? zhmk+%R{YEuV@vhWZav3&iP<8i#IwFVdfWi%>(*xrdZ`OUUPLp8pSW*?a#tz@m1+ zKX`p?$oBDL+WwXKJAG64kiI1k)!&o+rkIs%Kc1YVZkN-3&2jA?qP_C+V&jny&#$YN z?q^=sA6>!!Db86#CPq$4Hs4cw&+6YGUvp_F@oSHU?(dObU--L+zT0xLg{71fyV^xNG_e*ZfQ{MLW;-VFinv?4DU-POM|zk_J3wzE?aJ;v7t}D|$QUrAhc5zEZyR*Ose>r*elUmMQOAILpU}Uxr-H zLngN&i{B08l|4Kxe8dOu95+VxTycEo`QYN%iVEt{Drd8jdnBsJOPfPp+FX27dDb^& zfZK3C8TeV_i+!i(QGd9<%DpR_^TVCQmUq^M$8)FDEc`x0I-{(IZw%*B;I0;5#c%oa z?v}z125!@-_bT|SQIE^pON9N+mJ-W9HL@s!42bcFmv$6r+3*|3n@jQ2Cs zEo_cVS!4Z0rnTox7dF9I%HJOD@3H5bf>C$;0N)=*JGG@e+vH8g6b|2>>C{6zw&I5! z((k%&Ube{$aEjfrbMQS(TI)koeD=(|?`+ebV0|lC-?-~1G$&c#0pGCc-&Trkf((-` zv1c=^S7csQe+u1=EoyTNqE@E+4*UXNfaoy^za~#$b9dv%Z%6;=_ZYv+))FT0)z)-!myyPjiR zAK>`Tsk|?ka&c3E9ywg)t?2~raK%@{nyOvoxHbLe3D(p*vv$@r&YCV}O&@{QM5ppm z=$Yih9gMBBLFYMl9l6gNc`p1Ye%YggB|H-y+~m@MaIL>%E1vDBG`^Qb4~m~qy$QYZ z-e|?3R;+ukggCN`&B1fn3u?`_4KW8}tm9ap*_uXYMTfw@oD$ml4x?4q`#Fm{@vf}_ zPffB2eD(L*#{J|L62tpZ?b3Zl_Yn0wbrCi2uv=`O!%Y8c%yVEqT^%|z9hi@DQvJv) z?kylL#ES`0EROCzUaz>ci=r`q z8TRPG82NhVVvn;AwfTCr_|w`r*ZDF!S@+p^`Fg=mg&W%NS*6jBmsEutg7d=-%IAtv zr~BPSLu}o=7_E8qD2zi8yfUBFcy$Jb(#7w+W zLk@#4W?BS0^Vt}oMq0^q$EQG@b>i|>2X+iHd3@)E4^R&uyqF%+ zN_D1u!~a+uN)=DiT5RGj`p|sxQrPE)>QA-#hIUTKlLY$zWn{m1pZh!HaHg7lEw@u| z-r-B#BT|9vu43)HxR4hujm5Bw{vO;>?A8^=H|w^krhg~+jgZ?S9CY(NUgU3(&Q4#5 z-E}0hwHerUH6)6Bz*KAUhBXsw-ox)H=sbpe^lH>3@aO5Sh2N|ZF8 zS-5~ce#P&igBYI23Fb!f>Js>3W51VO z?!=?mzR4@{`m^t0&quH=OQEMlmtjZpeFt;W|U}VHa5YH z=mh-6XWtv2y#IL!SxVDU;Kua8pX3 zmGtSS&r}Tbxf@?e9eP5AG zB(?;f-Am}bu;>kKAaLEJA8CxUoHs69T7O$*+wBn~XKR=YZCGceJn0fsxZ+mp(%A;R+b!9An z(jAk-Ygf`=ZT;^0s-S6T)Y%X+I{z(j#q({4P2JTCra|lOwbi>x;-PB~54@AW zC-EF-HyS5G?Zrm+S_#@T&cTlhJdIZ}M?P&IQ|I;9{(e_|n7*s%yJWMk?nY#O$vvj- z7tjC^Zr79qdB%6_z_)5Q`&(+Si_}Np@xbF#R!89REG(=^nApMD#JC&zbTu#hKef*d zz?Kw`VJ8W;3TQ_-@W$TF8hL%yZXS5YCm#nm@Y)H+t9aMy;9b7DyP<=;eZFg?8}rTc zJ^A^mw`+sXZD=(4e{L6EPc`KwM}2h_*uI9?_^6+I8 z3qJxs*|}t4+&3_8H*}n!-}E575BBg`#LkhC-SwOa&wAMJo7DzytU|W5J&Qh5 zY{mD9!Q;HTEkPX_c>xc#J514%rV= zikxxZ!{&DOxT-(n*xqf>*yF5k8@#A{ZtsE@CFg_C?<2t%H*7QJ&+X9CW5H|J?oIv6 z+Ovn7t&ap3tbHVP_1Z5`@6p0E8UHanoeYMbW?+s`6jCN`h&fB)*) z*r2t@lLS7`M5$?D?l!MZHrgG?x=2Z^8hDqqBc}vc_*iE8Px$Swq_J~KY`Ql)Cm*`j z#Cm%)zchQ4Fu9O(_)D-3vh`NNb8YZk1?{{!#;J=X-R6xO(H@OB4Rp?1A>Rgz^N@@4 z7e@J7H`3O=TL^yeeY-_nE*Y)2NZ&UwejbKY+d zo-_~pKJVZQtowK5g6zdySPZqG99ZtMuvECPJOnKDv^}->?Zv>`IpAV8bSK+qHgxx8K2yMrOlml`qTAZivmf`>wSyNuH$LKmn2R|x=XdZH zi2GNd`g^Ab5=5>qa6FCe`!I-_1Iq@EGz7oL>(b#&o;cHzO1r8z@DuETH3+BEd>4P zZY6Yhc^>z(Wc+#D!|Cu7KD^ELti$sKl22Gm420(+U_V*C`m4@;=_$^`Bh-yQwxX(o zI{)lD=HNG)%id!idyo0Vq+i(q{ML75?^*iN@a#QH-nen}a&!+l{6{leO0nNnA8t{w z{J;))i8HxrF=Rj~`>UhyMu@%EgWQw+V1a*QoO@^D+P&0V9toc)HFA325n zEBP%m+BC?grSoQdM`h_r%0Htf$Q1H*@#nGY0520ddy$EsegGQ!3^fU$ZSH};IgEVr za2bO~V*WyxF7I}7w2(>Bk=$3Ky{+Y)yPaA$JimeGo-bCh-p=o>J!zMg7x26Aw*h+g z#_-M)62$o1_PWd2Z9kv(`u$DX*KBw0XWdTilS=U2NdDbWVvm~m?LPL%;yvG#Fmc_~ zlqa6yf!9A=-^V#Kd;A&RSav?pg;Yy+0WwP)EmLSp!a{x z`@!LyS>R*!;a}B0D$01*LI*mtz~^f3X8GiW#Ks{T^*lmuSd_f5Fu#xG|10>MM4gu) z-#-XY-(a}vppeH#-3R$-RohYYvm3pjd!xL(nD3@PTo0|-_z>}5E`F2bQEgN01@y7} zrVb5o|D3y~JtN3}1@~X)w*WdQiu{UP8J-pQn_00TW|q#GdB^5_Bjc#2;K{|iom@TW zteZYgqn+@u7Ca!YEFQcw$>3~sCG{hMoUbSN)LG-4NmpKy7*?@7hCYnhyPw2!V=d49 z+JlpG?=HR{oJNc?b#;vK zU0uTY+1=<5ub6(tufB0uNm~I+RD~9fZV#!-rX>|vwqr#>oYrs zWNUgV9`ruo8ypJ?jB6LNR*L`WN9HQ_=Q8Lx-A9ahqu~y*yv_u0h-Ye%J!#^s`iK_| z56YcN5r?+{zfpLKyRT#)A)BM^1z+7gvO#V()1H9-VmF&nCDZ+N=MwuOJ@BP5BW?&`c(c$Tam`5)BxzOfIu}@p#p~&Xj;8+B$uCp9&IFgg!r(*jM~IVf=!E!w z#g4%TnbX|+^b|AtAn{Y!6>6({VQpLPSJGHs`*&!ci!-&&%4zB*M&(zg-~F@`exCr| z6gZJ@d@r)Jg3nsssf-P6`QS^YBa|E}Ke_U#te^Y_-cz6AgSdNspqRfSRe9NSk4ry^ zAN?;*oNSCUWWj0AJ!1FBN4{C(S20d0-?Qf)jOWG4ZakHHV1P^W5dQwO)U@6tIMHFM z-;m;7i7W;)qTZ>Su+ed@kPgnCI9Ju_R1k}pU0YoT>t4%&ZBo> zXL)|zUA5>+azKNwA2rH8TXFcIFg0ta$(DYKno&!!3)f(i1)=jV5li<~-Z@~pD(N@z zCg-Zm(Ptj$*#izWH_g%Flz4B&8P_tuUBm!YMn>DSof_u&8RjH>hfKcihqn8E-{Yax zLH7L{*~67-&aP}al{|9cJ$0(X7sc?zrTlKkjjcUy+`Wuh8lWBxwt~hM90TKzu;W)U ze!2U;?jg>lp&HistNa#G9Yp3Bp*EuK?~ABDBDjc@QR5Muss37|m*2og>M72J%;crp zkq?41G1P(ckJxIX=<6tVtP@W>ErPE^xrSk4-@@yCj!z3cx{CM0&{PtdO8v91OEp-0 zoKd8gf#+d{JJUI%=5s1~TRA6F(BYM;r6@nQ?59)mHlnYKdTEc3q^^*>eS__i1 z`T-ANQ!(pC?gS{74TL-soZ^At|9ZT12YY>oKSJO@GDmTn&E~q9_S}p3^*DKIdQbDp zL*D32+w!5WN&X1STSdI9-}Qcw_csP&JwHLdJMEf#D%^I3w9`7O-8kAgzi-U`ZutHG zc>Wsn`xx(U$Y;`+t%5amic2%pa`;c4 zr&zl=^qT=!nwOCcLYyJ;_h1M6i_`-6jF`5F897t7N6=qCQ~kuwar@!i`a$}U?L}^u zmB*ZmVn0lhJyCY#XlA{S_!P;v@6b+tM3ITmvysB{xPm1@%mwG4m z#z5X$n)wTs2>Iid?wz^qRIN2{T|NO!`fVb=`LMUepW@ls*xLB9M~}InwOFx?X=*Hl z4Et)|O*5M~Q{l{OX=Dblf?IqHbz$?l<*Dh6XA(1ezp9!xVa~rMFAejoE#O;Pi(dAP zGSh`C5ATAPcMq-@-L~PwP2_N)Lt@knEWxHvUB%qkXT=8Dm?_nIpl`{wzK=Qcui|=b!w*F00^SbrzSaIbgL1ePmr^blB zJ-16dOaIdo$i65t0zSNEHul-MmDqnX6N)>n#vd^z3O=HvpPuQh*=%ryJXt6^Jp-(Y zLlYjwCk`%sOE;l^)2~)EXia*-&z+FNN zf7{8IBM-&G9o*x>;`>&XZ*F(tzM4LrG4II2`E`DiEYX;E@Vn%c=st+N2w$0;r5uMS zcC&Ie1a~jKipA9T?L(%R`cte-5-igwKxysK0?xvaUE+(x*^UgW^d}VaRE>|X%v(<% zXZ$I6uY}JB!9`XszXP6l?(vQ8QfSp0Li?dJ)JMfEzZ>70XDXIg;QzJj4sB^|y?!FZ zm8hS|^eQ$8M2i#mg-&nb|;_2aS>N0Ih$wY%w9e#kTtvDmrCRf_G?!kuxno-dD6_M zFVDZR_f;pa_y@q825(x^*~p5#;lvAPz8;UJxIu<>y5BZ|c)2 zc0S@u&a7c9;mrqJs!vyg45{G08^IVs=9~KAmTrZ|8tiY$5YG--My-C0EtwhRd==R{ z@}$YewaQ=p#3E4dgPy+y}d7>yX?) zwiZvW-{mdZrNPN{!k_DRQSQS7_^LP~ACEmXEyf=CFury1Q~JL$3*{3LZOV3(U3NWn zVXjh*B%Xy|@Ob|_S>A6P?#Qf9&_?t1Y#MZr<&QY}v6tuKlOVcOcqT3aKV@j?-Pm%v z>lhrARbpe!g?{E>V=2~Z9yAm{f7Ol|vay!$Q}A!?p&$Bf3DD0Q)H>Xcjoe3nZTR(@ z8b&p;LBOZcI5|-GBfJ=6AaQTzYP0StCb;aol~ zgP)Dxt5evyZ^GNIT$`rzIjyg|4@Vxk`TN*=1@tRDVb>8F)H;gxySZ0FdDIct9}?N> z(Z)(A-t_#u2|+d=TGL{MF2K3j=t$iQnvd+_B)j_ZaU9KCP?p;PmU}bc5qIeizNI zWq$I{6~a5#Pls>k$~h`3J3lxj%+_msN zK8N=L1!eN%$#=wMj-x-g)b#%mx;`6xPvVTSe3;pC=Mw5WA8uUxh8cYzMU2%O*tNaL zWAyWqcFqsp3ph1>rP~yru^0WYhq%=~VB)?2?8`COoyBES@t;dS$d(L2XNU1sLkD&0 zvjjOG#Ge{veHw`q9Li^Xks&|*j_Tx+`g+D1E`BRHI-*WBB`y}-!xKqA{ug|+i9%|S zk=LM{r#`tiDd%TMaByA&PXOg$*h%vrlNUTjy4SYT(Z@9YVwz8q`$G1f)S!-Du2tKDZ0;SY*}xua?U2%yT+?zGh_-o z_TdlS%Ua~dzNOHaZA%RIC*}1ghM*tu4Qjurv(8vib%QUq5*yB!UHdD^-*{um#r48L zjJX(a;Kd#4ZpK>hAR5q_4c|8k2GN3I5XUff_+VzHjU_av*_yB`=)>Vba&p~u`}t7l zh3A509k9iKO*E3b-i8{S&Uzys-S;;0-p#y+JhQQaidSkU-_(oqOA+rj0lpVa7;s|1 zpCLxi<5$Jg9^)L=$@>a)hE6kED&ZH!))FJ$srcFj#5?&pH*fU&4;HcpPZgW~Ei<`) z8$K1^#IYx0e)d|e*wd_?@_lvB+qd>))+;|KO1!0>i7!HhzSXJ^{L4DdJD?BM50!nl zUv?KVq?zC57DBg6YU^jq7mQxH3b}ZQ^TEoIrsb+sN&Ou|@>cH)=1 zkLQo@o}NjcJZi$69r`(E&g-n?`ATT(jm_MBgN{#A?@4_}cy~X2tKDbV2kxJ0>U+8C zrJZ*x_@0;V^mij?p%v~s3Eq)CRKa`Y#FDCSzQ4SP|FPQogTx>wzz?{#cgX4PvV7p9 zp4l|%9L0tv@P{c@)Qf-6GqwLf>kq!)Izx5OP3Ob>zYlr#CqB!`Y15d(3wI-QYCeKd zzIgrr44=E1M?arYoo5D-Ip8&tSJ6;2!N}JDOp`B+PRAdX=WEb-vMYqs3UH_RPYWA9 zJ;D5Y{?~diuY=;@#S_9u_RzoK+$k~~A0}gq?&+teTXq_7pUd}Cnd^RVI7IZw{^oIT zS#qn-=1Zu(etU^`wN@G8d|yKLsLk2nx}?rm7h-*8n}P$)$f?Kk!VQJ@nQIC!M+WaF z4h32+;~ePEU(LLI<+(3ycG~8c_%=BI$IN*n#2FNxDkGit@v3^ z{7qhG8b6$P$=-tq-rf%c%4+ft|0K~_)t?|XS26#>W3MrkJTYUoJxweP`{tE`iSc5L zcL(Fl&17b%e{U^U0z+g-MZ;p^$DOq_7uJlU_QYA#6S$By9pb}3hcVXVcsg}{^I(~R|11VwiN2Z& zJ$M3TO=C=dd@6qzAirE1+Yhcp8<#@U8e4dXP~%JWKVoLg%a!2s7Utk%Euzd#vHhCY zc5qb#9alof&5RRe?zKF}561jYzp#cmN11bp$vgOc_QIOWf77S%xR~Gc{7vF)#TUol zkCoTiP0SN99A%Z4h1YHJ9WIZ5%vfC26q)|n;ASN_3_<7mzK`|r_|v=JO1v!pkB1}g zx#B%+p0pvih&p}JYbH6aB|Z{-FotBXheP4c;*j5*^*rN3!6CfuqMg1AZ+}r8Snwv? z<-!+4CPmJdZg$pI>x^G;hCU(R$^_z#!IK3Tf@ z9b(3&An)HGpIdjT<+Gl5oHly(rlN`?53$yL=+4>PDSa~fnGJ3tC!wDR>uFfehdxod zTJ$XZgo4{Q7}j(#eMcB80bQYc%M##0v=et>3i4YgxR6~Scr;JJ=)qM3J`z)p$Hyy* zE25ovcK{#mU1`LW5EozVLw4;)Ml9v8lRwF?0&J8wum@!GaTeV0!YSsJM<$q-i)f!W zHC+F2vZTHfnHhp#4Rg(dUpJvYR&hpSWmP^tMChjteYkSuRm)?@tw+JT-i60sc^KKE zcPo%}XBBcTEWEh+?kOiuWpm{SbS1enz0`^@`zrh6)I_Z=#O8)xQ^e4rySC_av@u=p z43}&lxPMJ>K6(^icuv1T;u+j_+<~^;@_O4%zPcoGU@`(fs-IBLOPDA^0|s=f4YVhg(On0%e~b1%p#P6Szo)E9y}k0x=Qd2`{CqRd{11|A zjeM!V?k;5==CFT`lRuizbH!sye>{o}_C~Puzz$@~ChX|iG5(D;rlO&;zNDze_!>gQ zjyHifbm0u?Chv}2ooKggr3~|r!sWT^zl{WtPMAlHUDkp#neg3BTm9!CRz~f z|Js&5RO{`&1N#E&{dGEK5nxhtY6<*|5o;FgXEuNC}3 z+5Xu5e_UR3cvfTHf?KW4Tim&w+NkpPi$@>!D;`L(0TVi}rrs=iZAPMr{rjExZgSRU z8~?-q+(!j{I(ATzH-4ISdM5ivYY~c5M;rW$AKo59JSopJ&8KJgo7!i}ZnC&F-{yvQ)%TaFBT-C z7Xy5{{{J4#QJsC zguS{olTRGq(R{kyFRD&o`1i;Q>hES=GhMSsn_0@iHo-Xg%VtRw*u1zDqwlm=oT75S zqr{j@#EuFoUhyJiOir%%ONu#|fb6P%0Ud1W?tzvgf1IoMmT9tK@mK>dz|C{ zO`qIqxv;cqe2Xs`S{+Unv`nt&Oq97?->>NM}E8rt$maAHf}4u1YInn`&xjXctuXQqeyyftNXiV^a zyw>q0=hC6h9C&G5N`=U3=rjdKk!J_OxYZXN@i zs(Tvftfi*l4LrXE+2!3osv6^;=FBH;@5^%PV+OGOv2&_lUQAvs?X`v>-#s?gO*r~X zzOPm9#F$4I--yMVZF&aqNp! zb2m=C(BNo%#OIj0f1;fi^C-A(Cf_%j!3@G|&?*l;@s z?(z{lg7;bA(OBA#iPp>rht|U9IT7C#iPm2frB&CY<*rszD4Ru@L$RKF#G*Y{KZQBR$eKNQ8KE6cLI~S z9}amoXVs$Ri9cGpv3KZxnmxWQdTU)DDoorCS)OU;?RRRQQA-_~_q{<2du&GQrHZ6-GsKdo|P+c{H= z1CxC8*I!z)KxZ<#Cu=`3=7L?cFMB|73Znl;X#eMDez-n1tfC>!{p_sqlGN#(3y+K! zr|vRcHv}dvNw7Bs7d?}LvFagw%HI+@|FYFhr}57Ea91BRnt@(-BOlSzb(I1CFkc~j zKpdc9pCkI+iw|40+oxDpXqkMw0s5t$v3!Z2N4Dg>|?3fkUL9PYn!X1MAU&-hTh83 zlX=;rr*B)Cac7>db%ENr_o$~eKh|Lnd)zyizv{ecEdu0Ki5C^W3r>47H{^AVW^Ixq zj;B}ilGp#;mR|pZ{x7Bfv*91fMBOJC{Qp_sn&}-u@ zE#8DI!)B6vOZky+&_cp*X4>D@ApfbWmN(&Z%YCxtnD>p$i~7MG;`cK(H|8G-7F!zJ z13ql6JMzH%wA)uZYSwRl$$l?*xcp-2WZ{kd?mpJs>qGCWpHOU2ALO!meLP1W$)dyM z-g$F~zAL{nxu`M^{}E@B4|A7{^z#)_Vs@!(qwkHS0rK9*6{&vdWMU3dZp@J0jsAJc zEX7nP&qHULsudYns2^+llMSm_oHp6I#4xpC>&83K zqdJE>4V&tf%+^>Dw)oD>)_R_$0+TzxPu*Jaf@oMZOGPIZAJiEY4+qE-)Ot?9mGMI3e4px!t;%zRl09{>`qhicUhWAPITz*Nw&Oejy^P|;vG6GgTzO+13Eq}?|nF8|}BnuVNfrY&pP!#SAsrPspGP52ygFh0;6oC=UqH#?%rBx?!tpN|5Dx&4g}}#egS?1 zhs*66xV0KnFJz|spds1hE4G+c(OT{r#o9dlx7jr+14oB+hJVAHu9COTtBZfnnd2Ph zh)wF)D8yjS0JhwI!r%4!xx=0@O`xCM^y8cdkL`SpdfuAjF!Wmq`;bg?{wsyp<>-u0 z9b1u4O(q{TnF>1&?bzN>&p1v^rXd~gz^CusP~e;cBlG*04&{8QpmPIzf)ADr>-Zd> zukp8!IP1ay`fvR3j)>p%s3Y8$t~hDz3B#B=%l|R^#}s~& z2%q>D4+Qa%teZ+~6u-N%4QsUL2q{(oeX!Fn|Lou1nYamgihr@_I5H!k3tJ1mB3_L7X|5IS9FzEM?Hs7FcK;FQ{V<>QeQc4Jc)ywbiS%)L^wk|lIA2c} zPzN1cAK`4B`1&;;kbfr`vTL+_(-S*CIFILvi&_p{b}m7{&z8}^Z(u#a`y-F9Mrd3-4RQv1>T za>XKtU;H`z!rr6W<~@LidHoJfMMo*^W1*uH(fuy??(fn4yS|U0`yCG5lT*xE$88)? zbNL6IxNUMop@CdpKWuq@LRq5=f6#?LNFI_MgE$%W zqdxzaz7+Sf3z`(p#1Eo-(YvL4Vsgb7@52|Of6EuCi&`vS1WQ}Q4|~afISM~;FH`3( z%MbhyKZqCR(*O4aEB$-)zKixA&EMz22+dm@lh^IwVPzJ^E%c$YGsOq%UBv`?eAC2w ztsK-xihNXOp2%}|o)6K7{MVxWA^vsMmj0o6^ZR+nn&E+Y;}bVKehr8IQ_IY;J;Vp? z-U0pp3i^L2f7T}WQ+LweNk1N)e}jHS=gm_F>irzAAM!XWm3}DbIE4Ni&=2{pei&l) zLyG-X|I)&a_mD-LpOWi0wBxgkwUNJl_*q})Q#vB`1bn%Jd>woYC(;!+a#zF=doVRvCqtNuuUHCZU15(~>WpH|nXgd@> zx8(z5{$Ap#jw16#%ZK0r;`hsrLgTwGb?CXp_*xZDXvZW5-5YZ_V+x)GXDAM@uCu@8 z^IT^nP8{p_p(4FTBp0 zh%dg8<%{CZp8&J?;%B8Nm;ZwO7JeAk(ZCqbh#$Vh zy^S6}JOfWC3fAHcV@sz74p2?Wj2k2jZ z8Be}@cov@w_h58wBi+;D%>SM&jAg(mA9)Ixx?Q>t^NAmrICWpc*STXQ0w1KFV9%nw zApRHs^j2|3wII;42i_77?Pk1GZJ;IZv{>~H_$2cfeDEavARbs}j`iL(rUUugZ*{}V zj&4ZJk6j)FAAtpN>+3VAdB^sxqKo!DF$2~92z%_zu{5AngfsE5IllI z@MK}ZCt~4w3YeH{<|oVtxRMhpmY)o^5cYCL^~t4Y1A&$h^j$;E*4`c1yp62gMyLK> zjI%KFIh~c7gWa6f>x|mbb)0pwM&jw0LgMMXSJ=n7dmyJ)h-!kkI?m;3YKJuY*#qV0 z?12i{19>)GVRjF+7e8o$X!ivBpBJfX+F$$8I_;OAGp$W0&}qLW=GyLgT%DFEII&K< z8J&1?zMR`>$p*7~5qPPR`nA$ip+vcBiz)9+@=AH#)V2N4wEl=SbohBq zc8o=gVaF%m+|gGX?QfsuxnkZOS@E~}ihF2|+h-)Re0X2B? z?V5M2H!!oTk~2FS$N$( zX#YXRJBPK<{z7@tsoEV4yYD@pnK1t>W%f}HDx0N{CO}B^Fea2_D zT!+v9H{?oh^G{fszz3-35qN!)c$_m-TkPZ5Vpn5}eWC+=x^z3Hv;PLu`f1_;kzGCO*=yHR z&%_T;y-!?&_S@V;IW0xJ>sHQkfTdb+#h_vQDQ|^*Ze4YJ1TQkCYKWwk{jEH&0_-^lbk+&Odp!B_9y#)h28<@`wmbyhq2VJY8W)3heAoyvJX9?Jg@y{ zOV5lg+yA?8|GovLYah86&i(C%y#qcAa?g&UlVt1Z{2(>L(OVx(A%EpObkZc#e;B>A z?*`Mg|04F8OHJ1p;J5=AsJqfrGQvy?5$~fq6jjs*W&e9nvGxxa6F)~RwPKO&JmPDz z^H}N5L%&Hj%;3GT&|ZW72Oe)DuSAKk9~TP}W(6KUjx{4oFF_A6dd+=)|* zdtB$!)ZWqe7_}M()7Y0B_%>B42_$2v#`reAaVSD#JvIet(-;r-tH)@SE8)9ptv zOP1{7y#V&>+&jNnZT8JO=E)FfwR-n(Y6~uh+{u-z!^}zcW!>n&lk2eJ&R33ogboWhz6fju{D$K?`|%~b|0UVM_AZVxt);gY zd(?#~=;|`b0Y}fY_V_s4mtJ|E@ru2@7&zGVsW5eG9Djmzn)p!mqxM|Zengj5ni(zH zb4jOZKj!GOiB_LYqd)nuoN-#R<2=E0!x}_9eJ1}QFg(KZAJbmvl;mL_=Q}8cZf^DF z;M$d{E9cmi_hhJioMxj+sf~*WdeE>EUs;}Q+dK6mmWima|ZO7>+gaNckYr6 zg+AVOB7aw8#y{-uy8EbU)fq7~#JJ8KO5%fn)*6^p-^a1H$Q1;pW3=BQ`pof<ksrL zy^XxxDIZxLc3YKb{jHPGI{TWzezM=Q4x)AGOwUjD6#a_UyUzH?y~7&EAMpQX@9>z; zPOzbmvyD#R4}0dbcJIF?yZ6U-*S`NgAjyD!^+HT~$$747|V_9Z*reaYtI z_a!sjeaYn~+?Qk9)E=Bi($K7YZQ}<`#IUjhQb7|F+%eA7_ zcjp~@fjx7seX!>VXP>c~ea5a&IeU%sT{@M2+N0B<^eH+W0i9~EVfPy+Iq!32^O~$| zt{U)P$&c%t_j!BWVIA6E9NoeB1^z30eo=Cg^NWA*yzjKZH2awJ^n|hpa%k4`U3oIa z((E#5_FicAF@M8W)?M;jG%NXXGN08G=z+gSv(K=ee^-9HXL}yaMqQfy8SiP_tk25F zSuVf*gy*7J@>VU)>P*9-S>3ni_$%kTum@e(b7|J={}K8T&B|}3b3M^+j=bL~J@7Z@ z8)l{>?_+_FJl{B#{_m%M$8Y7F=jn{XqvOweFb+B+8@1Y*n5h-wD&AnPv$|Lg;*G>I`B_U*&7uTI+ z-=z5S_nQ?1sWZ}SEMQM1{)mgWn^x`Hbmv!za^pDg0FQ1F#=2WD30zXq==CwO;BH@*mBK3zJL?W?_H zWn^YcC_J3=W9ma5G4{MmV+rmt*Ab&Z{JJ;ixZQt_?$qxU%;k=6ICBx4-vQ1n?y^1r z?mwi@ljd6MF7O>r&0ISla&WqdXVD(>H!ds@)=2U3@pH_K&jrj0??T%LjYs`Xe70hk zr0bU4NZciPoH4}@D?WG{d9%a?H*#*Aqz3E+;(m25*KX+3jWIq2zoW%FxGMQqGp+MX z*5*1s&*5{ie_BMJ5&tyu%NCY=&OhzX=koa#|FrNw@p+?vTK5Hv0bWAbE;Uoa{oCnV zpSf}LSN=0KG8~ZY?Wn*>w=fb>hh^WHa6!|CkIF4Ll^6@r#IoOI z)(5AU>FPUprqj20AKA9q_DTPh#6f#;(v`&It1WqqJt^>^?`ghg^Bbm`y4njAFFhIG zWtLZ}KMS8E_hzzpZy#OYw=s<9+a512?Qi0F$a&~Xau%^CQ|{$rm?>s!W`~oDq5PP4 zsnx0Ywmjn7`uoUd=UFzsjdSMwea$_AoEW!X(O;}@01o`uHpWb`W?r0`V$2k4b|Tn( zz`GB)envmxwA0W3N8G!|M_FC_|NEIqNB|W`xWh3s2`Z+Z9#J3!wV4UwqV`5W>!qie zB-ncEIgQv;252(_sAz0uFdDhkB!U-W?bm8(o7x^GV681Zrx2>u*6JhyykKn=1O|oq zy+6-0Pcn&ke&_dk{eG|CAM=`-=h>IF*Is+AwbxpEZN+FQu2AI_o2A$!#VBRo5$@Le zKkEOD{{B@*<^LxfJVKqsUsENo(2pAf#eUX~fl~ad#)w>Y#_4lnp&k%?ucb=3qo=N# zbpXArGwFD!_+A1GJ>HckaFLC18R;T0H1oLXzF@FZ$!f-)N&T#msQ~mRGl^*y~b^2UK4QD#4$o0^hKGWej{h1E(2U?2?Dx5QmHVhrn z%4j57dF=;I&Zp(Xqh+3<2>i+6XJMXO@QA|c#>xLZntMTzN16G+mBYvPI_D-XFr$>0 z2cD8&zmj~J#M66@K3rLUhNWaTJ;)dq{o{&Xk_tk>1SEX z{gwa9cP;bmTVO5p(AFICJN6)7izZtOE!yg)oeTxMV5i1e41Ag!fvjLs_dj-{#!GI*>ms>_j#lO3j=>S>Yd^QmGu4wjFKP(AfB0 z!(zMn4_{g*e)I;vTPPQVH*d%+w|aOCf7Act`x(E9TpdfjEzEP~`I-iD5+3Av*`?$^ z*ppiPAiu96S4R|T1Oz7(&pird&1Tm?#=7^ zifMeOPxl(z_Si+Im*t7$PW^)u2i_|$nW@hi7v9yCs=Z+M$rS^0_$TJ*jAYKX+Vz|( z@tyti(1Z5b{!z8ypmx2n&oPA_G@R?h-`P7Uocc>iX(}~@d&+Z?sT@A}XLY2;jp#^C z8rhL57}b#~%H#XYr1u)`2PHsp8C8vPX z5M`B@{C40_uJR$AtL*lY4~_Fxjofjz6TJ(g;il&6h%?0>7$F`qLOf)Ic*uw+>#0a_ zn$V?27MNC-$@W2QkbsOc`dS= zvUV9@sPG{J=(n0O6Wn&IICsOoVc9Axrn2?qHL48+_bHe98qRtu=T7a&=8b#)Xd3Z% z7q?6!el?>_ja6fb(q>k=&FH^EN3`i1YPR>4y{I3?R>~&1KUU+iGGRm~R(mzbMA6$n z(q*cz%oxYK{xW{byqPZ3c^!J$=g>Wb8}j!I9&?bgsa;mbU)+9coN?Ea2jeOBR;pLa zy;A$VIrf+}{`=iA6L%iKALE|oHpRA1481pZStHRQ7gRtO#85!9my=hrySKd5e>gS0 zyZ3tHjPoz*hR&?^Imze;sqNL!qo4d=)zF}wrj%H&)R*7klWmN*+eiSP z?x4EWhaSAf`TmGGQ`_N7&WP#0X~F2ydN=KVE!}=K;}czCGyF+{`X*p43QZakZt60t)-O0~uy#_G-Cr5)_-RA^ojbC5;@9)D!fwBQ>h-esD|2yk zg;RIsa5JDT@w`sm;T~+g{cvl~qdS(hM!LV)4|jlEtTx61jHweCG#73i_B*Go(@CB8(slfU>IBX^eVuOVbf@b?;T@U%1kQEp zh=zr4myRv$2Y*c0>1M7n>x9yEjy~ssKAd_L@F@@c)=#|`T=+hpQLl=#(dP{8%dJyQ zosQGNN1b?4#+WjAW|TTVqK-}ftjQp?4pXAFU!MRne@{k9nTiuNkL2Y;%YYm|(}Xs81J;zB_f&eb>Vi z>I;U1KcbD0&LR^7c_+UuVwbwX`3`>9v;I=|J2_N$5TjTz9^W|n?wXZ>^#|(%&pZk* z-a!twwdhf`X2?C|E4`bl_@B%F@|B@|kMb!u*-x%w9@p@W`vaaVLZ815IV1a$^eW$l zj-1&EkM>(XKz5Teq@p6(O5VV^#~j>;_NHd4tbBTYVxDbykxADBxK=L(G4B9nQO2WAhXQM)=lQ)nth2Y$pHu~?p(ae zSdtotazi-&e&i^5L712B5soZ9D?PSl$U&{q-nQJB%g3VBe~0{I;)|`E>F)m4p)az8e&zv3p?{vNDi$0~^>}gIt_PWxq zx>c`eayXu@*NN;_f0;1)fv$JEZG-pBTXwLrKowMRk zsrQRB2FzKt>M>{4?wpYa+LieM`S6j~iAxH@KJMBuo>g5vwY~<;i|`wKdTQy5>~%87 zXEx9L@T7q8(Lu1ZU=z1t!4@l6Ec$s2Sll^o8U#~( zlrw)MLKy&Sh`ZdJcAC2s``L%XaIPE#W8^)z%w0B& zeqj7=28{nUs7=EiD|VaQai=i_DPNaSzGhJQh!cwgPrkoPd15l*Go$ zJo4VYInq8-eO{H(pX!mLP3`ublMJ2I+}@>n>#Bk8@Syhz@}BFR&T}dD!TG(uD?J~5 z?f8ftaog#n9j%qjesp$4etfr|S9vdfsrePp)ctQdADCH3XQ2GneRdtS`TId_M)1Xp zzp72WmoITZePa3j*4_5|DDQvCdzJND#HgkD@tJA-qz3h^IR5n7U#GhE*^>;siC+ED z)ppyhynl31-?~#R&9~O+{SODfhfd`S6+CKR=gl%t+%f0oI&pbUGBSk?Ynp~VF~SZVOiT%G^k!= zk6Ukb*JR$g_7?Kg?u{DwVEoe9$rYY$Cs*s<#DP9AFMHC|eC`@z4_Z4qki0689a}sr zko@TjLGC)T4h4y+G}G~UjmIB>uce%PJ&EB%w^c>Xc;9?iXJ2w-$BI0$@K$fZ*Bw(s-=x0R-X`&#l&H7U2VA?}oU z+v8t3FS!XDk?dPdH(T5M0sNOWW?Lb++weWlw&w47w-v0k_;|KOCPpr6o{elUxDc9fz6i+D|lJWI75)no{du%98=^*Q};a(?urv zoniRdkTKOcCfR*9GI~65v0l&l$H*OYbSU?2(l<$ayHAsH;s~lp#99Iqo`gmmzHg~=Y(B|VJhjOsM z@e9dEu#3Hshc;=q>#YJ$Y3LVLqx$uodAvkx#-+#Q%!Ock5qzGG9+S7s+x8LoaOtvT z9y&Yo;bAP@tc}t^>obt1ML%~o5&v4;ndZ^lPu!^dYp#u0`Io%p%Ukt&U|So{>%n0? zxciA{iE*NDw{@d~yzFswY3W8Tox1DC)&ZTEW#qwTyFbyqX#X7g(|BJ{d$KzmCk~f( zg&W)N!*>=R#l@R6{yaWxaQIw=v(agMB@VNH$&eWVoh`HF&)oyYH|D~F(II{|Hfv^0C0?tuM>a>{eMUwiu! z<((Pd_U5GAZPz_%^RhhXzoP(ujV~8{dbKB}dmj_vgnMOepNW$rJ-_XlO{Veara;F} zz1aSm105^LVHld{Bd_P!VlVT)ih7q{$QdT|?}L=Ld(jwI=OnUPNk-okxSa*zTj?PV{ZD|7M&kt z41eUiuU-pxFLNh|$`;aQ4>(et+r17vKULX!wPPx|%d$f}p_~7cn4iQP);ZsTMfsmH zX;L}Tc%J9xY&=G;M&)h%Xz5&XHtv4HwvX6rWOY|mcL=Z^w|-z6rI&WouG?0b-9G0v z`*;R%N9pnpQC|AJU|-=KeWl=@WF`&&6VGhDSh9BOh&ms#_5$Rg!IxA$WNnvxZ&mo4 zd{g2Z8CRaUuz8~3DY#%%U0k?bobSXAWSP1IK0UqjF-Cpc@*A7&=V{MNE))L=;zJL1 ze1J@+y%DG&#=Gg_1%ag2yw68$1a~l5z>I&k{T%9W&v9|R$+lrUhdQ;u zSe=!<$q$TWz!;|wt=p^Mjk+_n#S`dYKUpGvQgded;*u>3UsW22iSOH{D!fI7<(qZG(RrBeBjHt^K+W9hsf18c zLKdvAMLuZ$l*iDodlf6tH3rS4J(ei())wQ|3mxTA9%jxHh2_xJcsezk){o` zC;HjN^ZxNW`Su;Y>+oE~M|P*~>#9QceFERTwI+}hKDwcs8PLEEkLOSiG~+`rnF+iF z+=;Q1^``SVCHQ)ddGep^f#3F=3hjHI&uV<*z34p&_}$L$joXx39XM2t+a~K zY;!hkRGvv3qir`m)3lERR^@%K#pl=qKMZmHyf$m>rdsqm!CnsCg^(w;W-Pho#vI}f zpv4#CH;UeAY&^O=$jxalo+^FWJHkFU)AbkhW_%8;0djzkBEIRTfv~}k75S+NJ7Z)_ zXT{&dan|#-k4_@(9*(T?n$ja&apRxXA3-MttpOcbc?XBF^N2|n@+%3dpYx{VvA_NuIuMV-#$odi>?|sK>L1Q? z**+ZJa(7oX&yVw5u`ZMpH%?6ceRjcL^TRq%4Rj0gHppbNoSn|#o@ z=(rjB28MJ#eJ97Z{)-3numAr00+gp%YduH|q4YqX-T&xAyI9*FVn_EyOzZ*HVr!+38I{i&_hL%f@6;kCV|QqxucACzyUo^sJ^TvY*wznxsM!`3H% z3tW1Baz&@DduYtWQ{>k#K^78II+*wCKJRzIb^T)JeSOH(MH%}N#$|3t7Q&MZcCC5* zXWZzj&OI5ftgT1y(0-&Iogzv*c0FV-^}+$*_yBn8zl`q1_@6(?USOHiru6ExytD5a zZ-E};$V|=%vo7-caUts>-LIXO+U?tXE0C-JF8b<-(3cCN#;^IVAh(j4>hz~v zu7-IQ%~f!Y)Qogsln$jeh9X>r#9He9`%$#d}wwLgXXbu>otO63L@ zj&+BNBU5zGl4qN69vWsAi^i^Y@eD3B4>q2WCt0_fBA1?RYxjB8uFY&VB)Y(Nx3wI!4{A zvP|+3z8yFk$^F@k9V(J1SOk+`ew8!D9l*7ZavE>iM%>2(*WUN#bW4o$l9Jb>P;|E@e2Z=sGY&)s$D$|T8j*_$q=j_PxtL%Zt!Pcr@Q z_88K4qS&?|WIJPMQH(HhA!?1}E_24jo@_ci&$Zv|grAAmg=k;z%Ydtpb+`cd>$TS4 zebubBTZ#SD`VFOJi(q!|AL-K%kS`JBcqT4olgiW&jO5l@a+|yQ!G-?|{Q$k76I>0} z3yv`6!SX+3-{W{1`44@bPX3E$c7qc?V{hf#hrCPc1GerlSRZ&kLmv=NH$Lzdn4?$( z`wki5g?N?i@AJ;q38EXjI@4>Q1bS;hb{SVEAiq~P@22tGZfo?M4)!S1WjD#<-WT~? z`}zN`KA|57k2>2Z9EfHm->dnrdEbxTEcqUR77b&QY`q&@AydBJf_%4aH27Fr*mp`U zD9$1Zt_SN9E^TIA=;+4Bfz92^Tm`%##^vDN$)V})NhIs{e!kykA^V7AZUp!wbF-1T z?z*Ug_KJYfrOipwLuuQV#lWcCJ(=rYep-7?M>pGel-zwCzH*=s_jh$!LmmF}3eN>& zAMT^~*zdY{F5IVWDwV8mS3iGzsIRYG)D?f!9GzV8lWo|t)=PiWd>k#Z zV%TzQz0}p`w9nT(^_<83NWkJ7GO{EHyvvots zr;{uG;OP0-OC#)uHAhv<$p+@`Fh%7Z&)6`kQ_|2 ziBTTiroE&3JMpeV^O@u9MkXJdW5tNC>e4x}KVM)q2Jj~cc2^%-!fz{bN7sRD_&xKg z{bvuq4^sZomfTn^eGx+yYaQ0|!EE|aJ|NwP68xxYW=+pnbOR^W{Y%f`=K=2O+rSaD z6a{W<#>J`G#91CqEpDeC^SsB3tna$R!&xF?`qdwM-92_6iA(K1{PZDzg!XqD*L3ix zK4y<_&Jcde{I8QO@6+Z#l09(#HC?YVAobl*MBT(8kw+qf4j%=NmyxfVRkwcyzS zEI-Sbhc5cmcwRY6{t4>B1NIj3ksM=v_OcFlL1(KuOB7(75!PXW zDY`iUeGkBE#yqqP;jHG)^5mFh+}HPK?yk#RuYLF**Y+deO3NDu|MniqS!cqdY+Hql z(_S|LaOun9ycoHy;E7rj7f@fYWx`dBjrVxpx*6Yg2Dpr$NKKDZF5>8K4ld2c)8KNv zvu@~1xU`11d~hqcl%GTRd-`&RmpSx3u5D!+udBeT!{7S%AL3!+argsurvbiF?>1}7 zC;8T6*fyTW_OT23vkQK|6MIB0c8Qvmo=tZdPs1HI)-2lr&%tlD_%LPcvEEp?44Pag z8`v$jK@i(F>NeK(f!_w%mx+zfcq z^WyNmvFSarv;Wa~+(PPDh2(}>%$#X`qcgPv`{4raS>avpF4(wrKAQCYSL;x* zDSqZf&$JFdLp|B_H9z~$Jk^w0SNG!Bb&!3Tb44=n5UVIg0{cLvN)dVOs{cMgHy7Vy8uQ;>(BFVBarAo{C;b}VSee}-q1pZT=V z)e0Fy6=N{yE`^LizvJ*wwF8W?YTAN64;AXn;Skz}e+ri$E-;OcFuzwrn*qwG{W$Zu zm_Detcl659n>szC8~k?t{6nHot=V0i`L*XDJ|Fua^^k==>{U~k@6K#&qbmdVuZgpk zBWK03fx8F%>)tpDRlHwxlP{M<%7|FVC?l zIcqev1{)anl%ZfPPW^sFU1%)ddq&i?qAxwqoQ8fJ2p6!wmY)yW;T)Lvr2zQT_hQ~d z<9#+qTNc{9INdg9pnapv;-Sz@Y8Ey|?m;xHk?O*D*aI$fmRjF)ID7nwd&tJ*&TQe% zgEIV;Ezp5Y8}H&z0@D7prIabeGo3EyPIQu+OaVOfr*A9&tA7 z{I||edREroABg)JF6M3)(Pxjb8lNYZp6nm8(Mq3M!&xPahNDyQ5p_|{m}g--3_TV{ z4=`cTK+1>ib_QdZg6;JPV_^LIkEPo6Ub?K}u&U1ubUgMOa>CpkD0SNJZ(DdLcM5#H z9J}GTHW&YY{xY}8scvDQqe*qY9w^n`W{vR9y`^UBP5bD>ww*r8^NJ(DwbOx1F|l^t z&jvcys_yJSSbKQ;Sut`~&;Bh?`d6N1vB$OBd;VK?d*TsGu=U!{UcAkICja&GAE%!+ z-e5oLYj1X-{X zXMYeN-c4PQApj)s^Pdj@v{RW@_iebeZs1C}ZQ|I^?`yhmPgvneqD@chz~n_*+?_Z z_bxn9zu8yCb+-t#S~e9sFTXSCSTtOOvw-sj(DY5&<`#p<8O zrjH&~|Dt0PsDFAyoxwIBKEl4p){9%vHkW=e)B%w zj$d{UGS}tp@@SV3EoNKRduS??6^lm@TwI>m- z9en?C+c}KM=>C$l4@G*a^f}SoQFMOtD8Scr_o}z;7;?-Q&r`cRvW0O!a>RtQw<0@c z8DzV8iujnP%=pM5jO!E`rXngENwG)*|+d%IMCxZ7-@e z+`oJgyZ}BBdTgK{#^tHn1RU$S23 zlE>S7*gvJ~=C@9a7^Q|F>U$7Hw8=K^83{F0p}_PcbQ$Oy*CJ75e;-^_&ZOtDb8Ep~X7~l?@Q9?v&+> z5PrC5y6is6t{7A{L0r01_Q3(|zDU_`4JsQUM%^w;yuR9XVfYngZx~e8$9<1Z*|h^; zc!sjq4JsSwenY1$aqk)JK2F&$4JsQVuc=)YpMU1qHdD5OvIVTklPlV7U$Xd}_S?=H zWZ$?eNUk7a6L*tuO>v2Bqg}iaqE>20j<%ykiZzZvvgH^dR^Aa$kUjtXAF;_MHnGhgc1@ z#$4IEdd&H&xzjZNhxb?dGUhjOHt`t5$f9=@XCZgIY2CDSzT;C6|8n)m{`kD#+xwof z$E~^`yqsLZb#e653F!YHO*GTVnY?ElpO?#r#*VET8dKb-huAyC->vYPEBDuWW1Dk4 z4ZY-9vvogml9H3J?RbkJpRUPUF`hHO`&j>f33T9xt@9)2lq-XK))q(S`x~_Ochc7x zA7cl}HPd@2Cwf<%XpYq|gy%k6{CTbbSS_kUXc;$1^sKaeUFR*vmD;Vj~z|0l7gU@Je@_>PKVM zIMrX~IRBIW)Yqm_{V>)e7u|8T4jN|{xu}RjoGzF&CiT^+xEy$z@bL(+{Z{$CM)tR- zoNJey<^1=ptlziFYZ@ZAgq9gI>7s()TXik$BgnC9<6rZz>fYebXA);x$Y-h7b7c*m z2Xn?MrnPN7@M4qB6F#EcTbTfcPQ{eA5J$@YZr~b|p5LV&bIVIZ#x%?XrYLwk3*5ZS zJ>B=Sk0jqUc+W46kgxs+2TnDKPAPw7;#t$dzHH%kXmy8Y^r5?%?~bMTC33iHoEVTB z!^rm$#BnR0WVLwzgtpG_S(~`Cw;_0A_3;{XgWikL*R!mK-tX{@p3uDlzZ2_c-_TP{ zhWV3D*~?n;@w?hH>xmuc^~Ahp z(v|)6H_?tY`yDykz_ESyBk><*agrQze>sqvfzo2b)Cx@b8}6?h1x&;UbP4wHY1k() zPK|L4?;L)%xvP4Ndn(texkMk$ZwM z2^R4M(fAtZyZK|G+9&}`LIKSK>JHGyFed){t-wW+AsGVKS6Mw`rjYB-bvYFoqq#9~tiOOpQx0 zMX|9eR$Jv%=BJb)_QmF_b{XKcZ3J#xW;piLNY{@j2mAxdRb%@O^_7#|l^9COC2|Iq z^WzU;UjE_0mTi}Nh;l8&(rXNMzu?DD?0JH;;*N29p&C7eFh1{wJ8va(GhjQr0~2?LFjG ztT)h2B)D&a*|2dxbkV%Vs!MQ3>6($8g-8CD98AraNZYEbzRWe%4zJ*TZPEYvyt82- zW?MA6nm$FRYv9ApPs4}LgP&5)?K88#=AZL^3Vd4qZnf-l37P%-Bm)?a&luK>xl-$N z^L$@JbHu9KhV4i+DSC9*jt@G_hL0y0Ut*Y<@!S|>3Ue?~>$4?0rgf_G4qBJJw7Y|K z2^}mB81HamLG5*^Hr;ipcGbStz|eHtmmnW|z=QTwJD{yj)@J1Tnq>v7O9QPJyvsLn zJKe0IGR99e(f2iT|Cx@JSkwU2Cz^0z_Z}6;Q|MeY0OVdV|K@;u}4?bEYtWk zcHzJWZUvjhr&&w z)PXSpY+9qfNr4l7>{OB&;&sv)BJi*Tyi;}}<)?za7mH`Lz>5mJv z>q7IQF_*3m?vq_9fxfDBSI&4JCnr`MS+BCfvBuiTTDR9{29Nn6O#45mWy8tR+SS?eT_1L<7ec7QN2odD*y9DzdL#7&Yw%~OWe5vhWMH2smz(5 zb?NGMoo_mHVBl9Zz;0TG#||_bTZjBM@EzdnOlX>!q4^X~m!2aXHUzEd-nP$jF1!$) zQYC(Z9PHyK$Qa)wXI*RU_AGVyNtJM&<|Xd|yT)|wnPz(czEH~;%y<(^QC{tcW(paT z+kTRu7iN@Ek*2MGv zi~9TP9X*VBwP9Lf*n4J!XW&;E7ydY9RljeYl2gy_8$GIbmy_FV7W#rKYc+Qd<&1CW zVQ#d~-Ty;p&1)VDnET)>%su-fdoMwbzwT$j4ddRaxsMFB=iXxfaFiTZszW}*8JhQY z?vT~|Xl{N5Og4;Z*!pOPT%g)}yh+{2!>JiAjs(BUBQs$YoVH#CoWB6hk|_>NOGgu) z%YDOQ8+ES}{8-P*6GLM?(8NsmoiEMrOQD;WPt@;IJCnU*?R`cjPfl{iZA%&l1*`$< z#~FMNnHPPExP8xr-RkevRl$AYSt~dzir#GZq5X?sclR*;I%|I0_i0yq7_D#g30oJ8 zvj#L?wfE7<)Qscs%Rg#e^ZyO;u-tjeBWIb#KjjQT0dhNm?cUxurR!b)acah4m4}}^ z!kpN+1LwkP47}QUSEHl%$u7Qve39MzQ;TP_4kwH^+eJUkUUTTTkEIshtu+u0?h{{} z#hBiukFm(LYR=F}mo4SJ_Q(O&&tdBIp!XZ_E&szede}2)&9E;iFcS{l1Rs>X-Ay@b zkj_0z_Y3p<2=%gP|909h^;(?Ov)DVymocHuN4u4@sr`=HOt4>2yRB-My1+3_=lde3 zg7+Es`4CCV2jRZ; zF!PLVc>VjS8JobH5gT!6ra-)2V za)O05@U**z#7i_^=V%>lOik~Fcepfhl)QqM{4F(Ox!R|`)}i%69}n(p17EY<#%S7* ze3A?}Ks#o%Bd3a3dw<*9FNcFoj79B<7O_!^4-`OO(FdKj1FRp7g}f;C8a+ksot6hu zGbG2f&Lzv9gNB52jm0E}$H2F}SJXbz#r>~7N{y3Fr|~=s&h~YZ^O$FnNyuTFFRH$c zlX$-@>7hUM6KID=Q#VtV+{hYx3x2hUc3hs}@(bx8r{k+XX6))i>r3NS4yWV9o6i+q zp||{|`zyx`In{J0ZQ8H^Q;o(CZ+CI~E5QU#eaLFH@vQ1He(-JYhxxYYEs_D3+Hzr2 zJLhKb-px5f()?_4+nvB?+Y8{i)%S4Lh}VdFUzec1 z!N*--vflqK>vB5&5uHc68XQMFqJ8;wb@zed{rk^f>@Dy2<@7M_Ehkgk-MUAKk5^sA zGblcecz@2G$GQ^O{-f;M-|6Liak>oWrDp26pWGaJ*ULM_H7O1)n!Bc}Ebcp0%l=Jc z)R~IGeJBRFzmFgE^|6VJ z<6Ca?Q?ASeK1k$8?DMMSBLfRn79Ubx74%~w&N)`~rFOJ;7Jn?nj}oBV9Q-u(jpluw zVe?Okgq1rovCnDC_19(NXL9Mr_1Pt$4f)mZGZ#Nf8-@7K{EY9>T+8;MwLlx9Df#kR z*t5%*=VN>`nSaGry~O;)nZuAh|D&0I#enwD|3c=!&-cUJxPGUtF|!edJCwh^G4F$^$|Yz<4^Ku;8SPQ68M$a z2Q(?aZa4eIRp7NI$2nu;<6C%q0lFv$$8#f9$L+Ig(8y@yWj*v0hkleZ`A6WqlibEZ zubHX6l6<~F=D8?6#|wBrhdEZBm3Oh9=v*855@SNSxL zE6#*D!Px}a?$c)~D~rGiDZ4&%)+9(zn*vV2FJQVE+stN9v7}!=da} z&$Jf!XxWXPX;Id{#rq)dLnaaypEgqr`SYV2RYz;Q8XM|>_g^0PK9O!;WkZzB>??r` zaoh2wf4gwd-+;0~@|F$g=hlJ!vY;k+|Rw5BGxO-(f8rXMM=W zBma){^4ai<>pn9-+4~*SaWU}{&5Ut}VNZw-8t{@6oc+g7{1L)sGfgxcRY)r4My zJhX19foJ4HtGYuCp53ngTCp#enMsE{Arq?@89WiiHaaBhRFh~MSja0BB&SAZZie64 z@)Mn>OKoA}sAS*Jm13`P4r6`v$UMd{u5Ajx*Ss=6+36YIP{i-rd*`9cvUg`a-@%7H zA7{U_Wv}n3HCYYEJYGIl!-=y@Ecj9VzPc;W(Tb2Y)Ge==o9u3=ex{rEy{oIAnM>U= zauM8gwqpCas~Fr_z;KXUBSTo1tI03o$4*pE{Ku4$^G<}|0b7<;FPlStk@A_Q{W|n> zi@hy#5&lY!*?SNe-U1iOtIu=1&-Cp_`VwvqZV?%1j58*hz0-s?WA za~>XhtbSv5`#%oe-%5;3#AA|*5mN4!d%Wa!fhNc~v;F^W-bH(&LG9_Q*u!)ZI}?PC z6ZgYEvrNNzbNLu6a(d@0l2w-5{E&F`g@X?lT>K&YIXz z?lCiVD5vy@%JZeecZ0(~+BTOEPPRhd#JRC&qmJyIUiSR5N$S7pxQ_h>>uEaib#~rn z?(9V-5kI=2Uk~+bPeuD>><2@+70YFpwCVDdxyeA!S7M>@c5xSe`0`=?J&rSQB0-t5?PJiMV8pC6+pK9{3 zUls32fMfDI+`@nQGQ~k?P4nspmR&biFRRCv5Fd#h3LfWUEG`c+le`_Tvo{fLEaD`E zL%%sACOY{cIP?t>jR!h@4*rhe$HtGwS{~O{`c`VXa$TS&7Q1aJ|EKy?|B8Wu{@RA% zznMGS?6ubr>u?8a=yGg^*q+;-rHvEtNc~oRE3K z9(oZQO=g?oscKJc3C<}aud(ws9mIa1_RgifB48cd-X7ZP#7FC4oV&9M%g5yvn{&Jk<@oV!`O125ZN;xXj4xK(KF(A} zX^(wpu^)S9*&nSs*3@DbcAeSQ*!MW!3l$F!jqGg(f1-mQfLHKm|955C7kP$05MKHg za{`hUyEq`aXbd&w{tE@*)G!K~~*T zy{sIZ1|PB(R=sA``SJ6j$L38T#?a3^3GV2L)C|qD&dry4v#%^-jHUU}iSnub7wrlc zyZKgG#nnpQk^jin%S6Xje|2;!*7z-Jw-c*yCbnDF)=}CMFIJhWDMKH(tZm0PP5Z9C zBt1!X_wCr5glF+Iz1N)^!n5ARc&9bIgZa+XAKvGA6|_Rk%VHM8jBeH+Mw%-HXE${p z7Ea)wvOB&UuzjHNBj{+M|0YjZm~&4QAB z?_|hS=1FBAsv-Z%5YZ5KV=>l=%XwBn zec9?f>~&RUKffOt;{5K`bM~=%uKDuPJ~DBk`t_#aQ{TNjKf!y&D82$=S2>d+d|ymBU?|1JA6Xi;S(bNDLV4vvTvGcQzn$p zZbfG>KJ0^vwvzNi zpMROj^PgiD`o7@Aa?6HX2JM=)pI@#RZ{OUs-xImBmiVKCKVv^t%Nk-Y-SZ8tFXukd zcXsf6zDfR(vqqeMy{(m4f}_Z@=$+!xV~eZvOuG*qxWJ4(yxjlX(W`BRax1{#WAwmJ`bf`>(*v*ojbA1hLT^I zI3;&(Eby%H3O41_l5XLSUE>aMX4mO^Q(xZ}eQ51DF^vv=%zD?!9aKO*f%tpKeembT zQR}{Nhu>je1xCr-fBe-n%J1T9OwZAU`1A4AX&=(exro5f!155beRsWZ4@lp7xdJ`! zAU=yXSp#L1KYvtUp^y1y-PJ9C_h@aDs_hII66Aq(cqsRor(yU5FvyR$YiJ}7-ao8r zji;{jee%DZ3oWLayXvt&1o?k6Wm3Dc_LBE@y_*|bcfxXpF2966oV%0zb7dcqT@1g9 z^2+M`Tq$c=`DITOVH03&9t5ukxgR+I&Lj32_fB#Xp1v&&50W2~vq~_*e5yX zuIbCpR{-wLqK~_Qt6&;-aP6PK&7(du>QQipUQ|37M`tpw9aBu*P0V+}Z>+j6C|)W* zP}jo$H^H5cJmm%G*UD$`0CI6VZ8KMUl)K!WtMSZLz52|UhX;_A#PD#|#hHu4CsR#o z?;t+DgT&l#r98M=SAOBFSowm`tPnbaXKi6a03E^ZcR^&mnfhyTx91d_!#Oh*SEc6< zV3S6kjZ^#5FJD5QH|Rg#8utvo@8bI^zVG0B4CPnr8`z_Kf17U`)}?0J&B!{n8R5C; z0YYCZF11y10w^8kc2~2YYrgCF7%&Q7xbwd>w8$thxlO`u>68@q9fnm$*Y zbG&5753ITXa&yP`Ox-u(5iNOvzC6ooS?4Q=9dYUJJM{UyEwi$0ndOIH)lTV`S*^sk zD2`>va(vF54ThGkjNo%l;Bz)pIwzVVIWvj*n0_^7GUq11n*QkH)bua&+?kL2`{pBy zu?i>R&H9{N@yl&%!MW^<(xngdt-YMKgTxT94)WgI!uelYpRu;xPFbzdUhXJ%)}_@p z5*=)Odfr;mL(o6!60A3e*2eeInwy(e^F$7zV)6s+wbJv-?@gTFN=DEfYgq&AB`Q1l z)H2WB$p+mDdgr;9b)w$|3rvT;Jx`mkzO5|mGkk}bf3xhL@_g;i^8)f7>HXMc=tS`7 zKAjBOcj3vTj}T`>9Ui>Ct1~SxfA$y053c&|x^e4@ZUw7V80q?O4tq#+z&QH04Tm}V zq7XW?`j;&R{cD|@2iD2QCVxBU1EHg$w9iwyaF-(g6bla>A`3R#aD-Sp4**9*GLD!F z{r5-NM*`!0Jh%5;_Ix_|O?AGLxgU_nhI5t0E!2;5*7J63FZQ_cZ%O}WAGFSoz0JcK z32_e6k4>$%aBfFvKXwmi@3dHTTd1pZpcZvhPWY6c_|#X;Xa{c%UDkL<&$tP=jzEVh zr}DbHL;GBN4rs&mFFW-b`|4d!z0>t^fId#HczS@Wkes**K4;r7uw^KBBj?OI#z8l- zMH%>L4|HR)Cg<(cK1j4hPJr^Mx0hB;B_EUQo^j|EUs=ymE7rYQJ_hpRf8^*S&B~#P z|K>Qhu~)bcrS^(>;Uy7lT~*ktuxsG=E3Um_NLY2k<=L?%zrYu`GtjZ*KTSvN3#Q|U z*J-DE>>TBO7*##d+o3ii+UGnuCtMSW#v_eAdx=t1d#` z&MfSH7Chh1A%$+7z_u92{}t+)OHAmn+laYc{NXOkj(uOHJrj4mS0_i5RA2Yy4)zE$ zy8kVhBzM#HSuubUH|DHuJ%>$4;xpRk40*~=9uR$ehFn$Xd#lg`ZU9fR-PVJfEc*41 zi*y~Jjl?%ha@IWL|034o7~+;FuRgjtzxCM)(|8BRKf;;j)3GIhuQ|*c`;|li^L1Y2vK`n} zuVMX*W(DU6)}>o^FYlUXJGtaS=LW-uc#zP!%o}`4W#5wCk3Y`A&6u{gDew4OwFgQ2 z*^9Kc_t^S`+wODec6B~5vt98m!SBW%iAQKJ(2gzT)9Bq|-wSRk>p#fp(Ee55Z}4sN zGw4BbUi)c>uf)1Ku@Oto&;7G$)H#25+4!Qr)G*iRbKO>bGr_Fy02w? zu?u4d<#ld1fo)m1`zCmEY1+@2J6ZRqqwNo%(ZkR-Hf?B@JL+xP&Tku?rtQNvZRfXr zm-hN;8=l4g!-Hu1a0YFM`e-}9?N^&DyR7KocICE%wnJ%p{@Tw@HQoNdq;1XJ`utN( zw++IhugAfo?WY7M!XGD~l&{Oq6Nm3-k8I6;_8lSSQ*-i7-g#-~+wT>X>THE*Q~HTZ zpF!adeEjD}C!6$KHlH^hBUXTC1b8b(`b()fqxQZvC!71SOrLD&&y|&()^mo~F)>N@ zB+Jo>()*9RkC8q3>^V~M8($a*{|B-@RX=)LYIRnaeaKVBVxMNQPqVyyviM~48S<1V zja+6Xkdy3pbL?{|wykjte3@K$@gWOlR~aZfL5b?OSf)?6f2qaM?L&pRC9KmtM-LvDD{}rU*&zbh%?9dM?pbT_Yuh10 z^p7p5-LRMO@$G{S#9d_9nSoB6H6ZseN~JaH4g;q!ny3;y>e{(&+p=g{Ts z@!mqNl(QG8Nu{=1UkHTDEbEY;m>-SPlZ~zs41~SpT&j9}L|w(Cz;ct1?RIxwo$R*t z_{=J>Wd>=x%z)RC*DtS_8aUyb=fvK%c?SD^&H&|gzbF}F`t|-@BMev z(K{zMw(4_{u0-w7nAXzU=qdFdd$&p6jy!R)$-|geTo*`Q&waXYqj&gX=xq4ss&kM* zxx}ITJ2GH2c4Yh?jNwo(`@5PEwhp{E^tM9Jxw?MZTIg zwJA7T0@$O6o9#99<);tTm95sFYYq3axAf9b%NQ)p%l`A7j~V_RI++uaI1N zuN>X3yUQ&2%6jwjx$AYFxSKP^q4%&mzpb;#`E6zBkoNw7GXgq)Y% z@YtsnN7{L&)AsYc6Mq#A)$v_3b53$+R)5>77e6Dnj6c1|ei z8Fl!agqLZQ3l)}!)rQZ@K87~_&NEwvW523GKie`oQu#6WNNx76o(MhVWx)e|*yL96 z`|To6%!fUw+^n8hi|)l4@f5PxT`Ed(gdnQzMssT;wg?e+&K)+OMjD zrrEDm-Dm2~hYtjw9I>zn-d5k@t<(J;Wqd0xy;nKXzBM~m%ehea>d2xe9Dh?4XHTlJ zWx4aBcw!rWuczmQ9J;OG-JO>kz`f$3SOIqIz*WSN zQPw-f*fy#uRv=kF1>X_->qkS8t}Wch)Vs)(c*!*t0bbXRRYATf0}XVL%L<&<1^$LD z-)qRf7pc4kSel#QP4ulhq5^#XGrXXx0-kU)-wQZrhAlCWA6f4o8QBv?lmka=|1Y#np?n8wGr%+z6vuKlw!7mAtcTPM>v>;G(eja?Q9pO?nBz5f0=(D4uV zU1=cfOXEZGwV>Uq^UY^(&iU~Gvbo@wR$a>%_#Rkub~)p1ba62K%tfW?XZPt@dR<3mev$?| zU&o$@Z%XpAn%@TAb?qLfy$E&PH5HuI50}7kS#*R< zy+FA<(J!LRT_N{)%MLOx-)fYeA-zC4N6m|=?UBbI*3kB~-ZAL-RR}`jIX8t0u!=zlt9bKGBLyjB?knkGt^V*i0wJXze$uLw z-*H1H<+xu{{SBp@=q&*qHs5E}>HZJR&s6L|(fiE8fb!1*y9vyUF<*80{9n5B?AX#( zk&V)&E(ed|Il^V8oO1TrquaiEsl#_BGneWoQsTf9FEWc2JJNgzna?+R_F|30@Vxo& zeCxmPps@p2lrnbTg|lMv6*f1)H~)!u%^o|JaFO6DpBYo!aC5V_u7!R5Hnp+KTNfgp zfAf4Zs-+-O+3Ynp$B7eh$MFZ1{~7X2W$$8s!IS1!?P-41rggZ}p4%vA?pI|!-$mT* zKMIWJooCTQd~tBGb3$xsUSy+qck|CYbqVZWLy`B*J3PwU@(;T$m7}etp2)^$R1R87 z^6iK24tuj>WhTq^;YlWkE*f7F|0!8oS9`*d>85=M`;#p809rr8;Hw^JzZHG>JnH(% zfxL=%(CCfb#LQc_7~=P9vFjZm_HBn5a%dZPQ2W~B>_9ia3D`v6W#49h*h$Vmc$@D6 z-^|F9*1|2|2VQ-1f<0Z7b@}?|v5zvZJ@6gPb$KK&<|n3l1-Z(jz}{UH>Dt^(TnxGK zEz|RXf68kcHC~-PGmKZ`w#N)^zO6C;##^@lzd`dR^f~-in^#QEQ+dtdfb!tzCd%9V zpFL7%USxgMENCH4Ts(R}6>>Lm5i%7%Dqq^#9mE|xIifBOJ#2U))gFYGy81x?x)c4_ z^9x-+A$n?X?tm(NJcU^Y8woOXrd^J_3cL?L#@bImzmVrq#weQTVZ0v3YKULb{A=B- zZTKVcnvu$mtq#v9Qd^8w@k-4*ymc=U!z!ALuomCedgPh%K$LDFuV=cSvD6VhYADOji0_|$8o=q8BW}o3%bZx66vv;W8H_Rx1OQfrXI+KS)DpwQ3c5O?lUF#{J zyI%9zi>Gymk9ikvPPLa4ztv4XQA_zmr|z66JwSNCK0a=91A0q|w@&dv6P~qmfOgS; z@&Wo{zSfyN9(351%T}U$N1k+aSjmX+S}>QMR@qgXYiXtbJBaH2e*tMo*f=uvoW<@vcT4jkO7iOn;Gi@+BEc=d?K~| zWq#}2+&6%;2)a(#u@>e~w9S@hUBv4-GPGw@Y_Ixf{b=32_-bnLW#F!?0(nHtRoMdb zevtF-*FFSa&X42?_d9626*|23N2%>k^4s@zdFi!}rnYyePsU^dLqCa=x?s3;Yij$` zltGs7aq||p#B7rHDdt0&bYUSN7s+w(*dAI8H4 z)6KLN=oDYlw3go!PfbkT&G4^++xf4v9p5t3Zh zdz(mlZ(~MAC;ox{^(@Y_YCd}QJDwGA<}dL(>i;mc{kzmFs9^m~q#yKh>xZeu;#pDR z(aVgvxpe|-@CVE{u>`_f9p#hIVnq8uXef*J!uqfMBL5BlllMT&z$N-yO!*T<j!@5k%X8UhDxkH7EBkoq(>5ABg!{|WpLrN{jM|3#l#+pex?-e8@u zHh;i7?Pnsdr?!WoGxOGJ8wYE7o?OTObQ^2&zfFAKQ^j=!b%-?#NA`~9tY&;JNH|6RSeg?0Xky%+X|WCQSV?ndRm zO8M&Hk**2fPi_AR_>qnpr;K#efWD!hL|RAH`tU$MeeJ(|n)czL$+fi4URdo{(7ua1 z?Sq~GmlM8ik2jC^9gosy=6do|X2R{%Pp_vR^1iP=XI~#u{iVW(GlviGJ_27<9JAs3 z&wMM!EN4)R*)d|7#>11w<1;wCs6WPRG5mtO?CBV@Ax@0h(wuFIG26tR`_1{>XO7Px zb(iV5YgA^e*?Bhyuxk#84NLpr@VAEJBYY*H9`2v~Z_a$fyPg1-(b>kyFU+1_|9fiL z&rRvv7|b>^59X8C58J16FZbxa*sM1>4^~19>SSP1Tt+Ll#+k&PChn3S*@T<1J-5@P7P%GbY@*iOffCsPc3UVKaY&YHe6yvD)t^PCTihq0d zBGY&;dROy_yt)^$OErIxSC@-^Cm7Q?dj`Ol&0L(70i)u&(w(tbC=O>DPp7VD0F#cZ=8_jCzP>|cA($)1Kk7VB;kowu(I5EmAh2t1RE zHJ-b=^3dLAI}^P{?fP(LW3GpCwiU6^EKg#u|{d5l{SRSCoeROQGUDebL_`BOJLfL{>f~U zZrROP%7Nb>%Gcc`#cmAUNyZ>r3xJ=99nW~)%@%f}kFh~ob`0I*w!h|CjiGl_(}gSL zsTHo4urIYDja`x%F1{Y&_d)MuCx%YAGTdDPo-U)0MZjjy4|^+neu$U(_Tf~!=0#)L z!25oBxucI>t~wpPgzn8d4|)+iIv+wCd5TqYXzi}Py7Q>3cdK~Eeh}YGq_UO160ED4 zAEveoo@!!$1dr_3f2G`m@`Gj2c{Om_@5#TV`hr*U@=eMxO9K7OBWUCHP6GV?ybPfSh@_x>vR z1Ep(d3}eY(dY~a5{xx__Fs=ys!!?(dY3Op-p=hkOMKo0utA?hY*o$oeTq;&nblykf zl=1s~@HNFYk7=6=48m1EeHY$rVP7~h$Gy{PblW+i@1stPsPAY7eVZSihQ3ET^lihE z6%!x016a27&Fh%9hv-vye)!1ACi#Cwo0;*B#QNswvw8uC0xTN+h-HdA--^Pc} zYU{kxt>k0D-q10IyKN&pS9|#72gGV6i$pI@jAH%O*t6){GZk3_y(ZG_-A>#mexl?{ z#E_{C)fwE5+lJl=hB2&LjpuZIx@FBW+F>62#{)LpfQ@GENv4+QRpNQTG{$E2|o(l)! zr14m4yPiAzkUQ|SpJx4dpvw?zA@0PxA(y#x5Bk-+kD%c_)G_d#zSw^!o?@Nu-f-J^ zpK^j<@tFF4D*es*q5N0*E&QBZ@l>BrUA#*%^-gTB?xe}F>HQe=Zs!z-zBW>~&$nJQ zw{$!-LcG!WX18-5C&E6+yfL>UFlxa}>%4(J@)p*DeB{FUPUzy>M^jDmkK;4QFCgEC zeB{BY(9QhvFnhikRx|N81^Ax7!~Ap3F6;38jtDl?X82k)a#z0MDfo(g*hH+7IZ5mM z|BJQvkB_Rl_Wt*o2@u2YuVPyQR9b0eBHEf*TCAW(+cE)bwYFZ3ifwJnnFJ6^dlgY&K%D3O+2@?ekZQm8 zd3~Qh@;Z}q_K&sKT6^ua)?RyU!``*I)Wuekp4te_;b*%S*NATV1$1n~p4{?bx85Tk z=q~)B4z%g1bduFqntU;4n|(RMzMNq{&OFzcpH^u$pY>xKC(>~lxsGLz%xJ;yQfVf{ z@Gte+eM9B`NB7uHEYwuiJI2Ij#pYaZEE&ZY&iqN{HZY%<1M|0YZv_3$=T3tJHi&!; zJ$!569QGBgX^C*dwE8vZ7T_{bn@!f^CyXcu2R@$^ad0|&7RRo{KDYi^?DK_<*mTih zORKu*M|Ax*{UlDI?YHJ6bHj#Bwe4V&#n1uk(PMH_Zm8}m`+bL%Ke-}C7YnNzoZ zI(;A$IL}@uJ!l;JTeX*%%a-$7dsyp{MRCqdU4tCzp>E=IjfpWrvoz!G;TgQM@q{{O zb6h<0OE&(0N)<;(UGV+l6doE?vr5N;`+jh@U4{A#$O3CMe52HvIpV;#3pdsUrEY z?*;9nr7E=7Yk3VE#Gv&yaG*Ff?ZL&Mt9W4ncxVE53FvQe0q$np@vr9_=@K{l_{rig z#)df+m}i>I+XG@RynU*1-)_Tp=`v<&BJP*tocl96V*$V258pM@f0jHa$Y^^8Y=j>- z5IHWMyYDWmZ=dbKt=I$6U1uETpH3VWel76>XRfWz{ZG7i@KuPnKh1Ca0u^1%3+?wO zkR|o(YczmEc*(w>%zNRnhjY`P1OH|4QxEZ7C-A<@ud98|Hvjh-{60xIRZIjpRowjD z;8gNDhP?LT=((SkZ!3BKTgoR&cu9QZz#p1pS=LF-J>etDUa973E#*sTnBh#7M?>~W zd>StHX((9mU)XVk`Mm&q^n#D|>@iADR@?RPXcgZAJipBTu3&ZF89K!q$C~0e7SOJ8 z0jS<`cwTTN*l!gtXbzptw?fl^7l~Kmj8?e)*ml#JzkX2r`FtA#9TjtT;PNtG4<69& zZV0vNj+jHuI-@nf-VbwhQ8_x)ppN&5W#9W*lV8Go8jpS8lBejJ!KFI#`0L`tb{wa( zme|m7Uq}AzC(N4ML(B)(6!NFGzm8qA2YoU(#BjE0REOJarYSB;`2rLtBRyLBbOSM3 zie*$BZybN&E6A<35c{0)I`hfi3v~wev~=eLwrT_zKlBb*;@Sp)yJJgqep<1XGdNo~ z6Pb5Wd;a>1$<;Kg9lTlFQtf0;D4(i$tFHB{=diZ1zYP4)1v#=GzO32>oYG6#<5(pf zamQJlwWppb_s*Otp3-H^=+c{{S7S4-bSn)$zlp6bupGiZjz&&xeXrR8AF_)_Vi#B8 zKd9`u{=du`;X6jVDQicLzb=Qp`p)*ijvUc3d#JM}_6~V`)hB!+{DL|QT5(kgspB`16zGl4{#qIBDlzfWY2O5wv+3csV`fl z(R{o$O&j;n#sjp$dD7v`<>bA7dr|I3(Rab{IAc*9?z-Tc^Y!AlhxsPm$J%h<H3mGg=OPjJho&&`!Q^c1DC_2R}X?_< zpLbtnEd`!WFivt}+TV5h-Ru26o!?2myXY zx;r|;!~d1S>DAx|-eS!v-tAHczv9E~Fx)9o9Ix-kIkse`AB%Vq_`Vo?&jR0{Vvc;8 zxXf{OjwnVxdT{8}G%@ly&JA}FBaa;0e}sLThXPu&U(hw&gJTMC{DSwX(s)hQq?F<{ z4Z3I~&0d~!o#t^0`#8f{F5&GeY=Qu9+J{ViP`n)bPbtOAac`b%twnz*iI?MBDULD+ z0$IJT2-{F#TT9z{g84s=4p83@A} zi0TObC%)mM+aliG{94~ykG^E#a=&EYPwF5;rg7J#L2lc7LH1!|;oB2U^BV@XhR6-2 z^H|m7iW&#M7;>6~@vj?G-Wp0RW&e6)$M2_jx+}he35rQlU6swDhlMGxGBt6@&oLc6 zEheAzbzPO$eRn-p7aqxe6|pa0^V-V6kM=vUD_0FAXU>Mo)}mEmEj!690!;(BA*4`$`H0A24>S%;Fdsm;>p2x$S+m)eW5uEWb?KjQ2B)N#oJDG=>y)Z7wtN znbGcO?jg!`*ev4Li3?{`b|$RP>bkL9A)vL9My9%#$+a4?4y+;tFzWv8hv& zTD2xM;m`R!@#oTw&U?X3cDEyEmZ_fUP+8S!biK0M*~5L_FMH)4Gg)g4{-{Y2+Hp^I zIsxwp3=xwpwA z_dXKK?;S<19rXLX?2GLE3D0WwKPnrOfn3>(oWsA7+|$AsE8)*(#(pxq1k8JDDZ85c z3HOm7Ze2s?F8J=LUQd49{3>uY&z=_BK~6H}gu8*cc0c(q;XRjqD(NW^@&LHNRim-< zzbP}9)m#%fPr6rw_>T4C1>u)Dk$MUI!>f&wb6R&EBnAqbe9vp}3^6@|r;&Bxm#kwJ zm*DDwa`WOZ;l*X}()56i+^>hMS{e9ZU2=lhwHX*Bi$2DFxSb2EYjJWH4oqDf3MSA^jv0wN5 z7N6MqNB>*=*?!+L6I);LzxC2q{F%a}^CY_&xA2#S=IxWf6|y#tFa5YN{@fd*#wXom zG$>=|8&mA9iG`+Sc$KUvkS3fJKn>j}E* z6#BP3n}zns0vB1JxvesSGbs0Qzue(JBX>$@k@Ddbj86hfpi9hS{fo1nNfs-<*oB{} z;iW9T2KyUdv}BtRZ?R4W_|{sfwflDP=3+kt@>=bzrX4$0=bPQRO3x-4&RCWIwug1r z!VGUqCWOhOCit6gX;~#4+cC2Cmcs6GAE}4CZx!1+_MBOBE$s!eIv7uIkCgJxNe@D% zpj)v=g$xsqNG~{lIqQPPgl>V{T4+W$Eq3I4^4FaFI_S_F?yN<2_3SJ2)-Cc*wjl#_ zXCAQ_v$g)WGxuZR@Ct`J&7wC~*}RAK7ohjxFLcUF-i=50^Uj>e+)5FvPhXbD(W&Cl z1J8e_@b*dYCj465MkcjN=AAA49wrB%51VXz_tFN=-I+TK}yM>>qD z2U)B&b{BLV0B(AhpzBCJqAOxw49Ow8u43IpKeM{3)nmc$@0a=d0&8xZby4F##$4!q zjT}5$Qy9~H#?;K1cJ&Tq-fLgax%}u}PX=D;+2ci7W5{z?s`rF|-Qt#ZUzgm`+#{!K zFy4P-yzekx)tUZ;+3fioPVUfnq|1p%FL}AozRW(xd|-WZdwredasFR6SZANR4{Ln{ zH}YZiAk*Oo*2B=g=0{lXd-1WN6E$pxzgYL8CYG#6zGgPEN6NPxf?k<0Rj{%>z!oTu^HOD^M>TWM@jmkceOsg$#jb~z)^fseA z3?1Iy+dD{kXexRK4Quah8q&&n)O<^};xKtST8|uME({8Fw%ihKuf_(hz9rO-HJ6WM z%q7y%4fv~m9G(4E@Cm%g*EudcUx25oZjL^#GV{e7K{@GSylZ6r>tUXma>gWn_GIp5 zlDRJJ*s%gfwPLuqr%du>m&WbRBeyg%B5CGISC%|id23%0_Z4TqP5+}i?vLXimF~8z zDb>9V|CdAl@F;F+PbrimXZGi+7KrCmf9t*JSPW;yj2m4}vvUYf+4tFV35+Y`o^;d?R%$ zPeGngcfUu|7kX$TnqF=Fk!=;||IqO*zR9-u9Qu}x@#eSAMaYI80KUukYg>gb_S?eL zrTB4TzeC^nve}Yb0UaiWI$d;@`e9~T75nf@gs%ysS zM|{)aaH`^U%^k`Qym|3q`4A$l&YJ9{ho^Gy)PCTZEgOMcu`kx&61y%dogKQD-Mskm z_3*xQYvAe*ML44>_-hBX64%ykbys|E@8MrPgdhA}#&7_C`|I%jozUqT{{BL4Xtfo- zdC}vdUyJ-b;64Y8++|U>3%H0gnNxG~qQjyoIOu-81zUGO`nlIWX7{M-UPp)1z22%{ z+OEonD5pH|^UMkRW}&k#rO&6x57ua$=ay%N5d(32KK(EFxu4 zXX}tdx`lm=9BbJl+-Eltc(e!JdldT!*j@Ra1~pjNcO$oVfeX=7V@T6?;eeCh=))Zu zcz9~=0RBY!D#!0%I?uDkb@%S>G`t}nbM>#y8e-Rr^59*ISK)V%;<9a=m6f&Wbhr3P zb$&vftEsaK+#t_>%9^|HLHgPT4wU!05gZuC5ZouA@oPRJ5BHb(`SoX#<6YxV5Py*( zpSi{_yJ=hrEVlo>fv(V6g!x+tC$PV*oZ=;VQD#q2o_!x5-er{6-VQLl*hoC5 z>a>s-SN*C_%@2)R?H#hbHK?P1yKZrfy{(9cf1}+o)IDJNQ2glO?ErF9vR{4KcIi*w zL}%eueT&wL%Stid4Exw7G;C@ddTI`JA#*i{@RN75PEU(Q6zeyjV-K{~JkmS}6Jw)! zHyeLk_9um@J^0vtpT(Ro@0oXV_J5mv8M2A7jjGX$dUP(p+T@|@8gx$apUva~_Zl8$ z-HTA(`f->~RsZSfZHGUNZi-yZUd)x2Kr()E>XYn0ZH$MVjV;rW)5v7OS=c@(={&)mH^g;D&t~qwiOelC z52w&Ua@#LX)*EzI$$Hv86P+oneM`x$)kAGecr!7)ga3@|qn=ZaO+6TV?OJ=slrTckZ}f9*~re`v(uOpUIiX-N^agWhXF~Dm!L?(``-6AC za4yDenwgYtIBP0%iF+r2(cae-qnvWZ7ihEaWXR^@wm4+mdfK+P4{pu9IU^}KrnZT} zsO#dJ`(_z%RCaXv{X|b^E$W?-yy{D#;a4p=rQ)i3b7PiwwhbE>@A;x?LYyUKAMlX? zzEi5XImwM~Aqi4A$|02}M@XNGCJbK2A*;1J5pkvNR3eM0C zj+fsTd`e!JST@a1rie@Ayrqde&g&X05+6G{Ggt)x<-?L+meG+(FlI zsm8@^#Ovl(qt}Q>XNQwNd)MOyhj^7P)^m4uQ&Mp*`dt&O?f&|&eVw*(Y z6jVVM(NTUEtqZ|C@zyc=cw|7bKES_nG{Dcu{DwT~@ScZBlA_Fo@7P4m)@gFa3R=ttak(1&7+)VBKARe6G)UqK&#qK|k* zUmv2MyKnHc`p<_ZD4wD|9-0tgO*PP+{7iX|&Siw-7e-~^7tz(?e|@M^=L5upF1(<) zhOFiQ-N1UZ`%(>h> z3f%OCPjX*e^P4{Y`o^)fSs&M0--7SRDf?Z%fnLhUCi>}N)<6FLZ^{LB)keKTf3D%Z zd=J(h1m^kYm^DZEKa($Pam(=?`gx69Vw{7z(nY`TxA`D#vIcuOh@7S1kTn@SA%QJ% z|1+L`Dp*`}Q`Og6G%gUZs9$d1|CGtkH$V_66W6MR6 zL8FH_>zu2}uSQ$gZXLNN8#`52`yVRzue`T7ghm&VLoUWzfo|KH+Cw|OJgY&cWf2(R zzBzbWZbhi`4*H7^ifuH5SRV&9@FbV>phlkL2R}LcNu#xMI`yYx&y}>($k`U*!T~SU zOiJB>M?5n?#yfQ?1!e$HhfvkOJoa?Q9C%ch*JY@I9&=&%qQI7XL=qr!5 zc)kevShNSw1>R*d26xLxn1j{#v;V~Wt=?o7y37~duWt7bMy#*0dkf%#_=3(XaUub( zpSu73wI#OLoIf4HpUGVq9{{KIecC>KIMsIK(ZXb{ML)!UQLTJ5g6nF@?#hny$HSvO zO*`l(z^QO)R$84FT;AKA_Hj7@TrS2Zf<7{#jk5!q*MB%#5YJtvy?&m&e)@lq61Dn+q?TM#W|H8;8MS`^Q?|S zzp{}e+iPx~e>jIt*Gv8R^dtXEuV>>;DaCbWxsPjSS;&duWvZ^h;>h0$#aV7#^Hui5xCw#X4+q!09rI{X@Q zLU*4=>bD_!&^Tv&TJ0b z%x++Rx+graV-IVA?7F+D7ZuNHubcV)q}DkrZ&O8jH9)Un(5n>RsfGaG_ZH>yRLTt$ zUEvAVP2xX19vX9V^srzW&$#QaKlSF7n(HNNb@tq#t=o$}(s8u4GJkxz)P$hit;KRx zl)J58x!5^DIr6^xGH4j(ZlRo&DU7p#?`<1nMTU^em2=woR|~80|H0d`vtLJEmcp3% zgx@B9YtczM!_i-|7v8V$_{W33Z!4DDPq}}koWX{XE*a>UkAkZde0a1UK6EZZd?-H9 zy7=!0IZMg^gW)&L$y(%;WEJ-XUEd3?OFN4OgiS#$U4#`-GKXPe}%uV1=& z=`xdi$*jI-HGQY(d(9w|ujagk_GeS|rn8|omX9$8&dZ(~iQgKE8Hf@qRM^BeKL(Z9MGpc{{wB`fj_j(Eboqx?{3e4r)9^v(CE%~*u_ezwsQV(&#VnpVW4dMjsHV=P=wA(s@M*t;o;4NP zA(uZbo1DDR4fG$YXAB1lTf)raIOW~pX0m9MqihdrwCtn{UqJ#v&m8oy{wCm1Jxe$4 z;A~=SA?W5nGwJH5LcgDJe+_qT?W-YnMYPkMEtYQ3NOHsGwQU)G#v{8udbLqbeMwhw zh&vok+;$3n10H)%tTWc+Pv_fG{!+l!25m2bwkJoR4gZs0p;OO6n@m#A5IMzf=V|Ff zPH|T`#Z~Scc-PV_R41Bk4Gp}mi}ka}7ucqve;V2^V}9tYm-H5$PdU11Ci$|TeX#o# z_7E6vlyM?g) z4({u#tM%j9b$-0I)~xw6WnJ#t+sQe_6z6p{M=sbuR2(}G<4!MztFkfr#kJLS7}C$dj^278~#&x6qp>iCKNESgFdO9=V}F}-amtHgYI)9LFIYarVd<(EZ3~YH+R-_-3}dZj&cw(0 z^6~SW5yEd(Q_j8?YkmwF$(O0_MAldB0dR*0_k=HOK!)}pV;%B#nJ_-7!N#8V{2VYx zkVWpr$OUkg;~76KYvK3KW%zeK9d{P(87o(9Oc=6MG2`)fE}bHOLW(xZm}fJ1iVjiM zeA8uGg?q`<_4vD*p+(qa<%eTWC$yrOyEjW|)q~tquH7}94?FIRby41U{bx8|B>V)p zY2fVhN%ZkSG3i~*bH${m$n7G3{qxWF$$*^VwoCXuPJFKV*EtCnUe19x!#LUwlJ5zb zFFZCt--r38vw>Z#p?cTG{z*o6z;UjwgKr7{3={J)FBx}-;z!gLGN^&OKE%5z^toov z3EFdZ@{jPp+DbqJ_3<6r31}H7*QWX-UeKOxl&x=RicArFjYkVx?xK8uoCSG{k1g@= zCV1k<3R?t=!x=)s!R(ux80X1k!TJV1>p#$z=Hs#ti^0d&5$0@id@S(loNh@B{xjHr z&=*{X*%KaNW2$>uyMB%zuvcr4?uHqL9suua{swYT?Eqh=@@=dSIr|KJn;9RXzK?o( zN}M|_w7(X>p#D?u4V^NA{y6WoQu=hxKex7b8@>T}LuE3YA+~4N$dMi$nt40Nx8DJS zVeX1AEA`vT=asg;;FOGf)o(@I{0(bG8 z8t42yxW7?^`w8m4M7@X)+h3^{AAt_^595_b92c+rM$Pf-qwDR97V#5|Z@mxaaQd4| zj67${E&W>gzpyMg3s=Uvp!*GV&TU}FLFV5Mav>kMe1JU*cc^(#yUtc0X74wDeR=yK zaa{T4lYL#=z~nfx=*q35$Ee@FQEb8rUUj4Llhd1PvQAbh5ILp)*iF!+s} z0P;J=IU}5v?-0QWCJR$C5yc>l~eUiH%<~ernm6*+ZV{9ThN+y$+YAiWQ zbYAV`j+eX48jT?)y}&6-GqcQP+G9j_tW1YYGQ*#6W4v>pE8kJB8-u?F_zrPyPPh?$UI(roVC{ik znoqldv4=7BKr7)3+HF$)p2pY(t!eP~be6MZ;7x63IY-$4jG=V1pGB-6sA3`I5;vmj zF=ozG=G)#aOyaBrKG4dJSO3eyf$W47Yqi?T6!piicQ??N;CT@`&7&R3_$>Zpi+}Ac zf`4q4xx)7{))?X3;-9hfa#mCH5dL$F1-gA89lGBvto6?WGG94s?v&0xry6ohnyNUtmEXvtE(nX?HcAx4f?%7cM9&|{0j9v{j=4!Cw((Rdv<)tAgh0J zcb0I;!R9p|guffWU*J=Y)1I^3I}abF@A~Zd`{t8hM(w%i#@|IB7)2S|KIg`4-{fCP z(7yUg(?^c)hP{cX&mTAIe=Ec9E{^#o%Big~zG=Uuk*A~c7u=DW!$!32zvZ{@+*xe@ zTIxNkve@uiX95@-@xiE$VLkBr;=V8+zn}N}dINd;|A&5OamU(O^qm-zniD}*2vShJiN7q13uXnOix z6@#ILzNOw6YW>&I^sU8l5M&^KXT@WT!#ve!&p}D2(z>a<3I-e~uR@%D4e;swwAEqx zEt*B8&+>Z&ztu;C^_Ba2-qKyeUB2xyoIdm|!x?;!ckZ&^hVWi;>SgMBb;!f+*D2%M z0p5H5o|8M?V$Nz@2Yb9TtIAz=Y>C5pRl|AJ5NnF^4TanP1=%6n;!txLXRFKV4zbqc zuOEPnAJ~2Y-?oy2CW7zf2KIt7bIfIn2Hw$)?pGlle9>vydlrRE#iDc9SLHdAr!(A) zZIyem$ser^wMIAt92+pq-rv)}nA6DhdK05o`;Yljj4&OQ6ss-sf>JDC$UzIMduoUO>}a{ zcwkZ8(s3ow9o?pow_f1~D>uXs5s$2LDg1`$HE%7apFQ%Aq`Y&@tXnIQ%bQrUHre%x zKJC4f;mq6DZ1wKTl%D=0V$cFyb&(r+IeZ{}a=}N<gviz^QKL&rw!r8<+xYH%0 z=$G{>$8Wptf5OKx@fH)A=fZQtY2Nqf=2$W@%}n{;bmG$~Uz1|aO!V&iO_Q^vp1JhQ zx!idn-v)C@cWLMziLH+gU6^S!b5F#6+uAX7p^2Hf-+*7X{+QfFpMuWNx5jw=XO)uCDQXvspd~e9m*eicHaSTZkN4(w#%(Y?VF3x)O}DFx%u)yHcFb%wbI-qV=HFYo=f@6N>x zYnH~Ly!{pq*1awtj)U;nuc%90zhDqnJdK9|ih@z}se~LE; z!G*=)TEPzw;9Z{E0}nKiQ|WT}yq-Cq(Z00CgwII)9VOmJbP>MZ@%cq<_ve?>&{;}h z{==JvNtxGtnA60_`*^$`m}PfGSreU;gEjGjeH)l->QD16fo}#__D483XXlvKPv(~9 zQxo&4QFDtN?3z<%yqWu(ao(JY6N~m+{2`iCDe{l}BOL$bC6DfNfF;2lC<*R|vvZ%h ztMR+iEq%Pk-yJ&Th~<0EOEQkw>>2qR8AmDKE0=@bN7LNJ0zY5J_wUoT{5;~j2*0_1 zmHX^~?>c+{_^Tq!_bZsgS>|oZ=c}#1Adh5(GCPLaGpPrwJl-Ct`cDj9=rG=hiLO9U`(MCxql)r5<1a*bfTH)M8pr*wU_}`Cz=VbHN$uF z%LlA$L?@aj{{!Pt+vY6kM1Av2I?+?CKbmI+Xug5=HP2k~#QX=pr3Ycp>`Q<{o#Pch zm^zOiGQ>~F2W06lKPB{!;IkIZQ#?2DEf|l>eH5O2!jJ3U(fK^`Gx#oA-%ILj2R|9#w7%EC$4&UqtS=8A+IaeuUF(8_D6mb*6}D)8>&}E6x{&ao z{~ygV_s3_G#2}0sM>|VtCq_G(7up9IOpfFxY~a`ouWh|=IR{>2&*TjJSiOuZ4vr-Y zBH$yA%r)E>D*tc)`*{Wfi~1b-bNV#dqv|J-n}9WW2e~KOfKg+V{gef6*-veZ=O8|6*-rn-w>0f2 z4oiJTUhC^mHk06f%7y~}+0B2OO6;@*3t+e(XeOmjDe0Og>+2@a(MBH4w#2;DxrO<>7 zdThPyIo3^dfVm0m1L?AcHK6)*p4fKPXEJAa#^LcJ&@}!r&Xq83m$7QhE_Q68)+FU? z{USQiZqCzqw$NzK`YM+xzDf4hqvUDPIw*al3!Cx^=6^0c5?t6b4HaR3A9mZxo*rQD z8W)W0_Y1}|p;b(_J8-4&O$sjQ;R)7T-7nlVlDI|Ml1xhje*##lYmw8G4YP+Ezaiws zIUpluu?IMMc&Z}892y-C&*sjw*^>3|UFsxrv^9Y8qw7s2>*T^`&>I`8rP~asOK=y5 z&i+Rzdz7+K#uGYt?;P1QJ)<)>#>QomjrZcAZ}7ezx~Sd`*7B|gdEm_CAh9J2mx^a#Nc`-3MJqS%VUf#^8~IJ6!G^Et(OE?+b8 zAil5JSYPvl{d~<;oJoxhVjX1;8S;z^j*JWb=_kb=|0(%=tM;YQ-+sXV@$-EC1lGOi zpbrDz>%dy5Bo^Y*hNSXIB8!uXWs$skCA%>nIU=6 z$e;Ay82atC=!Q`rUy>tl(7)u3=8(!ZAa^8lc3?N|rLDH1%E=m@EqV&Sl8?XSy~b$p zMS8sA`J6?wuP{bCeqvm#?C|xcf9L&X#^javbP9dHhWGFA-qR^YbDxV=9Mb9vDJUC-M7&yX` zwqX0Y?DZ`pX5?M?Wy?Tfbnp!&;OQ+P zXI;yb%7rd#W;^h+G}afD(?&d)4t;I}8^M|C`U2>WOzpND;LW5+R|9Lunk;3w#_7^H?`nDN?_->#3>fn8}SljbvPq*=t5H| z+k(6p*X^qM%;GeD`^-|4Y`}KWd7cDzf7(CWlLpU*Sk=r~CaLp(F=CqI8Y42%B|mhG zxXldyZO<<}x}%#IWYKD*=kqS+LWq&8)zdrf>2~~F@?Uy`LDg+$Ui7|%XD!hF6Bl~jU6DJbzn8sGXXV%3Swt}avSDDVw(nl!`+c<9` z8aY1wz z)}aRIA(=Y_dPLC=Gm9IhxdY8ac&8%tl~XFBTHD8>1HnUB8daIa&a{wVq1@U*g5{KR z^-lTdO8ba2{sYidI$Q955$lP@WQe=**7cR$Y5LcD!SI((U(ZB8wChBARd*NPckx~^ z0^(DxPZ9VbPHu%5Px0oT>DyaFR@(Ba`zm$*Mx9_T?RrFWX|$b7BbZCElgYQho#<~< zx23Lf;r#EgS3Rt8aTmJPzap<60gWAr?WH3i-D@$*fx?JU#z-Tvbb^n2&~7M@`I3E;U2c!WFIUQxw_`!IZ- zHY{AMF>(LhXLmKi!mN6%>!tM!c_5*+?XR@nY1F%bdXIMl z^ZBOpGr)XYJ@(wZdfZu50_SMzDUKn_n2K@MJFE=e6eU(fWo0XTlyVQzW>7AWnZ^(w z@UmZ?9Q{$he2DVv`@!InpVEWj?&ENE=y9{=BmH17-9ekF?u6gw-zfKW+O%yrD{LF$ zW%1q~zG+XSbj+DogZ@?=hvU~MtNSWT%f=XUfS)${3wZhk%I+!lNq&@)Z_n~=C*S_3 zF%3aH!*tfYv8*dLrUAX_66VT3ifMRN`@O7t#*b;x-EFSsJuwXp@NU|VXUL+PD4row z63-Bqj}|^M$Q1dq4D!X+EymbYb==N4ym$u1*!|;ph73NQ0G=S8LGVb{2Jk7K!S>xvw^>wj!PNomZMC~gjPht)6eO>ai+r2nwQAv*H z6t-DrAhD_31r#~Q%zcMFk%w9Hwtn3#yua#S7DvFRV7Q$1Nb$*vfkih%59!;l8Z*j^ z(fJ|$scps1W~O*CAfm}L@-yPY=&CT2wxUBD?w!8|-5LFLq3-on`;ui5&JLgxG3US8 z-Q~wI)j>0TTMSG)zZja3Iu%`&n86l&A+w=*9KA+k&^Z>t9w)z+)|0gFyUS2sd;891 z$J_dMe5P-2Uv-On`?R6@6UXD%tEV15>3aAnf<9EwSe9_FYYP6;H^ZK`_K31E))x3% zW0yYuaqZu*=15nT4?jJ{+p`#H@O`R1)`=88H~F+9_`MBx>qPK*D^{_K+}nDOf9PDj z)4uW|;x07a=d||$-Gozk%;NM6&wmBZSfhNL{R!GPQBQR~?bFZh8xW`H;rIJR{B~1T z-)d+_F$vYwvv`(G;CTHGVLwItU80l9x^D*UEbq?weP;c3hS5$6yGrzCuI!IVXJkJu z%K3wUM(yDc;9udVN5pIEs67__y#JL;!% zv0Gx$b2YZRXtn}hLx#9Z;ZZm=@SAX08gIg0l8tYb@5`L+(Z>BTpd51A;KHPn-$xCO+VnfMC(vBZ5n78o& zhph2ITNlul=B>^Jq_C0Pv(09;W3ZD_Z*r$Sc2bPkj)r_;au7pv`|IAA^5le6+wov+ zRIW}R#?xr`8^EDGy)MOd0H2*x%!wR#>VzVkU+~XA)B~sPaAE&>?oQ%;yEt1oW!T;K zd`#ohUM+U8_7)r9?Oxg$Sq7g@udbNS9GwTvWB9roo-a&}Ge>1ZX#X*ayc#)<{ANMF z;thOe=w0~}HP%4RVqe_O{}xB`As2Ox?-p@%;8AeIH_cVyD8e0MPw+d9ea+tf<{JEM ziY1r<&U6mGh4bZm;iDPFSb{!(TZFv;i?g%Kr)vMLR6Z-7U=wSAzGsU#U0uZKi@?Dg zs+bC1HJ3E6CJD#Pv((3ZSqDzEu0k`b=NkOCl0#AQUT9u?&|F*nj7QHgz201N*|+p~ zZh3L8{ZxI^*U0hN23?wYE(pGj^YSJ(W9K%rC#pWRm#u!H__k!< zHsNO!PbT;s@y{LVKJy0tuSYIigPheK&}GD~AID$Md;Ikk+FL~YTp$kz#p^VY&Q z(Wev_!u?9m6y_>lu4KuXFJKdPm&g))T`J#SmOc2iPpgl3b1(I1Aj|G8(&}Pp^<(AQ z0LRQ@FV8i$Mm6}$Z6+r7L-;^`%1n2kylNx&X#CMwQu$W4;R~1t?hNvE-gx+n_U2u~ zI0 zzM+Sw&b!N5NG_DQ^PvAf5tqI?1~VhIGBc%g-QQTE>YwVR&n-TkR z(7l#-Huejez2@WIA&xDMpEAhjW6GU%f96}1e$=M+W@cee6=CK7XOY($*LbxD%+B(^ zZ{xSLVP$o9VM`kM-0)Ii@^H#awmCoW)>Osg{LY8tgXa9b+#jrS7h0DR_rnvCZM0>6 zU6}kn^+a#2FLu7K^5**h{-2^a4&btQgl6*3)I+lfG!xuMs4JSPzUV3*!4G5aib(vT zVCQTUTYD+{`D$wzZC=51AJ2K*1HXd3jvmhPr_XDhlgn zjOHvB_Mqpdk7I9reTyeIARUd(PbuFx6B2vl<7K{p5qj@TDWpM2Ti>ixX0m7Uk*LjOE&xw z`+#yb5)9GINWRF87dUda5eAuuz&RfXtBF+ zLc7jc?fJ;CsWD`n7ZY&Wbt%@l#C@!lF~vi}FZ@MJ{f@Zo!4o4>Q^<<#{DqJY3I447 z1&3Nc%JDCan1v-U*17Cf%B+ExG>>PYUp4c7AavRTjmm)IY4)xK|I^TEvCal>2(`Ya z{WNk=RDw`_HG}UmF=~CTAGSV*ExXT5jX=JwNX8 zcZNO79-sERjvJSM2a|mNzu)}-5r^TQ4cqxm$KD&MacB%0i^icb{1 zTg$UkbSr#ow5tt&92gLHs)g{{0N}US9*xaHd&vs-3weepFt@mzlq(@u&OV z#~~YaM`P+NGhE-hke#|ys1)a=b4+!F_XWr$;rxGrbNLyxmz7{%E+tQu?oOS@K24gj zbt#r(?~MGE-?=wmO1U0lG(|JDp}Be65at^G{~T+%c-xTA-^Q*&1MeJ@`G@D2Qp^cE z7oGxt*ias>Z|&~#as56#w3u%?TV`ST%0(6yjahT66c?Ij!iV;cZ98fFx_&!*vy(cj_%5DkL+4DPZ%Q8!u0#`quJOhnh;M|K z#kbg&3$Nw>4E&|}t8&4<_EpQ$RX5O<&W@p*J{&_vcGdX%H0W#B;(OWow6pMUdRD~j zK4v2{?pbX*b^bAG?wGSPez9;vH=U2I^)hvxb^ z@F8Dr1RM+RU(tBzYdXIjCpBd$`DUyf@n~;Ucm63h zL-H-%)z`m^o@)E|>?-6U_MPAV68c|3|24Bxs~X04-QzgM`Z3j}&X36dr{6noG!tfX zCbsKFGrWFMXd(PCSH8qXcSvjFti*W%z=k?dE{`6ja#rTdZ^Ig?b{BucLYj_v!SMFQ9Te7V&9}nX@$t}o%hT6I6DiRT?o!thxQWvXf_#`n^{MCxtDl;i7x=(Q!(~NzJMs_3Zms@$DOsb zJjvPN1<*)58|)d&7qF4_*^cdJKK`9_5tiqH#kJ5sw|O_; z1Y?Z28*gp%^!b&%-@-U8UJeGbweO7R9eh{3o`Y_sJ+_=5I}<^_GU!+6Sakz86()Zh zI(qu?=#J~DBit{1`Pka?faTbdpB3|a9Yns>V#n1EHk*~ZOLgM-c~b13kD!mq@X$N- zap+`|mru2YK9`@iy-M*q%jxeaQ&u;Qyn;={=`^sWjbcqpu>Nf)j)fSOR<%X0t9{GZ z2Z_TYUm&LCK5WLu5oTQjJ~DiglTJn62k}AKQ@r?~XUSa=#;>s*--n*f=p;5~2V39{ z=9}JySu6GYAm2xAS^1Qy=oT-t4hMUO#@-Ws61wpy*781H90DJvpoPu^D~7?K11pEf zp_60zV@sa0F*5%9IbHY*qQ;!tMNEy#1m9)XV_Vz!qzp3jMQC(CHunbBKdpnZyJbJc z?`T}y&fZ69EYUOA#F8f-|9q>v>m+a8_y}}+nfDv8zf`}4`m@;Ae1La?NASHC)MGz1 zs8@K{JDVrH?%0wa6Eeiz%V9&ViBS7N?z-=@g&cbxSg}b5-~+`aDIZZ`$e{N7z{h-Y z=k)2hHP>ZWn`Ga(#mjkTZ@`+&D`cbo{6hCLc4{BFA zsXQ9r(H-^sT|=9Dq2V&VE1!n!ls5i!4_!1?LoNx$X^-qUfpVfrDLvZoNpP>FckYFK$${bK>baA#&GApG{!H zo3}3Rj1c>)alDL;Wg%J+e%#E*4+$6xVH+DXuk=#-mo^55Rp#~%sS#?kK=j^m%@=vV=NiT5o3 zuy_WSL!c?Epz!_d$%eV;Ak}EG+wo1&xTvOCfyxnUtu`k zwo)e!+~VJA_+4-c{--(D8^Doak5={L*i9ZB-|Ke#eF;Mw|3Vw~J9d-z{f;7>hoSL5 z1>ebY;C;vL^2hNO-)HhY{8wadZ(;L{pS^GUB`#)y!=8hMn>ci@9(jNKdOg$=ou*J1 z|8Wsk&XL+WhFm$e4*E*~>nqf$qrB+kUT>^lKR&_p-sM{+}a_4F-fo$&rcGjPQN*L?Bt?k1DpO}*V0^CV}}Zgkh(>=W!h z(@A!Y^>U}V?-jNPH?mbd+}zpS<>O|ZkDE7HlS{{%t?|ZcBm)_1ls#ARk3(N=oF7W? zyM{6JOyurM#^1A(Siq3kav?bDnJ9a5Ooz${R>6HYuw*&AAHNWrhVS6b`iWFOXqVW+ zecRbHQGMkm9L`zlqc_F!>+D_CmBn0(kB&BLh#}~RoP#{Q-s4C2CS!9b_Uw!$Lz_%; z{wbV^7;EzLkr$x|b`|*+=aWY5BbaxrX=9m%6@ow-l&kK*;H|uoP9KJU}Cvv{naSni91EHP9-8^F8x+{Ge#NPL4 zpnUD(MWdK`)`}EskMNt}DL>YM7muyI3tD(|TG^fO=`;a4Nw-p&Cf1F2{oi*X1N2_B z)83PLl^pK+O`9p=@YP4=*M+&7_ljxKx+NOsqQ>hp&caTaMv`GAI}iiS1N@U{=2 zq2I1(7-o+tpkd}?&~QmV8rGz`X9hGpmArP)uz3Tra|tvgUcf2C{(_DUbd;=F04>X) zZsmEj(}G39p5|!V`Nb;EAEX=#v*+#3Q^n3ZCG5z!Oh0hb>RsZpd>{wXc_W z**M?-5l_5yvNtaSo=6pCHs@}9dT;rOS@Tus$~^Jp3;30Mi7=P`PQEO2lI{;Z8RP!O zo11Msi!z2eXJrg+1TtpBbN_E-4CipyXrDijF)7Y}2QsG3AInn4BA(xYeqS8V(*N0b zB2Rnc;qHLH9}jH=q2a+w=Ot5i!@`7S(=rMG0Yy$|BH2DVn3R>oxxbv71xE6{IOiiSdJodZTyikyO?8EZ+I#APRSZq>0Rq4s0TWCJOuYFP(1&?av`NVbpReCq&g zp%C|tDG$=XcFvkr9BB@<9$hr3eGmRV`TTp~>w!Z{ZKBhz%lw0Vpx8&qy+>})5W4h| zD?Zcde5I zr|eu}Se8&%=ZOM6Iq;=i{Shy2;>Xf;$ahd3HrJm)n^qqoW?wLjz!p}00}RHDty7yH z)YdG&t#xYail$@|KdB+_ftSa4OvnDCg|$ZZ7CDF;SWhi)oaFUE3_wNyKJKKQ*DppN z!#~b>P;xkpA=k=?jzdF;BhpyN--aKD^W#?U*F9_96FI9uUWxsV;?cNMSNpiGY){6~ zzx{f0EVTK0xy}E`dE6b+xw(hM8IpNBi+(*FzOej9{G$GkI?L_1$-I}oEuP_Wlr`Vx zw_ueW)(q~k#Wo$BXWFsHHZ^kBcQkV2mL5J<*!LR$A>Ip@0Z*0k#G}RX+#^goD!zle}LS;itH`y$~K?b5UyC%Fnb1+BxR7ZhwDmljx_|SN3i?Je;0M zex@;X;)`#A*B)T^WXh@{&Nk7f?4v06zWjlwCtIpI?%};~pZTvo*;0+)B0L&92|Kjb zn7rY)Vf~BoJ2(@jb=$B`)-bMyaSiy6K6Y-yI42o=--aA&yyRkZank`To6P4gChUy6 z>J9o9&k)bZ@`mW$A5ifUd zr9G>5Y{}Esr_%GS8RT2ndCC!1|KD5Eu7jMT-QszsxVHwqa3AeO@zskLoZ*?bL$tjE z8bZ&y9Q`_FX3K8q+e5p^Q_-mV6IYeM%Q=YBb~EfZ^S|HjGLBPGx5;VE)v`{r@85%d z{3P#+WyqPUKGlD2Smy1=O8U;>N9SI>ju)Rlw)O+Z3w-ek_yv473g4%j{1xO#V_&~x z7WTM&+z}6-#c^jiH&pDK7}9OPBEOy)nd<(^^9}8XPv_3n=Z>v~mMf#TT%?=`9VTm9 zA6x2>pWj>>jhWWAe>U93lA5!5zSI8b*Fx=Ezt(rZaHcBt$*t#`d}isL7jQNszqPUa zaG{E4$VuLJUufF=^U=qD2k(JbdzUzKWh>`8u#u+ee$CpKXLh>O+kCFczpVR78J|0l z{dW3up}}(OkL9EBfqgV|hQ=HNr=nFX%zbS>pWF(*RQ4stQHr-i!bpcd|Q-3#3eciIkQU5xT=**Lsa z#(7A0@T8EN%==^`cl6Y9kE`TH7k#WZSL zoj;XN*ZO>c<+QTclsNua*S}l#Q^dl*LwoN~-^1kyf6jSlLZjsHc72$iVIR;fESs~_ znCokXn$5HLzZtko9h2-)X_Ub zzUG&}vCjCR+o3Ow?AUX)>D)DHVEc2wIktAs)y(x#7qu@U_WaNZ=0#%uyI%>7TCwxG zsW*4hhT79!Y5z7vuP3Q5dObqSws0sLK(L4gfAAUvui8Ony>K8X#I_!(i#t${9I(zyOky%|EQN6B!vuPes0!U@#TMWYRfak+8B1{`)j}L|4z)ozcOo}eeY!cUdMU25;pIBIT!nDF?oqXYH{^s$wJ=9tFRk*Y8Tv=z~zXo&`UK-e0xM@&6 z8^VXhpVpyx2tOA6#6w~J$~I>C-)&BPvhbYAZ(QfylN#mhjQdbyCp<7IeO9cqJ{#HB z({Bxqk13zJ1-;`Wc<|Vg7<%hTRt5?Ol7pHj;9`a3xBAuob9ka@4RDeGKdpX$xryvq z1ZA2`D>_y8eC~hmqRbtB8D~;SnTz|%OX1h)c&9P ztbZ!J(BOZs|4n#dikv<5*|5z&cM|R9TO9VJMiGBDM!Hz{Hf+8I_RE_CxX%Yq_?ENG z6}P2fn((Fjp4n47*WPbQ`>Lxpg8B*SU+&j$_|W>JZGFLMVFWhl$GyqGa+726BUsY3 z6${2yg2Ub=eP!AxGu1DX=A4w;JJLL`wTt(_h~Rgpy-!ds$9S;GACAVH%cl)n zUnTvkt*!+3B{a;@MkE-^nI&ZwdARR!$n8fA*(kqE6#BS~shaV)j7PBOj;~(k)6yQ( z`m>~2gRWMW8gqE+@^3bw2lJjXlBW;gOV>A7=cR9InC32Nm=>+#+!<>?3|bl8yUCo9 z9C263_8`uOxntPBc2_vb)#x!v;`rrPe`>zdT3a7mmB8nux%|`HynZ924^LG&=$_PG zgYJgud1z^;%0Rz4$&uKS_&!sVF&9X0HJd+-_jPYX!2d;E6&)+klcVTaf9vr2{jfHI z`l3`tXR=$zP$)yU0|-+2;sxrB*k0 zR-v1pRM+O~=JR~M5s$T%)K#67w@>;4c((RnP;U-(R9>+%f}sG-e#P(1p2DOQ-R0TH-IhOE!|CXqM5ssdZ6`FOO3rd`H#1H{GAT088~yy%y8RTdn(LqgLOQ&%jDduLD@`?AE-KeM181H9E&$I^NW?fi1MESnf-d)0vslaxr4)EM3TV6}0!Sl)Io` zIpghJfWLc+9w&b>fGI(4s0>%=-asd_1?E|P?mca z{Ib*ivO3>Y+DDcgUBJ9aIgT}c@kIl5e&d%P+OK?!98q5Rd%E9&4#&0S`3LCtu42C* z^V>Np|9HvR4Cmy%cGh>x2X)-HUj*OoE#hYg?fj)*8;TpVZ8-OKC;V|bet$drm32Me z0OMRU-lRM%4W$c;*EKE zw{R?czv7ow>|7}h;^Y|d%6_9*_Sb${a{h?*_xqL2c(MaL++D=k zX20yJer02v{q^v>s#vz&FME5xvaYx1PrKhJmc7?6drQBvx?92<+wH}&tNpSIDJy#= zh}D{m@2qVxvA9_;H+ziOd(WQs>;&E45a`VZ*t@{KTWQ{^Xw_Y*31W344@Op?ckPf~ z{(mTY_xPx*JOBTDW|9!VOGv^+P%{${F?MS~2tvh7hKpEjwJ}w{>aR=)?V_~1joOwV z+k7U$6^*rwpeVS_M5HxQx3&fASa+EKvQ}*uV{7eY%OqTt){3Gs2+r^M`dq?**zW!@ zkNI5A=bZO>-_HBI&-=X30r)I}f6p+VtGL)4_yu$4_&asYHtPc6P)W5R<}+gOTjI-A z4w5&#_f|Bb#HW9#yg{aX7I4{uYaDZC)_;At8pf1VN6^`VE5;l*#J*u0 zm}5groH?~%=$K#*gop>sZ#!~!@l?l7!A8Mv$lSBM`xf>oUqD;&O8J)Dd{DY(-%dig zqH2gMe2jg(4t|zi;>_KBIKm^r&%ta8@(^pjzPS5sgFP{qxC<)(SrRO-XePG&ZJVjoOo6G-lGxu_L+3YBvHr z^Yi&<*$Mn}8g!z5^*Mba|9mv^Z}ZRBJpNHkQy%|h$o*eSjClj_qyskjxQM&>8or-& z+=1~q9}l-4qr)5cW_&ut2SbN%yL3=)KH;X~3eHT-})jF=DM7=+kj{yXqL;{t1|)z-z%<;xpp=_MgXI z8PPdkw>bE^@pydoLCbu6DgHP@t|#HV=dEM#!bgstxSFwMjH6Y~xqf7(Y_jqXv|V9LI~v!oNQTJh|SiVlB&sHBYDg0=e;F=#>8TbfIuzkO{?-O8?v5xN#G) zzkd1f2zT5N%rW@SoM9%X>34|dn;5_RaU+TT%a@(VD2*G#i38NQq5WPXx_52Kt=>sn z4&L*0tKU{n=`r0Znd|g)>t_7Sn`yI^_xZYYJ9P=qzRurAJoigp{S}_P`E~c5eoQ|& zxJTX$<@LUYcN&*t;6n12q+jxz3Qk|o`So<3dVD>cN9f=q$#dc3alwQ<3SWH15`IfrR*J)k&ex=hIIRD+39lx#GAteK{lgt|n^ghhHd|N^=AIC?YPRnRbJ8vwo zPd%p7lKxnbr_vl%~0?>~$aR`NYbo4s!4&T8)`%kk6yHZ+86p?-KLU2%O{*&xYtzL*|^s)%5FD`Xzr_Aut-P z6Ag`I-=S`m7Y@|laHuk&?}Ur|Zw`@{O8c;4v=avp`qpnxbvoZh!il%MauLdD&&|NQ z(7422?_HXAR{pz8Wg_Ffvw0Ujn)e;J|DE?P#JgH-#eq80;}X5R6D)!)!~32Oa#Q}3 zJ{>D_PD1(IWY?)&W@N``AMR6zEOXWj{51lNr59$b#KD2}Or5qUozi~i(OsBJd5>c-#4QCXF2laHjo<&tGk)C#wOv+BHyPeID1m4#2$^O ztC{l*s^mxYbxHpEL+tKI7re0|3=dul{N@?@EdH|F zN9`}LiSfE7JE&TDGSkpP?}yKJuBXuxW3qz={ff2l{f)qV~2S-#e5 z;RDgq^?#3abdz*`KJAX<1;${-V7g~E4DX)sB`-dYeOa<^^6OE(C)S0oUt#P@_W!JK z^6(pY`k&Fy3xO%Wos1h3;g*djdevs9@}yI~k@6YJAFJ!$!IJHPy=dg$sCgb)npu*Fe&78rv$HhOa%6DVG@iGzKRJdB zEO;@Ph$b&@9(xsYpBJ(D&^kMtIHNllvFjS{URigDbMNgSe(ZIni4S&iPIDu%pko7x$-sRZdu%en zKqAAw3Z3DUnQF2P*ho5GceiXtc+j;Y%d5s;W!FXcW^@s{4u5+Z8pkNB@d7wDGyr>i zn5jNdPUYLwzB2IT#JKIbJ(Ak-@+Hn*hEwph?6~-}CdP{TU-H|ry{ahMSIqUXeY7rN|M1?r>o=@)`Ym{gVXW$(3eS?aAZ*Sqo!t+NXPR5$ z)DvOMQ6G#wD$#@dNG|3h7x?K9V1U;Lkc%+3l0hb-$V3Y=(Wm<8KQyQl?y7{R7LyX} z+N+>gyv$6k2@rGDuKjLjfTuCtJNnG3RYhi)@_)##-*MGxO>ul0KI{?cWniD~!7fcqOlh_U!O^s)=?a_(Q| zIvsScze~O1J7b1V5>LG#xR=&6eV#H&|9i@8mRuCwRSJEEvcA&98ASE}p|W4AY5F?* z0{uR+Qti~IJ{s%`)%haj)P`v0Kf8}-KQxMqJYKJ#$S;yL{S?zz$uEZOP|HvA>lpMS z2I+FGL&r)Y&9(e^zNi74C|1rrKmWaN-^dmrpMBYdtQUq4Exj*nZvP2ulvOhxapEGY z^6idw$W$Y7evPcXjLl80R(b8E5j^?zT}^$r=G8|mV21bwZ~OH(@x%p56$8Xb@U0>>UaP5h-ZX!OVBedvN+LGo3PwGxqJ#=J4P;d6LWJAosv0U`=ZLbcfD#7#7x$8M(xt1 zR}Nc)F|fS5r;z+eTaT{Be&5j7xOrMQP5w4~OA}ZxwhGb%_m9DQiuW2$jFiSsefI+2 zy^n59qH7FgiTV2?epV-Ui^hV!wpm?*OSn;tklOnZ-w=!8jL%PSEn6v#-5kDg)YX$C z2-Vq&rb^T7*eclNzCE663vhn1o6AXgnx+$DoPxGGb696pDP~_eo-}^o z563Pn(s{;;H~@P4euowG{qvBZ0o za$SMHdQc>rE;k#PXJ>Ui+?cFkJh*?5p^r1M%}#QjRa?N(`4;=DLyWV^nev$QAu*DI zMKGC9p}&FecH%C-^dWgHDnW74vn$QC`1qNr_gW%9K}Qd(Bu021d+_(MXRJ1M z>ady{Pi;CcB;IoO`~7@~vnJUcW8WEmb98t){*Pd{dCDZVlWQ+oN8U8*Nq!-ia{9ym zEWF^&&a)Bhv-SF=KE;Gn;I-k+*t>Pjk$|a=^X!oa?7DUT7OyL4ZmX;Lb7|8!^11h8 z^Vbxd$Mwu5J9TXe7DdTLhW$7?Yywq`kCQcy$KEY%UPBJpb(12gEvK3($=4#&u3y6$ zoKe%vp2Mcc&}X9`;vAF-rs*>68%57Jv|yiwXpvb>o}p6H{LB!O{aGM*o&iUl@T}mH z&9Vo6Sq8q~^VDAWhD?{))<;fBw2hBUv&@6NcYxbk_MGhI46)seaXZUQstvni*BFy( zv_~fT;dSMRk}VR=oSit7WKJqPz+1KWRz;)O1ungm%O=8^x&N!S?eG5I+9r3^?`ZpT zv?1OK!8?D8zdE7oh(*}O(!tR8ApGL;O8Nd5z~eRW%8oCe+B6uMz`kToQr3-*th)ey zkxZwF_0T$t-YJfHHoPLevv$kT)wdxN!ZVxdvvYtab0s!1YvAjV-Sx$DocYoq@i6;s zG@h&dnq5{?h#15G@@j}jZZUyHnx}`CE`4>qvD%Z^OgUmWdyu;x&n9X88#amT^cZ?J zjlR*p!7p#{%U7`0vyZt%GRnA@W{lcO9v{Z@ID<+s8qUOs5F6pc==aCMuJOP71-|r`sV5yJ z-Wi-J-t)?8YnAAwXBPC=v(NFY5Bh(IU#Sy0i_KZiIV5J0&d1W85Xs3h$%B1QuXtZF zBHr&oF2whR;3}FKmzW0s{e<$8KjQrA!h#c7mK-*)rVp-4H@iOk6=BXXi)$|zb=7q; zX7cXmyc3@NZ&i=ZQvrSY0p+Dvax*Q)BdhBuF?k;}7IaNzJbDJ7(uV0%6lUwZt@6pJGx|ipiHd%A}NAK0mKKFgxRk`itDA zEYse*7y7Hed(ij9=r}pi*%K6DPmsHAdwebkboOe! z&+y*!-Ld{%i#uBJq+1>fvd>TYso|yeQv5v*eZ%-P)hG2e1uQ44mpEsqUhN%mdF$9W zPwOBB~Ati>f|kzW5=1 zyaGK*++KI*(?!^6<<6e_Fk|%ZiaGm)^J4b#?jCp`$(+c1o-r5NXUNav^8>M&&3aZ0 zKP-n2qyt6`HrX?73Z6G&B6iLzX4>tHonwZX<`Jiwlw!!SKlc9udoma|iOuMNH-K&U z7lSG3-U-Cj&-3PW3j^#wU|x4CvGH@6*I_3=6~^YSv1k+C3rja^T!ruA(6)F`wAsmiJmqF|dG`!>mourrq4+f%O!h`IRSEHNV`x-j1iUN1 z!*Y06I&9Hk^NQ-yoUO?W9r@oc)%ToTV1q*wx?tejJ-1$gZ8S#sMpulia>xDA z@O^prXOSQ6^ZMjD=|o5WsH|kwm($v}+Dp;d%o!qG`aa)Jd2BxGe_K}7zs^d8>F1a~ zxqb?pxxf4uzw>C}(4*~m`P96Cb=Xo@HUm}eS+Gjf$5ouaf`dz5nt2C)DNOFLps9 z!+g-^HRza1bM{g{wjepExgwa|tC54xNvo4GbuCe4rV1t9bCkA%<%=0~3Gj?EgDFM|D{+83&Q z!dlbG?~lfTV>xDz>F8+=El(JGy!Ko<;=CH2M}Qn%gKTO&AlDXrtXN5gu*I0YT?sM%Kd(O9K z?7e{NwWoCLZX-Vk_}TlI^zcAi4j*a^+KF7&LSKJhNEvfgjX~uF5ogY~1)FhG zpnN}eS^aIuUkkc6i2T62z2Gg|h)xl`BzNLx@OnDr*ptmh4<=qwiYfPY3hmNgY)Qu5KXg;=j6x52vHpy~#`i7dFMG{iU1 zxbA&$IF@gL@4&c{$l)0Ct^)i#v(THZ<&ow#;E-IPXPq3A^RXrH%VgV_bF-$)nYP#z zp8*DbntKI4W14G@n64WB)pn4+{=IU7L2c-#{iQxmU0oQ&PY^)=SQ z$TaOWwa6WpW#0~de2x^2Pi64F&K2D+J!y z#KhBwa~oAw^%-+UyS^nKj8l*Qt?z&Lzcwj?Di#Z$@YxqH z^Sk&BlM}3YnP`?_e0pu5%A#KlSyPRgRU??cQz!qhL1)jt7vbS+g^q~J8jao+SK<);LmqCmqp(- zzzf1hcru6{wZY$Rcz!H0Iu`ldgzoHQzM4IiIVt`CV!KierK}C$f6H77P8h$iKe`*> z{X%$oD?iDm;deoh+zPC@2$o$x4Uk)HWK|#VG-DrF-Q7+7v-uwVRNBIS?BJlOKJV3%JAB#)xee?UO{L$bFW_qfWjY`EI1D#?&mY0o z^x?Y^o)F*rv=+~=+?U&^e1e_$19V<_1fP#|)N|la{2=-Z9+h3pzxX0XEU5TN`dah{ zk1I5%2u9pF#2jpU!L0nzF=#2dk+1bq;tsU#hi$=`wWe8XXp!DQ2A{w#Y5_-SZ1)!Uq=7ZmI6U(3N%T$*9kb(K%O>_ApHqm(vB}K? zJojPuIp;3-1(cJUT)4=0nDrtXxz;z5ZGFeMQJ*GXKRNK46f3uharKwzJ{!8l(P5cE zgSuj8v0eZTljBOJZUU~%Kji7MO6D5YsHt&i-~ZW2Rx!G1@U8h1`)O9Io(y@)^t}n2 zse{QSXQMwNC7%8OmVEtjgzp4b13pB@7dWi-J~QF9HIWYoP5sg!Gg)}c;P1q)Div-r z_@{(7!gHxzi`(-{vrbUxO`15?36MsaL$X%ue zxf_WMeu)tm@^pW|d%(T*r~8)=!Wd;U8T-QZ)7D%GcTd&2vYu6JPRO=&|E$ zctYdPB}yaP1!OQ72s~eH132ZGDp{UFC$lp;C_<#!;#O|$)S+B)7AB?^^J`GDVmiGY2TXzAA4I?+x!15`gc>c>6Ao7>D|?f!Yy_J6wb{1DGt`$r@sOBOJ8 z-IQD1N*Tea@5pB}DSiw5$-GxE-bsCu&j$EJ@)jCos?DI1sk?U$b;ewcqtsLPz;j1e zYy8wWqH$N_?Jf^jnP8DO<`PGQ{*300xr#CJ$J`Fa+}+5v#;+ZRhfNG&8|`?1*u)o^ z@9!uootQx$cLYi&zNz?+@03l?$G74y<-@IozwT!Yxs303j3=%PzL31!qc%rix6#&) z(da#3Qk(D5M~gX(#TpVcbjBM!)A~Z&Iqtag82g)4w$bC0U1I}@MqBx8Mt0wJ1YZZZ ze`Ys4LQIIcsN!nb1m~%Joo9@G6@0QSrr6lUv}J4kOyd~!_+!`uzr&|WyBf!c|EpK| z>s3b;aZr-=PrEd9^c&-WbV`gf6Qsj!^7QN50N*J0(~j1%iOe4da4H*6yimY913c=B z`E_KPc<%$ov*cg%Yyr+VBM5M$Q-*vtDx+9k^&!NZ7kp2yj6_pYN(Lt;QOnYxnD=&(qro3$uhj?xkU~f#ent;=RInEjt>v7E$S2)kMXVA-n zU48g7DcEgqb*IaKa2@1bRL z4Q)mk+vkO>rdsw41%Ped0;{QyGX`o{Yik{1*J*v)g2#nd=|l&&&_HKY2}gUWs~=jZ z9pOgfL>L<>sP)K)3l2n)bLI4jF>cR6{lhj#v@!`vc^2+mSi)Tj4t_a%?s1|6v^ytfnOT?JI^HvCMU_{hf8!ne>M^x9;7{ z?^{fvle=gcYq99s-fgC!eJg$^*@k0f7cw?Q(Q5@IvzZr?)eX^-b_^JS3iqDCdf|urT{RZWA_7V7Y?C1(p@c1&%FH#AA zXk4g-N5*Nr1ANKXqkrO~HaL2fwF(0sY;qfm=Fo7!kKQ@!p3>iQu1N@3l%J}FzTArM z;t1D#yIp&s%`>yI*@rlXn`bBX5f4hXh1lE({rko<%=5p`{Uj>|?{0YP=SNq!d>`NN zi&6H{m<^BW{>4Bxc0Dl-+$VK^J$}xi$KuXER{yAIv(5ORdesJYwDbMIwO4m7^sso> zavE(va15r)fl2V>w;>+U&nm}1`LJ{%|JU))_mwY19lvHJ?aH57c_#mp`H%2_5&t3n zFXn#%;L1I@8&{?F!rI{#7rFX6wEfA;6wU!~te)OWrM*fU~7 z>>2VM`!Vs-YrlJyyh-`=^WtV%7i3=w^K@Vkd@*o5U33Xh7qIBQTK7dROuC<>d)njd zs^&2MN5TEK+Mf@Mf?**r__2J#e=Zmt@Hfe~B;3faH2flPJ9kd=hDnj^)7qy(Zc}p# zepd2^+Q}-; z)$6VD*l8~A8d#gjfB$3n0e;F_i?2x4a$d1P?`v#q`07=uzB^6I{Q8<~0Nt4xI=D-A zjP!Y!fAzU9cv+Wx`+baKQG6uf4PQ_7wVPCgcbPk{I!`g7@KwFvr-x3`r}>|o)9m0J z8#=nU%%N$NbrtiqV5w-Q^`m@v?*QK5=~}09&Mxf6ccgVM$5;Iu@EZyqs*ZzGtvO?p zrsCu-AfEIo?2Rg&*AYXH#hD{CqRTXYa`1^yX#k(^N?OMcrv?+EX?7SnYH`X-0} zXBRg7S0|m4V6CV(ILM_ped@hzp2b?|@$gv8r3T>PJUSnq8sLco&yCL_S8tKu9K1O3 zJ6bh;b=54$!-w+T%C1B_k@$sP~*wXz^!#0|7;-NpKg%hSa9J~ zpU2|px(0aB055Ya=X}qGXCtWwsjCQ1J)Ry#wvnDf!`2_v<`{qAW9~GPZ z2i`@OqEG0@KJL|@9&8ic%a)x_zt-hC>Y}HZFS6!wb01~2z7l8r_Q%7JA#Wu7ro45kau$F1O6@h6Hg+R7N)hyJBsy>p%>M;_O^ z6h}lqSK`B8#&~dlv9~7atYx@)BtG=YO0Ta(_HHE}Cl4vbxvh)vX-k zZk@y!c`$A9>h$6@fY*x+Lk^zf-G17t@azSj7UFNMPtFHt!q?%At_{tYd0^R)$YI9B zddbD{W3biz6u6QsNmlGU-7gvSf^ic ztG^~pymnQ~Ddxw@A<~HrL$1>7^QP?aN63MGE;5tDey(ILHlDF+y&3e<`r>VCUN{na zbv<*AB>w@+R8{qw=|?sK{O=@QMSH^JPh`AMEPHo^v&{_kVve_m zjP`6Br_FRs=cSB5eoQ;QM`ulS#pC3V1t!T*EpVZy+H0{fg+K9zyB6%~D(KTxa7JWF zEi$=nDS4lWIW$X))>g2$K(YDjP2le0e<@sBVFmV2;J)}@Vy~K|u~&;N^Y|m^z-_=^ zWEDMrkU7y7^oK7Wl8s}sxWb*wgYQD{t-j^Y1;lf|eb1FeTXAy0DS7)1^wQY>BzdpP zh&B6x_#%&g({5ZPvUC4H{eO7?pNjYW^8@rg*8c9i_nM36!)qK_{y1z;d9cMk^yN4{ z(B3Q5Cs@1vwm1*a@_6e--u?N6HU@AK_s#?WCuz!^3@2puC|1_^3 zS|gH7I^(kKt~m$DbM23Zj{YT11U>q;&JTD9f4t&8G;f7>Q)%o>C(e}EIPr(#6#cyn zvhgIV_*LE>2R}vAXD4Q&dnUt|;xB#Q03Gz5Yz%!XyGP%L$tNvaqX(TgZnY^tW`jI1 z@ceA};ja$-?)iSMj&pMWe+!yR2JusOhv9u!#zs8886To#OykG3*lj11wat05Hk0!O zgUH&ej;xhEUg^nNKYpE^$g%dfDi;1l@FH2WIg8VkwK7N6;(4+rIg?(}d3+xsXRXJ{ z*$79@92~-fC(0Rf@Bum7IUr|2PtJmOM}d!V*pag+GA21=J~1F?b4=0W?;>YAKS|DX zW|zl%=Q}(#>SJ`9YWBD=_%lSOMa-gnJ)TOe=#;WfPyc_1d+wzHge#b!B zqECS7bq^-nmoLtc_xq8(-);MG>OVFfewETl&a%O-J=2s*Z{x3E zURAU|h@M;T=*%*7W?{SN_-n?Uc%>-WBR{Z>$b@13W^m&^9 ze}u<=NDQO&=>q5+XP)&#^yxl_&V$gW#ruhot>0#f@BRwImgE$_Y7 zOim78>p=N$e*%1$dGJMi-iaUk=4QSTyx*h#qqqOOYZK%9qj}@IVz>y9>$c=ecgFWZ z;=SD1S7(nFe51IpO^oweL)eC_Zw9Zk&G47jGuF>1=As9_s$r}ruAqKhpuD{$Fns^2 z`G)=FQI-uE(;4ghaXHP{-9^5;&3QUwEOj+9KF{>VXXy;_oZ_&K-u}EZpJ;$z?Lb+3 zkFna*=pV%_m0|k{o_+Lft7BtW*ce;a*zlrkj7RtnvWHj%V!h1V6!uh_<s1D<*mo@#&(V(^sq;cVkvtsSiUzkr@< z3s`rrr@l?x&*ffvZX3V#jA5Ix8x8NI^X79+n?G)3P4755IdhZYAEWc<=`XnK{o?>G zA0Dvf{|Owu>-D|nDs!Nf98gZ*o%t){L#TC)VVSB-dttM{dzWISM{@hM|Bw2R)z1@ z_F7)~9l)!0v@WAE%2(jh@ZX#=?8{AQj`ACoyC9O1pIl?0=7Y1L>mGEKPg~8gq_f7I zLYyq`Vy3Vv0!^1K4XlkjG%f1h_7m2^SlcK^7DZ3rPm5l3$1G?m{g8o{>(LK9ch*m8 zjk&vVskOF6asSY=QFP?jXbK-<+=e{u7j3>GoPL@hn~l;0m$zE-8(ra zkGyE=!{g%M?%p0xeh#g4*8pB6E;YYS+nrZ~(_{0wzfjioH~)Mfrq@4H;yv)=&gp{P z*RiH?4!XMjOHUyA?b5n?>dm`{mO|djsSPbNQ;x-CKoR&4*VMlOkPN$+%_R*y`#F zZ;gW0wruBzxz!o|iEG%v___U`-<+9Zz2?e-Kh92#-M(c;Bj0`Ho!V^S>+G+L3{Na- zotgSZe{HrLec!aFR%gqk{^=*R*??_d{I$|qsjnZd%@SkPTy~MkE-NsT$N`o;mpUqD z1)96~FWX8?PI_3P>=Y}zocm!hi*E-dN)}kyop#;n3$1MMIeSL=DZx}(eIWbqlTFtX zpR%-nU{d+(g{gu+7N%}4ie@V^tWgx*@Z_M7)%=h6{|8@;E-4uGh2nZE6)q_LLQcMp z>L|W}JJ;M)SDWqN-i(TWA!?Sb`A612*gJJ#;hVMOplBO?(?_-BN#~r+Tc~H2$qu=~ zWX%gETfChK&l`UNEO{ykTTZ=vV|`cqzb-KmBL~Ne^2|j8=&v}2Wqp{zc42qDVv?RjirGxVd7$~ zUl%H-t#>(gZ=~qZRK4fE&X~eP1#FXjl@4zX6yP#wvR z!xq_kirH`uIzYSz5A+rwb5ZQ44*0$ez7C=zsK33D7?YjrG&Z_9Zl8|`HmkF)Q%xE!3DU&m)yyW%qfe~!

)Vgr~R|?3DlB@ zrvmxg%DWSBr@d~X#iRVYHS^XCT@C9|4(h$o0YLhc{x8o;Oc8eSJ1 zibF{Jb5jYxw!vF_1!iGldgpYmewXJUzpVmSfeZ+{`d>==j7}oA=v=5C39p&iwuoIDyA)#ih=DY^XEF#Rf6#s%ojIZ;>7jTj|0{_fOXSk7uLsswfLOp z*9@{u=?kZtshM@0HOe`KW}KNKm?FdmpNR~s4>QoI8S1w=UrFUUS#zqOtyQJ>kG8>2 zfV$@y>*i&nuUHbpwlLtz*~bVBk4-T3Io3BmOFdglZ&>nO;)}R<@`eJh^IY?gUlJ3= z{WQgD3Kxdlsy<8+&U<)%Nk!>F=Hi0s=Sw3iS@Sud@3!*mAvf%TT`fv#TV>}-gB<`jWotLDK)N}Kr z^r;V8s}J*+T32r!?Y0>QzT5?YX*k9Z`0x@WvW?64& zTzXCV;GpVrf<;3WtAGx#+q1}|)`OGX;B05dY3B*|yU4HAM-HveWpk@{gTEul;~viX z-r4bm^LDksC+wZcL4##OYNvOyo}x7`#R!WYyDwC{ZaKL-T)K!B3FsjFh!%$Rr+#=% zd>4H;H@V~Yp~bq6F~3sGZRUIM|31sf*}**RDc{!+!*B2`y5Rd8iP^i6I7P~b@b84m zil;urGmTx)zf}E#2kxu=@;#;9f6c943Oy7T&<_4-r?i|l828@}TdRBH+BeEr_reOZ z>J7CGZT28r%oSFO-tgK>%D1?OK8f!AoHI7xqjf*$j3wC*-$!3+-_A|Wy%@U4&VxTm z&X1GvLw=uZ&XsjxxvRI+gJnIi$S){<+*Nwr;mjX%^{*itTcFXFK=5+mswNm*^h~)6l6mpFWL~l_-V0DB9VoiIhVzD>04CL? zcEwvCls>pdebGH*O82|;SGrT{1Mr*X)AgOqrTl&_kSz1d5I>vUJguENowG~s@yf_| zlwsaG_$2((dHp@5qv4-#P{yTEytl`r(Z$dRd((T~F+jU&p6mRU4s>$tx4C-JX0h-D zAN%n<8P1Jy>$}t8Kl)cH9z2(CzfM`<{X=ka1~lDFU3<|L$^(-NTCZ$lEZfV^&s}vF z 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

!bNK2~v+*WTG*d1aqMQEk1K%T@hp;zj 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

+4)(d?)Z`;k)zT-Cv;x9)IB~%UkQ zJi^)xe|>6L`@VJb1CRansrP9g0b8dmqi<{*>?8NC&41=%H;Lbrrn>KduUIFP!<0DF zqiHhg@%UX8A~i@%gyL(3~^HVJkL!q4R^z{Q&{IN=BIToFf8@-R4IHS z8PQtQc2<1VtMv2m5OeyP>1ILlO={{#CURGK*$VUK)f@pEeQQ*4VDPTGCmwFuM@3$= zjtRF~M}_N~z^U@dtV}*bez`A`i82q~N@&{2SdCj}+1y0;KI`7o&u-p}ZzQu0$4%hg z@lZ2!YP`zx9VDxNMgP8W+KBd7I5#f4O>!=O;jicj`3nxuqKmWP)TZ$RLv0(`aITGe zuYP}yE%-WfoX^-j&@;%NLEU6^7(7}Je`-wiofzctY3zB+rz@?E${mr8PhUds-h@4s zzz+~FgfASH()uPjZ@q#w4jvpADPtXg2CQ!h<{Vtxv>teJT4vXRv%z_@iN9sc^4TGL zs-^#^dogB`6V%^x@am#J4VkKMs@c1T^uILbjO*ijD=vKl7%Z*e{ixFyteZ}MzVXDc z_8Xwb8&ABiUG1bZg{wxbcRqiMccnMIXJ=$Kfwv^KjN~--Okn=hB69O@W&RU1Hf=&% zf^F`xZNy6}Xmh&Xrn@uP#_LCImePj$5o2W&3rFMm8~$7wO0KkPP*sF{^*-6(X6-#> zfBiY0?30)2x4-}7?cjk4X7B&*?!3)y$}VH=Vz0B2|4((Wn1@de3$TkON#Job(YXaTXW?YP zId`0!TF5v13ixStx^Y1K%%|;h^!vap+4_&!_@9kuH-%Cg$O~%4m-KAk5O*p5w z(f>|2r| zKcBtom~tEy>p>@i7h-meW5SopKFD$o${aa^=NGmlfipUOaRHw#v9_$yyseRa4s97TXjr z{l?k()!+1GG8Rg8b@Cp5vUc(ZSs#@{?eH$Uyob0Ue2Xm#KF}o*_7%^FP|uEb&OcMm z&JUqwh5WN+gI;))IlbO5{wyB(5zqT#(8QkMA^D@?Bk_*%M?C**a64yes}+mxfscB= zZ{!npO-A>Vx4qzFoPUD`g*DpHE^#V44_as)&7Wyn7d~sQd*~jMqCi=y8~*U>cPQVX ztXj0~t~EL8imy(NiXZN|2HC8Y?lXJR)DyP-$xf%gtLf_}+()$$*cGGNzr~9+wLw?M zYx-MjZvQ=^iGf&wJ^$~=3X%f*&zdi7@$7ki4sxQH3 zE0UWWk97~f?p*Ov%!G%ddu*Jzb7+94zTc0hkg1dM)H08!j>1#Q897GI2ywt|3HDrX z>W!pAW~t>deEDsHw?2NJjlJXVSIggzq1(gomgqB?x-Y_Elp4hPK4iYwRrroILT$Cy z9ejs!{mbAj=vJESnhUPK=<{aCe5Fh63hPDI<6*l-vgWtsSc-M%5OKsR<&T>Uzob7KgW+A@ewBCDNjYx$DwF#gb13z7 zwEFlTz7Z^svQBi`e?g|Y%aT|0j7?tAdq(n#ofXL|c2y;>cx$w;`jq4>q}{ zKR)%+6W7(BSy)2m@Twiqb2ssp3FMCM2v69v4*lLizUmR^v}cBQmihO}4Wqx>A^3Xa zg+vWwgiTFF#Oz&8-P;am>|kKsD8P{5n>=tr*MbHYSKD%s^EsU@B zn#5iWT`xfM9q%=JhaN)a?L5t%$FS9R+)nLc?z_uIl3lOx z^K;s{@g8No7w!M!Gmr4MY`G|U#l+v6Dgl1wJ|?WL>N}euUh{0aFzbb9*WH1yUy_Ws zbB1cG=D!;{wVDurm+z?uf30ThR>h!^7v{-a>3b*rB*>*)${7yB`Md=4ZiCipr+gvB z&4YB*S%(+lVev@Fyt(Qq^0pW}EjQ!0M*VT01J*n>3A2^UA6#zCcfg%8WBzl2r@@Tb(*}P?_LRf?A==&fNz*PG%0@eS9`Z(R zNPk(a>B!baAnJb zTIa6K7x;S~<0#kB+s7G~S}c5KAGTpH@NHtHjVdZ=I`;fcjsR<@5I}Gx6dP)vwd2q9e7%AOl|6& z%%fwN*$`Zlq!XnN50gLtqf)cM>cZ2gM@63fd-#19H7Ty=_Y=gv7tv-vF+kx{a_|uU zU&b1B8}D!9{geEE5PWs;oA~c)$i8YpI$k!hGfc=j6BG0MyvSB}cbo2cB;reDmW-QMyru`AV*FMQ@_W2o^ z(|LXg?T^y_cRat?J|CYM&hv%9nWMe*Qki`|E;Gn~ewgRV^_1MnhTq5d;sZ`$ncHX=b&o*){N_nthcyS?kyB|F5fFF9O z(a^&G*fa~GBX2k&SxJG@9j}=7?f)RZ#n%On2USZOMc8lv__X(NJ$c?*znkbo6T)bbyVO+HtuX1Ux;#PYdVzV&vPmj4|w!jNa3N4D^RtaO$kc@99r>km*hy z^)39!j_=^_{PeK=iEXcwujKMs@K3kNKizkIpD((few2?df7JS=;8#9{^3h)>$I1Gm zS9$*EkRheh@Q=4?pTs~9>)RV@eq%qZ`5bE*bNBYKsP6>*RhL(~fwP%i^7XUGgzRqC z;BD4-yQ3G@y%y7p`VCO!KCG>)=9 zG^4+;jaj#(XTSb}ey%_slvB40y6l8LoIPwOS83}*yc5sp$Bc`&llMj6kxV7; zJB`_@Hp&mt`?cW6%TIgS#%b!ochHA_1Ael2JRu*g)7nn3$iS+>U0 z;5SBGS>HYxF&o$P49X?L7o^Hc;<*=T@79LH;9TDw;E?TO%IN@lb^kZvHAPNwc$nj*{5-Unf-P<#zLOG$~X&=N$J+#`}8*0 zS2yu@#oea8qSWM)1FTVwUef)F!DBC6C;L0b-_rlJ#9ST&C!NBzxy0tvO?x?U_zrko zIFxU(A3lgTcz(*Ad?!C;BX}B3n;F_?g2yfe4s;QI%4qAS90Zr6k(;2OB02pW_-5T( zaS*@6<6*@Z@KxAHcfLg@I!nIA8v4{4Aw2ijyYhkDb62b3UuhfE-PFRi{*GcF&jXhm zzY+Xv{AR}27#~C51^KHSUTD=ihX0{Fy20AFKpq!j*S|vjq$D+XS_jKtE6yJxJNnA13y1RO8d9kXZM z4Cfj{@la|h^sG;hPDMDsd!SdjOQSQ3IM0_1b8a!rxy5k!@mLA;A8D|OO>WsRvx)OK zH9xfSK-^34(5GNe*5iNicLi&b&J48BPOu0LZyp{j$Co_OF8yugT5%xwOz`WBg?On7 z9ni}@6)>rGT$k`GKI!)2AJt)E0T1#F`PiF4K1Ab-!L4{ROI@ zygA$DHtVb2-pucU7nh(ni+S#=Sy!5bdSrnUPO%C$z@g={qwC!!yoXS@0To#;D$r%ebSFN~E zbK$w6u2FCQG>5F&8~5j+xSrr|x4%tp z6YmT4sfL@J_%VTgw7iH7<#L1#`)E_)lMr?f`e>7MQUd+y_{=+pyV=+8o{uNKAjam^ zn1EL#CyEWGwVy$*PMopKn^)!%*smdMDQd58n2UYh&3V2i^kVM?CO4hu(lc?>aYc;y zR0;nty~w1N*_=Ie3o(WyYkZcRUG=M)0g^$>zvvgIKeT>^%s0DQ*pIgHC)S)M_LQ|= zme9W5j7(h><6c4^FXWxPIhA*zmZoa>&dnu_?$BJ& z#T$g@=jl&y>HhV^1+BB)S{_P1baGg-r=%v)r`rG8|DJOVQw4|eW(9}lQGh)^I4;pZHC3L~6ME=3DpA-eBkLeJ|h7_Qmt>@wb(E>?-ogIY&{) zSp?z)Vec%0)*#{@+q`_)aJ9{oouxK?=M{qXf_xq64%rOS!`kPrk9+Zd=}C7^vp-K- z9SKh)r6YrU$vU|*-nUM|OS#~C!RLG<>8lr^tFz&63wvwgeIe5-pJ^?6uf_U@bJ_2a%5sWHC*?l6YzeveyEC-9o$9 z$a|{9wx2Yju6>RfWbMY+EIvyVzuUOO46!y!Cv9qZ{~Wqc`@X-ThMmTVgU6qOw=^&= z3S-Y#nwmIp%0ChvocsjWRMD#OSbn4YPsx+cjC1xK8cxW_hLarK9>t$wuAPU`XWCZ-p}_MPva(!oi=TYKc^7%)VTe>vpRzB z-phAM+Dae3Ra>kNI|BMpwG`7!J-Vjhs~}x(7;LtsrDL(N99_Gi>sqd2i{Bt7KXIiPZXtKUQLp1tt?>!)qP7WY7VHClY>XP&eRc2w>-p^C ztbdA$MOlN`Z&@GX+>T^@xMTzTSr~oY7c%fN{H}JopD>mUr9!mJ(oXs#i$9R$@13&k z`5Rvso8D{xA!r_phf@c@k77|-)`tzWY328krckO3xFtt_RLX6Zl7`c0B^QF&ZXcWA-RRN$gquL5~tm}k2)zG z&?&+GXBrxM=f7sl4v(3n$$B)>& zF>k$FUmqTr%%-h;0QpmcnY;6+qS!i`mw34c z{14&XuV^QnD~54|zr_a&pznxD1M{nIzi(TF{cid5s~&$Q!A}}L$MJXXS7#NSndxMY zTX;~v!h@T;VEp5I6aD4M<``Xg_|TaYEi zT1wiFRN3=$)rt)g7hJz&U0CM@(YfLFd%&5#&!KN*>u2$g8yCh8CnCVcexu@ebqmem z^ML~ytJWP``d-GC95LU$f2FR6p3UVu$4}Bpia%DMN3HF^{2sRS9asGyv=eN9vOf5P z%**^QJ44ssX4j_-d(znApEBaFuJcYYt@-BC_M7I!+Yip+PBrR6l0&_BCwD!CDitT7{tA0W z%2}2k)BZpuJb9=I8H4Avk5oH<+NIr1oWDT6Sr4{0LX$c0;^YeUIeN8EJ~lIy``FY* z?dNWuQFGTXOSnHNw6&f+Hnp8~me;@9{zLT?!O^jZasiav%sKrLrnQ1QjJs{@VnRmo zRpo_uoTj}#@~6P z>^hs(dAISYI)Cr{oU`)8`;~W2jRSBfzrJ(Zicv3>n^t#s?`iPR{^@bqknlig>*&kl ztI94nqttdL_>LlX?wtHm=KD=}sVrg^t1d+rI#jSn6NeXTX}gaY=k@5R#!76XV>_Nh zet#$&N3{=0Y@zzhP^ox-#0zeNXN7m=u7$C4h4-vz5E;@ge=jcIj{F?8i7|)9DpR9aWg~NI zMlVWV$Dn1Dc6w(2$9~fP+K(KN4#_W^NQZQJfet@AQ#GAD{D)pxF=`R`Pt%w5^KHPc zbya_Jj=H^>HTly#i&q1DD#j`B7HJcMt7v@!wCQz0Q_bpda&FN?ssGaJ{|n&OcA9eFgHAs(;M$oBW(O&rej1 zFmDe+`woZDnaZ7;NiNKz$ieHYy)(5RIg7Z%mw*lXOLk>JURD>&OXnrtJ_7I|F9Y2t z<(&gb-h-a1RIGAr=6P&v{hvpd>g)va*PbO$y%t$DRmc?UbrxOKJ>BHSkaLm+=M#Z# zAv#)mD|@d|&coh$=<2qMXwS1|boJ!3rAxKfQE>d8M|FTtQ1F$rp6 z3a*0wPkyObE~A`@LI1b-`v1|1=pEqQNxxbHoc{kb^N_yzplH-j_gu#_r+W^fn~QbN zDOUH~j_&E~r+d+$# z(mqG0a`burVPva&#Vl&Ha*h=IEMg7rh6l6v#&c6;L%?rtU!)Cqdl)BtirG*HAB%^H zZ!{!_#cOotd)b5;H7%n|YAZTVbL|*yHYC5oe#uveZ`<*iBWs29yKpO6``RkrDWAUy zzlk>Nt*4qV!yX17FZJd(wDg;MhkuXBXZ*Rhkt;2m=Lq^@6gq;lb=wGJZ@QRuI+VPp z>viU|uriVw6cNqKG9AR>wD+bQxkhNG^}IfQMrs=L6RaKR0Kukvwbi!Z2cQe&C$N{c z2OGMpk-PP@rx*);2|u8|U40$k%)IPtcW&P1hHfcI?L3p(Md*O!4v*KBho`=kch2}L z1y_AMno=Jnd|wVMRu4aXf7j{okKlQNIuB)>(U1PY`u*!;Eh)}(;ydw;?2)ak3*fx^ z1?6mmOX6QvuH1Jzi`9XCjD>Vhc3E|c|K0!i-)W6ZfGe%#JdVkw z`flG>P3{-WL-76|;@&+z&Z^q~-_J~%q!(yu(k8t?W|DGg@!pm;AZC(q6@){{5frtP z1f_x=541p`J!X<37lYcN#Y&4dX+b-KC_<|QR3O6e`rrp)*K z+0XN&)0FD#_j~<*-|rvunwjU>m$lbkd#$zCUTbaTlR2)Bj_@F^eoY_mP_`S`->~wG zJUpH}(=+j(L3sx4&Z1uz4|y?Z;BS$KhtKg|`1aO4{gZcP=on*F@lJ1y3HoP$U#&6T z!dzWIef9ZC$w2y>G_*a_dVG86FFwv5%)^=Vmnb+Rw!W;Dv8=Y^!?)8LpPq^K{qfDw z+-u(Qc%bxvAG2-^u`ZI$OTjTTzEtvD_~!Q$lHV@?umAiWp6?eAoo{G=T=G2L>HB~2 zTy99+iAM@)4Un@~ zYsJkGqFfX1oV9Y^|6_O*@K4iTJO|AxHrCaP-XlJClj~<8eNcHrwhK4Fr`!pG1D%L{ zAUOe`(H;19#GvcFOH86J1#Yhc&n3(UFs4U~9`O}F+jNCllVNju{6Fbi`~T>R@~a?5 zg!05*O)Hk{Vn3xj3gu@}JWjG%cLUfv#I1}M{2Hh3e0F()n-^W<6K&q+jZr>H{`@@e z%_-;ed!Ug9J+BZ=fSYeHcW-&`1!otqiQb-L&Iji+81&||fPFrBW#M)8b9H^k3&I6>f^N09 z6)yG`nS}5lnw9J;o*;QxHck0;r0)n9QMJc8g7SfW-OlL+-ke^DpW{XB4=-kacnLAj zmlE?3jHiO!qXTT3)1D=l<9FiDtKjIRAI&SWIBVsR=A(@Hcsz2 z<1lXymFLXPv6uT^?=;6p7^lXrGX%cT+a@P3^XBa;=1tEu*R|+N>hFMP!Kahqd*DhjptYhRO^H`VuSX{732gpot z*T5gf5T{8S5pvrIHhfGhY?>3r(<=^KG4-l&&e9&w)ufcznBz{0BA1-K=Ll zJDWK!Wj#NHypSE@cg*$R`puhf&EFyB@mPLLegn&o3t7M1`(WprJJ^BS<;TIKXhgjD zFmu0-+zr#o=hVSmxaZUILt}5n+SLBe&IS8%%|)0x8Da^AzkfEb*jA6hRU^0}=cvV1 zkTqAw|D(8CWpO1PPC1-p7t75N8ACZ7sTM!5S)JTyhl zBcya@2o5D(}848)J82#3J z}z7`_azgJTztZ*0|? zYjw|A)&CQ={}eecslS7|DlcCZ)sI2n5quFW|K)!N`Lb*~=ANy8A8fPjz2JGm!V@*| zmuXY*Yo1*g$j{>SFIc>IIv0L?Bc7+c`qa7Rkwrflw5LyhntK?n-JkWSvl95o(fsjF z@b#-$xv@ZCyysLmzuYwAm5lXgPDIr^JhC&lo+Mn@(_u01mg-vP?W9}3yh zcQ*dBt|^h( zaC5D@^I`QzV0~tm3!kC=2y6OA>gwG*zC&f`_4rDM&{xhIjgAW3&jlv+WsnaQtZl_U z+)dv)o6uQT1h^ZksKdBEN_@smjA=DK!vBrmmhhtT-=jbD(WLr|iH9(DJAaH_zBC^n z(y!`#Ij;|gb28!PnZvoaBbz3~eY~`ipMNM`eoQ^$CTGf4h~>+kwWaXSVm)TNk2ymb znMf1Q)d7z)*y%fXKdhYG=$xm+tClME*7dh$Ei56H7oH`4)kZn;bi5sgR-`-CK__#u zDYeQL#Qa>$SYjj1%!k0kP&yHgs(3D2yFGVg?sDw8lovt1t262Q5$+}wE#D`c@m_i8 z#>s!R8NW`-ZKHj~hlTVI(MbBXZx<`q1m0!1JsQH=cmDyV`*q&pZU9MD+)0N ze0IxHtlfFkxt!k`yZHMW&h#~Qf4mXOrh{f?44)bQegMxluoTy$t&*n!K9&!e0&D*W zd$xf!WvnmY7mo<_@NsT#_rD$d!lqFP@=y_wifhXH!1n{hrD1 zwfvTU@6%pc!LMhBz?qeGtoI1?_apG5y~%f|lL2RX7xrQYf55w==aH_T_y_vQM~5t} zOV5bc7LZeg^WXw(fK`hl%M|a`GA7m+Krd{5Yw4WzUpAJ zw9mPRz>s^&_ZL%n`1(?=s<)>>DTr3FSX|JlM>$Hq4<81mmK z26oeb4)x}!UcRqd$>d1(EzuUZ5N`epI%U1zET6PAJ`%n^Wq$twQ(N5%>|yf6ItISY zAl!DJONeLcEO#Vr`eRjpetCP&I}-X8U!a}F0Q`{p>f85&y8!s3tf@oZeEH8m=8Y>K ze%lUxPCv)`zsyisjnjvF190@vS0lVT#PcTcZ(~L_!b|;j^Kq$h=C@zMI^U)P8{JxI$yMTAZ8m#{||7AZ<@jZY}OWv{-v64tuF;If@Z{SJ$ zy*|DVAj^q8&wkr`x6{5u-_kqU-$#Az?IlYTqoBAbwee?Lt|a*x# zS7w_nGcLJ>?^5EQ_EYBfl!*Y#)y$FF`EOfhV)7-vm(h-5r(}1CQf7fyrrVa8lzdL@ za5u_f+EJWdh%(c?GEdtw6OupWdp_+drs^rm7|N7*WqxeSlqVne$|$~S9c9Fyq`Rbn zT`^XI>k(VFEV;%jt9UE%A^*I1&_~x>m&eh!=R54vx50)y{{z_M8KZnJ_R(I8=7l~L zPoX~Vv3-^%zs5H?NUU$ZPs3UZv!E}<)w%Tfi(}Ul{mJiM{w3j;*)*ij z8@)c~<@G5ULN?71JGoO0qER}jy- zYy|v=vwzL~;Q9aA@*Q{M=yaB@m}H%0?guxj{}%1YH||vaYaZMjxr%ujpIkn3V1;~4 z_x|I*p0x6X|MIUZAx>U#W%*_AYB<{L*i)R2-gSqk(=-n(F#;&Nt=3ADWA26F02iWw$gDab$(O-&ZvrbwAwTbzGahpqm z{XgqxeA+XU?Im1&d{S~Ew3bp#Cv>B= zuNd6vlOs=YhTond#?#d`OWEhvGv98U)=}RccWtYW0`?WEznFOxzdH-s(%O^Etl-`) zL%wF|oL>O836~QWY-z$+JX8cr`X(-0w(?KNqTf>IG4c?oE#YZA?MPm#ot*Ya;yK`R zA9JnejUFATjR0-5fgjbIOg|mq(11fT(6UXjaT_Ub!0iCvhp8`|{DR-^{2#r)*X0H7 z`H$wloVAdxk}nVP41Hh*{P;}j2H3+Xey(XecZ(u-R+B4W=Z98LtozW{R@UM7D;f6! zI=`W;-YG7Z^c#jC2dhXLwLw_RQ52 z#WxLlvhpa#(8n}JazZ9GhX?r<-0}?-u3UT_&EX(?xjL6*PwoNVcXC3Mc){QVNdB}*{*Y6lgj_`0cPP)og~Y=)jgBPNj53KFF|r1ptQJrFG0ES$LfDbVhK<2x)}Oh~rz`%hPx#P9R@ zsqe3rC$IMREk^E)OCFl;?(em4ETIqK&6h8?vPV&F6rZ17M%zR2Bix*`@2lG^4+%K< zaXN_^*aXT(m9+~`%inEi$2ODPj!qyO$tO7L)O~y6FU#MpT_zt?;i(*2Ta8=_fx{m7 zOXr>E^fw}x@NvW^oNvaHmi_n6+5JuYZsGY|g}TGjRLkCX*T4nsQRX`hZ7mYjPwr}<%4UKh?YRMqAVc!8u#k|Vd9n_cqm|%}mC(ZLHu&05y z3%Iop-^zRW>{@=tdZ;Z>exHE#N6esu2?qvP>Wi>JQ9ncddi2p=+DKWS3+@eKFEke$ zzQ!)ySYsZloA`Q(c<>#}u@9@&r)gWTMQB&B)nNzM{ZM_tCb+bg1fyU}1Eb&z>s}=C zzof9$)KTBZM;Mx|t#|REvi6;ak4TU`1Z{qb{{44Z{)>j9%w>K|s^pv}lb+PxAjbNJ z_EtQ22C=H52jmkr$My2zgx`#vi@Z0?%`;mXe0`rGK4{SU7QnVMIH6X~RSb~e0fmj}NuPc8o>MnZJ2F}N~4 zka(FsL!->hWoz*3r=EBMiR$CfL)UHWCynyEvY(9IU0eO&r_sNVWe;i%_e82w!_Caq zp9Zd-k!s4!)IL=0!XK~F9@LTk#B*@?wqZXVI|n)o)K-VEB`y18eM0(5lz9=J#bZOv zqmPq2fouL6HdcljaSnoM=_hh4eyq9U zeHZV)$M4)uQyl~T9Q~^PP`p0Iv*`YuZS#lvJruvZ(>!Dt)AwmluxDv2M}IM3(HL%F z3`5&}khVhTjIn7t>y2&wl+}OBlNZwtJb&g;nvnh>nvnmg;Fta{KCIt&^IN)+=u!0P z!(a|@&nNxg#(RxhzvuH?a?dX--lR5e<++U$09T)U?Z}E#fX6=%5V_zr z=A2ph)cWq`z4UXv@8*3u&pN#K6Zn1XnsU#p)NdvA*LZN`7(*xYFzh|rD^Ppf$M;_C z{GPelXXlx<4o#?Cjnf}rEq(yMq0D=Y4Xv|5JW};~J^J_?_`2Ks{a1cJ!EdWqS$z;5 zSLMWC`oj@;>-gjv`(2X!H{i?PbC!yRkSU@a$$II=HeMase;@M_B7Wef(9)lP>v87y zHy$m;hGF9be?Nc*UPSNTNi4~m!IP4IT@-n;Z%N~mJ3@7d3MbHqH}1+Q$PmMNQas$f z$Yq26DES#h*IGL-I=h<>vi+t?_}nh|`I+p`6l?yRGu+CK(@(8Sk&~S~%a3x+yj2F;{+ej~p{bMG}ay_bIfP2ku3sU5Y^#eeafxy-HPrFi`z?XfILgkjCfQ(yi0qQJK)jmO}na=l*YA36^{_F5TAbIt4k7Z z@T_GTpC+feWuv*H8ClszdF6^|LB_VcJ2KJo?kGMdC0e#RcQhu0)h#~?R)>Jy%3NS+ z{IG1@<;iG|6Q9HH3ih72!#9-csEu|ONLI7(MmIOJMc?3h%dquPZ3XywxOfIk2QZ!(?We$5y+52@hvVQl1lRyxEN=_3Zee-;=!fv*EN1!E^L z#{M3umY+WL8)EQL^vD^j;m@Msp?XOxzWla6ZBpOrB`cZx6lbl%#g!JXW@ab-2oJ)C zkBbF?dUEWTzE0Mm@Dd>phW5I$o2wt;R%g4u4%CV-yV_8@>Pz@+p)bQZv*whwO}wIO zmp-!S*LME3KBe!aSzG#jJHO>0qWM;At#rb(;V+HIY|a1lLgff>l1=E|qL~WqOTfb- zcnN-oPga<+zFKtdCGcDN8~gfb&##`Crw-cdWG;O@GyNga)VSnd_>Qu_H|z;H6Nhh= z_C>*)Z2O|U8^MkG%6PE=r%_(=V&W8XxM44;#YP)K=dUo6`-sbLsAW%~y^r)8&8y^= zp4tDN&Msc!&tnSRBYz(MeQ$34d(CBv{HlUi?GaB`ruE%YWIh~YKZ^fDobi(PxGZ_- zgN#e};y!cV9Nh^P8MWq?z$M%x&RJ%r=Ao^NS~^zM&i}zXnX1(Ji*jGs77gC;y=d8_ z&4xWF`QbOC3%48Y%r=wDuP}FIt}q`hzd|^Bi+-ME-WSvFBGyHkJfh04;IJom{SYQ6 zCxI(-h?q%_Mv?0cG3e4^?T0y!t}&Br&OVJnXLIi`4%HWLiZb`1{-bpp$$NQh-SWN; z_I7^Vz0~E7`mxjaZe;#*a{I{s{N!icauzXJ4UqM1Pgwr2@Wl7rsM^9X+z>$CmGX4V><{$7F}W&zsT7H2>`V zZ7l!LJ8!zDD#l@pU32;SLGjIf!QeE>5m$cc&O+ji(Tl|MF4o!zo0+%6SHA;3GOX{k z$0IVV?_1d${yY1IJL;Uc!EW>|Xs?$xx05^OF7v^7)4MtRLMJ5aVjqfMf4TCe#kPKc zb}H`YeqQ*+OyUSbz#YBYseb*Fkwg|h?JRx)&k+|@OpGZqc~2vJyOEr*YKQw`s`q~d zK0I&c>_{+mz5{KhYhvfOB3Hu5V72v^lbz*<>hXDpU&wD}4)W=6OC&oJ`{Q-!9kh3h z-VyQQP+q2<^o}$|@+X)khKP$R^%*)hk zZJ;l~|I?S@+rcw*%xoIp3Us&ZeteD6SMwV?3Vy293$Sl2Ut{76;4=q$1MvgbnC!z% zX3MHIW=pK?v;Eh@FU612jIB{N6y9g>GmZrcHfMGPo@}E2!)>Sb8=XthM$dKV_1p)& zy6v>trHh?a>1${o+f^gBo6N3J61H&W z_dsq$BG(HZn5P|!O!lYq*pDl9jh^48#{8D?6aC z{C!9i{*yy~hLMlGK21Wuk~yNu9-f7Gr*$WKu==iVUqp5(Zlu+fl~2efuupBlr)$t< zyV22O%*lPg5J3-ko%w5p=3~&j+LCN+r4Q{}1c%^qu#0rl=U|(8GBJ!!VC&PS;8Wda zC>zDsGDUmO^801ramcF@jugj3*G8X~?zSJjt(xce(7#=CdE-lJe4g(67{6bz{L1wu z5j=v^hp+ZqhoYo!*UF8Lyi_cqK7CvA3iuR>t$$@S9E=g)W_3p6x<6E)^ z2bATqr-;|L!PD!+_whgRZFq*gtH-aWiC;@MtwkPW?s3m1{z#wl8(RtAo(8^ZN8+zt z0S!aH5%SNsq1$Qi7K1(y;PYBSUP;M?G-tgUW3GiY3{Pm${2@C8XE|+>KZ3LPlJ@>) zV)l7I5?nlpE*yZz)xqOl4XjzEv4?0^F*gS{1>+BGM1Niqh);$d;j{7v}P`j)PN?YpZRoTpEZh{+442yU^MpGeyj6iBWr{2Dd$1Y4YXy3ZEh<7r^vuo^1AdiL+`QEW(OBfS|$0` ztQ@=OVVPYgA^*np8R~CurattLmfV9Tc78=TA^r*6q=_Gp{M(-!naEWItG7eXJE7gr z;kW7H$<-$|ihgL{mv_J9zvktjH#fS6YZLi?T3Da0=)h{1M3_D@B^M`ljJ_nXQFF-}(OyCCC-QDO&onmI#}$5B zR+MPtU2na~j^+LKvWpYF@HWLvHGyZacIE00 zexDCK;#-m(`EpV1*W#b>1oSHZ7OlBIQr@1&GOj}J*(*F74*HQyf2&-{Py{sS)}U&yv0`+QzPK<-^A)Bm1D9?}bmMn>oMO>dJ;$ zMzN6-lQ-M{rO67`rOK#mKYi-kZ{PRx6wlCSsQsn16#p3X-`2`w_1`pb81_+PM!EVg z`qnYF@ECGTyh=8ilK12P=lxCv=f2v?+^lB3i4XcZg`U~}o=zbj5dFW4@ykc#D11lr z$(Q^a^v=G!16X{YFYy|!i~O^pz3+4L{EC0Aryu!rt+#xv)cTm{-0ZLK^I_a%_d7@X zbK?ix{f+CJDBN93t_EznmQQP+nql2Ktm7ztTNNGnNQrjWm@N@>r^Y7M8~U}@nqVE= zZ?T>#sq4p-htF_vCYteM2%ZNnzaOnX_2tWhPGq6*nqOY{b!9v@Bl;B$EdY)KtUDJ5 z8S%$S5V{P7wUavVhjQmK~z|+v_WAMr}`dedBZNKVjA09=YZ$)leK7@TF zfWFj5J+&8L&wvdwYq)zHTF!D-maSm?%Y+lobkp$jFT7j7tOMTdFbA#3*B2I>RXf%~ zzwm+`tbOVChI^^^)zCNpZF~aq_|Ndw11&`f?Q)f+uwJBa%39LGM7i>{zb|`#j z)7JNmne{@k+491`MeVu5yZa)@z4W$A6MO4}@x9F&(=e;6DdtnY^BMH$?b?Ge$Ceid zgUScCbq8{EM{al`w-%h0bNdMDU>e(>6@0!dr&7Hq5 zE9d{!(1dgp+5Bq6S!8^@Ol<~6nvOWbN=H^!BMY3om?t z89VeF{{rprWNh5umHa$q+N`{C?;ojS{y)e2b1Xc=k}5A5A-rA7bKxY(JNaL(;yaE1 z;C|?$jCvd1`LAvJ_&p&wu6;SbOXM4a{Bdqt&~I+KwO>96X?SN9x=jUi6G28*iDqw_ zc^u6eo#os#12y_6%}SpMl`sYi+oa?S;PJ;TnJs#Q&X1wDF#iYX4H)w2%>b9=oBAI* zF9G_NKShT38v6wL(il`!fu}b)d(yn+Sc^NBKDhGp_??JfXrJ{GIH`fAQ}E~O zZ)}{sabDwWbOg@b0`{Cu{A~&{KZ7ikAD`Ow+u4B+MrWXCbB!ss=V3Kwcwaj<$HsSa zvy}5uacunNo*C{aMvvLS`JUhJz3g+JLoP(%H!snr`c}UcPJ!(=MBSQTps$rZN3U#I z(Cj2|I}W(hj6KY^eA8!ozJFwvhVMI*1}5P&rn%?oKhP&K;NQk} zmZi=Yp3azDhwq0oh%fp0>@wpvXTWC;n020)0jK)C8GZc+hjOz@u&oI;`FA%m5BXWq&_SZQQRmfcG-yQ?UM${~_w=-PictLwowKwXLD z_~yCBJ>Q*cM)sk>!p+QdBO=Pl~~jXFi|uS?W$-h4*9edSKp(I7mm zqq)kf%R1We9^)%MDUv;l@lDI-)?Xa1OZ3s+TbdK6n6~a+`33qA{`~gVF|Ie@%^l!N z_t1L%H}@ON#756@+t8sZJbgL`-v6CZ|d7s7{^upY&SW5}W!d}E@lqi5^1 zZy!gDZCO$}nd&*nexrJ{$KE)*C~r@W-skB$lPo_N##)swzi2J=&PVsH#F!6jPXa#a zm|FAFOT+N8CfbyZunxMuWvY8dKdIh{*90f_p+h%(lsf&^4lyA)%7e$k!Wh(#V0)N; zN`b4KZ?mMLzXiO7poK>64l!PzHQ30*%&F{z(gm)eFV&B>&FxoRjYI9I4b@lKM*L;b zd$)$!bH^U)dMEbKAKwWN)NhMDlzAtN4jg_v@__h$7(H{*Xs6xxU3;Fk)5z985UY_w z?u#Gh^K>`1^+mg9*=J)eO2Id07_&^an!1Xum7LW)GURs6uk0rN{Aykg1H0z7mb1bp zV35tKm-=Dq_fr2J@gL~OEM2nF6r1)^;xl&g4E(caFNiOqoX?*smomqOT(`xM>M7+H zR7Z*0C} z;9f)BWvF`$l@G?l=or1D>WkS0Mi$NsfTx&P2!VopHW~^pD%cDJwg2=i=HMwA99~I)u;M85$+Tl zCj9w*$v3TqHV#^R`FHmn#n(c?2fqBA0IkqX{Rwc@>A}=aofF~eJ9)Tr@%40~iZfJ) zb6y|zSI9qR=e@G}xOvxH2}=rWapapE**s3o##eiFFgV5w|KCB z=AXd+MGtoQ`&A8@W8vP;GwWY-#T+ly{GO%um_y>gmo_u6g1^}~@yxdNvAWOrMDu%v z2hVKk3s3%MJ9b;&e>_$YdAzqCxl&*rKbiYJeE)90tc%~r6Mrj+jeX0zzx5_~#!Xq> z#pWb_6fB6#E;bdrMF%`*>iH&~gw{IYJyZX-_yO|UCfC4&a?MkT%Q5k_@FMX#>D`Y^ zkDdSMtl0VAC(q^&I4fVfYz#CwBKhd5QxZQ|VY1gdk?bSbiP+n0{SmU_5%L^9vTRu5 zk!C0U`1F&f3U+j{$HhyV>+o?We#b0sS=P+ne#6-&TQQrnaCFG$IMYFnG|VLasPpWI z&6gjQe==uREepd7*I)2gM>weskhoB?YU+S38&e!TdHhs%C1qWD`1v4zz1ldMS7KN> z>wtgkt$-IO&o?lO-(y?a(2-vuX?#MAVE6Y#as9|y!p84f~J7aEemd>L;3#c zTCchrRlG%d{kMrBa`X8G6S|Xa^|@xxJalTqyeTg8AhPWZ<`3L7jAvft^I9=)_QHJq z(2pq-@6;STe#XEGm5T!JiOP1eR-lDD{#7~oO3Q}9dC7_>V>)c{pae|+Ie zA9xq>FvrfR9|x1AZtNoHq=~$B>-1rjZYg|xB8&tKT!Zp1yj&##EFM~(|x{^B6pGQ>Wi4_;Nn1{B1I0T z#RdF#s-4A!{OA6g2x~ZY??=_f;CPS)_!cgW9=Oo;QN?cO`=A=`>-ZEfIPBFcioH9x z4jjF&BR?NPZj(a}IVW+XUa_jf67v0Z^E+bGLLThDE{JZS`!scKqx&?K%Q}#}fqOKS z7qE)_Tbsxo^<3o4zO~S;be_(SEGHIRdaUb1IW%82ea1DG!&dgYImhgJVm~vVJIdZA zXV}%XzHIZD8W#pF|pRC1~ z5WQ(>U2I(Zx?Yx)Z62;P^VFMYpY*N=N& zf^=owN27H#gE`T;O3zn_<%LGIrtW2q){#FVFr0m7n7L=a{{{9wyLcx$mF@n*F^btO z>j_L5qo(o?ht+K)Wh2R;teD_>pr`3KpLG*(JR z71IVfE%(Uh>YeI+Erkj2UVT70py~tF2jwrZDNwE4;OQmze{?vxv`aeJe_gFTEiroP zlew-JP1mb$FaN*(Gk)3dB9u8#|Iv|jCS%|cv-ofKh?B5?v+3JQo4!mPdIvxT{^83~ zf6vncO|>1&ZIJy~bnK7y(bET3NI!@{$3}EL9J(GZ+2;DD|AO*%rz>*q#g6Co2bIVd9VIn##ZUCN%Tr?S?cX+>d#&fnLa)Mt?WJrzWG* zNgf^Q4a5)Ot0uiC#<_!h)_`sOU6t4#*OK@0Vx9##>%tDOlRd}|yGLj64gK)?Gx_TnK@5U&)P3+tFZ4V30GNa5b%vl4xFo9gM!kg<$ zH__71W6bLyecV1o-@+I0$fCML8e8PvtLw2nT)=tbh1i=e!rpW-^y}sUt^P=Ct8}dn zc)`JD`D}i7>n?CX@}n;EikoxW%`u6eD!KloFN+s6o0H;o9h2hM49l%}l=?B&WCUGM zu&3Z@!hd5P?6N`YUCb$-^{XjvKATqFt6Uvp_s1w65kod~9LR0ZS+d~Ly+nS$g30zB zsfyPEk9f>Ez~GO;iN%jE8x0SZJ)5%fk8|67==iearuEwmQFb+D1I3X$Ixqj`9L-O7 zZ?3^9k5t#h%+1}{hmlK5#jC>6lj6^w!M$A21-xaw@ctF%hjlIc)Y4GUw1>^fR@eFo z<iZN20WsH!G1eVihtMZH;UY}^~n9F zdfj>TZW$c&>f^_pI%9Cmy#?-ljG5+Od~CYt2Q#gPn8oHv0QO2l?jDwQ~H*x5nxZZ*t!!ba9Cf zXRPgbIAdqU8@)O20?sbV?gYnetY^`O@(?t~PL4m%9#c9_Zx#Hjo!rnopG>?;FLdqS z-R$Nwksdlec?LA}XZC!WJNbpUv~l0@{YRz^_Wuz5Z>DSp_{AS}wyJXipZ7n{Sn}6u zO8>!K5}vB^=uqUK9kFE|{H~aN-;qTw4-{WJsz-J$ByGC&%j|ABnembaOWIHWW7T1Ht;b#&#WYaRz59&u0wUKkAHLI1^v^J~XIjQR>8y zFD(V;C$;eS75J~J9o5SsAJtZh^GMr%UOQ?-Z7uiO@&7x;+~;)-=f~8QowygCptfUH zkECzrCNs<}a|dPgz5-kD5^&vujisf;`IEq+KDqz#oEYspv6WkU z*$?+FOmXuM=CowHH6e-e6&pZ`L?I zz|7}PXkGk5ZL5zu^S-#+PtxYOcFx^7@^SgWJY3qCW%@cuy-Z+6{G-r#3g7fJ{Z))H zH=hNb2XV(U(a&1uD)T;<-Y=m20RFCX6=T2|mtR)ps#pu1UO5W~{h-gi9S)rnucV*! zfR~$B>xg%~^sjnhug?2v+v3hFIUaYR+3`+~*8ejPce?Z8I6SAS2g`n*vVs@8wA*&< zd&ifLoijKupYq!7WsMwMtN4quWARl}o0mqqUYmxDs~R4ck5BK5%3ThRY#vVR z(DoF+;yNg_%xdFXfy+E(r4DX z@&mfQ0UFer{RMsRz$e|s(Kn7CNA$eGai7UJY%U|(89?S~9(3nZI66B1;uQCe+9>y! zW$^vf8LpkD*ywl3j%{}Y^K8p-W!%usf-Feiw!X2aI*YG@r-+*8oY&SJJ{uA02 z-wh!j)vn%?S9Nn`L4>oVx@~p%DbUEHhb^tKpscjfj5v zZ)w--JI#N8|8uw!ywOLdceu6d$2iA2z_YIp(%=d^chWZpc|#04s7K#V2XZU^d$24# zKy$}uuq^q^{j!f!_J3*IOM=$^afDpUX~t;bUcuc8yxRtDExwSOg4yw4{=#4%4$kKHVa`>Cvm5RfFx;IT+j?=BHA~$LbJ7DX{7yLH_dz>9 zWmZmqQ*)*=j4>QKCH_rld^fZt+813S<8YNI-z$NA^mCRq1-&S-?e391C zT-xp}f=}q4>e8g})RQ}n7^9-<_OSO}eaFVcrC(>nSLnZ#wsr`vwMF*s3EgSXt8u_@ z#A7ly7^|N)5i6)V8StR7`LJ9|{h|EiY7ai~A;x9bS{gni+GzD?Bg44U2am4Li&SS9 za5NXWH2pd;qCET4AV2!f@ifg@Y_~_#L1<{V==28KV4RZo;f^u!hoMc$)^230UGwAy z_xWMBCl^HDdS}SpEf^a;7@r;Nd+B@7@A-pkWV=KDX^+;mmh3(cd8zeO7YW!r;lR1| zPm~jkE`MEh{CHBs2FLR|%D$@cR26$PIL6Z80%$>WBi-DAZq|j4rM(Xgp_R9p`vK84 za5>P5>ivWDB^v4PEspPlZu-lR9g`f|EKTNmi>q@X-cw%x!_iaXy|%ndFZYU;kQF;< zM|84%ZLyV2l1rkO*H|Ok!{pP*@2E4BM*f>;t1E+hq8@#uJo@PL`CXZ4%=MFcPJI@^ z@0yD(ZG^~c{0z^&GKkC8<8c{f?RvDa7+lIPDovYKp1{k(9jC-kt#bEU;AVXfd>B4G z=W1-V;`_;JaK(^(5w>I_Bu0>xdqYvfj~TkJm5 zX=fZZ<=@e#<%@P-$^Dq#*naK99dmVyWB4@Z8$R4u0JqLz#aFcV5wDA~{$(S(^F45S ztMHVEx0{FHO}yhvsyAfq-Jo)LYp;>DqB-t5i}AduHR|p?KC5zhdyh})KRBp|J_O&N zfmPpcoB-xesPBuRMdY^Ratb@>B|P)%$&P-^Sb49p)=)mXWAd6jPR&3zwy2mt0S4KXEoRrqxS6ENlu~c+g=&9n-5P1@j8NM5@qE7s=Dj= z?qPl;i}fE{N1t0RkUV8bIr!o4b$<$b*O%SBt7`+7joZpE?mgdowQS%z6VVlr0-4k zXdCcXd{Fjm^6h1?IbvtH`8C<8$3_md+WlT(ayfBF72MBLl5?=}U6_zRW9=w2!+=Nm z1%reh6YS(z9G$54%)D3|_3h@22lc>Z#22v@L%R*=iQj zSIwCw8>&(rQ?0U#C~IWL=3PK`YtCb$*sx^});Wr7Bl5X`UvCXFU+lHAb;V9%?iiE( z8Ff23o2mo<2bm+C$!SklQ_g-2TYJ=t0qKF(oIG1YC-(#DZgbt|TM3Qn3`M@Xx+73D zA{zAX2^0<97DTg)Iq^UNF$8(zxd50ohL6+diTbKV-y7`f>Og$QKPj6b@5Nx*>4CWD z>qPD9Zh^tFRe`wpw?S|I1K*lhp957pzB%{a>W zzmoL{Z|Lfm3^osMjd12uzGQ6N?ys3g-RD!68XG?&$XM(iyfo>sCVrcHcZJqjOn%Gs z-?4r4IjZXzd8J!tWjypAyb(E>4%mt%r6XKcp^C+hVGLXBvD3js) z?|dtMG#$A1P$TqmCjX^VH9^<%jntaZxt`?4IObYB(}{A9bb;vC^-GCHsm~XJ=C%M{NR&TeCkxOeab;Nk8W=05PGJL*!*qp@^U zk~|6Cb59^rox?8D!CrAHXH&V!@IH9grF?Sm!B)NtN-x3}#r6Gi*OmOkwXWn7;;t*5 zZxZZQmV;+^s4o1v79PhwsH+BB%B8G>VeqWehno!=FLG=ex=`1-*rqPVZeCCtv3@<^A)r?HAx_~-ckI5lRC^Tz?oVk_AXtU2UW znsFA~AL&vKSm8J3+5fveo4KKnp=Y}Od2qqKkuK#+D=4kA{r*6|S<{bRYqt0}zw25P zU*okM;*P+OU4swVHCXGe!I$m2V(*%H_uUoQv&E;0gUahaP5tcICi@V$l{`oX;n}of zc|vU2*77Cgajj_|=fbzw_S$Ts}E@ON3`p%_XoE&=C60=XOK69 z#>Ahc{lzS`eMUhFJ#vXVQQ=_Y%K^N+Tf+<9R6fh(6dkVrm^y6TS2Lg(>C@u-*q^JvHx|xV zC_JiPwcjzXX<>)P3QYO^uX`VU{?uPayU%GKKt2`q-$K9h_^m!W{60^|f15u3b}D>~ zI*N^B4Q#DhIDO#`+I`fx_f^9iiH9(Kzh?a?PA*6rZS$HJ))qKdg_(nz>&?x((TnTM zq>r@CtFm@0)mI(-`x_Q8@5`~d>}{4Evn1J?XLDJ?Z#~PjUzU)~rH-~`YiZ;8fwjyX z?=%mCwifuzubB_o{QIkjk7OvD^-k8iC&zptM{s(#v>)Y9!IT*peAKZnccX1!8cstJyU_&e%;9$GQ)_V<0yXyH8_)ZpEgR5* zgW#HPgYH&IPFn4GBG^=Wc-~ZuO)F=z>BGQ+O|20>BljGYuT#)_?Z<{yumW|84*5xq7fm zIPf(;M!6e299a~RZ05}E_}GP9eX-qt&Df`VekUZyBllXc6%XfL?+W-pGwW8gEBn+4x^XKlO}{InVrq5A!Vf`PO9U#XgT@6=M~^78c?x zUhOGnq8FO!rA#m7rSn9YQ{_#wGKKq|q(4fISRFEi%*W>DAZOrRbIv&O?h468>Gz_O zC9DP6+yuL9ARB1c+TQ3df4)N4+2n(*`RW0$vcritEK|QH$L4g*3oqP?KDLQ(jaB-Z zd>O?r)pmz;HR-tAdwCpu*wB3V-W_;%#ZI;9>2)VDZ~pHQdB2PJT?zjDcfq`OChzwV z#zUExWurcadGO00?Tcr;NuOFHX^*Z$ z>?L}>)%$)Wub!UkJVErETXIw%mR&=62p1wJ%I*ElvTf*GUbc+_Y#S!YJ@sAt zk@;W4{n_iu`zm}&T%B%kU-c!*Yu}(X(}+%&K7pShW4CKt zWwm$I_g)V#!i~jG-hRQe`#f>bv-@E0vAD4~0ypw^l>LYEi>~coFdU1LPA)0&iCm^#rIy*52v_KEaU$LO-` zJBRAB?wN9}rzcC7EvK)jbXmqS)zf8Vm$Us3!I$Cz{WuEQEnNCh9H8$0_U{rx7L~`g zO2>S9lACujN?i5NdQALP^o^f>E|7R;jft~q z*u1Clw_Uc;#IGwd*|n8Ud^ItCPoIIGPLW$T%|5DiBz{&rYb++$!&sAD6`&mDf6(K^ zug8|Mtj>wYDzQUtG}S*i$7FxL#)&t3^;5`)M%CweD}67kT(yz< zAEADoQ@!pY>Q@Hh*IU>p^>q*z-3Z(rJXifyAK}hMdWi7Tc`MK;MSKDfQFOl&L z9T#y%1kbH-T%XWg=?R$dqXx8?l<`r|1}2Xj%opy8TQf2B`16+Ui$d_0C}PZ-0H_z>2v+_bzP1UZIs|DdH-hqfCS{${)FgXIm(DCv`u?9%wmta0L#x zY^%lox!jg7ZLc8@WE9?2$@3Q|t9vM-(1vpNTm&xCALRbJ0RH;;)eqI3{8;{w;v)m* z4%wI^H#IFx-8f^RY)+9N&uw!CTmHTQ z`diC8c+S-8-$xnh-@dd?dA{3Yloej}Ugf}dSG38*n<*!qNBdJZKVNAw$a~3_5c%e9 zU%RD`+q>$MF>tCjq|+PbAFOO!1;i;1gU%$^3-P5ZqR#+v9N2KsBOT%Z z!>L*Eo_p{qx)>ewGGlYv_<8a)AJR(?1<^S#*1BOYaF6UvuD`r|k90m64U+fvYP%np z*1=uGjW&0Yll%oVBN^xF)^)&CKWI}vJpZBud&#o@5fTt9)Zfon!e0{&b&;&6y89&xf96qsf<}jnGVZ9zJ~FMK&4M`ubMZ zM_Bnh(J}1%Yu)z|@{X0$pJM2v)H6$6T7`C|shoIyxWO&!{>QgxM*e^7*WQ28Epsx> z(&%6=C^zqg`nPT6!*IRZj-}JXISb=)Wj^DUf!30#L%H=a+A*{dV;mOV*)F{D0Zfr2 z;Y9Ck>^<+XTXg9T9`P#K>FQ{!jkdHWQ7q}_8S|qHkcr?fb}%cVxH zena@Qr`b;^p9!#CIgv9P=kg1V$iD=?^*OC~n*retm>-V?96kX)!N+5jvGXfG8p(e2 zL&$gfgNID3oo!C3n`}NDjD99F!+jZ-!UTp^l->#vbDE zBQffgCtpQZ343+%MQM-0kKDSGj;R}{|UO`L|WgPIXoT5Iw zwfxt)vj4x4|I+RK|3?-Ly^qa-N9ugT)lWGenKpY&ZbhklzOFP~l7+F46rFN6DHTbh#H!iz0E8GH+deEQ=|`HASE3*A^Y8&m1ZPQzV_iXnZJaY@eCvVYZm z$Bbp{{$64rnUgl=gLCHU=%Ha*t@FFBEP&@Rz89${oi$cx;!oS(W?Btr&pLxOh!{*Q^@WRIiR%?LWcL%0ABjoG@A}`819@OR-U-GxNRY{pd9Cr>&xu7`cN*&}i{Y5RWmg8m*${cE4)$HxAY+=LGIz=q8D&B~#p_Rm81ZQ(xH zXyvz8vSuE`ccDS|8X|+X!izV2lKT$N365_U3@3Rov?*uUkp5q#?;c=iATG~g@AwM$ z#4fbDQhD+U@R8+ySmEXnv?REWmG>^c5gsRUC$8k|ugb`K0Z*2kpJ*nw3-(u$_l4|X zwZ5baiT&iO*9weB&p8wBtcBB2& zInddjeebR?CQ=r`JZXOFk#O-dYyPbI<#U%a`5F|&gF%x z9`xnfp1bCV*XkLztta%nE_7%iBj?8(e|6u{@)k#&ljOCba^l0Sg|WeM zde)|A#2Tot40Nq$A%6FeLl?V0a+5sIUuLN5GYoXy)<{)-=gdD)=+UyA{ z@I{dgIHvK!n`6)LVsko2#pbwsnG)I@msEdxuKk~X9L$Ee>(Ra2=y!5~AI#XM%^dY;bVEZv`b@N~6yboC!|MmkVW&&%AJuq}SlX-p$ zI*lTmb$+ikk&ulI*rrf-Au+6NkQ^eXhp2qRAv4gs!C<$j%^L z@$;4!Oh|rJ2Av6K8NT4RW3$+y7qDf)}QA5OoR>a)c zj9}`n2R7y2c&G8K?vnC74nZRAf)A=r8ecj4)*6jLc_&%5Yy7ck}-Yw_dDxN*d9w*BG z0rXgS$ch*;xp5OYxUir3JiWr=dUEnqzVQj(5Myn$!t+-l2mCVQZJE+!smg%keYCfm zarp9KL0;LBwrojqIN$r|U-Cuvcj?NVwA(@Z>+{Oz#%r#}C6DmEoV#>%=Z@^9Az%#y zt89Hf9Q$n93CVZ(-bUM5XhiW05z5w5wjrVW#j9nY>GPD^2)zx%a2d~ z$}4|>^7m0bUq<-$pHy(}tFiynG=aUbvG-V-SZQINocs>omL{-uw)PxL6LDLnH2E!+ z$)^d*Du+WpP26qEmL%`u`#74QtZb?IG;yabKQ6hD?_+2}wozcsr-`rFvJ;YD=KC0$ zplmH=^J(IGTXrIMMGv6~$~u(Ir-@J5vgOHZ_&$avfHecm`808bEnAkn+$(zwO;A?8 zTKP0lXUmUIM!fR>iYCM>T>f`7U$&q3L_GZ&_^Na(&JE#zbg+^seL z>D=52|8sb+vOQ(;EhqP$;r?gNF_2t8vdAH~o zIF(;Q@Qc3+UcbKD@^dN~o~wQFsC=DNJXSi6`0EB@KFHxrEQRdt7Z#0!tGxDL+OtZ74@jH)kT1#qu>{-%FnR zO8i}?G2i4Aur>k4I(Wa0uLqX`@3%)>ls$m_cm+AoxJGj|KKaTRv%DV|H9i|}h3~O+ z!ar6@$LHQ|U=f{3ZoOapn{UZ_l^34Vr7oR0DdrUTe7^k6apK{n$@}@<2(1I>mW|^L z=Orb5o!BO&zZ?K(uYxQ2H@`xE%6oGLIeiam{yqQZMsV^R`1v9=ennF8;>0Y@ilL+_vGz4FtFeym;z4m$px+hDMT{R$XGGxA^NgYH}i zO*x60G5GmVM`eCa8QEK6BMP&IvRdQZ71^cxBGH5F9g>nIx(iR^cc4A_xlSon?vrtS zZT9?PSdw#?4SL^$Y?F^`J$|q?yq6!m=(5SfvoTj6YJ~<8v?&_+A@uLkK=~jI%=Kv? z4GokYrGb+?8W_oUzHh4TCl?JoM4Q5&{Ai^QxW2VP8(ZHk`U|r5`f?2^@coS9JbMlP z#ZKZD$_f{E&~G3QU)Bx<&ZPgTt$d$v-`{(_?T2#$=Hfs3?eBdJ=SG>4!Ku!@5%3VO z_b~LJCskr&ad;P|AE&^;Ph7pNr`g26O#l9W;Zh&9x1GLyT~zC281)1A4XwwQjT2}vm(U^QL-#2DVi7aU`p~7ow|wKOX}<~meF1xkx%kbwJkjl6do#_4{FMXn zwg7acaw-@OQ)I4+empZ&uW8de##t*(}>IF$tT0%6rjA$Ejw0Q=q(^xx}}}Y)&sJ5D(pwYZ;r!t>Wx> zyji}6dhVI#uz0SeG?9DEWLNUMe=Rh^-i7rM4@Xahf0idh@SBMCwM*dld_ymrRVExe zHQq>{QSR8i7Qc=1ZR~|@?3hV*3$E)}-^^byNc_r2Ywg)sn)Z9h!(i)ooEjfa+xjg& z8a5R+@5kaIFNXqhQ}FC%pXb{gJ`BAOcb<)~ra!=M_LDEaSDu8{FaIl_EjLdBd7|PE zKsU&TX`IcJZKE&Ik?edK@cYFP*p@z_9L=Sh>teOrpyxe`S?$H{2c7RpZz_yuidIid zH#634e3ld{&-RVsFGAmi#49tdvlL@G^3w^$e9Om9vEaRPu>lj~E!#l9;`{3H^}{|9 z<(^61%~py&kiG%iCu{f>beD7=v?janw@laJ8))lF=&sjf&pjMjR?XS#p}i(sa~^jG zp2HrOck-1Pz}`ZR@jdAorr{9y>fxEr!h1QxyRL+D?#t8$`=njOHLxBk@CQ9Ncv1Gy z`DXoNz~ms8WvA)60p5VD7te4mz`rJf-JALy)6LAQ;Co^2PzqHTs~d1HMHlDk@$0IT zgIDsC`|;?nh;nMn-f8h6(=f6ux1zG1^Ou(PIo*$R+=8xj8FKZe>^-X|-cR4?125O3 z4@gf@JIcK~mz)jVHOK1(Q=q|)kC~YvauH!~BZqFuG-!N=rLib9#oElZj8EjAMK-hk zSqt&dLe817>-6rD?PdU<;NWKQt>WvzA9#5Yx|FYE&l3Dv!O=YCaNsG67bHS|_69=s}EYY)Oo^3l??yEc#eP0T_Jq6u;g70N~U&i-k z;6P(XS9@7{ns}_QtF>O?&cXMn-*K*)`8Mmo*U^0a%#C}VnEbVe_XvDmK9|v8?V;!# zVz7`qQF!!0&O+tSwHMlujqPu=rFjyaXzg~6b!`l0io52nqEG2?jT@yq;Umh}F6Wub zew^BO6>g>^GYtxdC=ze z`J#RKR!&ahKeH!PPhNXyKhyq+#P-pn6W^t;?W3id4Eqxk;@aUarSHD8sA8DI>)E}N-6 zo@Q@nUhwUmncn2$^{{YoHS|H;p^w)CJWD_2zTeC57wF?eG!dTW(!>N{G2B~v(?6k! zDZG;(is2s53BS1@F`4x-pSgOf!fbdvZyaI9Azub}9NaN`hH0qvbaLqIs#Yf)zek%N2((+d?UmOattsFjGvUY3T&{(9`@<%?t<)@+95b}lQ}Ve)54=}v ztoiatwhdn#>D8j!4szut({ z$8?q$8=GJE8}xJfTW&v@k#iCS_|^9kBaGkk<__8sEcYuOlzB8`+&L8g6zukl__d>O zYwd*7`Ty~`e8k0p){53m9W>Dxn7o;DjWV5u-;K|2BR)QkF?UD~eUAUayKwXm;*JKW zCmA=;XR=F>ai8FQih4hUew+9$x^1AXp85jxl*#f}UK&oF8s7&^X)X-=uD$KpAh0bV z7dEGf=heE*K!1DTA?daJpXIpuWT6xBi%iHggo3GR%2ubL(Y@z6HjnJUrXuvDa^jaJ zC-;&MLOdt88Q5q?{3gq~mCv{CLMcJl6`h314N~jn29b}V&U1Pgllacug;fiCf`$0| zGjBY5nRN$`pO(*84xEB*=XabvY;y7U4*!Sph`;ena_MSh(skg(uxI!Z&qQ;fpu2yX zi%hPFnS>c|5+ghuUIz{j^812QT^>A_I=+ot`IoNd{}J9R_lD-9o%!hf7JQL+oYiN0 zSradSd#%gX-lB6tJ>+ZZi*(@|elz-DgSowR&dK9)D||V*iS|OwogE{(%?FR&sPh%K zjc55+nPSRR^SqBTzuKbp_1LuF_&-bgOX>gCAotFot4sgLF!rJ+(a^7oiCMrH3(uX< zaD7tPPIpzKT7=RZkbZsx_PLJm2_q0e)26_rkN_(>!x@ zDhHN)8}}zM*WeR-JDF#iTbBS2J}{gwGTRSOcjnBx+%r{XgmkM2HZ18xvyf5v?@Y3F z#ZOLjLSusYnN!V(JoBo6I#pK^A05TanZv*8%eRcRccTjf7 z>zhwq7fMF6F3Gf!UZ{Is#S2+ufEV@U=io+iUv#rfcwi1@;04)QbV{M%evF@G4lUK^y$u<|4rwg=z}+BZboN$)1}M1 zC9A1dw2i%2JaI=}GN+lj#rws;CE7g1^MyRC&HY{Mft=1b=kgoXk7a^|e~0&hOZ3(J zGbZ;8v?CnGJ^_c%u*T6SI63UzxijZc{Mx*F6u(#XRB|^!1{?8K z>S*`XBR@R8bEfKS?1}J3@-_x#W8^Ms@Zj3}pOU>_wBfCjTB)nA&HoGHfr=Y?t#<&W_ljN8L2MvPl`lyIwREqzZ(V|vJdHbD9`d$7jM@55&!NPpM8#< zdk8RE8RpusYgsGt6HQwCwfyJg`!`SZxM$g}r;O!~;AJH=;61N!o^2e1>8cm{)!g*Q z4r=DRA4j+99sW2SSanuR`6ahRACh^)+-GM#|C^o9*hHU_O*Dg_w|K7h}-N_qZO=gq^PYILu zE@O6lO;-A;HJQr3e;N0*(GE7>YMtF|42^F4iCv$SrnNRpQqR#-<1=jDY3xUmSH9no zxz4)lFz_eg2~B)Q7aF0pg~nRv5=;_4x!7z9xc)&}A7xml2oKnqM_BxjE*@9^4F?|? z{GisZ56sV?4=f&LMrgg2&krPSxG6chIJ(JukE;#F+WJ(Ub6Kt{|Fe-H{8rU=mhZ}E zbsNg+oI)w@H_(q)c;;N-rsUk^Gh(+rc1JB|Hj>Q4#l^?ldXGHplW(f*AO?og%8sXX zl4fx*hQ7M6SKWvY^+E@J`AF+Lb@=ZboWv^42*D&AD1UO!@iQA5r`Q)<+>J9Ml2yd9 z5&SOByt5rz8^z9aXe4%8?{+8MzKV8Ul*55ml_)TZd;JgEPJ}|Bz(aD%BKGTdi zB`*5oyfpY$KEZTUFo}-nYa@Gg8b{?>avu9K%qP!=uDV3K5qJIVyyJU6%b^4NPCJo* z^t~e^BNKh^&||N6;Pu{1Mk9A8F#op&xu?nGGN)kEKn}K79gmaTBNxecV5#KxsPw^x zP~smBaOS9qy@YX+-Lj`uSQ*;dC+-7#EAajbD^p{X=_{mtH0X-fXu0p3yVk1;+2E%$*`%1bye%`7G4y=bB5levEZ_gW8BEQjN`eUZG9htIO_TXvGuZmubm*njKL)X&|v54vsdK__wA z*8Nwb?R_xpHO>0DukCZxHhU09Sr;8|yDWW2A?@K=8*(LL@2 zmnYOcfTOSOaT5AiTx&>ZNcNj3{3k&hQRI!?b6Tr4`*9z}E#S=Y(RF+~tPdmpQO^B_ zzqh)H^oL`NllIu_LhhQ8KD^|A2bYiWo@okN+sj$NeN^ibaDVi6_Q|n@Y5nS@kN46U zTj5CQ4=9~66%X4$d!o^c`KI>Y=3Qs$y!3x_(`WN73jfjmag6`1{7a6%G1Q5xon+tH zpm*kx)BH3~tuC|N&G$dZXKkRK&V${lcF6I3F2+&fhX%~;V}XBO=i+p^!ZJh%UOE^qv%RFQ-1m9csj`<@;wK9 zD}i$>GS8ERI%^?W+6mA1)@%PxKIv>bfwh4)>-p93i}DNhDJvQ3l~ig91$DQmeUOBZJ=e@)2%ga3fiLsL0{xi>2pHa^pq-%X2b<1jf z-OMlUzW;*fC4I_!{cIvF=H`2f=Q$_H_f^sa%XR$c8wSY7!RqtgnL?fSRE&iq+d_#! z0nRTz?%Wfj^PYR2BwjLSKy^M;F=x6~7NvG^Z^9nr(h+$4Enk*AN8bmp1U#zNSyAlQ zpIVoDdcppslJAlyCF!}GL+;T0TpmvBYbZ$UTM8fVv%WqSBJMAFWDAMJ!-*Rxlf6r{ zaqL0PlUki1yVP0B&%H|XwIqELYw--0HXIV&+P;jc#)qIf zaN*%hqPiX5=b-I5_XyJZK_zOYjq(`>iRa!%R2q5mt^j^HbQ%TIA=)-5Co?%oNqJkG3=p z^5+|cO<>gdW*25RKEX`C6aNdlp1zXv3k_!aw}wSGEp8A_MmJAojm^25YVFsZ z_hH`d3z^I5YiQK8%u=&yQNyG*bmHc1?466wbIi>Hp;BmWEc2T;!tg0za2HwgElAG>Kr&^ z>;%w()|K%YW_tFQW>e)^f%z%MKE5O{{W0QlRNjL<;ymUi{BeMpl6dqy&6CS>YYjdT z_^L@p{S5pglU79ftY^OfkC}xZ&S2=L9sTloekz9^GOHardY+%&v&@}#c*FDjY&!3) z!Qk{-+CJk__Oq7+fhCyG`~BcPAUI|a%Q4QmU1(Be!Y(Y|KLIR*fyEDl_OAUfMD*^1 zq20m|n*LZYl&HN39N-&a)b1SmAMV}e?I&pSeZH&D@OcZP+H9?-&U&ZL+oJU4bnaE1 z*So$OPEg;Uy!y`a)wd)xy_Ru3gSrO9qMKSD3{8KuGrDQBDQGULVZWcW`x*ZMH6qQ4|QtT97O%#7f^nC5t};qG>Ko@Cau7ls^kY)eB^N!b!yA2){&aE99T0mvXP zVnZEUOJ93a5_^^M`|VBt;K~izkVa!e3Nvp`WIGCDpG}MdEdw0th}-*Wrtmr8t_*qy_5b%V%#agdGDl~_Y33=Qzv@88v~$^-9fS} z}AA;!-&N0u%&U5;?;Fq<2CSiDxiJIJ>8x7ruML`K5q8z$Hy*g9J%ZFHR!>$>ucb=qeDF3zkIDh506(k{gIxh zxxQhrqmSx-7Ed4Tn(f%mJRT6ko~65azW}`^-ST_k0UhqM;+2T6&oO5E2ke1m-0$+m z*Y`X5P6&wy-@zsj$Id;4cD2Uc!a7{?<{j7nTQcRIL7Z(vrWMaUe~Rvk31Ls5+}^XW z!>O(~cgy_{*(o`;6WJQ2PbKiAU9@Y)IDPvq?M{@xAm767w_o!uOL?8C>uuEqW`Wkr0A?A+*XPw8CS)1<#lnV83#XW1PU-MmOp*)=;ifrrPo7OpL_}3ux`)i09t94Z?dk`NNx$7!uKyu5|dnAu< zp*`u}I>#!VTz&(b^P8b@I7D3s`PEyz2dk|P&%CqiHTd4{UiFUdsaJj|U#8wGsH2Lq zDkuFmPg&I)w73gaYkar5b$jbIt(&Sw_b#)OZ@&kQBmD2+|5bj$K6$iW(|NexlJ*im z+2s|V;5R(~nxD1T^S+g5(dSTbF5C1Z@YF-!|K-rPN1u$5wYO@XFC)Kjs`Z%4r1)1o zqj=7Nd)1}>=zX1=w$J_E4xS9_+5_N4bg+isA@a*NT6MRQE`MYBwXXD~DZl!manbYl zc~+bMO}&D-&sxustJJ&Rx7NEBxV>@x19dE>j#h9WTnV3o+ksR; ze6SA<$>t&Wg^M*OC|ge1%PHI0hfb#Z%C?=L>>$ccp{(+L*=;9&g1n#b{UY*IxinqF z^PE0yPUPEo>Kn%|$8&w3^t1S;y(HdDVZOsGG-D}h%{l!l!*FY;TyY-*!tH0^b z-4Tf+__ogXZ3FMh`w0J)tR?l!hmOa8d~clg1)Uh^ z2gaD(Z0TF*9$|RKyPVV5&)(oJ{JN$h>shBxlDrpAiUzZH@HzCaLD*R@i9S~}!c3oS zikgdfe-9ntX32fVw~%qsdf_d6N|?8M<3aQTWPeW_#4)VvLjk)^Rekqki;ITM^zj9b z?tcdFm!D&%hl}uY5p2lJsZlfiw4u`Vikg=fm{~=Ef@wQL1=YmAYaVCc&9o)aa9d@d zu(^SKas1b-ivoqyWLrM~>^jF6F{bTz;Qwok_l^9d&#GUNFI$l3S2JE3Kdqr8x9Y)% z`V&KsdJg;>@~XVXOl!}F_?LXSf_kR%+sM0O8vKEO$(N0T%?R<|I?|&2M6cgtUPbWJ z*P5g+Jr&Z%M%JK`*KhHgK$-LS9iYBH@;-_GKkzS_UPWHP_FL%Lj&DP-CsvroHnXxY zwTnGqjqM;}8#{5rLg@y^w1sb15W`ruq6Y9j8NBP;AoesG!21;NuJ_x@IAe#csUF-< z0FSaO9fdX?=bY1#WZkBGFxXtg{SpU5W!1Ax*|d9trEP12<;@N3m*lW3?S^jN4OLWg z_i(l1rn66mu8m!XJ%ZubbMP&xj&nwF6=mWLQ`$1npw^7S4bV2>m>XI^Yd#Dv>eYt?Yy+?9>3ewL4=popySTh%=zy4R} z?jzQU8+MJE%Dx`FZ<_Sg(dkF2$Lg=>D%!Kvnt2&9c+P@$W6<>V+>xkwW};)ozTXEO zD}Jcrn#q1;$MTiSpM2wDl6KSgl?s^lta*i9XL;9oO zmi{4H$wQAGt$6b9Ug$?YIOtN`hux4WW}XW!52o3&Z8KjU8R*x+ihFb=>6-(fomXi? z^@vC6Uv#?~TKWM$(TZq8W3Mqkmv4gSEgw96Y4%=ZZ^Xlq`11MWm5p{6zb5j};V0Wxe{DbG zwk_NCSIBoAzrOial1DmN-|q|f{u91mNtr8r<<#$)r2UvQZ=5FZE*(ts)cg6*_Bvile4F?k@}-Hfw(H=V;!B0ur}-AK zQjb&-ceKhZ(ix9Qh4^zRt=QyB@S*=!rR-MDb;!p4OW>vt5ienzd-Ii7xH*}E0|s@JQFHO$8LVBz*!)*s(z ztx#)h-O50L zZ8uEW*~A}hWq(oYOT}nh1TBmL?hNO5Bm66F+ax#sXr|PNm!tPO`*}USM(pW%XO1(# zgpIE|%o;=aqz?@oTMsRlAPY^}>zDimcjI3v{N?GJ=WnFvY4{YLb~Ha(aOmtXYfb7Z zPT$G+N!R!m|JqCR;1EoLMX?t=IMxj`|6zz_T5tEh6+?$Oj029XZlm2x%Ij0_Fjl{I z$I7_lv>aJk3BEFnQ`6nCg{}B-8SvHO`h$^gq`9YZrtGrnC-FkNql~S_e?Rzpp6~6! zf!n+26M1LU;wyHQVy;3P8owdbi_N%Nbv#PmFnRRc&a?ai^e$TO9SelBNY?MjiM2Kv zy+E{l^i1|PUE1D2zkdJS=;87Ver3>dNz6Il{wB|(lbqM*E`>1rxjIwZ&KQce6?5t? z&ZND=f6IAh(FM@<0(@6za$cjq7`kiwiJ^N6^tP6HGY%Z!lj6kC6;2qhA$F`rr3dlv z>;d-^3l|?YFXn~%J{vfClm_hdkS;XPwJWym|yrM`-rzMS(&1{SCH! zL;in5=*OO8`N@j!E5E-NIKwX9eny~hJA1ZI*9HRJSAoZ@=#}T~-yX)HZ_Nrw=B7G30_S@CDlg`T(L5Bm6#{N#YS<;Q}p6}z3` zS>xRS?kim$Fqn7o>mvR=KM?V4?LEt1)#29;oR(jI=*>-sU*B19Z1rN`_`k}pe@Y#~ zgM6fp^Xt*+U-A7@{F=SE{`mDHXA3H>sO(>YA-d6Y}Y=c#xlr!o^71@ zJlimz$HLnp|{xU1~1<{3~VOr%d4&>QlAwms1mMYu<(4d*FfIXPbeR-gouWzoO4^ zR)YRjbDrh$NPWul*{%%~QP=V{x6p?8jaT0j^y?iH>`sC&^>62=`ZqXz<)COTebA}T zt7jl>IDI+p1N|g@Sq|>51co%}PcV+n;G-ol)XwXcz~{P$poerr=b2DZx`=vTJe=RC zHKTOV|9`yyzcb!`d3StW0S%Z>9`tmv(XnVM6dJv~=~%Vq)j^cPWa4smPHSLeVIAj z!dyaEoV5U6qx(KP;K{*I8SyT3KC3LPv%6=6j;&q@~BVu zI`F|iAuGAllKeU+Im(P`E2a(EP1Khr;`x31!+&~BHhK8lhuZsCKweKLP&`+ik@e!A zI647qPu5A-9IIP-pc2~&=h086--fmQX8bAR%;iz|6J#s#%|-{UTo|#jPMr8n&s*8$ z_*#~vKRjgb(y%dFPn5S6ztwMhe z8BM)Se3XTS8h3P5_Cp)deH1HaId-10D)V=jeP$WsE3*e1qspu*H6weqGbfsQ>$m%- zl(_A%PO$B)#g#aCb*Z0()m`5%F=M%wr#W8?VO z7N`B`e<58k2qwWJ_yn6DF5*QS(qQ-1Tm)siz_DXC$ zF?^rAwTkqU-u|jDSeon)&KF%cWZUR3y~9nHu8?KUKgfTE|1IvjWRJc}uK<6GVvNJ8 zfgRVkUVPW(bVf#?w_)OeOA#}hi~jphnJO7uOGMK zIl__f)gPV&LlRmrW9wfNJqaF-dk3^9ShUufi`_x6`0G`fMqn`oV`sh&tvK*dj=WyE zCm65u{}00B*e!a~&-L!Oyd?Z%A5fqC^fiNY;dH|Z(yw&OueIs2i}WsE@0OR&&|m!* zxasmA)%eRcq5t*#i#}Gl|MEB0yKHNMN9$VQGG^@}f%G{+$EH_7ed1wSCoU*B*2B+a zqa|+sNa>M{hImn7Q?rEg2iP~~s}AXw4Z&k&14B-kj~8#Y=br-MXib)U*!1U9&hqY7 zbn=fEZ?SVhy!@Yh?;igQ;JX~|Fw=t<5w8M&vzL%(;bnp8hWASDzdD0=Vzo~Xzip=1 z@lAedx_dcWi9O_;)(XKBzLETV*R%hAB)|N%vX}E#vV&9<$VPyl1hgf-8bcn*KC_(r zj@RIGFP}N_*ik35S4KOh!)v2Hm~Lb4M}esxm@J&YQ$KX<%=&X4s^ENLTcp70QvvX< z9nZcEH0bZsOU$b<>@S9$BNcp?Jm@?A#iaz7BY`PnC4_p9#Es^se}C zTNS6EV|>Eu3)nKGBm9l{b(T+JSM$e=J5hd95KZAH_o*`d<*$zhi0e|6R+-=TTjm$o zT;-El)DxG^iF;YZo`Q3ySOt2E?1&Yvj&dz^{TjXKwbG6$`?xRpPxR?6el_c>5{tK0 zCCa!za~R{>@;&$l{J3QeF+8zl><^Y~Upvz5eGl5&LVoM>X~reiF|Pjr{!}0FMka1x zY+8P7=Ccnv>wRoXEguo@4cXFi1pdM|ThB?{KMFne)RU=7ETNto+9e+;QtlQ7HhYebaokEBS5n7++cAvheu$hCe~2=V+nI0DrS_nc7NgHR$6Q1Xq1#NE zqP?A-`pDY@SG+2rIww)*i(VdJ*M6&`18`1_bkR=->DnI`Ui|Xq7vNg$bSWMF{to|9 zHy*&l(60CVL*Mg5zUK#h&kyk2PF<1>vlYwAl??Y%slP!|Jr|o{6W= zo)16u^jG*z?qcfrJ!82rzx2U{`TR%UB94USK>Y5Ckp|vp{flpA?-RVoe-0lNA9~Tu zFM?LgnH_7u_4zSilzx$9jHSnD?`0EXQA;eY26$gPXI}%z_C<`rL-!UGEC0r=X2iym zO>yPinklh)(bQKxUC6DYmj2F#jz-PBU`qTXGm?FVYVNU}-$+^Wwi&UC@~Usu)A5R0 z)p1KS#a@o1OEc!4K2^lnm5}b&i`3teT%LVP_Ig~M$D=uKuVL+x!2CMSRQu~~guXSV z($j9^S$J}2vA2#;15VXP?W-xj!*?n^rAwUc=F>Ut{&bns+;p9XP(9L_)&IV_!YM92 z3?skCzvdpRf9-V6CthAu)F%JB@yu~zkWPnXK(tu$bjz@n3`onxqsxt zN@NeVG30k0aj;IIZ9fcykaz9NfPwF|z*GcGKN%aCE_mC4yD!Z5BRd}>zt@MkUVh+@ zoHL-hZ~j4j^6z2p+xqEGr2NzQ?`Qmb)sLJ}{)ib+tubpyj$2sAgFn?p{HXS^C(V@Z z{}^c&F4AP2ll=sfS3LGuiH{pNcD z^G_`?=earYL}TA_WX$J~5@%B0O3#vZG@S(~r!?pD5Mi(4xe`|_&JF!Ru< zv!qv@i~8hCGVV^kieC97cZ&uTwHZ^?)>IIEu!S|5AuoOtd!w#?+Q~VHx`N~5{Sv&Q zj`8%ye>uJr_29d%*UlH_{ zozTP*@-&dYiT@Urr;oOLky{=*m2MgtKKi`Nfj=_5_&lA{iwv(kZyNu7;k|-!^~1Xd zp7>et>YjnV@TxuaEkYmr_D^Rz<}5qjU(K;5(ckcfp8kFaTqi1j26~mhyzu2OuQgBu z^?Uf(104zeNKw60Kll*u^7rv{=9ujxIMv#CH};X`%Hx|0De7r}?jD6c1N>S{!Mr%I z%y#MSlHsB|_Qs(*o$;JQSv#iV(ZRvd9JefX>v^)9RTY@?S}3bLJE7Z~hhK7c9rUg7 z7H^D@?v20B;`w3Gy@@@rjCEj1a@VCFmH_Jq!6KUV!}1b+^~0h)o)f{+*r(mw$lKGd zi-XL2z1#J0a0O)>z=0hHa3Fs!udHx~pUtdsL(O@DS$TwmOTa;+aKISNq&&QKgyxBS zJw1F}FArr;Q(4-vxTIduz9&yUUVJ=0z2Y*<4ybq;Bc($l zU!wRqNEiC|PmZoeFKnwr=1aC-OnQfWAh2J?vCTPg;T=1J7t_6xarES{Ki0eUq4v8l z^ll$t5Zitb8)->;FY-??XwPgW`wRaJ3|a%+91OL^&_f#Mbxo;V?yQSzA3=v;Uaivl zjQpi8{BhtL1)TEZWgWT0>8uahIjis{eZgtxLwvMn)QlUK7?VbSV7$wa-xcVw z+T)jQQ8{<=l*XG}d(2SuBl>y4_RJLNyiw-4XIIgDy@0&0<2NUp%trD# zo-$`fG}U<8>)c%wRLuYLE7`AdRX#sHS z-DjU=4)v$sIp@@0w6+e}U!GO_{5$p>>GQqe_ziH(0S?*qlwbVt*U*<>6U_3qs2HSL(<;>wL*U0|dZVK=V zD((&ee~NnJ#Ead`dOpfCvX(O=CG7Dkjz9slUz{cuS&uJ<*3jOZY77RpzXP0)3Ql0o zFCF}9SHnQ=-gIJtJL|?k`h4*BdgC62TiA_@g^`#Jxb?<&A{kB{E=K{Y1cdXb4QxhT5y zro)~1TrQaxKCBpc#I4Jj_)Ul53vFZbM_0dfQhn;^N<%ziCmv%L=W;tauM(qN!`$%U z%t|LexM&+r{}2i&^^k0R65CMN^&A zu&KCp<(mVW4*imM%4Nwf+e$%E^hf~z(K0uF@1eyew-bA{;`i=B_f_l(!~f)y*ehAg z-o|E=8xX=zk@HqMcOc%dmc5f8|GTI^`%7XoGnR_!rMdDd&x%8m;r#Kl@QDoYWLiF# z%5MuST8FLKyO;Nuz^geC0msBKXft8_hfUeMEznlXz4IytuLuBpz_4#J_h)9I*E!T0VU2 z=<4hZ(Od}pa|X@gFUS~_Gd70{N2apitBY~z1n*v%Zp!EkkKh%qGtBwlfD6$;=7B3x zOBnl|*F|$n=T#k69???QZ2VyPF5KNbx9YHHw2QM?^?Xx4(V@on_tf+8;%KTrI}~%r z`eHl&6`Fg+>8rql{2QGZ)CJ7Rvh;;}KUuw#zR2b)|5=00G;YiyefzHRZez^04X}Gv z<&@XhYi*W+ezMz4?r!oN3>75U{C_I5_2k4s=;pe8pR69`($Rri!38w*1o{9zc6QH= z_4lle$S%9DMwtp=P?};CWLwA&9esOAG_{%axqOt8%vs4dwXL`i9eiu&U1uGV*vqml z_>)P-F#g`yCj|RA!5*@(zo)UIeqtTuI1`)uGwI01MQYcsd69d7J0v-9v-51#h$7cE&h^zLyypUk1U9)-9EHBhWfVP_at}@(}$hZr?OsMDjz{N z`H1iOCf#2Dl9B%XYVE~(HuK~5a`vv{`3K8yjHV6-xo_~3OIN;w{M8;|WvHxMe7vJ{ z?Hb+v@NMoPF5xuWT@hnaz_9%XTbYaIfNCvga)u^H|aj zu&1&QTkK%;k@e73BeWBPZZ5hrdKyUo#&=J7TSbK(e9kd0H zvtu8nzw#;n24laT@BP(-{dAVS9}@hLSXuRqwjrsFS*UlTng-E)Vl$b0Ara@AnRW}m=|_wet0 zmp&`|_mezpK8Pl6gnx*hALLy+dVm;++Oub>Jm~FjD?W()b44qoumhVS{GIXtLKbXq z;J*c)a0dKCvc3hKV<|e`bJ)+N|COy=vSxFTZ}948IlswShVDZTE3|GF{K%omDVO-tUZan-=N-S3e3hgxTE8b!Lqg=aL?ds=){jV?+#h*VX=qg z)FYjTarE+ed9+TRgf28^pm`M@FyqU%|M&=lLw!S@i#N=;lJ9;v-p8io+yPRWKHKtw z;`CR6U;g&2OID!HCnoW({iqQ0$HSd}erfJVcONr1nu>YxK>-Lz)l# zHgi8JG{!wufwVUdoVi$Ld5wQAhV7gvOW*%N@44u&Ym005}yjmcT1I_?O<*MfrN*Q+gM5{16%v z9T;MVmhV~on$A^t^EpX7-r8CJK_kEZW9-cp*n4qjqX%7qZ6m^-ot`_Pd#zb(Nq>*$ zo6*ON*|X!kBS*{Xq3tO7&gL23Wpy>ZAEQ0(>&CTz<=z*)#BEpW)A7ivWxl&&&*$FW z?*PXx)}J~*zYV`d$q&&taKB>0rzOM-4lP9oL+1|;Mb{lRFlEBgMH$iHm1gh#&>(*0 zuWGG3fjYF;Q~(|7j+vG(nY|hKz%|YLrm*&{UYbM3!B1qnfB3_9_%^2cUcTWc&@BFo zjA)LDHvN7XXW}2}#dfKcj&OWU2c5I0S!&M(e7x9M!+Calt#N{d(cHLclCS0I=dZMU zV#iIi*SG#XWTTQy++GBiyb@1zDoR)FGlwQ1_Mmud5s!B?AYke zHF2%8D!JDT-laQNE&nRk9--s+^bGrxCrb1DmmUTN#xj?so>u0N6Qg@nIz=D;_v-(D z)BW4G(GTd!_M@GCXkPf?bMD`EbQt+pY2CXY{I2D0fw>-j;ag$w8-&I*f12iXP6;in zvc9xykwvZe%q79Oa3y`U$JdNK9S`RoUcbnk@WZ1shySbaOa&g%;7)Wl-8F4om;}$b zKJbXI5<@swyKubY_vV8I*|dXu9umY@U#)e-PT&?ykAfe?9`eKU{{-zF14sSQ-r)ZQ z+SB-aym&*3we||{ZfeIC#<;EzCL~J_j^jTRbodLg2g=!Zw!Eh}m^eZVK*`s!@ZTFa zua~{uY>I*N%xv*MYzX(6P15(q%#BRZI^pZ!Shlq};CuGmQ>L5?y%FAI` zw2M6Qv1Cogxjyht-Y4jvY!{vPO=ZuoB3*@_13o#cvu#(T>{=&etS^Q3grrw(AiwUI z(iyTS{P-&HK)w{`W3Y#fwf@R;kawH$UFLolTV_0MsXftbwyZEU8GR!r8ZEm#WzQ30 zKaxGOhriA4!{4ASPw(;gnq#l}FKe%gvJbB~6oY_eJn$)wyL7=?V2lBy^r$M*1piRl zmXARJcs}mG;KV796-09j?hQV?%oudQg6<;P6|a$<=T7yT=Y2zt`!{&)b{{@2)BN-* z81_?E; zqL0c3iM;66{$mu{2=}oAZmw^b9{_&VGtQlv=dI%0C;n?=j`Q9|>NT`4y|?l#_Vclc zE@3Rx&vxWqBz{_AituS;NI7?mUj=RafHSGR%3gvW1M*Gf>VurIRoRZy5@*=5rPcO3 zIw*E?=kCaUVCm1+`BUh(5jv62K?b;<=ikHmzqmLL6qz$Z#MhP{tof$@j~D;U$}7zs z=`$W(Wrqw&Wgmbxka2eIF)miFbLLoc?nuM)HM`Mec9s>T9wx4q?k*FL%igDd@u`r# ziz{=X$-Q|Ld%{|?Y2RHY_j<%^z`tUCQu;=`JW)qqCotz1a6f$H_iHN-uMZ_g^DX-@ zab&Jz?qVZTz6^G_Cz!vPnVctk2wnqB%j{`)E^bdF^^_ zzR3A+>4YltbI~j3O4i8+1Dy5I(|hi#7r&wIr^J&Y$`CMqU zb1kv3h#BYIv9}d`NZ&k_wCsh%qh4G&Gs9STw!}9MK@)t(A8kYi+Lm6K=bPlqR_xKD zg?q5A-~E^T`TMVP;v`+qy!6Iu2{h11>>>48-_`|0bI?n2M55gt??*JB`34Qn2oSGA zd3A0{G-PpU99(LQ9_M>!Xj-aq!m1rn@|A#_O6Iv>_rskAM&{LrHum9tnm@<&<1Bp5 z+4JZxHt(xehIAf0x|+4frtCSZc68C6VA{{KbhK>Sms0zhu=9;${$p#DjQlw`*h#*+ zbIE@z^vjsUDU;#Zvr&8pm}Zf#Jrs@AYy5}BBal@$k!E=rv6NObx4iFP;k);I4bT6` z+>}jGb6fi#o;>>|X?<~U8{dT2nebiZmmMX)ZOE(mi@5il22vlhPIh8=6tZ?7nA%OB z2L(7ocvm1dh_QQ@_z$~_%=Dv+@$xAkrUEiV`;9%gy{oPlZX2KV;!0}ol6?x!?9*nV zBQ*PU#Q|{FP%E_l4@6I54Ke^(7(x~Xxl@3GS3@B&*zm_}#%|qZa(~p_$GaVVXXRPc?0xAOXdS$ZuBwnr z5p!N*8TgC^vG)^Sl0MDa#h!?4&x$=VkRQ6r3|Ci~A)dc0G${2);7XomCU!2U+k}o< zP23{rbWFM_c3z?Yy;X8Pi*41rI|lp7tbvr#*?%v_g7)J@+ga#AHitN|BmL>}jq$%f zs{GpqvzI}CX9loC^Nbu?{gn2T%hDCpfABu&jydVb&eHS`?ETL}z;S7M4{c-@5Fd;? zH$1#_-l`avf$iC*I(sil(Nhk7YQaf{Z`p<+iL7kt=ps?{rav$zYz)ttbv@r+(KkPy zFT(fmXUFjz6rQ6K6V=oS9~;TKx2CHL+-xgM>;X^tLX+FIw2-?6!3DIMK_B&SUjV-M zugtl@qx*$U=25<~9bK4%;w;YqfC7eE`yGt35uXOyNpn+7Bz$w`T^*kxsd z>o^xYxn*=OQY3tSViaka$H8YqQKIu_*eb}ES%7>8Ux%4vUF)HxP#~A*-p71HQO)5d z@D5J9z>U|JU7@0c`fwun<J4C!t=DkxknU1C%y-F<-vWnl6y?67O6&xkUG(n;(n#MsuE_>$F$r}-w?P2GF901x-{uIXf-Hx#Ov z7AXj{aSz`ntqYEU*zSy>(EW8Pv4}wMLFl%$#?Z%c_P?v z7rE`l_T@Jyp9l9&;8vd7XmclU3;rnh7VOG*40!(}{&O{Hz@4>il-v6#HAlrCKZ5^g zPw5Eb#yFzmSJ?W_Cyuhp9Rt@{`lz@)%73x=75SXAAr)zr|G_jfsk8a3sX!4i)PlT4wP1pPk?apF=aBqp1e}~dZqaOmUgd$Pj!6s&J^A8*;%%B&DLOW zdl!83F#OWHW1_2Rc&ZB?ip?AOIK=WH(cm8V<6+|Gd;F{~e_X!Y;cJJOyZ!OUe?IVO z{FWWXn7n)c9gSPj;YxMlqXSDg^Qm4%~#b<9NKfJ`_$MgGX?;Cs*zO`30 z3H0@>t+{9C#ZwVt%D(1~Q}i#+{br)cNOVf#Wxk76 z5#xn@fA+hVn#5B4BhG=AJ1w6do6f9_=GFs;AGc;#epUtj zJC%Hmg+3i3hF$kgyKb`bK9Zc6s0wl3h_UhK%W{9-Y}QyWev7dK-_4{Kv&Pk0Q!+^7 zXEt-MEo~eW-hi=6_H*k46iRD8-nrkIi%NS%b8jE_eDl2%Tx6L`!U3_+)-Vq&ud1IL zJA47Zub7JM<@rlj&Nda@W{#OP@$e^hp8ewGPgb+`zY^T9kd75W_v#q@#v1cR`NIaA zdwmHVS6ZuK|@kZt@<6_4P9(pjuU467`SX-52;son|Gcjy-~J~pkwQ}opsreE3i40rYlA3 zr1#h&R-n86gNJu$HFnqaqm(U zxZh1a$$Zsm_0Ea1mAiJAx6z-z=_?a2N(2k>ccYBP!s7o+4vdkGvl2n>} zDo;5-Zm;Z%+oHhU_qb18^r145jv8`o`9F+ib55 z%EX2xmOv+86D&*NZOAIt8R#bHP1q!>u>H-3hh#3s9!c7gA&k`xjM;SoJ7-#3OloZd zI?i=!16oBM)Iz6E5HsG+vHPOA%TzaGmSwE_t2+*l?DSeaL8cbG0gsVQkFv9|4~N02z8h@pf-kdlNW#Sbe38Bd4SI5| zY`}~|5k4{T_(km(qoYw@1{~$V5oK!n&V~Eb58!6~II=NlHpx#kik{M{KBKo~#vPaG z_wemtQtV-w^nw*VdO^p8#4P6fmr0Y(q%|h73|W^|5R=N$nUcbrt20So z(j6L4e#E%$cI0GV{`&;@(waLhz7MYbYs$bc^0Qt+{`qBRCAQ=DE^_9oWM?FPenK|n zHI(=Abr!mG9dg&L7m60fq`BTzJ`-qbc49GP0 z465y#D~XR`hIQ9E@X$kJ9m5mt%o)*G2RL@wrSTmX0=I#N z-UDBnCt3qYU(UW@a%b^P>t^W$0c3Kp1K-T0MG3{Z|9CHB&KhnXZEDU)PWksYrZR`^ z8V|lwMH`-+v9fb6bO7#pUwuE8hzmU+mT~?raB!AubGuX-jYj2En2{Zwm(g zcepV4+tB#T{k!8Z1p2}-G_d!KQ+zNa2PBptvkuXoCs(*fP%y5D#Lr610Y`mhanYHg z&C>K=C?j3vBI)`klBZ`ldEX&#UmkKN@O$Mfez0fVPu)HE=@^)hP3slGwiNsz7baIb zwxN|Oi;bug+t4BAtL#O?uzfh|kFxZ{y(fn0iPIdIe$fw1(^ao+>p1_qsxO?#=3Y1q z%hnU$@t6-z`Tr$3gLjC3!FFpu@OH6w_24b~40z{`ci{b(e&9W&A9%xk;e7>NbDR&a z$-=}s^o6@sALGVeR}a7H^v(0-#mDFQ?d0`%fgP)FfdlU6bH)mumK>JY3J$(bzLobz zR~qJ^XlTv=?U#HZ@qOCBzWE>VEsDp5Y-%vMJD}rup`N2TVmjIURlpSqpPP8u&7avy z{#%{=xA^jp@baTaMxtjY(&U$(XW@Y+rJF>eLlX7R4M|A%TMn+5`ub`6@C|enrw=PE z{|aA#O@e!P=!1CJ8?@o|IS8C8qxrRbgzzF?;4$el$m`iWW$)aF?en+3a-D~cmzzrr zVXxenzWAJlUQJBl3+ zx3QaiVf265_`gp3-t!#a^K9SqjlSov`kt@#J?R!4U_k4!$`BdNYINx*F_xyR^bA|7@%=cX4dmiC? zKFRky#P?j}dmi9>4m!^kR~Pzlb?n3Ac*{A@HqUv!Jo|ikKJ-1m?|c4>?|HZHd8h9= z>wEsQ@A)m?^BcbBKk#h#7T^gPpPu{y-~D=Wx88j^h1&0{XLj=KK$D|q{@m&mrRnFa zPJtf>`xSlliPy<5eL{Okf?+TJcUoPuH2pi$q*K%dDYsrc{J1=LQEmI|9@4wE>6_1< zq;LPpH~9rT0iLC=DkfFmzGgUQyn%c#lcxEqbZ;HOi5lc=ApLKo|Jp69*fD+c#jzbL z-#YTize#oc2mc4%XT|N%H~HuHZ9j&6W)pK%je~Wy=jqdDFOcCjCD)T!3ecSH%o748K zlvzOfGyUYzSp&g$6M61&>-rJ@mFSfE;ZeL9bx8=3$vBEZ{SBW&&oMuZZZ1!Xloa_ zPH;bN<@bt6M@3>WvL|z?U6Y`PmRQ?CS5G~TP3ZL7oIX#bY_B#>N3N5mv9WE$#w6xo zdyqWHVBgpSe%JmD-3uFnaDC2a;PpjocPdUx9tf`>hExoUtNyannG~pH?si18byDhPkI3 zTdCbgZsI+OZtT6!R=V%~2Bou?SYXPwYdmF74?>gL|6TPrcpY)$ujVemBsepsEYZz3 z(Sm)Cl_hrTo%N4wgthE9WwC)&@}J>9LY$&46S1oXJ8I0?W}@&O=_pRb*k=~r+27st zsj;*6#p3jzM4P~)`S4?K*x9q!Taq5b9Pq~I1;)$6TW25IpL>%-2ftBWzA?I~&lp{= zciq7UU9wkJp>Pa_kB_JXvHt; zYj#1S%+(sr!F{32*>ge9WA3zIBi0%ep0+oN@04ggfZl3!FZ|`u4&_EO?xk9f`|wiU z2hI|`Gxy}%DE=^9@4!*XnHjwg)jRNbcX1Z+ZsgyEe|hKb-hL=`(>z~^QtK<>x6fF= z349vlH=*@Wo;$w^%A-f?EdFZpPt7#RGtvVt|JM=KY72CXc| z&MZ7#*oRhL6Mes+J~}+|cf5P_X8G0>_|{cEm`rJ+6S_EqdbGw9{fds?S2_L#n|RAS zA6%uM0awu#4qT)9!1YrfT=92^-_83G^!8r(V-3>_R@P>NF7?40EwyX2Pc)A1T-!!H ze*8s!aQ^lE6VJ6L>K!<{RhN&Zmipin&9v~|3#ReFgx#!%CwG)4>cQWisK<}Le^ogj z{wjQM{pK^^dePd;iqpUD1J~F3!1dL>aKWc<<37$FxLiK{4D}?zv-qO;u<&*#Wwp26 zmw#UJJ}_IJsL*mCb^|FSI2SXf`6m&qRsa@Jckb|L#GtY^hf?&SXv-@@?A zM)Hf&Dc&V8brGCk+yMzb$Z4w*2EfX%cb&Ye&SUWsr zGL>dh+$}SYGQ!DLjeAE)Vh47I?8A=UW_ih%u>)d*(>+)Y?#O3GCrZJAtpi@)37_8& z{}-=6g#Ur$!LIcK5~3H$0m+C%`BHR&0X3c+Im%qAyky|s82rG`%N_w%`Ndd!?0@BF z{gC&V3*$PCTat16>+x~>qC0NCAYXsu_5}7pZ`|Gk-`=>{yIFjDIXZu;aqGm7+Z(qm z=i2i1rsfc1Cc0}^8{kIsO8C&+5{=&eS70WOr*Ac@56lDc=kRaxvu@@6Z2Hg%P3`N# zZ*e_-i+4GGi#H4Y3$cwL_vC}?mxtGgzw*uVU%ZBT&L`g#>dLl#CDpgC>26(h{nS<8 zr>=VHx|V#WP#3nYgu#zkEu0uDmfSIH@C0#>$hV%`? zyuxT>&-RC1n#w>!noAkSPQOCmBc{aiP|@iVq>Gm9_js|@clCXp`#stx|08_&V64Y? zMtffJclu}Hoi($@SMf^6iC^&39Bsv~Gm@E{_y&12UZRbqZkpPT#6~A}Qb$sAkn#qf zmM+F;iN!?$wzE+86T^r@#QwPEc?;_n@wO)J;S{fA-@L8Lgxda~=z6#}UsBwt%ze{R=P4g$A65J0zt~5U@~8L>@A9Wm-{Zos5AT;~ye@=)KC#l# z$9%N>oa%9DS+a72-k%jsI(ukO@qQ=e9;S}4>}>eYz5pydKP8*na?;lWllQ)ickj8? z_k6GKd9m+#q3`+IzUMo9&zgT;of>cN`8MD4ExzX_-*e3O{575}UDA(8d^B@nOk!vE z@%pau<(=VszS{SEmGAiq-}7a@=LX+%lxMArB{LO=Fb0k#H?QZrAMe-d{c+*l(R×~HkHSV+G)9KqD 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≥*JOI7Q?SlT{qX%AY$pR#m(($e|7 zrE9mP`xBP?P9xKS%w}XZ@!L;&FZY95x9prMYt?qjJ`ddz9R_1X*5Iq_W5H$Amtuam z33;R~ZR<^$c%5lmuda_3c&WgDkl&XoHpb2DJSc1PbjuKMKRKG)AfyZ$3G3&#s8Va3 zSb?XfIj{HQd9Id^<%OQfbGJ6-wLP8p5UEXcC(S)K^j`1jxT^EY z)uHQJ$~TEdBd_37!c zEBEdbEL>7k>%yH~rCXM=ZC^RI8QU^r$^%_V{42XPSL|DdN@T7XIE(hdLKaV zz5J$^-{|j*IaHO*q1>{&dT0Am^V7rb_N8l<%7kHfU8c`q`!>4;E8D8;#0UReg{$S? z-THFa*}hcU4a%>Oe1BE#$RpC+_O16sTpgBbscCn=cyNOr>vZ>!+sfrwgS7O`x^E}- zF7a=aXAs##m-G8xh?b9}s}DER75vs&Ze5cZOpRWs$Xvu+qbK)kB}u0&PxM4d-`^m! z7?}pSUKpZNkl;=UZj9$erHmt`{3e%?u57)Lb(qn~Wj9Zx!!g{l-%vBaUoCQiSMpn7 zv~lvs7|&gL4_UU3jWI&&S?CI#)navp3)_pTx(XgnZE8{lHjcT{JDlt^>-})LGHyII zwyvu{Z*d#fREXh`F{g-eiWp~CfvJXQN6=vhzvDJ2X>l)$o29F&4qe@{(%pKMc@4R7 zkoqcF6*o)Y)q0h9sFK>q=;x-IImNTH^(y)-M6A3Lo8mQ;Io}DC%^SvpHhmx`-BvR* zF5PdIqDS$yuPP7yr{%Hdn`+I&Z3MsR+Hb^(}2Tx0i?C+-2{+@xjyd zanjEFiQigHeb(I||Wtq{~M45fk|9<2U9kk{5hD{LSLly_w&! zTf{}~Iy~EdnLmJ-^q9ynB3t&^OM>I&})Ba9!3zjUMebGr>=X-Y|M-^~kVE z(!GcDTKU~P3z=#8`pZ%d(M7JFExnsvEw!QBJguABZf*C5H+I!@uY0s}eaD774~=fp zWsyztR&h5!h)ud`}YOJsK+8uiGv`FW93_@MSwiQ!coYxUJy{lE6m=vr~B*8UKquimfkapjhK zdTdBuO?`Zj-|1t&eL=bF^@voQbeZJN1@3OQ)C_Bzn0+Pf`%!+UPtF{?LA`l)K}C_d zSvC)AI`cZr=6eo}*2?I3t5)zf{eK-+EOEP2UrC+sCa#*N`0c+`y%o18ZlPWL-lOz| zeCqid#4RqraVY+Bb;_>Q+!AdgvuIsiPQRW^uh`Z}w`^3aLVY%|^cv=30e;iakZ;(@ zWVY)GFKI9EgbG`VoNZ^cF7IK4Ux^8`pNXv;|EJ z4C`{_kSrU2d(dNq-)<~6^hnQ9^j5OWnYZI7j-UM>P4#=Zd4UxxwRo-41BP2?2B$#M z=k89sdaabH5-lp@t*}amGmR71s%z;N`3=cc1zcp#K*>m2DTkgus58JA{fq%tjwi|R zst-na+6r5X+~G4Am3L{GQ~+1{6qMLHw#pP>^iXB4o4L<$T$k&((QvEEbxT>|Xll8x zhB<-GXMs^=jS+rpu21PB6XazxzkS&!ea849=`(_6k3N$k$5GsJFr_kmC`HbsoMzH1 zb++L;_K~`%$9$KMtY>!OR@Tk$e;Q?(9Z&Q;TzcMgJ7g@yPe1-AdtOyRW1X6{)w-n8 z)JR3Vb9iK1CfGugtW>r2%%{YJb(>gmYow|^U{vz)G3{P6JW?a~-P$O7EuZ59*uSqzUA>u9fR55loLWHh#Au;S@Pe@!=95>-D`_2_`kZQ5ya@V|?S-c)H&w zvUS>*H|=Y+T&6s_$Hs}usXc7f|Etp8wq$&X{@NL@ncKAze@15Y*tlD?aw1PO(fZ5w zR66bAs3S;4Y}le#U5`EaOZ*0_6l$*RB)!IzMQp~HEelMeOl5Ajld!fg^ZT>LoGxL` zZ0)*ITf1UB%mg-nAah}yIonHk(;j|b)tF;FSbyD#Xv&{J3|Fs~jTlanvGE2v628&F9-S>TLBIY%JJ z2t<@fk{E6i&z`YyO#ny#;a+&U$%{9?Z0|6!!6a} zRQs>)6TQeN{uaMmY_!wV+*fQ_OmMrGRJNVjx=hb^ot*x*j=tM)cNT8T`EK5wbFstd`xb=s=G=cE=ex{( z?RL)4{D|Mxm2%7-UpS!Kw#cW47HxLO^hAaCQK4Lg>o9rBUFYzKFQ<3Y6|c^ya>FB4 zQo)S&jQCRiBE;9n?*k|KPJG#VCPIw$haMaE<8Q}LQfuBy;|viCyk({h#&-w7C-HL_ zKgGs)m7S|)NrS;}4Qiv(f0=)zH3*oO%0y2i0D|;^Kz1Y=K;^WLIJJow}-j3cTeiONjYs-D? zYA|ABdlH8Z+Wqxg*-qlZgs7&8rM$QI)b=uv0yLfYFF7;YnY?A2U z%;;e3p_Y=q#+O->V~e!>?gi03X>s>#=w0t>sR^xfwO5B%S9Mf%R(5&1-JZ5Jt!qEP zx>?kgHgBk&w20T%wQXy}ciOYa$X}L!@I|MDlDt3gCe}6l262H=zPkNp_iuF5)q6L3 zwEQ56!^D+qGs7fuid+4uPI8{%q>!HBk<@uwqlb4b9DdV-k_^M%Q$x!*c#^<>%;~-V z+kmGLzZO~a*tz-PrP@u9r=@euec7L~-1=X-?iE$`{3x&Yhk35n@8`9BFK=~AEHCtf zy!L&0;qT^k{Ci&Kck;US=5>EN@7~j_WyN;Z$bve44!>z_j9n+~Ihgg)!_leLl-5@>8rjcQ>_NRm0EpFS$Vd-184Ueo9J~lGEMrcfPq>wqD zqW`mCyjAYFhDWrIjoNj){x41!}voMb!PK$aW5q7y6Pd$8oE zuYF?GH|8x<$Ov-oXBH92$j&{rEh9JkWdf7VN5gI~MgG_Rfipt{wQS|&Kx*Ej&s#9> z`A5#4>iN%G=pQSN7_QuU6a%Qud>4~@Ew?_`Uq=B?}jy#0t8Fv{kneATC<)0w#?ov-@{*F?BD z{y+KdmT%>UzL{Uu^|k!&uja35`?vhofqZx8*Yi7~`Q}#UC>(`NSz3&$ ztGoYn=O4Ss2u>J68WIUea6_IEm7FS&RY4(ZIW#jo8{YD7%1htWJFMa>|7;6x`cN7w zujH@bZOm&e{GK`AsY~g3hExxRVQkWxhAprhzd`(#8ReYqztZ#mFh-2rYK2H?<2wk~ zyoleVmpJ%{TL8B(ZqhHxN9uD3x0tx4+IU{ig}oQJTF+}c*WI!rbiU}6u19*_+AR6M znBRz}{#Zs2=rJ}=rV;Me3)?R6w3LJ{a<#9xPgF{WyFK^9PMimjabPLG6HlC$sFsn) zlcla+T8gt_n-B;bhJg11?u;;scBn@8Ns&TU#x*KyWeRM+(7HZ2Jo5Hfqm%9s0 zIKu8GY{{AYcD&JEPdES8n~V(N`n1o2M-C*%7dRN_NfO9hVVzV_L!UR4sps_X6B!H6 zYiPYn-%cA{KB*GMTFuy3aEYBm+bh^n2=izo77OV*bC)Ws^|N1}I%%z9vXR!E$g~zu z^1Fw8vh!NHFMZrk+uFMEvjRUQMtubgD`p^fc;W0iE)J^Co%!k@4|^65K{`n-Zt=K1b#l&T6fM*mF5g zM%%;gEgk78G0JHjiB*jDav&_@O+Vn4_{x_wumr~RTyea6YM?WfXSjdN$RJHtFiA96_TDog$7 zL#N;+lWDu3!e?bx9K7Bys4`6J`uHMl4U7ZEzIPGvc3&~6_k1kf`}I80?9yl7 z<;1%udjLLj_WkkGOb>M(s6$rts!2U=Ti%PTjJ-gX_a0g2>qiCNLvzcH-Nu+7B5dC^ zlpk%?@=mQsJkQg!qW64P%Xy)5-L1uK=d_<4UcR;StPU%t{Hm8;&WKnR&l5jsFCEs- zvm~H4&F6S4TsL~?J_+t2zb)@%zwSDt&RM2@BI%Ct+!_zSx#R&jw>$vnmIvV6vQzKw zDtbUto!dzmduBDr*;6*D?SYmbXgP7@r1f^Sozq(E4li#%+buDhE7ME+)T4>a1W&7b z>IrCCS!y1b@+X2bc_9gvv=ljLKQ}Nw8FfdV8%aNZ=h6mGdHBvPhE9)IJbM!drpxgawgEn?wC|DqhHLoS#s(oY$Cq^LZS zxl&eJPDxJ(-aDg612`9gXw8OqbMNo^aI zO)(>5@o(d=nJ~6Zlr`Te=WLjJ43FYxkHn9k2;Ud@X)yfAoGgx?;@c)wgZSaIk}{vb ztpPVVM?^Sd9wB+9_h@yAEnEgw%c#DdwT-Zu;ZwTluQ`s3@fi2R^L16ZI*+CQ6N-ab; z??R6#zLnP~;KnI<{-p)$6Y(OC#SF>P?lOZRdxprXm35P<<_zjq0WWE$XSFzcT)j?L zizDrEuC-cs_1^J`SYjLQ3rBL5LWi?No}XF4F5>v81qKm19)Vs zX?6Bcubi7+I4FoNKK^arKB+un_v_a(VrF;dSw5FM%jc43`8@J0pFGOvJ4F|1xBbXz zcx+Pj%b576p^I6>xI0$3GfxF-NzzhsTCK4*Dy^bk?IbP8GI@=4Hs-En=`}YqKfUIb zxr!IRrB6)q``vs}>nL}NIdiVBiswdOdYLxN?OpgCx&DZf_l}T1InU*MD zQcRzP%$?0tqgE~drh=1dpX6ii+*Y44aJO6JxuQ(xEJunm7h*ojTu8n(klu!WVeFE8 zJMjb2MdktNmm7G*K$5mnxW#N?-gQdGiJU#i8Sh|DX+h4o+ zuOD-eL%p}jezH?Gil5N-qs*BmYQo8n`iN1Rhl0%YV_xl-DMQ-Ol<_Nm)@EdG5$n-y z>AlshU6u`FEWazq*2us0U6$2SAJI|l36ZtfL%vFXZ1fS?eaUQMahI%Py#2x{C{S0$Nej-O-Q3xa1KbFALgX zx6V(APd{VOZr&uO1+j2T{Y_F971th7R%wf8e(&VASee@vbyIYm+J;2`3Uu-Ao7B&~ zS_-wCtPM>+caZzMoY8i65GF~O-8{o(d5xY$4(?^2t*(-1t7V}nt4sZ0^=Te7rrGGc zD}RBpP}anETJJ!+_1aQDi=KH5-TXM2a*|cZ&`Ay&hKK13q@QfnvSRv~T(>-l z>y`&|UGiYAyTjIbY1bv)7n>!27mAW`r)fR&j+e4_G_e7OaT~w!$jS8~lqWr;42|wW z>^<^@eucmN_%E^_NzY+*{bAhI&q_*p>Z89BO6K|m5?jGMVYUOLTQn#m>2 z-y_E&)=10UJ~Hf;CcBGMCPMG<$eqHq!z1^NkKJXML$o!A=(4>;?$+0uv2p$Ueg*L+ zNLwl6gQexWQkK~@3C||9<;f&5-LCa3EcAAeo0ouP-Kj&U9os;EOu9WX)}-t;`dJ-4 z*6^k)LkxG)kL1a@2Yu+(*B}w|FCRZ#ts-5s7X_-E8N~Aw99=rBm8V zrMxv|gHE;>-XzfuPL3*n=-P~?L3s1eZJM3E>~IWMDQQN zf9lLvHlOrfjm#UODtTj4b=xDYjV^g@lB@fH zt_R(Vs&|+($Lw6p;}=(B-Y`zu#r3eqb5-!Z^cw5bV7-x>{}sUGHu!YrC%f+VC~* zj+LEPcU{Hvd#9LybpPr_PQRjG=ecytIF@+n`PTkSy&cw&S;ldF<52lK6=M(>@)2@s%%Dnru*nno_@+i+XZxgt-p~j=`SLLX}I}F z`t0dRMp95_okedk7kvVfuYH^Q8;WBqmx~21> zp9*>4mLutX@9dnXQs#jRvO)VF!GGDRBk5=NwSP~_zTUQI!Lb5e{|Yu!-`;UV#mIB{ zH1Jn~TlG7Sq@Pa>n#G)5C6;WDOgG#z-&klkxuf%fjten?+$z(M`?^-hn}No*$%U8~ zjJb&zBF0?e(b=^^&&`^M$LlWRDmA0}U88vGbwx4m_ z>Tr{@G4hf5bP~7F+9N7zv=zf9;gKbfwn^wW7_yfoyJ@-8VVy^1Td2PqjXigfC-u{T zTPbd0XQIC{)yVyX$oUX`ww!l`>E{NGCX<e?fXs*+4RdPxSe@1>zA-8xNawR|bNc}0OW9-9CuRl_5 zCAjtD7U5bx;?Is-`5i}$^J*zK4{n3F#l;h!Fn@Kptr|S4*Sh3+RKF8YZ;4dOmPm~} zo_J?>VOLRo=b0VLHXRz3w`Xt?Ij6$7WSd~qQt`xkB>kXcC38$VSN5&sw(K8>S%*o0 zT-Kz0Rcl|IHPjD2IwcOL2-0)LDRhhc_-MK>(Q_dE(la^!VU&`y)x05N{5H(uvgwBN zW;sW*n#Xa?Rq}-Fri1KTliupv*`p&53XHN!aK^2scb%(cZD@_VwYqJ!r@bm%`CzBJ z!}B2L6FNMdZdBx;LuPPUmavFt@he`%he(jeI~Ym2T(x6P9vv2EFKH8Yx$Y2~&04wP z6v@smmv>Bb;co}h#Z=q69Az3s-e?Kgz4|4>KS1Nt$Xj1q;F z9c8XjUq_kQOB~X^<*#%b^P78UYeqXT<|OIqh&C{!HX!j^!(T1_Z4F11iFayI_K8KF zp8DQ9TrJx|x4T>G+P2CTSh`m*|3~|l^}`RgZ&^K@Uy|3pW%F=#`xc&5$6z~L*}g^F zD*BKYf8YqeO{3){k#|?`ooiaRwcYLx-O*BiYj|sWof)eF(`-&W8hg;mMJ@HAJH$_W zU3jYmpw5`@Vm-@gSaHHLE^hI)TCOYQ_$mDG@W>`^iMw3t^X7&36O3vmj&5<~0Wo=g zj>w%7xzW$m+(EuSazvk@Al6-D1h+RM^(+EAF8 zm{mywXERY}2dUAI5~PwRPYvn^p`h$BxZrxp8YquY$+h`2sV_WRHD>e{^cB+I+3v)a z`RtL*`5bX8$IbTKkp;HnYTRmYtKhzT#9uvbJ8=u9#$Ow5e%z)$ks6az>t6jrk5qk- zu`Prj+w&Pe5&bS8&V!j<(m#nuJM$^T|{n&AKDcmDx|b#~9XVzxX?hzkUCM zKL`G-cagqNF;*J=MnJ!Zq*~?&vSlHwpL8WOKazV<*S>W9FyTG?)gmL&azuq!aKXL@ zec?NM-{ERm6?(h7^_I4`x!WtkZ*_OPrSoQ2S9$lFPxn~29^<=_)BK~OY1?1c&dN~+ zc|T6N*NG6#e*ErXyeZ1Hi|aiuZ5;pq`JLlW$Y4wVKvjB!caBTG*wJzOSD0hkSeI@3 zieBI4yQO1xOULYzj@cs}b4OX{b*`>!yRSKQKi7erfxF4ypC943#JHfJLB^YUZ*sSn zg|F+lw(}Zyi#>E>>kVz!ySr9)U;QCjY%V<0B=uny8M_$+D~vw z)8F&&k;8i&O@H1X?|kEZ8N3waeFtBx7Mi~=QyXF+T1i(NJ<3^Q{k?RFzO(q-_XqOu zd@lYueMM7_6yBcF)c*#WzF#NAyk()jfp;@^`XBTSpkhD%#$P|8nQA6pSsoec=I(IwM+DhJ*-NU@@r++_hMb}#V^%Wmg`_KD3x^Di5>Ov}S&q(EM z%iqo0`joPw>j*kb{sX$2-b4OhdsLbJp0592>Mcetsj%jUjg0-~8)WRgIl4BXL*Qpe zmHp(lnDeZN)Y(1wTj4mWcK-9art;OC%GY%3a-3BD#*4emA4=B(qm7j}pv=$zzP}l_tNgo5c9S>qvZ#XUgA6%(Zfk!p=Z3`e2^$_BKydBBjjhY74~l*PIqQ=-|0t&)Zzn@DXMK1mty;E*)*pPaR>-_g+iA=0Wj=Es?fODpo;ojA>oHcg z=8Y~sw^?USh)A}ks?tV@h|OkcBOliPdCh=0={Io|nt!3)@(1${zPM4$2k&ykGbKCmdQZMmcGNRl^5&LPM?hnqGLM{!FCIy(icn-MB_-pAjUk1BcBI&~?TSGnMLomzI_wM z`K~K|M!JAtR?B zKf8&~ljBF*jX35kO<2Mnz|RPBa@)E#LuC$y=#xG?-ly%R3l7|r6FyF!Ncs_Dvh4qC z=9v3ZK%Kj)WuO(SPhbP+EwVQP6v!ZyB?s*lK$^4m{dM{(oHN|VJ+n$q?v z{Tmi*W#L&Z_A0hOa}Gj8^JFn9H)TC4CtQu!Z5j2x?tbR`zd5QR$WPY?&L`>-UD}AG zV;6q*;3qDAT+3n(S5I?6@5c+=EgvfgJyWomP9bfLYAV=pkfX|SN&n8@Ucx#OM>94V ztGnkpbMLdf&%4f6Lh zWw=gHbyDTsWy`(6^e3sRr1Zyxf#v?x>Mg;ZH80b@&wBLFKh9|_@XKQQL^HaZHHSPb zwqB#i`!S-sNLTqUUjK*uHfj&DIkz9YY49?PPoI8L&Z*|VyCbrudlxh~|6Ro~sV&`Z z3#!R3=b*FhUw@qI(FEg;nlHs`_l;MM@2gDpk5y(yD+fj@2Zt-uL)psgQ04Go<;Xx~ zax_yp)?c~QRbOMU`Yr4SE_?hoxoWzGF<3JGNC{)GB*QQsc&KFXgC%Wrw?F)9hk8ny z@gwLdx#Q#={Ixh+b&9S5l+16IO*m{C;#He zoO8E{nO7YAUpCVSTZliM|66p{+(-WZ^W$8nYwzi@+I`=Mjei|`!LeB8Ys6>!YHaW; zv7w_e1qcczklHBtVRLB*bb50?&TVvbjzH&FZ2W7``D!fl6^_pyjSc=ytR>Pu_eY*- zTgoy4jXg!@bKRPc$yF1zwfiz93^c+-DpFh=WqVSb<%)&`KBjl#DA_rdn|t5KQH6vklZh9@M^;Q{T80s*L@u| zq}{X&{#ATF*Hz39pI@eeBM;`{@11zS!+#iBemNZLP&;=)HMd%x+H(w~XA78r?Rw6~jhY8%M?2l#W8Dz3jY;fnFPlVQS~`hV0&vuxFgC zbA>b;R^`hR$R&ZlmFFg7I)(LbWsZYueGr|e@dv1vD~bB59GYY0=W~-<8}AVRzGt-l&eL4EP+yA+Tz%c?Ju7)c@n4@h zt+qNq8P2UapW9u?1K`28$f9J$@E!PNtJq9<^Ej*v>%j?-pdns$kTR})K5_+s#9Aw( zlOcu@X4*0rG8xh$4JO&D@@?e*g7dky!u+=n#5+&OfUW`rPDyZNF(`Le%zDyylD_O` zX&att7hkr_#KP+iob7;mX23HU=kZ~+q3vPnw1=TTWpDMQ3mc%W^%Zo)gPPllgKCV= zlW*qd&ii)4>4LMA(Lg({gGH)!R%;X5xq zpIg+tPOj>M-#k$={tyj}}$TmY6rtUkR>nY=h?>BEY>hP$gouNs| zQ&&d2eBKg2yA)&|_W5d1lO>DZj;;UY=kwNXTU*T^DjK6M^r;dL)Lg12?J?5M^GrF7 zf8v&9*A+<6vk{rjzj&z;)J@cH*DKEF4kOGZDu*=2=i^Dc07O^Uq;*qXD*yhP_&1l~ zeJ#-Hf!3P$IKGg$G$>jT8@!Ha*2-l*HJo^#GhykfqGeBMYLo8H(9J@#@70Wf)s*jm z(VPnHw|0cfjIT|yx};=QE&f={EKBCg9av>v=UZdrZ_@z{I{_zyZSlKfGPlS@#^jrx zcOc(T2i+^_x1%+`b%fk6{jtWidEt-nJaS#Btx3nBbL@fhejGU0A7VpviWw`GFbg?X zdwheeEBThclQp{$e!(+kF+Qc9w|#9U)(=P3CfmwgM1IG??GS$$98lXk-wkskt&O(S#`T383Kht3;~&Jo6g?nY89BX{62a7r~on4y=hg(`BIZx(t} z-RE75hL;&V;}8Fv7!Bf6>-I2K-+w;1*G}ueBDB-MdbEC2+1QQn#I&6z@vfKBf%Ax@ z<;u2E?fc+)=YM;hrFS~Cq^Cn0e2yLPOUhp>Ia(qjc^h@gP{X$iI_Dnt*0Jx|80Gv3 zJ{NWwoa7$Y*|h^JZb9buf5PLDiAk@u;RrM)A3<(_*Cjq-G`i6NF%Rr8g`GGyu~Cg3 zZmCVzaFw(>A7^b)+7DP->5u$#j&|%&POR}?n!b~s`GuKQ#d0PHl=vjQD`KF(0Qmo z|I@}wAN9ar-%fk@k*}-;{8>nnqD}9n4#VhwNEh%N9epqri(MX6XWU1+yILJMPX<5Z zD6-Hg;yL5y0&~k(z(#NVb+@10!hDlqxwK70Y!82syo*N9=Tr`THu2s2F8Tx5tm@HV z^@yHLG!2kqKi8=%{fdyThVL=bmXFgH@Sntsyf&x}+Q3d!B<1Vuj=X5i%$Y#!otmv?~79f_{()74Iv1C>M?u4?jJw|p zy&r`#p~~1yxvPPdv3E^08SUvpnIMn&GMBQc&Kc+={)M`#yfzrH67`V~uRo{sD;E574W`eQN=5uhlAHc(`=tN=nNE$Vv(&TY zSqr%ijj2b1F{QKkX5g0{-khxcMSJX7Z(N3@6p7YG%FtQ1kkh?oiJOep6u$EKFC@)n zLB0!hz9&Oc4h(TAND7CMwb9{j_BbzG2y7TN(4Pi21MC26BI9bpJL6}E?SqIdX&t-g zJig<6d4sE+WNY3}fBf=7ZXNv!4cDeJgr)7E)KEOGOPlcq)0Q+6sVdK+W{yv#>7n>m zT*bDyqadt%$&;>s_mIcc^$Sk-LN;xD_W~<<$wF>F^MZW+H3a!p=k(uvEj^!NLFDcK zwfpA^tihN?eJnNK^Rv)ydFg^5%O%`@hdMQhx&Btrbj<5MfUcl&VQD;gE6&oveIDWL%Xe~f1Zy#X?Kf*g! zmnwEuCcbmf8mn2b`=}Bx2+Ea5%XToBy|ZC=Qw;iZXp8?8S4 zs8m0zksR->Ty`g|{O;|DXkoKkxk`HI!>tRsK9#G^Xz853--oFn_D$G_%bpWgd$mHV z?S=(sOI*Etd;K(hC|VQHy0RT!sB)e9klOwywbwQ8$vp?H9j)*J_-bOm(VCCcF^umM z){&)mX-B3h*QO65uim>>j`;68Cev1lnHhlfabJGfPmR7j4p*7j(jh2tCjxTi) z6kj;}5c1gL7lQq%VAH@d1+X)~CV)xLrVmnR(G_6T?F+fi=K@Hs>b}2r-zQg%e_~a# z|G=uuAFsM~_+zU^{$N$Z;2*6T`1qz5uI0y@lT_FG1lQ z7%nD{LfLsC)l2JK@|1g@A}IvSyoDBw)FEa{k*Do7Pj|bgH!3vm>A7vuJl^GAnODCn zK`FtjUCyZ}qQm3eyWP_*gxhwdc34Uh#lKU=A}HELYWC3J5-I|`S6OaE37;X|)_6Vm^h`2+{0#eP1s;WABB)k5+uQ^I`Zeuw5E^JNIfFn~uxk zy)?>8Bzj(01|ENdXW_2iEmdR)V=O@PFf=FcTW~hYO-6HqeXrv5NK6Rg!z;X2C_c)W zGW?YsdDd`=#E5p*4fSU5N+A|Kmsv?3B3mb!1Kii63bTZ@qbpMKHg<4xJa&(YK5pyY z*dy?Q-Ql{Y@jV6X;D;`_dr0`*!S^Vz@(*9Ixk=l&v-~=yZ!)MhOMZJODvtmBcAe^F zN2{2Rw>deLU>V6%je>I*hs6*WUh!JOqpWc2_5yu#=pz@*E|<9NG4(^JW5e!Rcpq;C zlXg)JIC~$JPsu{A5q>3JWjaT*DW!cgyXg>#qJ>RqsV>dt zKQxZMJ-^M)086|BUJqG)gm(p4bp%!gtn4v#2!d(BkIG+W6*4>S>m-RaJ$0f%|2KhF zLzc+j$?pkpCwBGr}ME47=yl>~dY#A8NLOC{+HCxm=Vo0tuo5LeESm+01 z82w4QlkWtycE6W4a$_R&cQGAAv?;bL&aZ;@2SYqOT@{@9Ce*!Me^EEA6D}ubZQ_&STQ?$)Nh8(`Er zw)I2>>3T^wO}afi(-*!>oQV;>UsGfU;7M>QA6#%YxaHfmF~426hV4oap(kg)|APiU zYv&`-Y#usKeg6lld)bGe-?NY#i;RCWW~4CWI<>3XpgE#S#Yo(J7I@H{0?sb!Htk<Zox{7x?H)$!*uZE+nziJUCEan>{3`kj`D|)O z-M+7uj(>$E?aQTuUqV5Dv^4WKY_E@$X8*cW(sbCtcaMCrboj3bE6A!GfkVS3aui%j zNA!lDga$c?I^_7nIy{6dq`&Vv^>n9u>0RJtPafvdGPpHba>;;A~V3`t=#CbYjf4Be7XvEMDE+a$X8TTw9`5L$m3 zf;Y*Z3^eGJ^DXIzzfQ8>6)iq0_c~w)KE04z&={01DR2)?dTQ(JbJFq;R-g zU1p%)_k{(Eufk8WSDghm@s|r`;|Ru#c@@{Wc&G7?P=SEIYGDn2NG>@?TaW!UdtAxj zpL)OBOD-4R)!+Z!%bYAQ+^KB4GVr4>=j-fxfXx8g?bcjpzc#;eJ4i086839CoY}n` zl40{3x&^w&pi%bK1sA)`_Zbl%#3>?k9cs9&Sq(xiq4Vb9uO+^&S`XI^u%3ObK(_Pj z`xbe{aZ3x5?;e}zBt5w{ub@no$KdtI&xyU=YBOgmO`7Y7oJi7Acn`0Q|B%u|O@yXz z8YBNr-$s^wJ_PaKApX>&vGGUHHTA|aTo*d`%T zQOD(4EEk(#DA`=wJ&3IHPvICi45?mVM}SF}PCFHh0kbtU3@08~>Bop?#kni+-BRzR~ZFN^#X!f#UaWLST#{W(Q(H9s1Mm?QtPklRRK zQ+{U`N}4B!d^*gXBPqjB$}B^gZ25y&H2AjC4zm}KA8Cig!S|_6We4*0Qep5G=UE`d z)G{ahkf)$E0j;*hh1{7+Xgy%GCa$mDHxeHoCb(%fo*9Y{48{is;zOBuwm&}nM115U zc%b#g$383%`6bGmUC^w`q61xbA(zG$K-rw_KJ8yeRA*s%bs1;Mt~a_J(JRjj!2fyN$QIoUTpDOW(Sb2+^W93-NYcRLFm~hTBo%Qg-rN1iQo5f2yp$ ztf1U$U&>xx^S|M}>Pz|gs4wNs;ri0_i$NrwTfh?a(h1)9#YHZ@bGg<i?d&{vDJCmyS;!*L+B*Ut??+D;Et^EiaNl7& zkp`0iIFBP)B>s8*@+H@l!JwtJW)6CLk{8@PC;V1<7l3u7F626%&5x+AB<)|mXhwd; z=Z)Hhh*6yn(3~%VR#!9nNA=0jdsO%3`^4(Le4nUHjnHYi{X(t+IV16Uqw^E}!ERWl z5mo2uQRMZzE(A8Qc3@|KtpVoANd@+-hM_o~!ge3F^9u`h9NKMQ3PB(%c;SMYy;hzX zer&)p@)*0Dwl1R%pL@63V#4ltGi9|6^*Rkte{{yR;udf~wM8p*TJOJLF;5Z?7#-gi z>RNLq{*TMFMJ2T6#*p6zFXZVrY(L8p0gZOY8{Ar5vXB2mgab5Zw ztWl-rRUX|BwL|g%^pB5T@b9LZdR}VZpU21ljPo7`6-z*+ZE+A|*~I7=q^stcTEaL~SrjvFsFR3v`7-uZn+tYVvLjD)lGDg6e0 zJ>SEm&rV$M&zAYT%)ACUvt|9O{Lg@Q1iZa&{g6#q{!OyWr==z}Cnx9NqnrJfUcnq6 zTGEJ;f2u#qKI-Eaa@DT52|Gy(sk#bqVaBO~a(B z<78R`+61^6aF@nN4&BpCIObHFMZS%4Ez-C1Jp+yQPhQCNx^gb8t=;#b;_=4`8N9bR z^BBAKM~ep^DNYUb7H1zWP7gm+Jo3Tf(VpV52aDgcq~0321=H5b**F3J{?r9upVA)s z;`u>;v&Awlg~ME4apA9ZlyfgMu1sF=@6()*)ypPy^Y?$iBvXG+^1k`g7yKBP)^4_s z#98!KufN3uXTX~P&&D3V1v?9D9#{|0`n2=CI>9*o%mrWHTp)AWO)GW7iF=+Qpt-xp zz44S5sIV^e1Wi8${Y`w^{{Z=LiZ#u(z46}qz?YycTu@i#v0dALwo|@MpSzHoNWfEj z-)=m$ymnuAd^{IRj{aM0>~gHG|9@hc|K>=_)!5*F#nMCn8O#0$TY)RFk$;aZ>o}pd zSfotde-^G0ZNQF`*Dhc?SQisFSYA5!;?AoKABm0pbu8tMt<UMxWr#z0a{>Lq?wS%1_5sOZ#1>D^i z*HpFMjex1Ss=#VkR-QU>hkkL0-s$?Q|A;)kkuP7^r4i_a&Fbdb+71zTEZy|oyGhsa z%?r8pk#d>OmStuOh!oHvL!tOuYbQz9_AUBm*>v?o@s^0rDC8$jT8q~ZF^wZs&O}tS z3wl?fSN)v}xdlhhbbxhIL17P(7SJv_dL1LfbWx|QHu=gY7qQL^IhYQm!jc+F0qA57 zE=|dTeVY%qakA^<*bu*aA$OJh{r)r_ZhG|Sc?&nLCcy9c-i6#;KEC;Vig(z_BR%lG zitjY|8=s_Y8UN6?@oV?4O5Sw+Ak)19Xj$g2YDD$({Tk~(5K6_qsre$S&p8#kQ;-yxF!74>c|9VJcGsX*4U zbv?g023<>(_25RN>fqy6FJ? z^0db%pi{%Q8Q2D3^DFq_>jpx<{xA-!v;?<9vp|rjAXy(Yj{V&QKi)A%O5@`(-K*~P zaT=V1;2ilOW5V_EJoj_>vG$URpO;bqz3qA8g#?+P?KM_J=PGpC&Rpq^iE3hN@rP1#GeM9mSx^6XDstZ_?#AnlAWq~Ehp50ZeS{0KX#H;@&k)i(! zIYE8TN8|b^u-#Yj4>5=vi(|COG_XBd2mfVf{yJ!Z?}y^AjSg!WvI@rdx=&#j_#fm$ zkFI!d6|jTF7ybJUBV#5T8;V}SO(WqhJ%!$Dt6J23GDB`GO@TkejUErWe&WxiHkv;Wyzxl$!{Yt z=>igq_o`i%^_woVnbweYfwX6@yO=vrLfT`Nw!1h8bDdO}>!jjbCl%+Kr6ylv;^y2& z%GA2*qQxgpj2n$YyGl}GO)7}HBDc_dMj?5l3p!obU(EILoai??VPCM0M$UX4qoWCA~vYC#2xPewHNr4-a?~w$_X{*8Okdu}g4~G(3 z0Zsg{GVS>c`l4S7=22dmB0SUfX`Ph6`q^&tuNnKlB zelgdqHoe>EgllZLJ-#ciP^7Eo+dOh z!^K?tbIAL-mcARmP5%xfJ1t>%7;V<2L)%7vX88G7PSJpCg$S$hM)ccySNx&)si%{A zqHJoT1nqX_)fX*BeBwf<#e*S^$=;Ij$2ct9TQc}?NxJ{hlFTC|>7j>8vL7rN?kSN@ zBwA9nfA17+{hF}-tALFGD+8wcTZ-;=enw4FxyA2rKhWu~D(ZC4pr||<%9Hrri@A-@ z=KtF%4>mW8VVTw%7hb<-_qF1Vr$xEIOlfP%+Rwr7>cjH1Kzjk&XMvTy5Zb?LbzQhQ zweRVblcg8?{Dd zrjGmXVvK2QywYfP*ZS?}S}f(-&udK`hY3m87&%H=XYRh}&J9F$k51c&xlrLa(k>iF zL3;7h#GkNcc3#ZeA0so1ftwq?c2@SF^76exnJ2(cKZ~>9xR{%a$Xsaa5J(^K&8a1!JdY9Tnc1hWdL-%%_STOs)Zs56Z38fn7Y@|FJKXoy8g}zK= zpo8x<>#)y{97k6$D#dR@1ec3+WVqWpdhnp;;zj?=Q+VdeKdtJW)D%OFrgkBr^2nK< zE%9gY=RZN7a$~~TG~I3`INuapNy&w~h4P3+4apZ#Y&`6M?v;ZVb8D!#KI(#99;`wD zK3bo9fF=G69x8yR}UR$FYX~&%`pHjx~>dJob*$4S7wuYO2(|bm?3&mkMl06Wakt^wXy$yHx%; z^2=Xb%yqeZmsm zr|5?KYrJeMbb)jBd&o7y;iL7w57-%C^Q;G?3uW5S2AY)SN&$1VlhR)=G@|KOrb*v3 zL%uG3o?JB;+e3E*EX&4T(INQjiHpA9X^1aXj3hj6RUC*noX|Mk0PYoVyLk5NWX6^} z+(z4@w1M0F6!Nyi_1h>D(}8|R*V?ihypod_3w63T89OGe^4$+k3pmqm?1g1SezluC zJbLTFod$RDl-n2Nl`%9aSvy?;Z^zRYeS2RX&B0jo41we0m7hljMTVa7=G}F*itCdM z;`*c%*hkj;2(zl8Jnf`g|AU}Erk{=fMQnT+AD(P1GsHL_j1f5^J(P)M`%&CKVYg94 zgriN+=%lPwe|ynvi-~u#^9}ZFa1+5hIuo0)|nPd7b8O^uATwDAjfe$=-H5Yp42LBh>D^(L?;tg#Rw3R|tL|^L|0M_`iq^&4~7Ywdz;W{}ume-pk@w z#r!;KsLwg-Q?dF|ZiD3C&%9RkDcHl~6Rjrnmsb}|)&FI3YZdKTvi6dlO;1c2jj+$^ zq;uvtPds%}Y8F4Ct#77;PM5x8C|-NAc_@CzNjDd}q1XBIm)zd_KBE_|V}2hYBuI65 z(^DtzbDieK+m*jYK3R9kALrJ$W+%~zaed)aphsEz^*sW=|AkBb9io0-a#^swlNnYb zwwN8@H~!)!|NaKc16yJyrfK8y5KGgO<)QsjA89%&;F(T-!H?UNe*vk&!O& zwnt(ywUX`_>6%}3DVKJ0VZH?a8}pU*++v-}EFsS#F0*g-hMwQnQoThPq1J+mFVWV& zd?`22b5Wh=t08~6w7le6gVX=@`R?kCa(q-TsyS*%+6kR$=$L>q9Hvi=6!B4D?#(Ya>|9JJ#fz|b`j3o zo766qO9T?AjvNYA>G!4g=Uj&0=(>Uvv%`LS$7Sk5iQhT$N2`ZFzB)DbhpR{Tua3Jr zpW@$hFOTNGbe8fvK?e>tY3hXNjOLuv@SmkX#cJ;6&K2rhLtBl-3fjt4^XA>{nSP`> z^b70u)EoZ>{lJSa`EfnNb`EWfW?$btB#phaqD*Zksyjz=%|#X=7%!DdcnoOmj@ zI^5kIOMTD25}wDnN|ajpY_Dv04s2F1tfb=cC3S`U?T$Lm!W76A)qLpShr}S3kmxkK zBgKq2ns4$e$Tq)1zrqiwcV55h0B`-^vjfJtf+AjIP|GM-Ij6>z4@#Av3 zC3uwkHC}MO|Er`UjTej2&#i@ohM}Aya)>x*$}Ng7dG{F?_#!ZCWD|>Q5<%4(*hky%+{F5zx$)_n zrCW18mF6PuqDIIE*Ys5(Q^{99M&&@fD#TCDLU;P^OSxI?7heZm=G=2q`=(>#-(es7 z?O5hpsGp9<2EWNZ_8YP6*JH!SVk2LRjea#Y_LW%N4g%%*p^N68W9*OKa>+mEynqdV z+xXVxaD8&1X>fCLs4?5nmf6zZeAmpAI^AcL)wFnDe{*IF=ML-izy8UYZ9;-xTJ@*x zcE0tJ-T9gLCZ4<=zcHT{v$L2lN4{^3_AOysnB2SO>(uvcm;C!!jKBMPzrkX&n0aeM zD4odxrJORfkoM^PmvUu1>r>6Q1K1H@8{Jw{AU9H`JVUgUDS;Ge{kos@2X`YAIes45 zlej3TX4w$yvqKPeOIZFkQQiyr5L#11#hGK*IX^{xro8#-f$HEvT^T#|-J`--|4# z`NZ7;_)_mRdy=z<)H{2KGcF~uC$;(m#Bnwfxw6ecr{pu20z0kxX8~9On7>{MmiQ)r zB6#cgxfa;fPhZNd=b3S2v9j2(Nn2_AHMLzCX{4)2JaD7NnyrcMTqCt}W${k`yEIkg z-A0;jrMaOXjTu>t^Xqaq9-PcQK{?jHpSFm|DdAYuIv4hb=7HL7(+4iuy#R^x+f}Ym zK0ywY`ppymB3n_dy&hD%Oz%-V<&4VwpyNl0uNl2i_gf#VXDO{`I!>%mA$I)6>Ysml zN@w_Vf~pI;dydn-J(qGj)Dhk}47;4fV2hN` zcbra+CfJ4Xc$Yo?z8>39WT?-tkpJA?OM!2PU}fK;-ydh*^Q@1?@)_EHBQVKQiGRbZ zG8%it%&&EBk&fS~l0`U)lQY+oPwR&-wkP$r0?^(Do>^tFB~InSO2BlI_3KjOB>F^wC|D^&sQ1d|1zF>M&%!b_s~y? zHyE7>cORj7Y4l&8d9KB949>yEzeK6>nT^V`fwtW+eks>d2Aw{mPs({Yaw;AJ~qC7m)7d9{b*b@S&A7{Yn1IO=2!OjAk1SXcEk6>4UjRD(W z5cIo(e@Ff`%s1K%`cpqsyKg2w{v_utz8BAYH=Z1rjt_n(o*MdgJo~M9!|?I=$T#DK z0YTp}`i*$o={NAV!NvFqdKP+)jw9o!I3g|^<1HD=up2(H#?AR9cgf=4W>#E(=Bxb2 zNVDU!m;CeG5g!2)BxT9)(VhMq{K=_6o`=Qy`)qTp)wUxKzjB)S@VQHVd{ghNgU;5P zvPtp&^6=ZhKMejM%0@f>MEbqpH~+~`hu;jzL*UPWU*Xoo!up!?zJh-RO7|G>1iYz#qT1T$M=80OE5#1c;`SrH0jN6X0fW4uB*6u0G$V z<1oPxK_98*DiCdSa@P%+8qj-5dyceMqiM}gTbt)P1zx;?>#sz>J4f0e*v)o6ku>Z0 z9#{TG-va)@qnC1Lc`j^Y9i#BpD{J2_aQA$L zK6mX^P!)uPsAc&VJr>97t@J&%UnMG1+;ZG>Kz@o-@qDTs7}vM;oZ# zur{!gIJqV7Fpks!zDHXrp)oYpH<7_%==yp}$u$-m*N-%9k+7xS%$Er^l6E&~C%(=+ zcJ&U|<2j zlxKfbo*xti>%Y$mo%{o>=5L1Uq58V)DR?}vb37OJ-C%M4*ic_rgMS75pVZfCuTF3e zANTlsa@7$Qgx(VFx=OmcuF?ZNTp-9A;<{1#L_Ik^wx6^$-wMmBv2X}j6|g0Fhht&0 zw4O4OQ&r`RM2O(uQU(hz}7;ZYSVVo?f=eCH{aBzec*RY zFHnOnM05;E}21eu(myw|WtRC%LitMp)N zm5z__s)3y?z-#efQM?Xd3k7(4JXjQOFR&{GcoQBhigyrL5#zuwUj;vpd9Y`y*Ew*? zBI#6zqB-gdEJ}Y3u!;h_N)Hyrs|F_i!1jXI9I1o(WpLjyc+DQn$5Wo|z!sk&PvP`{Q}MlPmtFZC0H+z8 zXnP$lfQj!-18W7Zn`inml=tk+54sjk6nona8zV)3%lZSp&m*cyHcLBYfT2MyN>tZK z=M%9p<>_4SFBI^0lfD(2Q%|BZa{5n`(Jj1)Gwf@tmd=#+m!%bH)$BF3ve(2PQa}yg zTFG|qiRe%554iZZR{x{73aFlZHt{`9zE@6N${iNK(?{BQR2hGrU}e4lx)L%f^=?#J z+O6wpbhbPvZv8#gIrR4ktx~cMI7;AE@~xSty+~Iu?kt6Z80Z+37^~WKC%9L@?c&)l zpJ^K`;tcl|`xf(jTRI^~+bvfH008XuKEM4qKiUY)~vW%lyrb(re&cG8_8T}90DG~IFF17}(q-v@3tx#w+H ziz-MmLHeWLXHU&DW%kFUbmYN$eH5H|aH8_SEU-CX(Ka~;?05lQ(ce4z(X?xT9RW{$ zq>tLO5?Eo{YGB6-=(QBkTSM9okDi~0Xl~%!1^g`Oj|zaTv?9Ilp~UzHxrnhRk$Eto zi&KNSrZP-|-}QrVt*!!g1XvHSU7``LUEchYw}rKo^U9;el<%U-Lz?dVG?|zTlrBf_ z^rF+NtUp5=Ak*2rOXb@_nxT>AeFg8QT^~FBa8jya3x&|C@CTgdy9d^GDm>wxERF6c zU5td`GL9VRDGT0eKqMde)Lga zPkOMd0N(tyNHY!c2q(tjcKEtN0I0HjlxChZ`=RsGrcvH&{(=7fhy1xy39KjrYvgA& zuq!H~YsZi$m`WIiA`4T%P&By0AHg$pD){z7>j?CB@$8Rd_$lE_-xesW)Q&sAFZn0jqa3 zl&5U2C{&1oD|^C#KPmASaS-iR=wc<;EK@L2KNN^Ul*V_5X-mnbg6~=Ko%mPJP8*IL zNr%B$DLc#h0M1VEAs)6bi?kSur<}p2>69~SlN!>j`Ek%EHU=!djRo4s?-Qn7(Jt_N z!C$}H^5|Ysx37Kt^{M{XWnSAbuw(F!`mviwZ%K{ZI^0&5y=~}ru3UFM8O?!xVO94E zVGDWa_UvuLZ6mji-ZFNx$k+jL^Y2KO7C$R?U1RI+6^(T(`JXB+UZdZeS2Q;9uVF>w zeeNGVJhE5fK^i5-yBk+D-sy)~iDa{dS8XdA<8|&`tqNJI;?}C*wY;T0=YItZZAD`}4Umc9V|Pmbn^rWwMgM7nJG}o~ z<$&%}*RneDQNlu@DQ-FOltr9big2Sa)FMfTQtRqc>uOf(szkeFV&)IF>z|Pa$`{@F zlw?E(F`j{N?q(2gWH^vuA}d0z4%b^80v|#C7RPAX9@;s*axvGu0=ac^qvTd^{n4xl zkCNACp4)#t?wZca%(o$=1WhU^&wa?=b&LXED=(h&!0EY0pb^kA6Hc*rH0hAd3(_xx zEJR%brCFgy9 z_EpU|%be=Df$vf9T7G6RSUYfg>Q1Eh_0)_%Sd;AkKurtFKU1(fQM=0aA&cPmfnTNe z{phx0Msh-J@x|971Kt)^(xy}x^qN!Klo_9 zUBu`l75O5cc8?9&%|lJ8!7T&L$&rTP#<&?RoSQ{}W9@L9a-IFTMSp#C^8Isu!QE3f zknoPxb9$M2sQ<2lzvJf@13jz8NBNK0zW~ed?5_bS(MU+W{iI7QJigW79s_q??Z8K{ z7GRlQ2>Vg64q!b6usy)Kfa$$H`o9<0o&vlHV4V?|`uiZTc3|SOl+nh&EV3FGGBN7E z@2eyHGvKFxk#QQqmkauG_%-0KIZt1`aM3?+wp6ak#(tmV;ixc|tMKOpG}@qX_(hAk zD;m3gJmdUu){17`q)SovSd2~IXM$3#YL7a93eN%$hkg}?qX^l{;VEV-)sN6CwNRbJ zN`m#2QXW2P@2iyYSTet_$`_bV1+ewNjugN)0Xtj(YX)`*SdB8^Q_i;?*qH*@ZeZo9 z{Cs zcko+y_UW5$jhO7BDx5}eCZ7SP2ArMX%!1R$GjyDMl^=W8P8Bq(pTr(DK)GPhd$#tR zg2wu^S69fC^F6BaMPN0+W`WHC`@hL+-9`4jb@_Q!0qZG%rGZT|)|Ib5DpMP zTX<)I?I@sk6Ye zzv^+2_tU(O_W3bj$ALx1%N(#{1+WERM}bAhM&dH{1!nyN{WRaTz^($D;TajhcnV{6 zn->9CXB&00amz{<1Q?C3`QCV#>fI-;&D){VyFMHb>W|&P`he{bZEyXO+oh&^()+LS zje&O-ymp7@>%JtyGTu1*<_#e6z+>R9dogRV!?iV0LY?rW*VBJ_&)9Epu7H0W{0WEe z*0`Z~N=`L)z?+cfkZ2_B03sc4%k||wfr07=OzDl?WX!73JD(c>aI=$Vf>$2)S4^9@GPKOh*<0!POi3EmM@*mU}yeWq_9am_u zrvA#zOWOmy-Mp&;uVcevuE_04%(m00b2nzuX&fr4zpn9F@3ZN_!LJpKX0OrF8r>=T z)CqG(!`(Ub_L7$uNg6@*QYB>@s(w|^X&oFz7aXo?a!QFcv_)%lJX009V&a%N$7f;X&qPNmGc`)0iIM2yIjOn#J5v@=g5XFNJpAT5WhaPFSa-fp%0qvcn7a z&(;5pOj?~^zZPKoBd`j}(*dle$CHP`agm9k15p=LgVRizcYvd{Cvl&Z#o5Yqy1-0i z#@V#r8;$SGvy_=^eT+P+$yeirvFrD)$?yAv7KTup$ zfU^F7kS{4)4bKtUnV5G{Mg7_c&T(+`tdI3SuwxNe1@K+Kjso-MSWr%{c(#|yfHVCJ zI9cd)QHMEjcEg7gsTZm5%qK7HM~O)3Z0XH9TdHWKR6jghx;6iI7>ZX(6kWnj-V(zT z0V7BiV!4374s&}UZPl?g2cKnJsb5(;t&T{9{x-qtSWO+v=mU+{#2;3~xF^%*kEhnM z_8Wtaa5S#cd~o*4e6z=LviftwW@!?9UfAvLa%~v zq9|6>_dAQu_dOgtvfh}SslGZ#zQ@7o68?X^Q2F}vDpQPoz+4+V&XWeG4VvqIchUF% z4{_~=N+L8!&~^AsZF|VK`r}Ps1)T}#WS}#~GkMOJCifkVjsGQQ)DFc4i44{Mg;?hE zvDf*kHq*~#X}6-^bFyvXUMs6V&X{vSz7a1*$2ZDiv7%1Wsh#ucN9X}Rj&d`vHiFj& zUL}3N-e4-cr*`we^__vMFfaPoWS%#0{l4dq|4f7LagoXc+uZGe-maQO=Wm}3?!LOy znm?s8R8s%AIW-0DBDl7WlKon~M}f7}GN+ubsr;^$j?3xYJnuSEixx+RI+bHlvzIlz zyUM$(?B(Zq=G}67E_sfGiY;-_@R!A&sfovmvh|C3egWocV>=1%NWF!mU#k>U6a$4_`-5Bzez&7|pU%wG@M zfpq}$`%8GcfgJ&+d7_VCy}%X<(vAT;3rz3z(f=u6X9{3Pfz1O;7?#7E1vXtk?;NmW z1+XHF>_-b=Yk;YIB@ud+zz#=X;tAEj4gu>GUX&l`M6sLOfiYTT-wFQO&G~e@fvqWk zWq_3zzzzT_D}WsaR#E_)29_v*odH%<0J{S0YNS3YU)goBqALZk3Sf%`u#Lb9`>GMx zxdOZ$z|?=ycH9L_{TGGx08{@(VOd~v1+YnAvjwmtz-9_yGr$V_{w%QL1$bA16^@7U z6-&p%dSHd)VH2?Ecu@N_1Jihj)}tNR!2;NBU{eLKUSN|2urXi<3Sd*f_7}j80-Gp+ z%>o-MfSm)DEr1n0i}j@dwgy;V0jv_(-U3)Pu-*b#3$UI7SO>7~2&{s(+5@Z$nAU&h zj=w(T=>*3-oM?Ma0oxs+rFK6GY*z$U0c;l7PGDNEeEJr9$J2y20zTrk$DCw|?N~>W zs}=~j|Dlrc$2pg=wXW^#I!sO!5llF*!K8C*IHdi2^!@fQ=Q< zISy>^HR!0`=Xl@C`{e&Ej0Mw8%9@SJG<8Ogi;9KEItsdQ_|W6c&X z-OGQvbZXPyQuqPsqWwMwY)=7f3fS%f*im4+3ShIqb{4?S0qcyw)FwqZ!F2%3=-H2N zrI0?zyo0eeeU1_Na6xnPv*sn5iAXRA#->$%~cJ~%tA zt%g4)h$>d6tDM~4{RsIjlGgZhlt(o=`dWj|fKz^BpeGOcSa>eLD~%g3Ysy(Oz%QV= zM3+oi_x_Re$h>|hx&*;srI5~%d$Rdja)%* zPH1`^?)6M7Vj5PvK@4okYyez;w9tJ$l%y>b7vs;I@HI8f9t|>3QvD=M6&M z@Mb1csKu~wOTnpK^H>gksnW4&YS93nsHyRkDAH#cn4!R5I*yLG99G%c;3 z4vTZT75IxK#ve}LFP6yQ?my6z&}En&?{@a*9klad(#Xdt@!Qv|i-OLCB`k<#rT&^H z?}L&4D&Dto{MXY1RfE5}HS=rzui8p?iM3dF75Bd?^J{t~oZ9Rwhkj-A$Sa07q{d!0 z`ttnl0&nP7vacN8F!GAgmyf;dCv+G27`0kas}(hLq?E0OvYn%jnum!F7Vo@qu7PO> zMDn#xug$A*e(#AU-x)R9EuI~hbMmzJ-o*H0wD+Tl%p-~PKyPA@)*pH(k)`#Ad+?0& zB8<89Z6`F=BDzgN!+gwA+;t#(V14$Nht}6;UfN$-H~8X#mnisz<`E;)8AqDj(qca5 zx*tL2L)|H)8-|p=*1fM4g<4Ul6~Uqk^6MqP-c0kR-z}PNa{R3q?b>|WMJiK*awqOUepH#}5PpA(G9CJV zSf(z@lvSBtkIqv*!P;<$71bJ_5~HaTM-rE56-P22Qd|-VUcJy!*=PGIZadF}pf1E=Nr=*LLcr}^+7Y(V^ThZcX@ zu5#O~D3-6CJ!zBHMymp2W2*9lSn3uQ-Jpi0?&NH}u%(MfcM9$1yFJ>U`~Q!&4wt=&$(tV!L+#ar>Y@BiVS5Rd1y)vlHjwWHn*>(! zj!+*e`Qr$%1h9FYX|GWJU@t45P@kz*@%kLNhrreP3U0XWd-uWVv_fQiVDqx#XXz9A zP3cMF&&$B3t1_g)Sr5(?>R(ufU6C>fcNe&e%=31heR@$JIDf(`zcFwt-?iw@&ZS-6 zro##KtKx*03X&KCm*Tdfke$mfS9`H9TQ+Cf`*iU9n zsX)!jXA|kpy~it?*DjPzE0FD_70`?aE0^lh3I1FceV1RZOzawUsUgi6X%4*?J%vkS z{S`g0n6<>=@~7)<{a=JIx3yp%8du(zUq6e{XPY0B;}|LTtR#+nGz@dCA2>wiSpW0v z-5&5{dVh=!#Oo9RTILN#nbyxLZJP(;3Zw;8(lTH*Kshuzp>ep|v!U`^ur6R{foUz& zr0b)~Q}_ehDHzF}7V0i7wzl=uurBfl*NIGRdZ-W66TqJFUCZvFd3bUjam z`?d;RZJ=z2fu(s)$N<*l^n6iWz+Tc-_IvwI&xa2eiD2I}$@@m$Yd!PF6+9<6!&U)! z8k{rWNKX*K3GNZs*jWUpFXOGn{I1|zf|+;@nC2kqtnHX5C{o;>OzAd&(>9P_uNq(- zz@q8goj7i=RFJMx`GKRgGSP(*)2q9$;}lLWbk2dJ_CXKl^KE&ESpC-no>cyWUi*0Q zU3`BWlR&}I8Z!gl6nN1#i0V0gqQWhzV7?FK?^nSM_WC}q)gRnW+Neb7_y|@5Y^E=S zX>C}m{Gq9SO7vl5_IN;ao%0PH!fynB-pB8FX8a29_kiC`Icj)LYyy8vzRp-}HA}g6 z(w^cA=!i_Gyj)uqy@)wXTNw`ydDZgu2e+3oTqT-(D)`m_+e29z1@QWfG3hs(^+yLd zJ(T4q^@r&7fxDkPqT?w#4pp~3)UBNM5>BGJDB8Zkcop6Rc$<8@waepGfOibMjt_h7 ziECrg=KQ%SoXTHf??FEo%)Lx35?`bloa5j`>uK_e=W40G-UZIahZpnig)%-Ho;|)d@aR$DYH)mFTe`u zoS}RRk1aVLV-kRbJMn>%^|7Mry-WJnT0l6yz$@I1;O+u<2haZ8rk?|UAzy|Se`p7H zch%Xz{v_CLU<=HdwMx%NuwGzSfh`)O$jUtiY>s*3^{LMjrSmWuQ|XR?bCCIa$V*ql z{~2KIjQa(_e0fds1ov?VD{w7g{=M;oCwcft5{=WfFJ}Ld^>m8c0)E_NS=-e{a{rg3 zv8TfYe++!4lK4%*+Iz3R#-@B3Z7}BU^=JXThqT?pfo$xrJx$)x0wodh>-@6^j<~5D z{CD-7L*VQHe`=pJSzs2L)g!?fxln%?-aE;CeUj26`!W3af?t$t6W@xLAU}>S`Y}VM z%j))hBR2kZrq!`n=4-L^z*l3ztV~nUh*$2n>RgAx|e(2}2KU>%Ti?Cq?~S^iu5q;P2FPfzQ7d0gZjeb0C9Mfj0kG)6Jmvgkv?DpO_qQi%V^^N(qhdi)W+FinFZ}qfbH=jiA zzCk|}V_W}+Ry3cy5hbkB)yopuqm@D{=AnFxHg z-CjMdZMwP0!q;j`E5KV<$sG8D{Jm;aHV{q?IE~;G@Pa^>Eq>7fPB%E##tq?IqIqo| z`;L*C&wb#wZph~s`+-f7zJ&Ms2=5TENnm9Las1*qumixv)BV1Y++*1Qs^Gf-&e3PU zsRC!s%aBLF$?_b`g^yB$=px#vs90|`X8kJ`=OyZ zmUt1I)r&pi`<-fh%z|?e9JOO222Loy1#(RV?}{kTF`w4=Iasm`t@Yr{`n0|X&N8&b zXL?_b{0m;%&3B*IXJV$gupw!D-=6FQlsy@bI!fBb{m3u>%d{FtMXzAa{1JRx&wK=1 z11$0J{P9)^>}mv0?Nkk{1iaP+KfHS3=bMSi!l02sqpP1gz}xuAU>=3BLp7KjUSLB~ z{u%H)z_+`s_^t7E0NB_h!kH$4x2Dx=K!#qd#eW+M=$T*W9BDca!Vg@#l;7j|g{tol z(`H3~?%5Y!#$l*v41Pae@lNQ4Y}w8)RG}z3LpsfCzs^2?6s(2!i@dkF?yrN)9qCH2 z4aqUtc&Yec7r2}L0^XtW`F310Z^?LPwk^9cr*>4=m(`xG7vCF=b8BPtaqH8k7?sZQ z<@#?1x;2N;1Bk!!QJbCxHkR|`8-A-zuL3*!g}@Ic?3c~D(>~3GZV_FFN2ltQl=&|` zc^_Ci-!!mYz${LIw^ue>P*VQb3ao{~+u0x)6NNgH`_Qq|g0jKX7rwibcZ^5c=Ky(> ze-WAg*<{F_$;1)wi;sUeo*LL2AABsH%sd|N|4=-YeI!2gX#7@Fu%~@HT=#Q%1%gB6 zJyV za;aT@4zDhP*JRHP{7rKCpz^=P{@!eVbq77RNBet+{dM^6?TrR$q$!U43i^|;z<1pk z59KbjdJ!FrWMq$RM;;}ydeCFgD*IJ@Prk~0MrWSa#;zhs+LE!YWs+o|~b_*Zx8jr^^*)~{PhJJp|h zuK{l6Z_}wm6n~bwR7^9s3hl=xFeJxfqw$*=-E*fsX$UdIx0w6!1{xJGzfQMRVQ{FY zJ9IyyWP55*AELYKFJwS=VG4GdC1r~bzMaDsq?L&|<Y zxixp1en0iJCUf_7x&l}zqxEBTx)Zojkvi%Wvm@R(d-66K`N$Z`qj`6UUO2AT)A z==xw?cZNjg|7hf~$_M{mWbgzJme{T;y00z1I7 zzg8lzWn$+1Y4U*=LBi?&_k!Q~pTV9jwsNJOh8eU{xDXtxK}mfmkHO!WEgCXcD>E(donsXo2H&HOe{Rn z8u!gdvO!jYc9=BTXI=L9?gisJh$Uuybr#$?aCea|kA658jb{08VaqMKoaY;D8$aft zSxvm5-3*y(aJ#_u_AD-c^{FM$UfRv62B%;0=B{a=?75+oZL&9Cd!W}s8TUN<$VUs7vdT8m#iI&15+;uS)nksd- zu{LM{EWP>UY@^;d-Pf8;?0;4<1}IZrTZKIy*bK!h(%`p(AGKkHMmL$Lecr8)ldLm%npkUtXp2rw7rS^gb%+2Z);s99J9#}is!&0g>Mmvimp zpVxMwuceL0J>czJ4$mwPHmeM80=)g;wK{rX9T<=33QT&{TsQ{aG!e49{u_gPuXwMYW{BgZFt1m%K_hP2UZ5n zDPVilW)GiL86y6&VWSzNkKar_AuCtZuKeGHH#5T@$YYXxkNy1RT#b`sB6mKSM46OG zx!Hu)(Rkc^7V9Fh+X%X_Bw&_Yebe|iy_Wp_p5*>l=MT9{n+#px6~2kr2vk8?HobCvchne|awSYHIbi_U4(<3y= zFLsc*^bIFx)AH-tJbUsc-Tb&kvzq@6%yNS>qm!jK&2k_f=(dxyx9UH#W&B1xyv|;0 z@|!JP^Y<9-y78r#?VhW|JV8^zAtNqA$9?AaQlE!FJ* zD=+6NTp#88;#v>+@t((Gab19#FEYf%E%HJ5PC)knbPsP}9=I{<^x38yHC=(azCqn4 zbx3q%)oQ2HvQj$&!ZT`eMc-;K82(m+Xne2v9p>CCFFRj-eoyeN1h(T>F6TD6J&Eq# zm0+rFvK!=+>ZCWQ{hM`redo#9({oKWs(s$)#<>5hL4BdCic@o^Tj+~t?tLLDKMAjM zr3;}Ik^i%TQamsk5iuJ==yKBW&jS-tR;w==%&t8!R{b#FR$?w8HUIqVP?VisO5Ka%E?V z!6gX^J2mtub)?3nL}6u%1g!w;KCosdJ%Gmo`m;IPAAulw`lkv=3eVKeG z_;cW20e_Qg4;NR$?i;kY5~-oGY-yct8*CVP_VCJhBNrrV@cGkSGd7GgkuCM_CREG` zDJHPBJbkKFP*_L@`8EF@{OQ$~bLZR`_4Y2B>2(?>>ZX*2NlM)*aXx>bzk3Np!!sYp z=E6bpX?YF(?D$G|tS-FYTUP_zs4JY43Lq2j!)oAIt6Ok!7F_14=eVxECZ^^a-MQv+1cC=A{>If|2%PzRs6it$ERW0^|`pdbDnIyVb*+OOevTRYM!; z=&!nw>xNg{IGVUuONlPm4clmoI<9Fnp?m7@(6cVS*Z0x!O7vl7kmh-g(M5O!?O)fYkOyxKc%$yBZXVx~>~G3!P7X8 zs6M{s3w}A;~(by?T1P-kC&hU zEE(h&?$Dzp*+)w92hwdL50?!0mfZUEsrViI=hx;_Pd9o`D8=2=+n+vlgL`_bDNS#9 z`qWkrhu^y0ovtXo)BZX|Yh&=7M9ZVMZ$9-jnnmT{RJ`{Z)V+JVJ#VqUP7T~}>gk&t zHtj8Wvx5y%%RP*j$Q(5NlR4!Px880}^Oqx?GYgFl;z9dKU;ZZKKA!av>=3Z(2rLWi zIIvD&lTP-S=kC_0cBE&GowK^7cGt(2(~_?KlaI<8QfaclyF}TT-GCb%>={%zwWj^Ni|Be~$DA-pbzA zts8~Bz??~(d@i;W%0-&@he*Gno;~^=WH873Bm)t=%#1~&iLv7CB=VJNwTfZZqWf*` z6uXPdkb$dwvwwRHH@HiUsh@g`fRi3Lde_ap;(-bYqBLsQrpR+!2zkz4Xl;#WBidHdE~8ScEO5v zV?p;wXbFB`OZJ{gD!!eC){X~){YALGT6x2ZQ{>hV_7ozCq+JQSr%}p;FKi5+gXUFe zPPj2>vFq&4ZN;YxuiQ?lGw+3Nf#_lLuBws!`TLPQR7XCN2TGvZ4y+{3dhkLHibZ`I zoUcOmI;lOvX3hTv4bADj(5`$ioaZ}%O#o{JHsi)zcPtsmI!Vbo>ERU?e(#Q_PH4j5 zzTyOin@#-rC;|=3MgZl4j9c^q>xvCq3z%Pe!-=PEQ4?tYQob3TU~j;yoDA0(i1|C% zcb!CO>n}vn!xs|JTTdd`vs5NAUGb;kB*MAv<2#|dZ%b zC37_NVRLhI=^l9(<)2piCobov=?nTnbJV|?^#5b;eZVTas=MKH&ON{#U?wm_5|WVQ zW+Vw3RMb&XM}>PYGt3N`FbO6kl86QqRAMlqAv%dvQBhH`T;TF&2r5xjth7=~l`1N2 z(V|5|43nWsTQpc{rEkg1WyJFSerun<7bfca_dz*TkW=92q(>ryq51< zs3ly%q;4UPHt<;Nb!3xv)%JW#55?Zc+qUzN`44y$_djEQTf<$?759T2>J{!a9$}Ah zOOLdfe()Ij#vtYjs@}cxJNe+3Or~kP({?u=V+Izzr67+A@JKucTUpip4*C^Fut!0& zDjW?!di*-T!yI{LD_4zS7wq@OhkYHtG=qLpZ-y*>OW-&EB}b3Ab#jPn+-1)0)g<3- zga@a=$IA()J*Coyz_X|VKFZN&wrW)V)OWzuViMg0@4&RVMTlH*&I%t=o47z}(;d=K{++?1*wj^mDr^%yr|sa$-B^T=cE z53TvTrH7qi5=TuV5`pPVBCQ4K=As-efA!2(6ZhX8mUP*lF>RK~ z_Yrk;qnc3P1ljP4ZRtQ-f3TK3{cz)cY(nI_BY1~zncTD;rBrf)^hfYpIF6W%zj>~e6SXVkS_qfvn^0EBO)WtY>x>zC#5vIhs0hCm z;EV#NgE-#x71zIKAMn8C6`{$4AO`=@@t^zb8Lrh?p%bpoxK|*^`dMcf090 zYX^nEX#xK7?}<+vVGQ^O=HOo>fBfa)Hw{<`VC=6bn_4qLa5$TuX)NP?2i|jhgeE+aA$e!@Nq{q!AzizB7V*Zv1BU$Acy^~Ie*9Z6me)K8$1FSKSi=DE~z+L8eClawMRQe$48bDY7Q^={JbNiFb zgQbnQXzQb^2Hh~|hW-UMx8=hLI|=%1!UpOlmsl;bxX%pJ_PhpP%Bcp2diBp?Z&>qE zKWo@bv`;;9%06}gG$p@4A6H|dI)hoxj}7;P;#bQqJIf4@c3;!AzoPdlLl%HBbG!94 zcg*vc+1{(<6K8GLbU`wl5!%}tXwuS5khEF1{GyK4=z6hqA?h{({BzPQr9p>Y| zhTW^=&s{5*nRGb~EST!=z*5O+EWg=jbL_D5<3<$wZO@9qK%nsHap!8JH;0wcDh21wC>U=@$`905zKNr#I9uq&~-oER53*Z(qe$1OH z@!TM0@9y4$zU!4WatwwE-x;5lm-U!Q^RZr@?vek>)nlOxM738A>Lh1NtwETNs66S; z(C_-)qx74z!MutLbxN6x-HI_mJ8O?2?pz5meH^5$aR(Dzxsx`Y0ZpOqws98tECN;x z7{>_y5w-?c6fkx{{^j6j-i9&710%cuzdXR(0Iws!-bW(q`<`f4#2k@tIdG?dOMd(# ztOl@|Bv_*b<9q&<;MWS+H1I~1jEl|hd?QuX%w*!jNI6V>cAl5dfJY%@+}6t>@LdF~ z0I(?TZM`P(N8BZbv95~nYQ*mYXGP(7`T@=P2+u3xVjmqZibx$Dg8%~S(KSZdXK0X$ zEz7!F1m7vzo*(=N%H|q3Bzz)k@Z(uHRWPgjBUxpg?OCypW#JIPtoVnsBE28V>ib~U zJE^9gviqH*J4cYu3XCVMDxa=QAc*D`1fV&Yv*X!-cM!i}egkKyXEnwk>ZXGqz~PW@h%N=(cWTd}Q@_v$e~$5f zS&#iI#`}NKyZ;&E{gNL4nI7r=sowWb81EPLfiwC&kOKb%8|hPCo4|K@-&u9W&xr7q z`gG=ZBC?JC>CkP6q;wi~yTFof@b&0F7oXia>9Hl;7#45rT~&{9n`f@&vZL%{c6rB> zH}_!wEd2be`&#g=y42Dke8#T{uwlSfDO1)wPtvk$9DR%(FUl^+Q<>-!%{XqKT*hO| zoEf0q>E!SxqJd>SehVzmWlHYQzV5tVY?NrPQ6@8dP;hEz$-KKOu@@oXgS$#OZf$$# z?pUG@1<{L{J7-l5#S zM{^$SgF`zQ<}kk8oU#0 znuTX2?g;hei7j#6X4o+IMrtRoateVq3fi?7oV83lrP=^ALEpfaml9=pp5I;}F3$1=~Y$gdPh2y2xEzP>9mm z0IqOEa7EF09i0_7***zb!6Lkj;A$HzYo`R?Z_|lqgOFQnh}bxUAaDF*o#ej(^TAi4 z?Fg{ySoR>hdkVM31c!iH1G@5qXH`s=^<^j-f2|oXb$k@%Zv_tftof^H^0(*yqKPS= z)FUI{H48l6^N-g_z-9pBoRxos%>lLySf)VKI5NWa1&nfNc1jwyoY46rQyb=G4tSZb zKCAYXKj`KKd3NH+n8txx^cCO*tuzQL2dpp&Rs&c;608xhe85bLmg$xw&pCie{xaNj z;Wu#7EdpL6@XCSLhI{kZ-*xH=`IG26)|IGGkKbb$G{ZK{%nic|m)f*8D2l^7+d)m|4J4cyn2F@&S+7-@DHUWFTSJg=Sj)5-! zwQk)r91axMT@ftZre1SS_L0IC#9Ka^GuUJ(ydYWa@GS5m=VPl0&E%YJMfUXX#wb3K{r?G*kZP<$;yzll$8k6 z7z1v378e&U&<6j72)>-H=${~8RZyRScmqF zp52;Y=iO#gcq5aIFHk=0KpduD58AvVm>*>et*w8=2KV?9C4f?7wJZbSIIe`&fov2! zR&PJMHL3g#Nj41^KP7G`{;~y}ioo#09!)7&10eiKvwEKf**N1S{9A-+` z#>W2<22lxAhCtZU&DJV{?3&hX;*l_+`@_dJ^}o^d(c;R zYzz2pWc9(W4>g}%1zZl!K>?u9)Ix|p>Vm>k>G^Gc(Ojc-$jz`qSWyzs$LvIe#Q`n+c7BF}ur?e92P z>RuGzDS;CsWJ?}5ztCGSe*@k@Rd%~wW4bHLo*g8JbplNl zXlg%!Icfk8-q^@821C$$Z%YoGJGVY*RQ9Ca^Q1VoERA{8!SHUgBK*UdQ^E!(udFi*rUMBAYMHl1>HL6Iyx~33Q{CV(70Lukz6|hCzqYZt!!!usVLb6haT$r;uFi6O^20W^h z^4SPjRT8Wfu*xJ@9Iy%xtOEQ-0W0pp7^>R)!m$DTri9mr#teI(!7B&9P4L_7cIyHl z$#+fz>bJ**Q+E{rwg}h)k=*)lY?RkqHcAy` z92`aN{QaBOydNTC=qUIGVHdJ4w8QF*DlA+%_SY=l7vud3-@AFVzGdLG51a@dDX)1S z<}=^*%W*DXg&tTfSQY{{1OAz`Kj3@7w^CYzgC7Wn`_HEhY#9~ z73fw!3ufB3}1NH;+faWmV?DJ@8R{~#WTjO ze1WuB?;S|5;LB&Xv}D~ZY8mZFF?QM!`vB3-%NmqvPX`u2tU_YPz?ZkJv) zhpYsjs)@7qUci=sEJtxAD#|sf2-l;+TxpWsoZk9T`RD+B-CsN7?G*BH-Qcz1{=9)J zBAxlM=Y+X*D9enI-mChqgjjDk4p^QA@TvI*%A>~MCGf!k++m)?9p$my5uVE(>D}LV zO}IZaa5eTFZRf)}T}GYef76;1|M;t{8>M%-|a=xib@&LITQEZ#SRhUK@o&t5AmV9s8twsD-EYaa{2V2lv%^pJ}jqpJhFE7Q9El1>1w;BfgusLj<8{LC3Bs zupDi+wJTgT0!0w@Gh3Cy@Ik{Sn*Eu-R<=tJEy6;xZ{+A z72Bs7xCg)O*!MpBqFah@_f?shS^83J4C@}_Eci@;PtJGX`(SNF0c zvkvv4j5VN~o2XmrWV3P1ku!-c^6agp{KkP>l2Gf%X1U->{^cCFF2mykQ~lI@7wi?_ zla_x6@yi9Q0p)L1N)hr2}B z9==ddOW-NuPzz$+`n!P4M7+VF76rS9P{EyYK|(cmX?{2K+uxnFW3t@xU~bOyMJ)1+ zQqOuWb=DZ@=0P`(d*~Y1PhuYqfNs`hzQJZ7eQg;uReuj#UbUr)50m}mhq#~ojXgP4 z_@GWs>67l(d>lR0lXEi{@k;qh`A-TT#QbCieL|&e>p9K=#D{)VuBv}m12^+~XSe25 zno1Wr`>4SgzCiklkm_ZWVj-?hJLd3XJrNDUuv- zL;5PxqyGmLz1v3O%c?+i*}4r8!gr#QU4Znx80cHj*Vk2EgT!VF(`w;Za##!}^U(44iCOEA|nOY;1 z{H>t%csyA4O3eIporfS~UHeI4Y+I{U~S!`yw9N2xpC zgJ@&7*gFhS?1#5Mbs847T{jm%La>k2M%C%3-pyLUoZ6ebMUkHM$2c+*r!dhP}Ax+#ZQ?%gJz_!-|QVQBmI45wEI!B zYskDuMWx8ljYj~124r9X7kJplD%<=@6@IB=RH_)20)gY4_Fl%5`qxi)Ugx2GV9PE1 zeWXPhMnIc~`JnlmFR))Jn=DL=xr`RG7|>!iM`$)1o!g}iegd$n0I!ozVEz^aum2KW zW3XBC2cHw}&Fi}&+POb=O}H!6eRa6!s`!uk0lU)$LO$Y%~-@%NPypDo@=1-MR z+r0jZ%3k$Hch26wZ;zibiA+|#J&dfWJK)n!9s-RC zJv@nf=pffl5IfYn-gQ)2?Emyrcz%?#*FIyJeRUM|aT0vEFUnl_Jmp`NkK>sXO{B~p zw=44lL_gNBK(`@8Ae_NGCBRGD#5{|<{#{h((cQ;E{{l87~~Qgqcn{7@=!u~Bb`Ka-8|A+ zy7b&ud9wdKY7fFP;E7AjI|MgciQBbJTPyS@@IPOEZflLU1pWr_OQ6oPQ2tdD?RM4Y zSeA~Y7}qd8LMP%GJ(*EDcML{wEuKLa7MVdxK{cggqykHcW~IoMnvcOJOA zz&9kwHCqKv4qBVuGToL9R^+)ES47EyZ|uW zMw_z3IJJN98qQ`pnJtZ9(UTXBUELXqc3;_bRk-i6-pj)Sm-goxW7vd?a}2G$y3$G? zb-uZ|SW1#ok_d-V(v^}9whz*+Lf+%M&TSQO@6a2OE`3oxaM;Tyzq;1L^sj9`@$GQ&YwXBNZcZRIHk zdCLC)?9nSBx45_e@^Ety@R9xJ)H!XIZnAYMWv2%3+dzjQUH%Ab1gzBqBcE1_eAaM zOe2ViZV}*Z3g1bi2+u3;$NI=M=fuZg77UZ0iusT1zOsx?xvu>Wq584-k$E*FL&Z)b zod)om1ifhpjTO63OGD0bEaMie5Z;#qSG)S$RugeoKTH0i2M^J84Ojtw4Zx`c&Ny)v z1V{0cZ2&eug&PO%l8yVF9dWV!3w;~Brh!`@Iw$i`bJR`ya3=&1f2_a!4jS`TsObTORBZ>xQ&yJg^20&gfe9qe`RtYt~;L)M2dHUM`);ks*z z?pclgz1#kM5p+;hJ^$F|1AwgpR!M+c zzHReu*7po>v#v!SrJi=;H#u%6ef{%<&nthSL%~YVaA%lzaKOg;8g8t|hfwR0MDd4V zPgJ1asr0P9zBB;D0F>Gy3%4>#`}AI;2Iq2kfH0fz6%U$?q@?3h!fqLi$isz@PAz`J zNUP{Z=ow$xXt=m#!>9oL+se;BmUgi{ zwq}^GFDqWkKd2@=&RmMei8!s2At%<}^3>@Q+^+NnX=8Pq%3X4=j#Igp_g*S>KFfWA z5|RH#9k=IT%W*BrHT4nLC$Bk|6jMSwM_F@}5*4XrTQv{)GQ~qX+$NP1EvL==PQRx5U&|j9UQ=VLtStbW!P%&oA+hthq`N&_i^xRfv5OwvLM=28>X5>_O zu(YhRB=*{_*L1(S=V1I*y|3(hMYz9s;N^kvj#F6KQ!O}b;8o|&{Yyog7b~2tNFej?@vC<`!>99$NM7SQr8JR_N0=YW6KEN z&pd5^A6CY5*6$SHt)R1Fb6kIs#F~`Z-a4)tdYk5cy58}XXPQQ^k5qhBW;^=tEwCHG z7kO~!BI38>l8h}wYFs=B{PHUQxL65T)B|IA>HsSNELX{oj46&UO%}H~&v2zM3p8=i z6u!>Sdlaw&4~+FP1z0{{-Z7VHE&zTK@Hp;$WpU>xDAnzbpSS>MnIDIL7c@i3G&_uw z#lWq(^^ZGFwljV3tY!M%agtwC!Klyn9s^GPZRhNDiKOwFqX2k1;f1O- z4%S^wHOj#G=U)u4o`&>OIfMJ6U0K~19gbyp?&SwudozuCnDppZG8Lrpuk4S5pTK|QCz%%ockgqqK+d81+)SXMi*FeXBZG^eEYHW#u4vV$+ znJaFa$Z{szM4i~eRWolVomI0d^a>jO7MGz@mWVqu#7@^Zor> z0xraF;VipW@M~z45xY%!0Ic^3Jek%2_~t(5rp5Xh18n_sjxLe1$Vg{T?VrWJo)7vp z(6_z`z5(3ZGD~BGQVj{Gx)mQs?x(Px0=!8Np2VQL(SEdim6UUV8~u~EYYzAyxcl5z zG2)!fM|znC?TniTPlP)wV>d;+j(6YKQxQK_)_b(?NPqdjVMtc8#lmvdfKOo)(hq=- z*(ZElA4Al28yG{#hTliSx?5oWA9VGn=nn840c;-q*ZeQZ+mvytVDS1wo!7;#4R_^t zKPS?&KYmTPH`I4^xc{nwD+Axx!9CdqBCk#GD*6D%P9$bND*2m(zZ%RUc8 z3&*eN*=bWe@ro8j(^uFNty3YS(=gy(xaBAe)VDBI$hqjpT__EUE4LppGV z4Lvr3e$4)~HqAC7$fr5Dv8a>@$;SvvnNTScItI@a3kefV#@3`qYe`~J@|Z-*uX#C? zcA^o*0AC=Kw{qwVcFC9WJ?$9ET-%?bQqWIkaBqIKU+Rw*j~(wzmyK0@lv(T6AFo&s z+BxuP1D{C~e42!h%mXCkE9x8)R_1t*-nC6Quq7*5Ubt50mmtb#a}4o>UvTATgPV{%cig9oLTI5XGKH%!@v!tH|eejFcd=bwj_$>hz1uV|7$MS_qc~~5} z!Xi#--oGuQAPM1@--YpO)V1yS^$KvDJtpMS0GtWnaIEp* z*h{aH-zwyH1~?om&483wbeyyPD(fJe*CK9(gOYy;5dUr*Jcj-ZbxR&UlzuKc*`1kk zOv3tQA2;T0*YP>sh_4%ij#MrX(T4?qjehN%ip}%-nbAEx`+{g)S@NaYuNHLcpzBa& z_Km3wp|+7J$Cap`>c2WC=XsddO1_nkM|Eq8ynAd9d!kx__ALD1kZSOWgHOx1&TZwf z{J(|;X#4s(go<5ko5i#+c3=V?HTdQAAV1$er_OM(_UYPvsyk55ExPzJj=Os8?#gBF zLlnI-mp!|6374ZDWew>h__s~?>&9Js^v2kzwU9>CW$-)awyIdJmrJ>%e;%@ZyS8gL z%oF^K21 zOU&OkISPT-!9MsvXCRNb2On7jf{nz0HHn8|-PZ!A6*vtTqI`8P=d56TOCoUXd8IG7 zRcyc^(2su)wk6ZRANBk=U}Jz`n36yC`F7OH5b-F}on1^zts8{73~-o>2V6S{b73IN z1q9>2w{?#a@X6{&dVz#}hM(&Plkv|#V9v z>U&|h{{;ij4;Yb2l~m7PzXjrFxFPpo4dNH<~be6&kAU2=;Qmc(rZ>+f{Y#Fmvhd2lNbk_ zOPy?eD;>EAUYpNP$UMw^Pluycoi@psT!`|FLarvbt`$z= z=ep`7z`;1L+Az=GnJez%vi9e2xdN5}r#q+l*&Z_Z*6sMR`DVga=fI zd!ur2ojczWzupw+gP92xdy(PE6NksccFZeWd)#s0nPRZNZ-RDmcVa8V{`PZ`qoIq# zr{;~p$8p~BoYDP{#^KH%8?hf5JwG(!KQJP_vqs-P7?J+(8w1}nU@~m4cA3{#p`5LI z6I)GKpD`DN@7nJ0sRe!TNt_$<6Fv3>zBxRvcR#Kl>iMxA|B>E1r}zD%-v2{=;0HRk zizl-US#`HmmQXRzPlD$TG0(F|cNI7sAI-m#bVZ-RhI8VWZG(?IH-VpdC?U3-`7z*I zF?SgCWe&;y5gNq!2b?A7KJ#tDQ;mTV5_6d1NV$}wMa7(hK!^-NXwLTS2x_j?j%^oWFJOb>Xg?yHAvLR>f|K^i;-g zI^KKSc%y$|Vl0JkiAIFpsJDs5rr^CI+SGO} z&xwbjy(wFJT?xF08FpL(60cJUKC>@H|D`-n2p`eEvIHTAR#N|-=uLf>I#0{$A6V}2 zebaykNZfQ9A3?Yo8KenYiQg!BzZ`XFg7-&+_Z;ftj=|f*Jyr2rqMg;T+m3YI+Worz z%42;edT&PP96y|V#?4}N@6CND4D{?U-&03vaMDyCOvu<~en@yKpERA!vhPMLTqjsF ztDnaF|4~I4i)Z zPR7Bqs_nm-M;%o~tv0+0IXNl8^Gc zQMZbZN}O-9fX7+L!`oU+#rL!Bsy>Zzh`x?bdH5i#N<4zH)I+8+bcoIG9eiY)P0}2( z3HeKW7VSBV@fCcLH)ZE=DlA8@$WE`r>}^Nopp{A-aOxY>lKUJ#Q85r;&pV8BSWp&k z9_sn-{>3wtg~nmb2S4wZw^qO^QRg*y&%b>9;(!eRwm^W@1`@wdr=)5Fk*z7LmB@wupIm*iQsWP-k8crvy0T zz-h%j>PpHYd-$zSATr-|z{&cYvZd^{lzA><)aV1Z>eJ&!@SOYrKJp%XSbt5(_YBf2 zWPe!dV4BL`%(3P$2Sgcb=+)XP!3?r1}??q-0q!tt&=sVr*0 zCksRFZdv@Ea+y83qo~q7aqz7@kx+BIy-9q<2_#PWdLLi9>D*Mr=d%Ppqc@}7kXLj0 zlPtgJLg|OHt4X5!WWFbNz@zTVMcH$1NoWYpj*Wc@{-w9Oa>zDr1K%mYR&Z~AQux|-sAx6uBB?f(Lr<*XQ`%x0v`zQJwq#$u zHz`jdo3iFe#pu?)QR;j2t0c?*K|b>yNNi1$@2f7z_f8)p!>{T@{=p~yF4(M;|BF3* z9QjupW9Sj5KgMf!u+E1;U-wW#`P0v}vkjFFDRXvjhkG)cnGL(18A|Fruqxebcf?YU`zeM|@RGgo5r??1?-2L(Mf;7rl?Ukzn4f-1n*Kt; z`Z%%(;jhl3a6g*aqQ%;%eJ7?SmZ^RxH)NS!EX0;Dzx98HvE=0cKk|zaQ_KAdVj~`Q z@~iY7%?qxY9O8*mhj_koofOhjwMnNttAM^Etk^PYA!<0alIN+w9ciLg-CGNPb;#2w z@>K8$#xdNZ%_UE=-2g{fMVK3W-lo(QA`e?e6|x20ZJF|tU@Ke9)RSNv!Y^kGb5x|$ zihExi3J>|fK+pOq2F@mMEcx@-Pn7i|=U>11_o|=rKTiG3B2P2#`+v56N>KI$+F@xR zA?IM4|JcU1u8#XACxrGT2PT zo-q_H%uqBr#@lb*sJYGbpJTrBA$J}_{j>mB1z^8RKT*fdATL9}t>?IOMDk*fAC_J0 z^g%Cf!-`)Lnei98PD zedTAKw)YC#ez{w1Tbg5FJIdP*9(5dV9{sSZ6REG1jm4RAuSxfc$4rWXb_TTLAA>KG zcKAnyc1~xQX@uK@qw?YDo*dr?8{`~vXOIAo1NdbjpY0!qj~Dmmox(@z(VjbY2RO9Y z^#CON72((VRjg+WI^%;~zL*@zrv_^#ZV%g91862dQ-e8G2<3(R%^7mMg>$ln9CX3K z-W{~*mUf>W>bs_Qf22QDfk1^b6?{0>P)d4mKSjfU-T{T<$+6l8_-O4xzwoZZsh)-N-WqmlO(tN^e)!0h%f0bE0xxqx*bP4iDMTG(@O$1ja}rU;>(XI~$Z zIbIYz>PDrJk)A zdWO$O7(O3i_f)Eud@q>K~ro1n9EH|1dg^ljE!}&}ppyJO0FxL76B*204SZ>fh%N z;5feq+UCE6-Xv}DcG~X1n@Mf0cL=$&_Cfk05fNM~d0{&3gZyYD;H`_{g<^w;BT39KOb z`vB#%32C)_!yOOVE)^(SJ7DW5n|ZD9cKZe5R6KqfL#zlTd@^RVfj0U#2|2IU+<2c; zH)4KC1#LSHR-ONceAM?oy+s?${$u`fCSeaw`TJP`U;}`e7GgfHppOGKfLpU$(sgZ@ zH>&Nc!^~XQj0&{?w z--Lc6z)q_NYbDCv)g8dTb<1v(Hl0QpV$2)s{U?u*#_jX2KVHsvztDOQWiu1$PJRb- zCi3}H;p6IdS9e4>*{?>_%afRn@jNK15O=yyeb0zbY|4=TYAvK5yw|>qu^s7{uN2;H zJ>RXEwBgVJHIIGqd%#S|IdX+qT*AFNUQQ)luubSi9J%T6Wn%ZAP zE367elASxp)S{7v&ya>`l)c5umu*QQ2oU}IxU$BootGKnBV79?)+c|c)>4rtnX8B^ zQ`XVTl#W1LBu7$j&&AiY`~c*=2)~kVL4JO${Htt9X+cNWlF#eIx&UaJKvVm;W2-3| zu0hb-Qx;3^GNJ8ADRpAkZ-F*bS|`$dW7qLW{8&$g(Qegm zhKMZ;UVJrMiAl!ooYj{SwUnrcS3w#FSYKzXHIJXX*PlOiJ`X)u@LL^X+ZxB^OG8ki zwmNr2fN1>&1pxuHJ0U0mu#w&+XMBs#a{_tLeu}v_%lU}pLCyE%OeoIz%6j+qWmC;M z>1IUY`+9PW+mW4~ocO+a;r0Me69*XOLh-b$DXb^{v$8?WmkD3Bu1c4H#E;1*ixF`w zM?-jOpJS!x5xh|QS}ph$|Es0fbx&Qf=v;L<{S-r>OJln_(`CXUbCgnUqj`vuA??60 zbQ|-q+J=uWX?mwDTz)>{;LC1#C8v4c!Fadq*wn6Gq)ksrh@e!)-8(FT-)6nHPvSV0 zI+$|giJQ7`95HlTE6R58+nB%pBC$2ee*cp9P!2i*r(QhxqG)GP?1ho87j!>A(o-0} zA=>-AzUNjAT;E^t9@(rGJ+s)r;y89K$Vfo~;uF2UVBmVPLQ%M;=s`wbAuG5uc@dlO zyBGs8rc-6|PsTsMYCW)nfUh#YfaOrXKl%{!>(&P>!fu@!!?u0=^L+BG2hXCv_NQ|a zumZqLCX7GgbpV!|1RDly?P=Fu2mx;buuZ@QaF4v$x|LQt#z%GD_z>E!dBs}43%Yrh z^*gS7GfxC%&bFG;?U0sG)%?sIuCBP3NFJr&7?7Hs>t?~iEEy>B2oLVdK zK6d^1973W;E5Kv)->_c5^dEK8cYPp1EdU}sT{em$orWl+xN z!DsxxAT!jB-w{5_w<)2oRAds3g}^H89!1}Bsa2ik{4M5}=diZNem(rG^qlJX=vj^` z&{u6>&5iW$^OQrTrEC=$B)HYsP5Kevlh~01;M4LOjAh_y-X(lon~5%2OZG#2|M#%{ zH?4RPw=db@ej=Z%;71&Z9oQ@Uq^%F}s3B;y_wtOpFv<7^Of16~B(l(ITXKWsD z+7NaG^3e|b0pK&X!R~+dc@WmYck)3Tx8QycAN9u^c(iI8j!t2lj{F_wn1HqIMp^HB zH+iczW&DEpt0Qb(v}s=o#n!7Zi$T8v`l;O;>RWy>p%?jdk2;cg0-gclW({;~&wS)3 znzgaj%6QHPgw~3Ilt5ew$z>3ve8Ur;Ql?-hO_^kl(*Qm#mv6|KHfHw)^59#>Q|S+b zZar^f>j34s*`-s*S%`L`&8PgiPQUO6Cvtwj3O-9$Z>YIWh47K~7hUQ`K)83Hsl>1L zdnkWsV=Kf!M0-9$8IV2Ia+sm|6tI)FKM+GU=y+Gczm zpQ9BS3*tOT9j$&JW9v&coH%pVoAwXb!|s7mW*3lF3t+P_3e3wTEuNK!jnQH5hmLga zjb$I=7U|y1zKs6#fn5j@PL4Y+0iO`k3m)9qT4J59G_n4bPIh#eIPQAQl=6T<*|oHx z`YN5$33cExT(TkG1~tDSJlt|y@lMn{PDwdXI}eJ-2zX?LEgqjr;$g=z`1+2Y33UkT z?qp;`&W1DZ6&@X^6P^UY(s)-`cs96CuNQ&75cPbr3_1k&=BtHX>ebLZj?yN}{{YMwv`L-$2HI#aY-tw?OY9Oz2{amWvSu^uq9u&;j<-c0ju-C4gjwh`KkpB?ljG8le8MuH=QZW zR-?WPwdk@JUD^n`m0LIDdmm<<(79v09X}FJ;pr@{#-JP8eG)zs;4@dfp~mR&1^K+s zN4Z0MmWHwgUl094-FlrWhkU)yKd#6QOSL791GT@yv))>Ni2a6lZTR9fl%Iz@nNLVrJy7vLnx$|xD3Ndot9=Am*92ty( zei`(`Z`j!CfMPY@F7!$Uoia+8tSoFeD!i1RC^R~7>H?;wZsi*f0^qCE8qe$PA+@Ya z7;M;uoDsN3XW%*5B2OHXC;kz(!rRa{aF4wQ>O8JPvFCK=SIj>y2mkVrE*{Rs^Yf43 z_y)dHYfKZUr;--b32m(JzJqllWs+5E*-Y3IG<@F|QgmyeD}VpSRt4#Xgih)AGV1q3 z9Lsys@ws3W%C1liNoobiYi+C2yXM27v%c*BU(ivRt^lV5ze?b>0k4Ykbi42$lJh7c zRJ&2C-7;J4M*7ov(1p)bVBd;?$MA$a;jV)2>!Y2|i#<2mbDfN_ zP9CZAXF*r-(T%M}rv2MS)`{A4ROXz#dWa{l@-S8&zG@6Ib>H%i?61n1gZ=#04LL{2 zoE1JDyCSFlR3H459`5}pK7rAp$3BTqW`08N{y4ss*{;VwrsKrxB$cVPBTu#9)qEeu zd5))_QM}{~0Qu+yV<3;jF6zuW!ea*I;}XWLYAYm;RHqfEyhj&4EYP?^HsoWPT*F`} z75_Mpc9$H92Z`|lE0CWxF9k{8Ecp@SsU7{9^7KOCR~e=QO>85Hka`f5b~~|>?0eat z+XDLHPrxQ4eY()Q*;Xct3D~_pHBqyr0DTA>5-M$=JT!u506J+3Bj9)Ru~6m->bTr0sYX(##S@i=FHn1d6WGx;*n5_fZ}DT1TBPg z51xiS{sqf!-NA1}J1u`f;YhoGKzO_T*q&F!0}q3>J0O9Mw6&mZ_>wgzx$}awemfm> z<@gPNc5~G7*}Pn6t#*?SRa$rT#Kee?@cfb5T#`2%X1PO4?(C9jYAhlCrMWKNc~k zeB7GjAwSGhJ$Q!zgKHY+*}R3av?SlYitsxNQGRD3+H(n`|J`{9+jIzYqw^bEbtdRW zh0d~<9Mz2jJAHHp>&E4x?1}t;Lj376d>`P+KlaT{$_rp^xHlVwx9wl%nv<--gzXzq z926ntmn%jY=Rn&++5o=tc2?xaqjj3BY677C<)zx*5_*?9 z39T#t5~tH+ig{s+kC-g>gBt6q!6UkY`evD{g-6nyoz}cf*X}I=Y#97vfXSZv4+=lmXC!kZ`@ z34CrlP+Ri9g!R4u*ih$pTCifkCV%bP{~^FD0Gj}eb$~M4Ym!IpIX?T(0pxKWIJs<_ zbYJ;)ShMrDE%`QqetZq<8>Ii)J^s3VmUT+fj)C^%e_HJ_;i0wamR-Vo+Z_|M_txb4^B4~{ZRsXdi-Dm8QPDz3z6Ep%(B}PbUCuoNea?J;P58L>8Ycs)l(5|H zNPi-X$P&a16aaVhU$6#$7WIvLk9<)FiM~B*2^!mI0l4kJtt74$Uyhh?b=H~$mvhRX zmiXAd!GDFlqMdin&189(kk2@HNNmz2l27IPbCyA6-OOO)y2e|*?}>a0ke9K9H5Yuk zj(OjS&wG7@T&{MR%6z7g`+VU1RyFZI>EcVDfIjl*6tR)*4$OR(fHq;CmpxQw{dQXEnTp^6)RCh! zNP7~rd8t;qrQ2yQlx`HX6QC_gJFj9M_Y1At|Co|W^I2maDIeO;vEC6pFZ(XcpT5cI zlbAPQ1Ei71C04}l zzxY-K_HujL4YT>fJutC3op%B?Yo7${jwcxvreY0c44X#2qL-fEYGS^wkbEiofbKeH zUx7csf}RRDld4`bk*~%pELr}|8z~E}onfy{`Sv#Z4ZjkUtr9%i^UkYvu^(N4hfMJ7 z@k(^9{h*OY3_Q%M&a1PMzA8Mn%Nhq}N4R{}sMN^Aerw1;oqXg1`G}|7@2iHS z$PC&#p%wJ+YtAcMjyMsM`=I=6Xtekt;LGvE{3Yb)`t!<% zx>Cz_cWoCI$x?W%k0RiX09V#`ejvC>GGg1J@>NEkF-o1+2>QwAfu7~~iqQM|9mUI1 zl2Wm@uH{^46ts&soL6(9_Y19?Pj`16U63}J%tu4NLOf03d1rqK+a&>BEr881A4i3k zDu=VKFEL7fS42{$DFL67f5Tk&1?RV-9MAKFkJ4vc-PWRa2U+gLuOdEiq;vWC)1 z9xpjB-x)Rk;|<%!$?gDyoopGCnVYk|$vT||ef+?AwI5{0LvPu{vh!2bh;N)_duphg znwOqeYpb93(OUaPy?RhaY$xpy$WKBbt6v8BCNI}+i0M3G2H~Z&%Z7l{1RUD9{3C8N z(j`pB=!l!Hy^pFJp9plz?Ao`7G5;q01n8??eqPSEHS>f%Ne;{G{=hNYH;RNnf8gJ- zp80BwpSZW>9p~A|jGD82=DQj=qrk}{4*p8;D?(W&0F(8RAKgV-(M=LZg}L#YpNJqi zRoMtfFHLs>-!qQT24>!yz+?Kg=hc}U6T(B~eOt^Tb%C!7i7#&)^ao0<_Wp#M2iYbf zK~ZAiIPFCJu>u+`d|sX9@OGi`_;zHO&{+d3@7~?DrwJnu;@6eJP~~~(iJu(fE91^5 zeiG&l_?F-oMLpG*S#5dD&5vZo_K$L6;pl7s{$cj*Ht>iZf{d^~Ug6e>=(j^^Z`_-` zESN5SQ=lt2e10pQ3c7Q5vOPRL(!=)hXBq8jo-QLj(6=h5bYSp5pbu`ebl{JKkE>fe zI*|6|0pKnJw}^TDn&A3$81rcxddy=T@sFQZXNL3(zQ~N-UJWk3XO8K$tOPU_pwX%URMpUmSpSpJ_#`!4iL+}k=q{AFc0CyuGA zZXj!EO~7q@!}%TKSg4b$QP(YaFaE2M8uD|?;eNxo*F4F3a4j+FojLGcsD(~uKJXX9 zZyB(xuJbBh(ABd%>5JV^aAuKaA#f<8W;xP~sx>-H;sl5NYz;WYz>#sUK=S44FY6pi z*09r6LBl-N{V$XUd8)uY|0vf7k*7((+JZ>$H?Q~fJ+4Z~+IpBP6^HE3N5)AONFMl1 zfw%b7z6KIlO9pAq3RloXrd zgan4UoKlE=J`25L^42a%tX;8Xi<^cT*BUgs?r zr!a@<;AT*OeB77jjh6-KCqZBN5a#U6$6+tM6H6dbJzUm&YZ5){V-xfTTh4D~VoWvP z>a7p1>PU!W8P{dF@Pb$!#7HuL-CrRk;1m5Xw9m)Dhc?io-h4PddTAdNWP89l=qX>* z>*!B0CA)YO*aBeffZ28f^E`&M2s_C(te3R5&kf=Mnmlf&Qt?dA9E^3B0H3LD=t9cW z%Y=_>KlpsAoX&YVC}^3FV&tu)-_pgI7t9B%-IEXh)R5(#d5O}h4K z2zbkYH3C+IdynpRzD>Y9&9c70s{v}*?7YLT!+uYn0P7|PX^jt}Y?RA)2p_AzQLa3n zhDLkR!|1IY>Z~fzmw)E`Rxasp7kbwwcF(3vI)O^H`RrMY=a0GdQ38I$;Fk~B1o^#C z_$9R!;#Ymf0c}TDgOSGycnpo4SLZIK2@h9ptZ+?VM46w3_=yUUw~8;K-!mUSyWP?0 zGW~j%efO->deCNl+0wfcLhH^WB}|HQSbJQPS&%cfvTa8|KlEqt(=hE$Pul+Z3RR6O zZ+RtLOX z59|P7jY+U_z)mKmQ3F^TU>sBV$NV({HVl}zysdzZCDFzKn*_|(U!)z~0X7BLbQ0eD z4zLx#W|QzXcYtM`hd(n3FW-WB>!290Mc{d16@aY(7D8V6$2`{pwhoxLyiI^<-|)lQ z0Lui-TUP^s6#!Ns+!Vhtz@mV8>t))4g*i^y2$;9L4S=lx=FM{pVCLWW@nV2w0p?A21h7yNY!a|yz`S)e2Ut}S zY#Fddz`W&60Co~EZ@pyx_jXtau+}8J0~X9%2jzgZ1J4Vq0W1!fw+3a}NxymdMcnD$LS?FwLdfE8)#kGg3Su;L`VtS!_ZVBUJk zw_x5p7XwxcJa2g`0IT=FSngWDngDBOvbU=_m4xTxk$Gsr`(?cMmNN#J_AP(CjR2Mj zn78bcfaN8@<^VeYn3vx&V3kR*1YiwGuuRR++LB-)z=i<}A+P*no(}*v2AH>w$}O0; zK577)0G=1t2-q}WC1i#_@@oZb4KQ0ySjISDn}9VF$?_@7nb9793d=YJysD}5_C9Fw zyV!et=*+d}-IR}2;LiLWxJ;5|%hL_5_}lJW+J+whymkk81>kLf7ZK6=BcD3JhjxIU z1bhPU12!_QtdAJrOG)@!TY6S~1r*n+PIcXGn3@LIHRa}5idJi4DpH@bY-$6B*^;7- z8#DTxsm+=SDWzSn73_Tpea)D8kv5UqegiHGFH-OK#f(XPAzfQF=TmT5Nmt+C|#LE+BNIo3SiyJ-r5PnQ6wew3WJymh zuBVxkx!TAs?zUXpZN_r7rHe*U1+&@aM6QanCSPoX#>=uh5pV$I?|TwHouljs?y5723?MHek2!HV3ZIS}#IjhO^A|%e9uh z@m+s7@*krtjv%vO{AEYY*;H*@kEP(Un5x?2q8wZ+6GqI0@G8(H#kh{>HH#To++Ppk z0zr{76xW(<&(YRWT6q~rH>dZbrC0f|oMpB?M{CmLewAl^j zRGJnyR(P39vyx)!wPVImiZ&OR&~X_{v65;u;|I0Yl*ub_X}hLr^q@BPoXNd-7=D?F zhs~Fb1n@BNN+YwO?zyc-R1Z_A*b|oH`Ua7FNo6VJ%XzTjgi*QN21VE;o;?*ZkvtL?!a5RVvh46pY zm`lNBGN{<>t!&eW19&&g%Xq+oF6ae`RBa$IAHb!}YNG7slhcqIqs7E!-jbT^MzcK? z^fLimMlIm}HrE%mXbrW5F zSkGGuXluF&_k)wCHlwaJO-1Qvt1Y-TFxzFB?57`;fFOc~$Bi;bMn4-5pg*1)KV3#v#2Xy35juA|~+0|P0z zwCqygTm;xIrD&r@J^n8Q7Ia+Jti0q;=?(2c6u$=l*8=7m`nCyiKpT)LbRupcn|qsw zsqk9^Z2??HtO^RZ=*9E9wHaeN4VUqZDvWo-nI`V%GCB6G$bH9d-Vg6K6F`;wx!uIU zkRsX6szNT%c})DDvxd~YvwB^kP+JVNKNpv_=PS(odUF%y(&zNnUD~u6!vB$!27pFW z#|%6STO}@PFc&frsTf+yM4#C-a9K!+0)&k7K9#T6Qx{V3(863GAN`lPLnx)tu_YT0s^B1|69x^Kw4AULUaZ zMpNnm8cv-hY(8Uzmsx5gHqC+&dkKcrmsX6HYO}@bL4lgZA-P^ro{7O*FI-5`=2@hc zz_^b4))b`zQx2Mw(4d04KZ^Hti^f0(tf*KDE-Smt;S6m&y$1J_*5GjowR7EM3OeON z>InO9Ld38CMf!DoRcj6hVE&k^22#o$4FskPLKclI+|N-*p;jN(Cch+uSxLJ-j^{a} zcs5;Yqiz{6izm{xjufuHuBMp)w+Br?CW1tSl>x{|Iw3Qb%~sZ;Lp{yv!Qoxnlu?2I z@c;@v5ioJP5~xGnmAuqHQFAd%Yfqg|!37oz{zL9pvv7zAm@n=&m$S6CJp_#H zS<&$@#O9mNBD_6YrJvPo&KhW}TKr$M81HM*r&C6*)TYzsF2-fzN`;zIZo&j&>*pt6 z#Vlsb>Wf!vb9;ufRY^`(LSEX8={>kC*@6OfyLhcO5*XW$%c>=9&ZzT;*`a?J_WxL| z|Cd>-6`dV1P~_={*(K(3 znzjk$g$w2qigS&*nF=#xG6k1*3%D0&M`8-GXiNuinXtyH?E2dERH*e?6PH$-zQmk2 zwYWYWz-8I$@p~uqDr|oq3$z=!%v<>_s)ecwYO#RX62us}#)o(+hu_K68i2;q4giu! zlh>jV(K(0prkP7IYEI?gvT&)&^j?fG1D9#-f%Z#q8NJMc)@_CmY|0bHQx>;kS9 zVN_gu0WOS5|NqAP z)0sqMuNd%iz*yq{WlN&}7_-y=_viL|W4bv96Ce;z!)3`5+G`=}?bp*46uTaC&~_b{ zj+Ayd0bJ~< z%yTi*+lRCJ%%#1e5cXNS z55rc&IU>pt!~4swu2>0Z^LmGYOTtn^+0_Tu;D^;G;nRaDtFoI_Q#ftF{%gX2v2npE zyQvBzLaQ+r@C*#kudjf88EBZy)TUEQhM*wRO#EL;qf=;XR}}E|j1c}$(3eKz>g1*| ziU~(boELlAon6y3O$FJZ<1%k$0(Kf&6jMlJ!oX$9YNaTuN`v)i&Yys7nzwjDn+e1N zxJ;%+M^3=NUP{43YgPyklUd8V@UV8diHCtJR$q#Txf804nH|P-IwmccQAy4+=Zvw- zTJyA6p7VZq&qS6sW7&F{Gsa?WTb>rT-tRrRsJCB&$?{4zE(6vuv3E(YSiTH-UcH1D zYb45Unoga<;1at*@K2X_O#kxu;H8GYSb{TI>yQqf^7!;5UF#!Ei{rv?T_yg*ZCF6nDJ0yLJb_PXTY!C1CRZqw-4 zgZp923V%f{DB#MN4MO_hTZ|j+I_@z!!GDMXA7)b9Au=mzbXmykd)2C@-Gv}7F`LLh z(nU9&(C02gf0)R@Wyz}JiyQEIOm9XELDd1=X+&BtY_xVY^# z+T5#nzxisFcJ_c?u!J=SqYD4m?8IwF^|3uD(rN}SQnIJfy?NGj8OKz=KJ2tV?rS|ot6=2!QidvuZ{q3;jPC1sQ`+| zJRMv>8ED>Mh8SS{FMy#&WS_pFRrKr>EL={f@Kz>?P@jTxNqPMY^rD`H{}TpAV%TWv z&BcYIxEW2U0E<+!4bxGJIQ7nuM687SjfyobvXFB5X#lFj?Y?8Owkp1w4%Jy#pfReUoV zrgeD8=B!fhD#<&^W|Yc#adikX2F-|xDQzSeO1Mq%b|iHsfcw_;AgVn*Zs2|<6L9!u zU#%aAaV!Q)%-&&OuBJi^iY8LE=|IUaCi$irPt`|LOhBemDgYTzE%y3vvl=?kfKx`! zSU~Hr8kp^Q#RxMA7v-9Xp$oT@0doPq3icPiS3mfMGxN--USQS)n(+p#9>)7bx4ciU zG~2LIz$)Ms9XjlfS-ka{W$zm6e;|N8j!ps z6Q!5uW1XwRs+*2BbX^g8&GoYc$DTU{xWg@V3_3E! z=9?EM-uuAEb(H7Ab9T>4Ye}}(wk#?ByLOyJ35vZ=oJ0_lY!W3=iXltlfB=J) z*d{VK@e&(Qz^Rv3&~59MrB&N)F=gAU`+fR-Ki_r>3he!A%HCGM(yDX|ZY#K^Y(WHt z3fNMYs$in;dCxo}t;XKi4z#!TerKg~-g(}4=AD`M%>S9QTM5aWX+)ZU5iA?YLidm! zB&?G$8`jV(n5;V^c+#V;Tg4`oI|MguwMItuJ7v7=mAZlxMmstkI0r7ID|W+#GWDup z2IPucm}AZ$iejX@B1M{$?V$;uY zaX&@=`aK1-*|SZ_=~XJbbXcNa?!ujmoMksMkP6NOksRnjS-!?u*PVqgEK6iV*ksEi zUs#ry#{5ZI0wDPy**GLI){I@6DoaUIY$u91Mpimghl*$v3aj1IYjHAQ2*Z5@Y3{`e znyWGrm1sygCuAIUS`-5}#dj2Ne3TlRdxx>uDBGMm?EajC)aUr5Z=Vr_ohCUykqMoI zdjd~t6(%|-ablpn?C1<8(#vHoFuuZtduD|+Gvk~`FBdCft1<{{r4bgfhj+StYQK&w z-0Ai}toc!Qr;?{Gerotjwzz}ybBRS@*$y<(d-hbk(=lGSrY_lyJtnDvmL**-WP^C< z04<$R9fPXnPgwTY*J=xL=er0JZ+!*_V zKe5c?d+sUEjeXjw<-s${-P0@7aKz0;LM55+AuZ21&*0g}C-Rrl&R*}VOLh$hgD3=J zXtyzZ4+b$vfO}k;2ZWKfe`-SeU5|>84+hbKqR}Y^cEF8R#56$KvwZjP+=o{?Ed%3D zDdDs%$Jl^WfVCTz>j zIsiGYp=|OxF)V#xxjGd@vBrF=y*ND@JLn{bB)vPeKD&hc3Lkl=qae%wj zD9Q1h*vk`-P}7Y5NCJ(Dp5hW=qu^l=bGSJIH%?x8$$Nb_!k%zu9rQm)6xM*ee4WCu z4(da0xf$cG36Z9ngmtP3{>O2^sYRXj7}K6RixC&LN1G$yqa=E&n@~x-0fmQF_5k#| z$JC&-mS{^oZi}=FyWE6IYP>QIx(AB}Np~3C41Hak+tLNUz3wh`NQZ5iKm#4b^2!Mm zC|Lf+{os!|$IdU2=Lw4j$AWO5ZQO#Yh+!n$Q{jHNXKCuMVZG1`;uhDT8>qO2b!t}n zq*IM!0k}^#Rh-$iGNQ!!sdFvs;Ku2#(mI)C!#%T1+^AhA*U5kpobqzbB zGb`NudX-z@X0VO9A_{kPg?o0b%B&PVRtnCnRmGL=6x6SDN8nzSalo2t6+M~Nq7zL# z+*7O9fq$aSO|O?FtQn-ib648rv{tpv9bT(Ww!2jL)aaLHd#Ty2dQq(IEO|9GC1|1u;f}NPk3Nw8Al$SjDub~6HEnwvLTFkA^*IS z!WeHOW-eHv-Yi+jZp0`f@8mYCk#K7U_a#*)zgdm7xTPq@UpwF~ER8{Ya@mgjCXDq@ z2hMC#Bdgr%COixmg5lNfpS6RY`yr;Y;b2csiBP`&1@8H6B~7| z@9YOf2_0+nW(~3fC~h>)DOr{|7X+AWaPwF?Y!CsS2_~owB0c4;)_nM!gC4#QTr{w$ zwjdh6>9$}t;O5(d;{i9_9;{$cv^t1cWo~s41Ip=@K{WKmwjf4Oxwhc2>&~_X&tmnj z9h(5|$Vx22yJM}vRD)Y+#Rj8$sx>&#u)oq8Jl%-ei&Hlffss~KgmGKtu}`$(pygQy zEL4f{Rv8$7yZlm6yR(D{s>MWA=Dv|%Lao@Jcsc2|yxqGH9griMoHio9r9&8Aq&n>lu ziV?IEAsk3JwK|9sb*DB4F>X4&J~*{v2c}*t-LZ|K$(3$)UFh_xlMd2@HUKthm4uJ1 zhI4eadvZ78L`U#^J0`fnLWeuu5zJoYp1CSGc9mPcDpI09 zNi1MBcjtoBoIVKLlP)%? zGP2x+^&U5i6Hh_e(mIF6pn%T5(amE((dfcGfyyAm3b*W~5d4WH!bvyj=621ooluOr z70?GEXRt(pRV#@O@!q^26vJQ_zXep0rfH~g%7I(!!?6dr^OEn=OCoS$xZwr+UT|7E zXwD4Gq))`jq+{y7A@hN4(%@As>If}O50btRh@4fa>sY5$(Dix zd2X4TyG@Owm%dG*hJrJU8hWcLEO$q5Q!~q>;G9DHvqKH9bW`0p*SZDzs;f>oV2!Na zF@1}gUG1K~4b6Tk0C1+mowyBc`e_GXXsvtlR)tECxmBgtxy75+`E~ADM6^Npx#$)s zKNEE)Z&kBVH+7pTZ0bZZ&u?ypbZkpm^o?BSmTpm%>$>0`?sQMxq6(dE^%j-BUZNhq z-W|DBO<(V3k>VR%aHekPLg0}uahJPxB9UV^b|J;*w@Tj9+aloSwn>6dZIeV4wu#U2 zZ4tQ7dhY3M;`5y6^F%Cyup=?CXFettIUS22iDzPBuS!gO&cr0?voX<}*)Enkxm|29 z>bb|Z3x8s}8pZWWO zDS752D4OVx9XWJ;7DolqjRuNN=4z=6sjFor_xxt8uXG8g!JWYQ<;E!7V~y_kCOIZu z+~ggWjbe?r6VgJnNGr|mcvQ|IPT@Rs%NB5O9=@@WqJ<;Z#K`=DE zn`D51P}TMbh5)BffHtYq9g!-0t`-0Jwc`%P2^a|=<3+TGn^k#zCsd?1c=_8PInHi~ zfRo=Kk)fT0>e2>@=FA33UBz?HfWJwlHj2^{7)xBOvKu8gBOApkd5?2?qvW{cxzB7A zdsIAkF{+=!K{P5=IVj_f;Eb>9o?0dof(fivHS7Zae8alJGBq7`@l`!(skdX8WMCwS zw-qqd!`xsQ#*{tq=&f90Z3_%6uR=J3Gl9$G{42sNbD;#S!%CbZ!07o@V|F#jB=>6D zF+{sh~Tv z1T(}q+~@}2PKQPufYC+~&tfEu1+B2S&*I&SCRO#^Lu}O^9B|LzbrOs^T16G^r-Nf5 zuufsv+=??#doWmV4iitocc8l{tIgRf1dI%K5nkHKF3eL7K!IJVGxX0Z%?xoOv>^)30#K0d5rya0N z+Ses|v5kj8BJR_{KHN`W<8~^Kb=5byg-7(H@1jU^XZW+PBk6;(vrvG_$ z#_5^BBsd_Eo(n|aM%u81h933=4#kDGfHRHNY`7bafdl)3a{`Cpmtenn2l%oVfJCy( z#A{2FIFgFBLJ$-g&o(Q1^C?k0D#wX2FQ50>JdO=?ybUTX8Z2(XP%6;n@mFHqbt;I{ zIC3usBe=simOrtAk5%;s)i>_IS;5g4keqa&kVpCwSUkj`X577{5AZgK{V^Bv&N)p4 z`rw`l&NxE2@Yl9SmUz!P{kYF!`mnIv+jIzP+4Bqd?Yl5a@wRPoiYHJA0$?S|i}>oJ zahwhr3X~c^aJ+sDC(4%$z&+L!!QCun-#!q>b4p`0hC&t)H^vw_Ig2cuw0m?E2PQ&= z005RQ01DwQS^bxxh}`QFOKT0T;XM z7>nROiS4q5rTMjcWNU5EEuwL9#Cgu?!X2LUBiiYnk;TO>+^3kJ&Sd;7@&n&^D1n{0 zkGpao4Y|lC=2mc@=fm1C<0Nxu=_GO)vi!%ZzgrNKMQnvEYiH5>P99Wrc2SG>RakuU6!OjLUihChAh&$@) zIm|X);UI-@pAAho0H}pt5bppM+SyF->=F=6g*ZE&C zUfhy<(Q!{VV7a9m?kWzdf?yWwd28SAV)%-qOIWv-0Uz$@lRQx*;f{C(6?f?IcsLIc z#}i8h25~pfZN;b)$5YP*k~Po1eZZY^@m^0K?lXa^1A-1tD>)|hq39H3FT{*pc}7L{ zi-rQSfrL4Q=euoB7uJE#c&ov)PAA-G@U$f1&fvR#P`tdyj{A8gv#q!16i&6{r3NWu za>r~%hp8)BaqQ@*?Dl19&+)cooLr!S7mQ2`-`h2Y1|ExfAegv&I;CdV*EPE#D>z%m z@sg;luMS}*1ZQx!Y_GJ!d4|SVxd%&w*jWtB20_v+Z|kex=9-)>JcW}Wp$^=04TrG8 zMh~4aY_DOZqJmDrIqhJ+g!wgqm(YwmCY-Y@-q_a2hp>lPqMk6) zBW)ZSN!(FkJ>H5Duff1WLE~YXjkewLaL|;_T67lS^7(gMC5rDNIfKyl*U4wCu2(qo?4FKnP467~fo(k!w zIfU&BxKFcu4Ga!D6)ZdjbIy4TqVWDNK_C207kd~-nP3Rtz#;%PVPZzFilGt*>iLRJLiEe+%X*Va=*FHO}nzgn?djC z#BiSqbb?a|cELT$1acjN(1JB0wc;fYY%0hyt<4Jjvi zE+i$}0h#a){!F=paG#)$`*%X&Nip55bd_q#J5-Fi!|495)52YPWIa^2Gy;NZnpfU~CA>ODG)egd14Xs_@x2FM6A zd40~=k;3EzLtDJ;8I(IZpeZT1U2vbpNCM+4dhSe&Iata%kMS)Cw$ZSL6_!OWY?@)4 zuxYnAxjC}3FYio9H7E;#9xtspP|!UiM_i8Lj%V&MJF=(+Xk|y;J-AmwJH^eU%lWjx z7|M!KaMIg)#?l%3FO0lA1xt=%vkZ-a2gD?DH4l!-c_I`t9rLlAg8@J}aI|I^(B30k zp2N<#yt6arCTpH7T2llZ#efPuryKWlwC``lAbKRwg*$3;2*ix2R}4%z=i~rM9QPq6 zc4Y~>)aZi(r)uASZQB*Y)T-d@!u@n$kKBzRdWW1-E^6EW?ztddFF^I6F3Hj(TQE^W zg<4m_X>%;DVpb9A#vM&HMidQk%q-GN;%8e_zRAVC(zFwtaLAgQk@($2FB`o10v6?09m4}997C3^YtR|H!j}FVI=@hs%O+x#z9&{y{0A4)C z=mkq43;oK9J<(azYUf-4B+bs|o&>h#G5MTwX0i9>uESzSy0IwWTsRC#VM#aKDEP%? zYN~n25&6M*_R1nlNA!_u1ft15gQ_cR@`2D{(04 zL<0s5IS1q<+l-YdIW>UcP~HK-?9fx)u_sW9)-_ zInX6;rfvnQW!XD9gF7CR7X{9{$V3mdqh_LqnWs$t5ee>S;D6GQvNFrezqA8=0@=EWk4?CL7YQE-`smgzCl@0Mf}y#x12#w~`!L>ZaI z!^6F@DC5`lx%q(Xy`vApFa)Z+`;2$TPy)hJRPJ_Z%dYN5QqKeu<7gIxyKq0l3`Imx z38bWfs?u=l;^0jNVt8dai|HiFZ|JnVzdXieF-aX$IOR>{afj7#KgaYV?R6xPzBtDF zXPg-B*t^m8>vhLvR*ofnIs8iIE_t^&haF>(vxa#wpC&nmZtjtn$4>`3aYs9k`;;s9 zY)J0YYy`yj>K%w{AcFJ4nZQX01jBSMMVB7pZ$P7a9!mkiIPNFqG$;Crys)sPsh}r77}OTDR(K@^E23eX0FA+2Zj{$Xy$%j3#3F|j)QLsK zwIk7cW(gX#d;ny|t+*gl9KUVpcTov5PVc1j6J2nh51tJGjN%;z5Hs#<+Y^VetC-b$ zEd|`h#+&=)Xkx{Q;f`tYu(v@6H^!yHp@rJ|yGpV+wHx=zz#+L)a{Ye!HV%~j^C)Xh z$^k*a0t+J^+{fJ=;9x}T840x;bq0kT_i68L>d(~~r*BL;Ffr}fpt#Yr!<`KsgWC+t zuNr`&q^!mrbI-~G!m*ll)1`5A&b1x%hThZI=EErBQ~;zDlJOPR4skc5tY(;`wsQ8g zjC+Gv+)ZoMwm*(8X~sE(`$^2}7RIJ4Pob5>HeFz{5dv3LBikO zh;4oGlD9yJJL1Emt}upI?3U&6lTIWj-^~@peHNS17(!zyR2D7dOeWS{;GT4&aHBba zyUcNoNKNFi;alPreRr3`9`h^Pwc%nA?Fr({KoGvr@ON zPmUI+oL;o#u<)on?hd$3m(jidoE%*~>-OQEYH+8~u{RXu_}37=|D*+{B1Q$Iar^$51{4*eb^3hI5<`{T?)A_~wVvz#iPE zg7KLMs^b9M`G#J&b7-}2$Ekmu^bd4;F+BVbih^hrjR|#lkz3oA=<5h8j#@_F4$Y92T7n7%8-xH51wn zG*cs3Q+N7suLOz$FwFLBA?uIm7m7|F?&E>_!jUj;9J1AfNufc0=@-&3-}iBE#O>_!jUj;9J1AfNufc z0=@-&3-}iBE#O>_!jUj;9J1AfNufc0=@-&3-}iBE#O>_!jUj;9J1AfNufc0=@-&3-}iBE#O>_!jUj;9J1AfNufc0=@-& z3-}iBE#O> z_!jUj;9J1AfNufc0=@-&3-}iBE#OdB@8_^$#?S{-LG`(tgq;X~kfMt1z6gL;Q1VJ!k(Xf*y^2Qq%aOuJPj0 zKKd)tUxxnjZ(i&#Nq?EQYkq{(DC?j+`3E|l6lrv2!1GdEwwRWQ%gZ(2=*g3xXZYlp z)~5=ZCi0r*26Q?y2S^iIPjuhnbSFyM4w++`Uw-#u`2gkBQpig}m$VS7_WsMlbO?;_R<$d7iXHS|L@#THZn0P1;8~NSYzdla@)Vq#eJZ z^~6aBNKHBu-_Yf@`bWBCMIT<`iK-vhxcV_o^LJ@}?6A&JlzhedQ~ht+U-1pvLd7>4 zOX-*f7>{E3B&i)w<=t9;@yW&URESMH{qLfj{!M=VqiOHAw0(7LUWmPqd~KBlet#YQ zf{(?n0s7b0Uo5*AO3{Dg#f1M0cp0Xr;WFcnKd6 z^L$M^TQ8zA{hQ}neB1uLeLZdDYV!W<6bM*}2oIzb3zm={NP%@avV&dgZ)cy{MPY|G)9OX@65r ze$xCG*l!oV)Z(d%pV2f!oWFH(Od0y`r#wZPBu$Lz@Zl~!o*E^M+^BJqbdt1ttLA4( ztEBzgG`~!0@|nLy^9?RpxMJa|g~PWl4&PznP7B8^oUm}eg_9OeSvX_ioP|d%oVRe% z!jl%Bw(zWl!?)@DoBG*d;Z6(3E!=0}q=nNK9<^}M!etB3S~%RjIK44q^Za`)+;8Ee zh0_+!S~zdvl7%NNT(z)zxmCU_+->26h5Ic$XyLSla~3XGxMbmqg{u}0zhZIvqZaPA zaIb~?Eu6G)%EDO-k6O53;j)D%Ej(@ESqq16U!1=V3&$)Rw{XJ3{T5DIIA!6Cg|imU zTexW9l7%NNJZ<4w3wP{Xoc~S>cU!pM!h;shSU7Ltl7%NNT(z)z<>K^3EF86PuZ0s9 z?zeE#!f6Xe)= zB{t!@r}TPAl;Mh`ar*0LxTqB_!Ei;&W51^L7a4DY{D>89fZaL) z*Z)b~QzuDHJ~EUi$j@2wQOa{))$vtGP51)k8S?X_&;OV{?$`FubE24gmBv%V-IPDX z31FP~Sq?0EiQh(ff_Q|uk9d^0--IU~Am(ziN)msa@edMzgE&R}P2x21bHo|qZxLsS zr-^gK&l8Ulf15Z@oc&vEpFHjHhle#TQ=TX8?A7-ABjObC$A~A1KTaHbK>HsfP7^;% zTp|7hare(?|DPnz5dSgpH1Vg1<4kX5t4?oNp>;qs&r#$)VdQ!}1+SYC<;^z$+0%gl>UP+qp=WGk1B3gxE! z8~q{5(@k2xsSief1LcvoYPqSeCj9#;@21?;AF@^0IGS~MQ=g3fC6xDC`i;Da@_{CIDMv>CYB~n$q`!mmOda`Elt-!GJYQpl;v+vzu6l7wfS>dehZYF=WFuM?R{0H+>{?it4#Z@ z-mdLu+IN$GmmVXO8~rA{DPMi{YVo0k(=>D zhH^Xqru-KuH}#WdMgOQ%I$1~F%8VqMb^2`m?UaX~xVU@`?bAWIX+Mm8)-WO6l$-K9 zFQxGYM`=#oHk5bVn<#zjeJ>`Wu^7l|)qTJ5^R>~`NBU=B* ziA%&|#1-OaiD!vFLEInK;Xg?nd7Z`u;?72m|2uK_5{>^~;sN46HvSp@G;trpe~LIs z{3pZ(;!j(+XyN}s9H;(2B`z`kKOs`~~7N@n2cEOgv5b7cKlH3!ky@-&pu>E&O*Dp0x0nE&LS=pSAE;iPh_M zdH8$c4&tv7$A~M$y~O`O+)w;<;z8nX5NC*|h)0RPNn9j;j(C#zTf|l3Y2t97PVe)? zQQ~hCcN703ae{b;c!2mj#3|zM5@(6ON1P|F8ad0?KM|KG|2}br_@9YqiO&&7-k{U} zFT|b1v&3=Ye<|}-1H@(GAn`PDh*-T* zr@w)?gSe46MjW>A5@J(7nk?LG;iVQ{X5r-)j#zkwg;!d5m4#a^yxPKT7H+q2hlQ`Q z@EQxRweUI%ueb093vaY=)WVxAyqVbaA6HxQEf&7U!q-~(I^teF?@nUVe_e0+zrn&U zvv8M%Z?y1M3vVOtXZ$hZLE@V%`OQ}N9mE;>zr~W@YT?@~+->2PTlf_gzTLt*E&NIg z-(lf9EgZM-T^7E_!uMMEeha_K!mqXPn=HJ?!f&?lTP(cS!u=M0)WVMuoA!U7CEsu1 z$1OZy;e!_bUE)zb|Bn(EiF3qe{PBClX1w+L7XB~9lMG)b9^`oDuPyu~3!ky@-&pu> zE&O*D{<4L?LR@8f&RX)XTJo=1@`{E3!NOm+@HZ?xMI3&U?k~Pc93_5^xSRM}#0lbQ z;sN64iBrViCe9M8-{p9k*daFUUBHqDiA(hF5?6>r7H+U`qlLp3USi=UgV}#K6VEcf z7UIYrZLg)ooy5zC&3s`wu}N=)I8Og7h|TzXC9&y$S6R4~*x0MhlDAv9!}#a;<|<3R z#=>hYywQZ`d?sq)O%~p4;j4-JnBOhLX8dstvB~eX#HN3`j(C*yv(v)Y6Px+e4HkYG zvFZQ1EPNxevFBEUX|HX>X8ao?PBK5+iPOY45$A|+CN}y*IbHruew!@ZY~dCQFSYP8 z3oo~D#KJ2qywbv}EZl10)fR5EaJz*&EPR!P*I0P1h1Xely@fYec%y}*7T#px%@)4e z!donSjfHO@HvPxTEc`3PX8hjxd&>J1SU$oQeuTJ8`Rjj`{3hal;yuKJ#BV0f5Wj_Zlz1<3k+`3DlK4^LD)D2);kW4Y?jw#8?D|@!N3!#4+Oc5cd+lm$;w!81W$SGsGF< zpCuk8K2BUDP7zNMzmK>|{By+NM|FCCo;XT8MBGjMe&Pi22Z#rVe}OnfoF>i^{~~do z_?L)F#J@~jAwEGoOZ+Ruk;im;f0ekC_=Ci8;tX*g@rQ_$#J@(ICjNEe9Pu!5f%rFw z%f!D)JWc#t#A=^TUzWIo__v8;#J@w_OZ;Kte&UnFgTx;p&Jh1D@hI^}iHpQJ;z{D) zBd!vU5Qq2c^!|6^DDfW?cN3o`P7r^Jc!2m%h*QLccj)(c%zG^Z59@fiY^)nw-1~U$ zCDp0Vv5b)>uhF=?Wij1-oyHaNcifqrq{Ua)9QX97pI@AQ)j8KGdZIS}=DC}N-)r$>FFfek zA!+f|zs>zn{O2rwYU|uq;a4oairpC#eq_i>&uivBD*RrXzvJ0g3xCk!=T^5=}cPu*!B;4 z4{qWRQp`J#M^E2m(6(%cCXD> zo;g*Y#aGU8uW3zL{FL*cm){Pn-BTOpHb}gqmVdSBL9czQ*!-o(y@ST#Us{|mwRvu{ z=!x3=Yv-;Ne!}KoJ$JS6Q#QZj4?Bcku=$aXdgZok@e`Xq=%sVo;-}g^>LoDz%Zt+) z-?CTNJBzQHk9)5q_u2f)+^nQ$z~blH<~+q|i=SFL=h-J~@e?l`_S&Vq#m@)kyyr4W zzW4AD-`opxx*a>QIQ`YRAA1kJ)8Z$iAB{>n;}%~vKIpy5I%x4z&2wIUGZtU99QVp? z&f=#UKkex$SbVkYxK}>QHh=lta!F6c=C>aAGBj)PGb4XBBK~`SWpRF0?t>nGfPBwb z;?ZlB(C+d380PsjVA}Ri4;h>9iZXn!hRx?dBxm!zQi%Fu^DCYj7323c%%>-+`FY!a zT=NSyKc)Fai(k=f6>iY>G5VwAmn{Er^2-)KMgHI$^!U{1G2@o=IZ0Nz zfUgZYeF0w^w0Z$w8+7&pepILQR~P3OCEVkOFW{%V@;PbQ2Q7@}KXQS8$Upb%i{(Yiiy!l@=bo%&>(%} z8$G5rBrU#9Ek+fV9@B4)T6}NPjyTGe9@Fnt$v5d-&-6r|T%2ETk_K6)#pf_sCCF!R z6{Ta4e4~F8`8o1uzp9_qX7Wqq7r0O2P0}EnCEwUhFE(Mm$LCU{{kKq0Klx?y^&*H; zY3n(5(tp9?Ur&C;;@?2NN-nm~%gFB}-{kj3^5e!o_baxN-$%Z&!#46$mYx{-S&Q#2 z3P6@O`uY8F-Xae870bW3=mvh6>%%e99n{}TZ0vjs`ALg^EBR^ibEFTeN7cL30d=1` zs1AX?qz^06j^9PTm>;9BM?I`w^AePLgKg*)dP|Mom#WVsK?dtlT%z~ZMS2gYBWj;| z3U)}UqqrYdPr}dTe)M9P)_dC`y$`7e)a%r}>Y>Y3waA~I9cfl~joybnjW1oVwDS&( zAoh59jowF)+MY!zxH2I9L<*PK_Z6a-Ks@{#K z^^|%${9Nfr=56xqB)xal=)DW2U_W$9Z9a0PO5xv|&#~RPyGHN5Xbq%wc-m_nu3WJh ze@J>?Eqd9{EtKDfk>;now)iQOVsT3=^j2K^&_+x7zSxINuaf%wTIe<9_tkh_51}Mn zd5zGqnDK__eNBzt`;ZptDGoEGdr?as_0lSJ?x~90(J<{$-y?79MO@DD0YVlEM z6?;4iTOUCj^>e*Qr3cKoNz!{yjeTDWy^^k{)h=j%9QJtdirRHEz7@SaHFmJ|n*Q#> zlwF+TjYe3`?uA}6KDPDlhP9ul^XxCCS;p6rR;C zgRS>U?cj~?X@_3uHRJn-kmtvdcj<*6MOnDgkC`7xdLO7suh{pnSDW^u9o~PXYLyxP zi{77sUQ>_n^2+Q%w3X7+UHQk%A4Kn~7U@0eJ-K~q0R89P^W(JFz$%whF1%Kp_T44+ z<@l_&wRsq6zS1$8%sb?jYAI(A)#$a`hsCYKrDNJqqxaz&y?3GAO`;r_)=-y>2Viw+ z8Rh=sA2aWf_IEe*n)4Q~MtL}d&51bs556#Kpodd+;Jo?c@K=|NtszHEj*v4QA)z1V^CwtGC=YD->z?*k?L zc=JAXMt#t0%9*715OVwk^1QeYy}S|j7SYf0`v&MW^TUOHB8mJ;e=lWV@u=bflxwm4 z5vHMbRDTWAEzj+Z&}-(Sx*r;#zQv`DL0*)Y^#{@WCb0v@zpsMEr;!rr<0Q3L8jm+0 zrXBXw*w@yZfcAs1#Xj7{GKVhF%6ao?>V5Nz=#}cZKj_TD_lvtChIh2 zocdO=FZ<2=VTYsWiDfMHC|a~ZP$?ZpP)Z~xmzr~!bskCY<2C7hz$**2a~G+}2QdDZ z(W}I;5BK^XZ=HzsVxUHEZ9jh{`8P3n>rB*pu*MEj9(0c;HjuXA%0AvY74^QYMz4$) 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 literal 0 HcmV?d00001 diff --git a/mssql_python/libs/linux/alpine/arm64/lib/libodbcinst.so.2 b/mssql_python/libs/linux/alpine/arm64/lib/libodbcinst.so.2 new file mode 100755 index 0000000000000000000000000000000000000000..62a79a3661f78caf70a64ecd267c9d6ab2bdce6b GIT binary patch literal 132864 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%0DL=@jWQC;bD`)135=NY^{*XGyPd($A6J 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 literal 0 HcmV?d00001 From 538d22063f66c6e07402a5ded1538b37e1b942c3 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 17:51:01 +0530 Subject: [PATCH 07/93] added venv steps --- eng/pipelines/pr-validation-pipeline.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/pr-validation-pipeline.yml b/eng/pipelines/pr-validation-pipeline.yml index 47f6bc976..72d1c297f 100644 --- a/eng/pipelines/pr-validation-pipeline.yml +++ b/eng/pipelines/pr-validation-pipeline.yml @@ -1124,17 +1124,30 @@ jobs: displayName: 'Install ODBC Driver in Alpine ARM64 container' - script: | - # Install Python dependencies in the Alpine ARM64 container + # Install Python dependencies in the Alpine ARM64 container using virtual environment docker exec test-container-alpine-arm64 bash -c " + # Create virtual environment + python -m venv /workspace/venv + + # Activate virtual environment and install dependencies + source /workspace/venv/bin/activate + # Upgrade pip and install dependencies python -m pip install --upgrade pip python -m pip install -r requirements.txt + + # Verify virtual environment is active + which python + which pip " displayName: 'Install Python dependencies in Alpine ARM64 container' - script: | # Build pybind bindings in the Alpine ARM64 container docker exec test-container-alpine-arm64 bash -c " + # Activate virtual environment + source /workspace/venv/bin/activate + cd mssql_python/pybind chmod +x build.sh ./build.sh @@ -1172,6 +1185,9 @@ jobs: echo 'Alpine version:' \$(cat /etc/alpine-release) echo 'Using connection string: Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=***;TrustServerCertificate=yes' + # Activate virtual environment + source /workspace/venv/bin/activate + # Test basic Python import first python -c 'import mssql_python; print(\"mssql_python imported successfully\")' From 4d9ad945a785fb848669eba39e59e5316fc8f066 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 18:09:01 +0530 Subject: [PATCH 08/93] patched driver file for arm64 --- ...OFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt | 76 ++++++++++++++++++ .../alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 | Bin 1858688 -> 1912665 bytes 2 files changed, 76 insertions(+) create mode 100644 mssql_python/libs/linux/alpine/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt diff --git a/mssql_python/libs/linux/alpine/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt b/mssql_python/libs/linux/alpine/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt new file mode 100644 index 000000000..ebd7b3151 --- /dev/null +++ b/mssql_python/libs/linux/alpine/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt @@ -0,0 +1,76 @@ +MICROSOFT SOFTWARE LICENSE TERMS +MICROSOFT ODBC DRIVER 18 FOR SQL SERVER + +These license terms are an agreement between you and Microsoft Corporation (or one of its affiliates). They apply to the software named above and any Microsoft services or software updates (except to the extent such services or updates are accompanied by new or additional terms, in which case those different terms apply prospectively and do not alter your or Microsoft’s rights relating to pre-updated software or services). IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS BELOW. BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. + +1. INSTALLATION AND USE RIGHTS. + + a) General. You may install and use any number of copies of the software to develop and test your applications. + b) Third Party Software. The software may include third party applications that Microsoft, not the third party, licenses to you under this agreement. Any included notices for third party applications are for your information only. + +2. DISTRIBUTABLE CODE. The software may contain code you are permitted to distribute (i.e. make available for third parties) in applications you develop, as described in this Section. + + a) Distribution Rights. The code and test files described below are distributable if included with the software. + + i. REDIST.TXT Files. You may copy and distribute the object code form of code listed on the REDIST list in the software, if any, or listed at REDIST (https://aka.ms/odbc18eularedist); + ii. Image Library. You may copy and distribute images, graphics, and animations in the Image Library as described in the software documentation; + iii. Sample Code, Templates, and Styles. You may copy, modify, and distribute the source and object code form of code marked as “sample”, “template”, “simple styles”, and “sketch styles”; and + iv. Third Party Distribution. You may permit distributors of your applications to copy and distribute any of this distributable code you elect to distribute with your applications. + + b) Distribution Requirements. For any code you distribute, you must: + + i. add significant primary functionality to it in your applications; + ii. require distributors and external end users to agree to terms that protect it and Microsoft at least as much as this agreement; and + iii. indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified distributable code. + + c) Distribution Restrictions. You may not: + + i. use Microsoft’s trademarks or trade dress in your application in any way that suggests your application comes from or is endorsed by Microsoft; or + ii. modify or distribute the source code of any distributable code so that any part of it becomes subject to any license that requires that the distributable code, any other part of the software, or any of Microsoft’s other intellectual property be disclosed or distributed in source code form, or that others have the right to modify it. + +3. DATA COLLECTION. Some features in the software may enable collection of data from users of your applications that access or use the software. If you use these features to enable data collection in your applications, you must comply with applicable law, including getting any required user consent, and maintain a prominent privacy policy that accurately informs users about how you use, collect, and share their data. You agree to comply with all applicable provisions of the Microsoft Privacy Statement at [https://go.microsoft.com/fwlink/?LinkId=521839]. + +4. SCOPE OF LICENSE. The software is licensed, not sold. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you will not (and have no right to): + + d) use the software in any way that is against the law or to create or propagate malware; or + e) share, publish, distribute, or lend the software (except for any distributable code, subject to the terms above), provide the software as a stand-alone hosted solution for others to use, or transfer the software or this agreement to any third party. + +5. EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit http://aka.ms/exporting. + +6. SUPPORT SERVICES. Microsoft is not obligated under this agreement to provide any support services for the software. Any support provided is “as is”, “with all faults”, and without warranty of any kind. + +7. UPDATES. The software may periodically check for updates, and download and install them for you. You may obtain updates only from Microsoft or authorized sources. Microsoft may need to update your system to provide you with updates. You agree to receive these automatic updates without any additional notice. Updates may not include or support all existing software features, services, or peripheral devices. + +8. ENTIRE AGREEMENT. This agreement, and any other terms Microsoft may provide for supplements, updates, or third-party applications, is the entire agreement for the software. + +9. APPLICABLE LAW AND PLACE TO RESOLVE DISPUTES. If you acquired the software in the United States or Canada, the laws of the state or province where you live (or, if a business, where your principal place of business is located) govern the interpretation of this agreement, claims for its breach, and all other claims (including consumer protection, unfair competition, and tort claims), regardless of conflict of laws principles. If you acquired the software in any other country, its laws apply. If U.S. federal jurisdiction exists, you and Microsoft consent to exclusive jurisdiction and venue in the federal court in King County, Washington for all disputes heard in court. If not, you and Microsoft consent to exclusive jurisdiction and venue in the Superior Court of King County, Washington for all disputes heard in court. + +10. CONSUMER RIGHTS; REGIONAL VARIATIONS. This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + a) Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + b) Canada. If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + c) Germany and Austria. + + i. Warranty. The properly licensed software will perform substantially as described in any Microsoft materials that accompany the software. However, Microsoft gives no contractual guarantee in relation to the licensed software. + ii. Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause ii., Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence. + +11. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES, OR CONDITIONS. TO THE EXTENT PERMITTED UNDER APPLICABLE LAWS, MICROSOFT EXCLUDES ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + +12. LIMITATION ON AND EXCLUSION OF DAMAGES. IF YOU HAVE ANY BASIS FOR RECOVERING DAMAGES DESPITE THE PRECEDING DISCLAIMER OF WARRANTY, YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT, OR INCIDENTAL DAMAGES. + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, warranty, guarantee, or condition; strict liability, negligence, or other tort; or any other claim; in each case to the extent permitted by applicable law. + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state, province, or country may not allow the exclusion or limitation of incidental, consequential, or other damages. + Please note: As this software is distributed in Canada, some of the clauses in this agreement are provided below in French. + Remarque: Ce logiciel étant distribué au Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en français. + + EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce logiciel est à votre seule risque et péril. Microsoft n’accorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, d’adéquation à un usage particulier et d’absence de contrefaçon sont exclues. + LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices. + + Cette limitation concerne: + • tout ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers; et + • les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou d’une autre faute dans la limite autorisée par la loi en vigueur. + + Elle s’applique également, même si Microsoft connaissait ou devrait connaître l’éventualité d’un tel dommage. Si votre pays n’autorise pas l’exclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l’exclusion ci-dessus ne s’appliquera pas à votre égard. + EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous pourriez avoir d’autres droits prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas. diff --git a/mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 b/mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 index e0b424186eb87e1f9bd8f5c9088d282ff5ab93c4..d88498315b5e5170b4c00729a48c95fe4ca863f1 100755 GIT binary patch delta 15344 zcmeI3U1(fI6vyXg^RY>jX7jPxO?J(0WBL)(vRjO>qPQCgY6Y8OO}f;S>`M_*NP;c& zLDd8zHKjgy;b8I;zEYYth@s@`voL?~qlA`=~0n3mb{r8tONWYBWTu zht(&*AgdZdwdY}I3`cM`d0%058r95~9=z@5nxA1-E2z%gq^gQ!72{mhHmb+266XY~ zRjfwt_O;fC>_c9>-^1z{lN<)sEuybC;Qb9&qwJkP^};u0{0^&mR8xOZRZh*H zuv$Phu}mY1@rc6QZ>UrDJJSb^;mEKm9|p;)AJiI=;+pwyknl3+G$)1U(90HpMBAulR-i~Yer4|^ zt~s(#X1=&aPhEn`>g}M+!>BgzBlR4!axskwR8yzuncSq}#8*5Ec~qBf(QRkE*SOyT zs2<^8E@gF!Gl%xesS&QNM_KLV%xP4M9W>rzBjL#KEX<k2Rx!km#oHnzkOU)0oBnBVs)Eo9OvdbuQT_ir_AHNRrQ4T= ze%pxT^YTAqI8^?)DtpYoQp)JG7!7|d7?qP4{>tdI7!7|d7?qP4{>tdI7!7|d7?qP4 z{>tdI7!7|d7?qP4{>tdI7!7|d7?qP4{>tdI7!7|d7?qP4{>tdI7!7|d7?qP4{>tdI z7!7|d7?qP4{>tdI7!7|d7?qP4{>tdI7!7|d7?qP4{>tdI7!7|d7?qP4{>tdI7!7|d z7?qP4{>tdI7!7|d7?qP4{>tdI81Eo|{Mhn*)4+JsfCW(o;esfKsDP-1sDf}qR72E2 z?1HF;sDs!IQ4isPXn<&hXo6^l@Itge_#pfctq^SsO#^|mZ{5KGu-J~I{^Ry delta 2321 zcmZXWUuau(6vt1RrcK*4&9b&>k{grOx;1v%6enf~CY2&Gn4QdaLpz!WhYu=kv4V)u zsAHY_(1Z*wK1i$V!68_SVm4PuLBZ-vi&n&kSrr@`{%Mq=9UIj1JLh|4&L5oK_V@Xn zbH3-C-@Wv^@2Bz?CJX8MI?7Un!o|#i;+1rN4H4C`o&G(_KmY$snFG9>r?+@6<9YPw zsVD2~mwVfK?c7&UZzPjvqY_E6YIg$LSXe?RCXIyuI)ky5YklKm~v6ntlep8Saq^QuLk-v+G+&Hb&a9L=AA zZVJt=XhmsMltA8ix5+y{$cK65LCs|_og8B7qZ~B%$r++H^m$r**FI3q)=d}J_$~-d zJfxAG`QAV$H-s*)=*>wX^5>XB%N?O`kaCyx6;b6x+t8e0+C+)lw3ANcPeqltG|tpV z30FvB4j^(jG|w^RK5uHTvZ(i9LT}xw(41Q*I1k^KxH41Gj?nxni{$kyd_RWfzC9-L z*>$~jS;!jb(#T^%TlXk^0ljjg8?!=l$MsHbt2p`+Q>X}CzOLI&y_b=9lWCATR{qonW4~$MZ4FEny!#oUg?rR@A5=YpyyHUWadSH0`xkmOCp2rRsw>F* zbQk6;GW$wis(w*Aif&v8Yu+KDxh0Kx z3^Tfjil&9G@6%EWsMp5y7lft?T2U2wUva+ALbsrK6y1nNG;d3|(27bFe;+(4Q!2UO>924W;Q=t3tNC~7h8~RH(M)P8(TYDh^>Py%oZv8 zhodjPY4_X}Tj?*LY1#(T%WB=SHlI%WYpZ rj~Y99)XI2FfY$P}N3E}G?Chu&NZ$G{jPoxG^!=+OP(JXuHRJjRyPY(b From e47f9c879241eb4b36d279f605a9e84e1d2bc9e1 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 18:32:46 +0530 Subject: [PATCH 09/93] added x86_64 SO files --- ...OFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt | 76 ++++++++++++++++++ .../x86_64/lib/libmsodbcsql-18.5.so.1.1 | Bin 0 -> 2173177 bytes .../linux/alpine/x86_64/lib/libodbcinst.so.2 | Bin 0 -> 91848 bytes 3 files changed, 76 insertions(+) create mode 100644 mssql_python/libs/linux/alpine/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt create mode 100755 mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 create mode 100755 mssql_python/libs/linux/alpine/x86_64/lib/libodbcinst.so.2 diff --git a/mssql_python/libs/linux/alpine/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt b/mssql_python/libs/linux/alpine/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt new file mode 100644 index 000000000..ebd7b3151 --- /dev/null +++ b/mssql_python/libs/linux/alpine/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt @@ -0,0 +1,76 @@ +MICROSOFT SOFTWARE LICENSE TERMS +MICROSOFT ODBC DRIVER 18 FOR SQL SERVER + +These license terms are an agreement between you and Microsoft Corporation (or one of its affiliates). They apply to the software named above and any Microsoft services or software updates (except to the extent such services or updates are accompanied by new or additional terms, in which case those different terms apply prospectively and do not alter your or Microsoft’s rights relating to pre-updated software or services). IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS BELOW. BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. + +1. INSTALLATION AND USE RIGHTS. + + a) General. You may install and use any number of copies of the software to develop and test your applications. + b) Third Party Software. The software may include third party applications that Microsoft, not the third party, licenses to you under this agreement. Any included notices for third party applications are for your information only. + +2. DISTRIBUTABLE CODE. The software may contain code you are permitted to distribute (i.e. make available for third parties) in applications you develop, as described in this Section. + + a) Distribution Rights. The code and test files described below are distributable if included with the software. + + i. REDIST.TXT Files. You may copy and distribute the object code form of code listed on the REDIST list in the software, if any, or listed at REDIST (https://aka.ms/odbc18eularedist); + ii. Image Library. You may copy and distribute images, graphics, and animations in the Image Library as described in the software documentation; + iii. Sample Code, Templates, and Styles. You may copy, modify, and distribute the source and object code form of code marked as “sample”, “template”, “simple styles”, and “sketch styles”; and + iv. Third Party Distribution. You may permit distributors of your applications to copy and distribute any of this distributable code you elect to distribute with your applications. + + b) Distribution Requirements. For any code you distribute, you must: + + i. add significant primary functionality to it in your applications; + ii. require distributors and external end users to agree to terms that protect it and Microsoft at least as much as this agreement; and + iii. indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified distributable code. + + c) Distribution Restrictions. You may not: + + i. use Microsoft’s trademarks or trade dress in your application in any way that suggests your application comes from or is endorsed by Microsoft; or + ii. modify or distribute the source code of any distributable code so that any part of it becomes subject to any license that requires that the distributable code, any other part of the software, or any of Microsoft’s other intellectual property be disclosed or distributed in source code form, or that others have the right to modify it. + +3. DATA COLLECTION. Some features in the software may enable collection of data from users of your applications that access or use the software. If you use these features to enable data collection in your applications, you must comply with applicable law, including getting any required user consent, and maintain a prominent privacy policy that accurately informs users about how you use, collect, and share their data. You agree to comply with all applicable provisions of the Microsoft Privacy Statement at [https://go.microsoft.com/fwlink/?LinkId=521839]. + +4. SCOPE OF LICENSE. The software is licensed, not sold. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you will not (and have no right to): + + d) use the software in any way that is against the law or to create or propagate malware; or + e) share, publish, distribute, or lend the software (except for any distributable code, subject to the terms above), provide the software as a stand-alone hosted solution for others to use, or transfer the software or this agreement to any third party. + +5. EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit http://aka.ms/exporting. + +6. SUPPORT SERVICES. Microsoft is not obligated under this agreement to provide any support services for the software. Any support provided is “as is”, “with all faults”, and without warranty of any kind. + +7. UPDATES. The software may periodically check for updates, and download and install them for you. You may obtain updates only from Microsoft or authorized sources. Microsoft may need to update your system to provide you with updates. You agree to receive these automatic updates without any additional notice. Updates may not include or support all existing software features, services, or peripheral devices. + +8. ENTIRE AGREEMENT. This agreement, and any other terms Microsoft may provide for supplements, updates, or third-party applications, is the entire agreement for the software. + +9. APPLICABLE LAW AND PLACE TO RESOLVE DISPUTES. If you acquired the software in the United States or Canada, the laws of the state or province where you live (or, if a business, where your principal place of business is located) govern the interpretation of this agreement, claims for its breach, and all other claims (including consumer protection, unfair competition, and tort claims), regardless of conflict of laws principles. If you acquired the software in any other country, its laws apply. If U.S. federal jurisdiction exists, you and Microsoft consent to exclusive jurisdiction and venue in the federal court in King County, Washington for all disputes heard in court. If not, you and Microsoft consent to exclusive jurisdiction and venue in the Superior Court of King County, Washington for all disputes heard in court. + +10. CONSUMER RIGHTS; REGIONAL VARIATIONS. This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + a) Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + b) Canada. If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + c) Germany and Austria. + + i. Warranty. The properly licensed software will perform substantially as described in any Microsoft materials that accompany the software. However, Microsoft gives no contractual guarantee in relation to the licensed software. + ii. Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause ii., Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence. + +11. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES, OR CONDITIONS. TO THE EXTENT PERMITTED UNDER APPLICABLE LAWS, MICROSOFT EXCLUDES ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + +12. LIMITATION ON AND EXCLUSION OF DAMAGES. IF YOU HAVE ANY BASIS FOR RECOVERING DAMAGES DESPITE THE PRECEDING DISCLAIMER OF WARRANTY, YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT, OR INCIDENTAL DAMAGES. + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, warranty, guarantee, or condition; strict liability, negligence, or other tort; or any other claim; in each case to the extent permitted by applicable law. + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state, province, or country may not allow the exclusion or limitation of incidental, consequential, or other damages. + Please note: As this software is distributed in Canada, some of the clauses in this agreement are provided below in French. + Remarque: Ce logiciel étant distribué au Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en français. + + EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce logiciel est à votre seule risque et péril. Microsoft n’accorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, d’adéquation à un usage particulier et d’absence de contrefaçon sont exclues. + LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices. + + Cette limitation concerne: + • tout ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers; et + • les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou d’une autre faute dans la limite autorisée par la loi en vigueur. + + Elle s’applique également, même si Microsoft connaissait ou devrait connaître l’éventualité d’un tel dommage. Si votre pays n’autorise pas l’exclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l’exclusion ci-dessus ne s’appliquera pas à votre égard. + EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous pourriez avoir d’autres droits prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas. diff --git a/mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 b/mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 new file mode 100755 index 0000000000000000000000000000000000000000..9ec7372c284850410d11d7f2f1ccc775cdc98fc9 GIT binary patch literal 2173177 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 z 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�>a>v@My_ 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

q5ur7VE8TPbW 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 literal 0 HcmV?d00001 diff --git a/mssql_python/libs/linux/alpine/x86_64/lib/libodbcinst.so.2 b/mssql_python/libs/linux/alpine/x86_64/lib/libodbcinst.so.2 new file mode 100755 index 0000000000000000000000000000000000000000..ceecc8c8057f0dcb9d657683c2243b69b8e4fe47 GIT binary patch literal 91848 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 Date: Tue, 5 Aug 2025 18:33:42 +0530 Subject: [PATCH 10/93] added pipeline tests --- eng/pipelines/pr-validation-pipeline.yml | 241 +++++++++++++++++++++++ 1 file changed, 241 insertions(+) diff --git a/eng/pipelines/pr-validation-pipeline.yml b/eng/pipelines/pr-validation-pipeline.yml index 72d1c297f..5b0a07f64 100644 --- a/eng/pipelines/pr-validation-pipeline.yml +++ b/eng/pipelines/pr-validation-pipeline.yml @@ -985,6 +985,247 @@ jobs: testResultsFiles: '**/test-results-rhel9-arm64.xml' testRunTitle: 'Publish pytest results on RHEL 9 ARM64' +- job: PytestOnLinux_Alpine + pool: + vmImage: 'ubuntu-latest' + + steps: + - script: | + # Set up Docker buildx for multi-architecture support + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker buildx create --name multiarch --driver docker-container --use + docker buildx inspect --bootstrap + displayName: 'Setup Docker buildx for multi-architecture support' + + - script: | + # Create a Docker container for testing on x86_64 + docker run -d --name test-container-alpine \ + --platform linux/amd64 \ + -v $(Build.SourcesDirectory):/workspace \ + -w /workspace \ + --network bridge \ + alpine:latest \ + tail -f /dev/null + displayName: 'Create Alpine x86_64 container' + + - script: | + # Start SQL Server container (x86_64) + docker run -d --name sqlserver-alpine \ + --platform linux/amd64 \ + -e ACCEPT_EULA=Y \ + -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ + -p 1433:1433 \ + mcr.microsoft.com/mssql/server:2022-latest + + # Wait for SQL Server to be ready + echo "Waiting for SQL Server to start..." + for i in {1..60}; do + if docker exec sqlserver-alpine \ + /opt/mssql-tools18/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P "$(DB_PASSWORD)" \ + -C -Q "SELECT 1" >/dev/null 2>&1; then + echo "SQL Server is ready!" + break + fi + echo "Waiting... ($i/60)" + sleep 2 + done + + # Create test database + docker exec sqlserver-alpine \ + /opt/mssql-tools18/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P "$(DB_PASSWORD)" \ + -C -Q "CREATE DATABASE TestDB" + displayName: 'Start SQL Server container for Alpine x86_64' + env: + DB_PASSWORD: $(DB_PASSWORD) + + - script: | + # Install dependencies in the Alpine x86_64 container + docker exec test-container-alpine sh -c " + # Update package index + apk update + + # Install build tools and system dependencies + apk add --no-cache \ + build-base \ + cmake \ + clang \ + git \ + bash \ + wget \ + curl \ + gnupg \ + unixodbc \ + unixodbc-dev \ + libffi-dev \ + openssl-dev \ + zlib-dev \ + py3-pip \ + python3-dev \ + patchelf + + # Create symlinks for Python compatibility + ln -sf python3 /usr/bin/python || true + ln -sf pip3 /usr/bin/pip || true + + # Verify installation and architecture + uname -m + python --version + which cmake + " + displayName: 'Install basic dependencies in Alpine x86_64 container' + + - script: | + # Install ODBC driver in the Alpine x86_64 container + docker exec test-container-alpine bash -c " + # Detect architecture for ODBC driver download + case \$(uname -m) in + x86_64) architecture='amd64' ;; + arm64|aarch64) architecture='arm64' ;; + *) architecture='unsupported' ;; + esac + + if [[ 'unsupported' == '\$architecture' ]]; then + echo 'Alpine architecture \$(uname -m) is not currently supported.' + exit 1 + fi + + echo 'Detected architecture: '\$architecture + + # Download the packages + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.apk + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Download signatures for verification + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.sig + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.sig + + # Import Microsoft GPG key and verify packages + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - + gpg --verify msodbcsql18_18.5.1.1-1_\$architecture.sig msodbcsql18_18.5.1.1-1_\$architecture.apk + gpg --verify mssql-tools18_18.4.1.1-1_\$architecture.sig mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Install the packages + apk add --allow-untrusted msodbcsql18_18.5.1.1-1_\$architecture.apk + apk add --allow-untrusted mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Cleanup + rm -f msodbcsql18_18.5.1.1-1_\$architecture.* mssql-tools18_18.4.1.1-1_\$architecture.* + + # Add mssql-tools to PATH + export PATH=\"\$PATH:/opt/mssql-tools18/bin\" + echo 'export PATH=\"\$PATH:/opt/mssql-tools18/bin\"' >> ~/.bashrc + " + displayName: 'Install ODBC Driver in Alpine x86_64 container' + + - script: | + # Install Python dependencies in the Alpine x86_64 container using virtual environment + docker exec test-container-alpine bash -c " + # Create virtual environment + python -m venv /workspace/venv + + # Activate virtual environment and install dependencies + source /workspace/venv/bin/activate + + # Upgrade pip and install dependencies + python -m pip install --upgrade pip + python -m pip install -r requirements.txt + + # Verify virtual environment is active + which python + which pip + " + displayName: 'Install Python dependencies in Alpine x86_64 container' + + - script: | + # Build pybind bindings in the Alpine x86_64 container + docker exec test-container-alpine bash -c " + # Activate virtual environment + source /workspace/venv/bin/activate + + cd mssql_python/pybind + chmod +x build.sh + ./build.sh + " + displayName: 'Build pybind bindings (.so) in Alpine x86_64 container' + + - script: | + # Uninstall ODBC Driver before running tests to use bundled libraries + docker exec test-container-alpine bash -c " + # Remove system ODBC installation + apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'ODBC packages not installed via apk' + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql18 + rm -f /usr/lib/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled system ODBC Driver and cleaned up libraries' + echo 'Verifying x86_64 alpine driver library signatures:' + ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 || echo 'Driver library not found' + " + displayName: 'Uninstall system ODBC Driver before running tests in Alpine x86_64 container' + + - script: | + # Run tests in the Alpine x86_64 container + # Get SQL Server container IP + SQLSERVER_IP=$(docker inspect sqlserver-alpine --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') + echo "SQL Server IP: $SQLSERVER_IP" + + docker exec \ + -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ + -e DB_PASSWORD="$(DB_PASSWORD)" \ + test-container-alpine bash -c " + echo 'Build successful, running tests now on Alpine x86_64' + echo 'Architecture:' \$(uname -m) + echo 'Alpine version:' \$(cat /etc/alpine-release) + echo 'Using connection string: Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=***;TrustServerCertificate=yes' + + # Activate virtual environment + source /workspace/venv/bin/activate + + # Test basic Python import first + python -c 'import mssql_python; print(\"mssql_python imported successfully\")' + + # Run main.py if it exists + if [ -f main.py ]; then + echo 'Running main.py...' + python main.py + fi + + # Run pytest + python -m pytest -v --junitxml=test-results-alpine.xml --cov=. --cov-report=xml:coverage-alpine.xml --capture=tee-sys --cache-clear + " + displayName: 'Run pytest with coverage in Alpine x86_64 container' + env: + DB_PASSWORD: $(DB_PASSWORD) + + - script: | + # Copy test results from container to host + docker cp test-container-alpine:/workspace/test-results-alpine.xml $(Build.SourcesDirectory)/ || echo 'Failed to copy test results' + docker cp test-container-alpine:/workspace/coverage-alpine.xml $(Build.SourcesDirectory)/ || echo 'Failed to copy coverage results' + displayName: 'Copy test results from Alpine x86_64 container' + condition: always() + + - script: | + # Clean up containers + docker stop test-container-alpine || true + docker rm test-container-alpine || true + docker stop sqlserver-alpine || true + docker rm sqlserver-alpine || true + displayName: 'Clean up Alpine x86_64 containers' + condition: always() + + - task: PublishTestResults@2 + condition: succeededOrFailed() + inputs: + testResultsFiles: '**/test-results-alpine.xml' + testRunTitle: 'Publish pytest results on Alpine x86_64' + - job: PytestOnLinux_Alpine_ARM64 pool: vmImage: 'ubuntu-latest' From 3c6efd55bb48d46c630c15af3806f132dae8a31a Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 18:39:44 +0530 Subject: [PATCH 11/93] refactored tests pr pipeline --- eng/pipelines/pr-validation-pipeline.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/pr-validation-pipeline.yml b/eng/pipelines/pr-validation-pipeline.yml index 5b0a07f64..d507c644b 100644 --- a/eng/pipelines/pr-validation-pipeline.yml +++ b/eng/pipelines/pr-validation-pipeline.yml @@ -156,7 +156,8 @@ jobs: testResultsFiles: '**/test-results.xml' testRunTitle: 'Publish pytest results on macOS' -- job: PytestOnLinux_Ubuntu +- job: PytestOnLinux + displayName: 'Test on Linux' pool: vmImage: 'ubuntu-latest' @@ -349,7 +350,8 @@ jobs: testResultsFiles: '**/test-results-$(distroName).xml' testRunTitle: 'Publish pytest results on $(distroName)' -- job: PytestOnLinux_Ubuntu_ARM64 +- job: PytestOnLinux_ARM64 + displayName: 'Test on Linux ARM64' pool: vmImage: 'ubuntu-latest' @@ -562,6 +564,7 @@ jobs: testRunTitle: 'Publish pytest results on $(distroName) ARM64' - job: PytestOnLinux_RHEL9 + displayName: 'Test on Linux RHEL 9 x86_64' pool: vmImage: 'ubuntu-latest' @@ -768,6 +771,7 @@ jobs: testRunTitle: 'Publish pytest results on RHEL 9' - job: PytestOnLinux_RHEL9_ARM64 + displayName: 'Test on Linux RHEL 9 ARM64' pool: vmImage: 'ubuntu-latest' @@ -986,6 +990,7 @@ jobs: testRunTitle: 'Publish pytest results on RHEL 9 ARM64' - job: PytestOnLinux_Alpine + displayName: 'Test on Linux Alpine x86_64' pool: vmImage: 'ubuntu-latest' @@ -1227,6 +1232,7 @@ jobs: testRunTitle: 'Publish pytest results on Alpine x86_64' - job: PytestOnLinux_Alpine_ARM64 + displayName: 'Test on Linux Alpine ARM64' pool: vmImage: 'ubuntu-latest' From ec9f7d518250375efbdd2ca5a67101348d00e920 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 18:50:11 +0530 Subject: [PATCH 12/93] added share dir for x86_64 --- .../share/resources/en_US/msodbcsqlr18.rll | Bin 0 -> 200704 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 mssql_python/libs/linux/alpine/x86_64/share/resources/en_US/msodbcsqlr18.rll diff --git a/mssql_python/libs/linux/alpine/x86_64/share/resources/en_US/msodbcsqlr18.rll b/mssql_python/libs/linux/alpine/x86_64/share/resources/en_US/msodbcsqlr18.rll new file mode 100644 index 0000000000000000000000000000000000000000..0f69236ee4e74d72d36e6229b6011ba368c00b1c GIT binary patch literal 200704 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 literal 0 HcmV?d00001 From 928fe89f37fd93614677aca713ffcfd6cac5da00 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 5 Aug 2025 18:59:20 +0530 Subject: [PATCH 13/93] reformatted job names in pipeline --- eng/pipelines/pr-validation-pipeline.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/eng/pipelines/pr-validation-pipeline.yml b/eng/pipelines/pr-validation-pipeline.yml index d507c644b..9c2cad12e 100644 --- a/eng/pipelines/pr-validation-pipeline.yml +++ b/eng/pipelines/pr-validation-pipeline.yml @@ -8,6 +8,7 @@ trigger: jobs: - job: PytestOnWindows + displayName: 'Windows x64' pool: vmImage: 'windows-latest' @@ -78,6 +79,7 @@ jobs: displayName: 'Publish code coverage results' - job: PytestOnMacOS + displayName: 'macOS x86_64' pool: vmImage: 'macos-latest' @@ -157,7 +159,7 @@ jobs: testRunTitle: 'Publish pytest results on macOS' - job: PytestOnLinux - displayName: 'Test on Linux' + displayName: 'Linux x86_64' pool: vmImage: 'ubuntu-latest' @@ -351,7 +353,7 @@ jobs: testRunTitle: 'Publish pytest results on $(distroName)' - job: PytestOnLinux_ARM64 - displayName: 'Test on Linux ARM64' + displayName: 'Linux ARM64' pool: vmImage: 'ubuntu-latest' @@ -564,7 +566,7 @@ jobs: testRunTitle: 'Publish pytest results on $(distroName) ARM64' - job: PytestOnLinux_RHEL9 - displayName: 'Test on Linux RHEL 9 x86_64' + displayName: 'Linux RedHat x86_64' pool: vmImage: 'ubuntu-latest' @@ -771,7 +773,7 @@ jobs: testRunTitle: 'Publish pytest results on RHEL 9' - job: PytestOnLinux_RHEL9_ARM64 - displayName: 'Test on Linux RHEL 9 ARM64' + displayName: 'Linux RedHat ARM64' pool: vmImage: 'ubuntu-latest' @@ -990,7 +992,7 @@ jobs: testRunTitle: 'Publish pytest results on RHEL 9 ARM64' - job: PytestOnLinux_Alpine - displayName: 'Test on Linux Alpine x86_64' + displayName: 'Linux Alpine x86_64' pool: vmImage: 'ubuntu-latest' @@ -1232,7 +1234,7 @@ jobs: testRunTitle: 'Publish pytest results on Alpine x86_64' - job: PytestOnLinux_Alpine_ARM64 - displayName: 'Test on Linux Alpine ARM64' + displayName: 'Linux Alpine ARM64' pool: vmImage: 'ubuntu-latest' From 8ec0b7e24c81f0ff72a08e9ba1a197cb1f29a5e3 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 00:26:29 +0530 Subject: [PATCH 14/93] FEAT: Build for Alpine --- eng/pipelines/build-whl-pipeline.yml | 386 +++++++++++++++++++-------- 1 file changed, 281 insertions(+), 105 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 365f26efe..b2ef43e43 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -14,6 +14,7 @@ schedules: branches: include: - main + always: true # Always run even if there are no changes jobs: - job: BuildWindowsWheels @@ -556,6 +557,72 @@ jobs: packageManager: 'dnf' buildFromSource: 'true' + # Alpine Linux (x86_64 and ARM64) + py310_x86_64_alpine: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'Alpine' + packageManager: 'apk' + py310_arm64_alpine: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'Alpine' + packageManager: 'apk' + py311_x86_64_alpine: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'Alpine' + packageManager: 'apk' + py311_arm64_alpine: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'Alpine' + packageManager: 'apk' + py312_x86_64_alpine: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'Alpine' + packageManager: 'apk' + py312_arm64_alpine: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'Alpine' + packageManager: 'apk' + py313_x86_64_alpine: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'Alpine' + packageManager: 'apk' + py313_arm64_alpine: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'Alpine' + packageManager: 'apk' + steps: # Set up Docker buildx for multi-architecture support - script: | @@ -694,6 +761,41 @@ jobs: /usr/local/bin/python --version fi " + elif [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) sh -c " + # Update package index + apk update + + # Install build tools and system dependencies + apk add --no-cache \ + build-base \ + cmake \ + clang \ + git \ + bash \ + wget \ + curl \ + gnupg \ + unixodbc \ + unixodbc-dev \ + libffi-dev \ + openssl-dev \ + zlib-dev \ + py3-pip \ + python3-dev \ + patchelf + + # Create symlinks for Python compatibility + ln -sf python3 /usr/bin/python || true + ln -sf pip3 /usr/bin/pip || true + + # Verify installation and architecture + echo 'Architecture:' \$(uname -m) + echo 'Alpine version:' \$(cat /etc/alpine-release) + python --version + which cmake + " else # RHEL/DNF docker exec build-container-$(distroName)-$(targetArch) bash -c " @@ -846,6 +948,47 @@ jobs: # optional: for unixODBC development headers apt-get install -y unixodbc-dev " + elif [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Detect architecture for ODBC driver download + case \$(uname -m) in + x86_64) architecture='amd64' ;; + arm64|aarch64) architecture='arm64' ;; + *) architecture='unsupported' ;; + esac + + if [[ 'unsupported' == '\$architecture' ]]; then + echo 'Alpine architecture \$(uname -m) is not currently supported.' + exit 1 + fi + + echo 'Detected architecture: '\$architecture + + # Download the packages + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.apk + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Download signatures for verification + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.sig + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.sig + + # Import Microsoft GPG key and verify packages + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - + gpg --verify msodbcsql18_18.5.1.1-1_\$architecture.sig msodbcsql18_18.5.1.1-1_\$architecture.apk + gpg --verify mssql-tools18_18.4.1.1-1_\$architecture.sig mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Install the packages + apk add --allow-untrusted msodbcsql18_18.5.1.1-1_\$architecture.apk + apk add --allow-untrusted mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Cleanup + rm -f msodbcsql18_18.5.1.1-1_\$architecture.* mssql-tools18_18.4.1.1-1_\$architecture.* + + # Add mssql-tools to PATH + export PATH=\"\$PATH:/opt/mssql-tools18/bin\" + echo 'export PATH=\"\$PATH:/opt/mssql-tools18/bin\"' >> ~/.bashrc + " else # RHEL/DNF docker exec build-container-$(distroName)-$(targetArch) bash -c " @@ -869,111 +1012,150 @@ jobs: - script: | # Install Python dependencies in the container using virtual environment - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Debug: Check what Python versions are available - echo 'Available Python interpreters:' - ls -la /usr/bin/python* || echo 'No python in /usr/bin' - ls -la /usr/local/bin/python* || echo 'No python in /usr/local/bin' - - # Determine which Python command to use - if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - echo 'Using specific versioned Python from /usr/local/bin' - elif command -v python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=python$(pythonVersion) - echo 'Using python$(pythonVersion) from PATH' - elif command -v python3 >/dev/null 2>&1; then - PYTHON_CMD=python3 - echo 'Falling back to python3 instead of python$(pythonVersion)' - else - echo 'No Python interpreter found' - exit 1 - fi - - echo 'Selected Python command:' \$PYTHON_CMD - echo 'Python version:' \$(\$PYTHON_CMD --version) - echo 'Python executable path:' \$(which \$PYTHON_CMD) - - # Verify the symlink is pointing to the right version - if [ '\$PYTHON_CMD' = '/usr/local/bin/python$(pythonVersion)' ]; then - echo 'Symlink details:' - ls -la /usr/local/bin/python$(pythonVersion) - echo 'Target Python version:' - /usr/local/bin/python$(pythonVersion) --version - fi - - # Ensure we have pip available for this Python version - if ! \$PYTHON_CMD -m pip --version >/dev/null 2>&1; then - echo 'Installing pip for' \$PYTHON_CMD - curl -sS https://bootstrap.pypa.io/get-pip.py | \$PYTHON_CMD - fi - - # Create a virtual environment with the available Python version - \$PYTHON_CMD -m venv /opt/venv - source /opt/venv/bin/activate - - # Verify virtual environment Python version - echo 'Python version in venv after creation:' \$(python --version) - echo 'Python executable in venv:' \$(which python) - - # Upgrade pip in virtual environment - python -m pip install --upgrade pip - - # Install pybind11 if not available from system packages - python -m pip install pybind11 - - # Install dependencies in the virtual environment - python -m pip install -r requirements.txt - python -m pip install wheel setuptools - - # Make the virtual environment globally available - echo 'source /opt/venv/bin/activate' >> ~/.bashrc - - # Final verification - echo 'Final verification:' - echo 'Python version in venv:' \$(python --version) - echo 'Pip version in venv:' \$(pip --version) - echo 'Python sys.executable:' \$(python -c 'import sys; print(sys.executable)') - " + if [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Create virtual environment + python -m venv /workspace/venv + + # Activate virtual environment and install dependencies + source /workspace/venv/bin/activate + + # Upgrade pip and install dependencies + python -m pip install --upgrade pip + python -m pip install -r requirements.txt + python -m pip install wheel setuptools + + # Verify virtual environment is active + echo 'Python version in venv:' \$(python --version) + echo 'Python executable:' \$(which python) + echo 'Pip version:' \$(pip --version) + " + else + # Ubuntu/Debian/RHEL + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Debug: Check what Python versions are available + echo 'Available Python interpreters:' + ls -la /usr/bin/python* || echo 'No python in /usr/bin' + ls -la /usr/local/bin/python* || echo 'No python in /usr/local/bin' + + # Determine which Python command to use + if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + echo 'Using specific versioned Python from /usr/local/bin' + elif command -v python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=python$(pythonVersion) + echo 'Using python$(pythonVersion) from PATH' + elif command -v python3 >/dev/null 2>&1; then + PYTHON_CMD=python3 + echo 'Falling back to python3 instead of python$(pythonVersion)' + else + echo 'No Python interpreter found' + exit 1 + fi + + echo 'Selected Python command:' \$PYTHON_CMD + echo 'Python version:' \$(\$PYTHON_CMD --version) + echo 'Python executable path:' \$(which \$PYTHON_CMD) + + # Verify the symlink is pointing to the right version + if [ '\$PYTHON_CMD' = '/usr/local/bin/python$(pythonVersion)' ]; then + echo 'Symlink details:' + ls -la /usr/local/bin/python$(pythonVersion) + echo 'Target Python version:' + /usr/local/bin/python$(pythonVersion) --version + fi + + # Ensure we have pip available for this Python version + if ! \$PYTHON_CMD -m pip --version >/dev/null 2>&1; then + echo 'Installing pip for' \$PYTHON_CMD + curl -sS https://bootstrap.pypa.io/get-pip.py | \$PYTHON_CMD + fi + + # Create a virtual environment with the available Python version + \$PYTHON_CMD -m venv /opt/venv + source /opt/venv/bin/activate + + # Verify virtual environment Python version + echo 'Python version in venv after creation:' \$(python --version) + echo 'Python executable in venv:' \$(which python) + + # Upgrade pip in virtual environment + python -m pip install --upgrade pip + + # Install pybind11 if not available from system packages + python -m pip install pybind11 + + # Install dependencies in the virtual environment + python -m pip install -r requirements.txt + python -m pip install wheel setuptools + + # Make the virtual environment globally available + echo 'source /opt/venv/bin/activate' >> ~/.bashrc + + # Final verification + echo 'Final verification:' + echo 'Python version in venv:' \$(python --version) + echo 'Pip version in venv:' \$(pip --version) + echo 'Python sys.executable:' \$(python -c 'import sys; print(sys.executable)') + " + fi displayName: 'Install Python dependencies in $(distroName) $(targetArch) container' - script: | # Build pybind bindings in the container - docker exec build-container-$(distroName)-$(targetArch) bash -c " - source /opt/venv/bin/activate - - # Verify build tools are available - echo 'Verifying build tools before starting build:' - echo 'Python version:' \$(python --version) - echo 'CMake status:' - if command -v cmake >/dev/null 2>&1; then - cmake --version - else - echo 'ERROR: cmake not found in PATH' - echo 'PATH:' \$PATH - echo 'Available binaries in /usr/bin/:' - ls -la /usr/bin/ | grep cmake || echo 'No cmake in /usr/bin' - echo 'Trying to find cmake:' - find /usr -name cmake 2>/dev/null || echo 'cmake not found anywhere' + if [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Activate virtual environment + source /workspace/venv/bin/activate + + echo 'Building pybind bindings for $(distroName) $(targetArch)' + echo 'Python version:' \$(python --version) + echo 'Architecture:' \$(uname -m) - # Try to install cmake if missing (RHEL specific) - if [ '$(packageManager)' = 'dnf' ]; then - echo 'Attempting to reinstall cmake for RHEL...' - dnf install -y cmake - echo 'After reinstall:' - cmake --version || echo 'cmake still not available' + cd mssql_python/pybind + chmod +x build.sh + ./build.sh + " + else + # Ubuntu/Debian/RHEL + docker exec build-container-$(distroName)-$(targetArch) bash -c " + source /opt/venv/bin/activate + + # Verify build tools are available + echo 'Verifying build tools before starting build:' + echo 'Python version:' \$(python --version) + echo 'CMake status:' + if command -v cmake >/dev/null 2>&1; then + cmake --version + else + echo 'ERROR: cmake not found in PATH' + echo 'PATH:' \$PATH + echo 'Available binaries in /usr/bin/:' + ls -la /usr/bin/ | grep cmake || echo 'No cmake in /usr/bin' + echo 'Trying to find cmake:' + find /usr -name cmake 2>/dev/null || echo 'cmake not found anywhere' + + # Try to install cmake if missing (RHEL specific) + if [ '$(packageManager)' = 'dnf' ]; then + echo 'Attempting to reinstall cmake for RHEL...' + dnf install -y cmake + echo 'After reinstall:' + cmake --version || echo 'cmake still not available' + fi fi - fi - - echo 'GCC status:' - gcc --version || echo 'gcc not found' - echo 'Make status:' - make --version || echo 'make not found' - - cd mssql_python/pybind - chmod +x build.sh - ./build.sh - " + + echo 'GCC status:' + gcc --version || echo 'gcc not found' + echo 'Make status:' + make --version || echo 'make not found' + + cd mssql_python/pybind + chmod +x build.sh + ./build.sh + " + fi displayName: 'Build pybind bindings (.so) in $(distroName) $(targetArch) container' - script: | @@ -1083,12 +1265,6 @@ jobs: testResultsFiles: '**/test-results-$(distroName)-$(targetArch).xml' testRunTitle: 'Publish pytest results on $(distroName) $(targetArch)' - - task: PublishCodeCoverageResults@1 - inputs: - codeCoverageTool: 'Cobertura' - summaryFileLocation: 'coverage-$(distroName)-$(targetArch).xml' - displayName: 'Publish code coverage results for $(distroName) $(targetArch)' - - task: PublishBuildArtifacts@1 condition: succeededOrFailed() inputs: From 4cafeafacc950ab81f6102f3849831deeee959db Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 01:25:12 +0530 Subject: [PATCH 15/93] apk instead of dnf --- eng/pipelines/build-whl-pipeline.yml | 34 +++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index b2ef43e43..03a98c0ba 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -564,7 +564,7 @@ jobs: targetArch: 'x86_64' dockerPlatform: 'linux/amd64' dockerImage: 'alpine:latest' - distroName: 'Alpine' + distroName: 'alpine' packageManager: 'apk' py310_arm64_alpine: pythonVersion: '3.10' @@ -572,7 +572,7 @@ jobs: targetArch: 'arm64' dockerPlatform: 'linux/arm64' dockerImage: 'alpine:latest' - distroName: 'Alpine' + distroName: 'alpine' packageManager: 'apk' py311_x86_64_alpine: pythonVersion: '3.11' @@ -580,7 +580,7 @@ jobs: targetArch: 'x86_64' dockerPlatform: 'linux/amd64' dockerImage: 'alpine:latest' - distroName: 'Alpine' + distroName: 'alpine' packageManager: 'apk' py311_arm64_alpine: pythonVersion: '3.11' @@ -588,7 +588,7 @@ jobs: targetArch: 'arm64' dockerPlatform: 'linux/arm64' dockerImage: 'alpine:latest' - distroName: 'Alpine' + distroName: 'alpine' packageManager: 'apk' py312_x86_64_alpine: pythonVersion: '3.12' @@ -596,7 +596,7 @@ jobs: targetArch: 'x86_64' dockerPlatform: 'linux/amd64' dockerImage: 'alpine:latest' - distroName: 'Alpine' + distroName: 'alpine' packageManager: 'apk' py312_arm64_alpine: pythonVersion: '3.12' @@ -604,7 +604,7 @@ jobs: targetArch: 'arm64' dockerPlatform: 'linux/arm64' dockerImage: 'alpine:latest' - distroName: 'Alpine' + distroName: 'alpine' packageManager: 'apk' py313_x86_64_alpine: pythonVersion: '3.13' @@ -612,7 +612,7 @@ jobs: targetArch: 'x86_64' dockerPlatform: 'linux/amd64' dockerImage: 'alpine:latest' - distroName: 'Alpine' + distroName: 'alpine' packageManager: 'apk' py313_arm64_alpine: pythonVersion: '3.13' @@ -620,7 +620,7 @@ jobs: targetArch: 'arm64' dockerPlatform: 'linux/arm64' dockerImage: 'alpine:latest' - distroName: 'Alpine' + distroName: 'alpine' packageManager: 'apk' steps: @@ -1179,6 +1179,24 @@ jobs: ldd mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 fi " + elif [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) sh -c " + # Uninstall ODBC packages + apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'Some packages were not installed' + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql + rm -f /usr/lib/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled ODBC Driver and cleaned up libraries' + echo 'Verifying $(targetArch) alpine driver library signatures:' + if [ '$(targetArch)' = 'x86_64' ]; then + ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " else # RHEL/DNF docker exec build-container-$(distroName)-$(targetArch) bash -c " From c1783028ca05ca50594163a1259e1eaa1f977291 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 11:17:06 +0530 Subject: [PATCH 16/93] refactor code --- eng/pipelines/build-whl-pipeline.yml | 249 +++++++-------------------- 1 file changed, 63 insertions(+), 186 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 03a98c0ba..9abede4c1 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -1012,210 +1012,87 @@ jobs: - script: | # Install Python dependencies in the container using virtual environment - if [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Create virtual environment - python -m venv /workspace/venv - - # Activate virtual environment and install dependencies - source /workspace/venv/bin/activate - - # Upgrade pip and install dependencies - python -m pip install --upgrade pip - python -m pip install -r requirements.txt - python -m pip install wheel setuptools - - # Verify virtual environment is active - echo 'Python version in venv:' \$(python --version) - echo 'Python executable:' \$(which python) - echo 'Pip version:' \$(pip --version) - " - else - # Ubuntu/Debian/RHEL - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Debug: Check what Python versions are available - echo 'Available Python interpreters:' - ls -la /usr/bin/python* || echo 'No python in /usr/bin' - ls -la /usr/local/bin/python* || echo 'No python in /usr/local/bin' - - # Determine which Python command to use + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Determine which Python command to use + if [ '$(packageManager)' = 'apk' ]; then + # Alpine Linux - use python directly + PYTHON_CMD=python + else + # Ubuntu/Debian/RHEL - determine the best Python command if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - echo 'Using specific versioned Python from /usr/local/bin' elif command -v python$(pythonVersion) >/dev/null 2>&1; then PYTHON_CMD=python$(pythonVersion) - echo 'Using python$(pythonVersion) from PATH' elif command -v python3 >/dev/null 2>&1; then PYTHON_CMD=python3 - echo 'Falling back to python3 instead of python$(pythonVersion)' else echo 'No Python interpreter found' exit 1 fi - - echo 'Selected Python command:' \$PYTHON_CMD - echo 'Python version:' \$(\$PYTHON_CMD --version) - echo 'Python executable path:' \$(which \$PYTHON_CMD) - - # Verify the symlink is pointing to the right version - if [ '\$PYTHON_CMD' = '/usr/local/bin/python$(pythonVersion)' ]; then - echo 'Symlink details:' - ls -la /usr/local/bin/python$(pythonVersion) - echo 'Target Python version:' - /usr/local/bin/python$(pythonVersion) --version - fi - - # Ensure we have pip available for this Python version - if ! \$PYTHON_CMD -m pip --version >/dev/null 2>&1; then - echo 'Installing pip for' \$PYTHON_CMD - curl -sS https://bootstrap.pypa.io/get-pip.py | \$PYTHON_CMD - fi - - # Create a virtual environment with the available Python version - \$PYTHON_CMD -m venv /opt/venv - source /opt/venv/bin/activate - - # Verify virtual environment Python version - echo 'Python version in venv after creation:' \$(python --version) - echo 'Python executable in venv:' \$(which python) - - # Upgrade pip in virtual environment - python -m pip install --upgrade pip - - # Install pybind11 if not available from system packages - python -m pip install pybind11 - - # Install dependencies in the virtual environment - python -m pip install -r requirements.txt - python -m pip install wheel setuptools - - # Make the virtual environment globally available - echo 'source /opt/venv/bin/activate' >> ~/.bashrc - - # Final verification - echo 'Final verification:' - echo 'Python version in venv:' \$(python --version) - echo 'Pip version in venv:' \$(pip --version) - echo 'Python sys.executable:' \$(python -c 'import sys; print(sys.executable)') - " - fi + fi + + echo 'Selected Python command:' \$PYTHON_CMD + echo 'Python version:' \$(\$PYTHON_CMD --version) + + # Create virtual environment at consistent path + \$PYTHON_CMD -m venv /workspace/venv + source /workspace/venv/bin/activate + + # Upgrade pip and install dependencies + python -m pip install --upgrade pip + python -m pip install pybind11 + python -m pip install -r requirements.txt + python -m pip install wheel setuptools + + # Verify installation + echo 'Python version in venv:' \$(python --version) + echo 'Python executable:' \$(which python) + echo 'Pip version:' \$(pip --version) + " displayName: 'Install Python dependencies in $(distroName) $(targetArch) container' - script: | # Build pybind bindings in the container - if [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Activate virtual environment - source /workspace/venv/bin/activate - - echo 'Building pybind bindings for $(distroName) $(targetArch)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - - cd mssql_python/pybind - chmod +x build.sh - ./build.sh - " - else - # Ubuntu/Debian/RHEL - docker exec build-container-$(distroName)-$(targetArch) bash -c " - source /opt/venv/bin/activate - - # Verify build tools are available - echo 'Verifying build tools before starting build:' - echo 'Python version:' \$(python --version) + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Activate virtual environment + source /workspace/venv/bin/activate + + echo 'Building pybind bindings for $(distroName) $(targetArch)' + echo 'Python version:' \$(python --version) + echo 'Architecture:' \$(uname -m) + + # Verify build tools (for RHEL debugging) + if [ '$(packageManager)' = 'dnf' ]; then echo 'CMake status:' - if command -v cmake >/dev/null 2>&1; then - cmake --version - else - echo 'ERROR: cmake not found in PATH' - echo 'PATH:' \$PATH - echo 'Available binaries in /usr/bin/:' - ls -la /usr/bin/ | grep cmake || echo 'No cmake in /usr/bin' - echo 'Trying to find cmake:' - find /usr -name cmake 2>/dev/null || echo 'cmake not found anywhere' - - # Try to install cmake if missing (RHEL specific) - if [ '$(packageManager)' = 'dnf' ]; then - echo 'Attempting to reinstall cmake for RHEL...' - dnf install -y cmake - echo 'After reinstall:' - cmake --version || echo 'cmake still not available' - fi - fi - - echo 'GCC status:' - gcc --version || echo 'gcc not found' - echo 'Make status:' - make --version || echo 'make not found' - - cd mssql_python/pybind - chmod +x build.sh - ./build.sh - " - fi + cmake --version || echo 'cmake not available' + fi + + cd mssql_python/pybind + chmod +x build.sh + ./build.sh + " displayName: 'Build pybind bindings (.so) in $(distroName) $(targetArch) container' - script: | - # Uninstall ODBC Driver before running tests - if [ "$(packageManager)" = "apt" ]; then - # Ubuntu/Debian - docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive - apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /lib/x86_64-linux-gnu/libodbcinst.so.2 - rm -f /lib/aarch64-linux-gnu/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) debian_ubuntu driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - elif [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) sh -c " - # Uninstall ODBC packages - apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'Some packages were not installed' - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /usr/lib/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) alpine driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - else - # RHEL/DNF - docker exec build-container-$(distroName)-$(targetArch) bash -c " - dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /lib64/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) rhel driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - fi - displayName: 'Uninstall ODBC Driver before running tests in $(distroName) $(targetArch) container' + # Run tests in the container + # Get SQL Server container IP + SQLSERVER_IP=$(docker inspect sqlserver-$(distroName)-$(targetArch) --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') + echo "SQL Server IP: $SQLSERVER_IP" + + docker exec \ + -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ + -e DB_PASSWORD="$(DB_PASSWORD)" \ + build-container-$(distroName)-$(targetArch) bash -c " + source /workspace/venv/bin/activate + echo 'Build successful, running tests now on $(distroName) $(targetArch)' + echo 'Python version:' \$(python --version) + echo 'Architecture:' \$(uname -m) + echo 'Using connection string: Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=***;TrustServerCertificate=yes' + python -m pytest -v --junitxml=test-results-$(distroName)-$(targetArch).xml --cov=. --cov-report=xml:coverage-$(distroName)-$(targetArch).xml --capture=tee-sys --cache-clear + " + displayName: 'Run pytest with coverage in $(distroName) $(targetArch) container' + env: + DB_PASSWORD: $(DB_PASSWORD) - script: | # Run tests in the container From b4abcd0a1dbd62be8a1704265598eb1bd1419e19 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 11:43:59 +0530 Subject: [PATCH 17/93] fix test steps and readd odbc uninstall --- eng/pipelines/build-whl-pipeline.yml | 79 ++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 9abede4c1..1ddc27149 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -1072,27 +1072,64 @@ jobs: ./build.sh " displayName: 'Build pybind bindings (.so) in $(distroName) $(targetArch) container' - + - script: | - # Run tests in the container - # Get SQL Server container IP - SQLSERVER_IP=$(docker inspect sqlserver-$(distroName)-$(targetArch) --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') - echo "SQL Server IP: $SQLSERVER_IP" - - docker exec \ - -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ - -e DB_PASSWORD="$(DB_PASSWORD)" \ - build-container-$(distroName)-$(targetArch) bash -c " - source /workspace/venv/bin/activate - echo 'Build successful, running tests now on $(distroName) $(targetArch)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - echo 'Using connection string: Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=***;TrustServerCertificate=yes' - python -m pytest -v --junitxml=test-results-$(distroName)-$(targetArch).xml --cov=. --cov-report=xml:coverage-$(distroName)-$(targetArch).xml --capture=tee-sys --cache-clear - " - displayName: 'Run pytest with coverage in $(distroName) $(targetArch) container' - env: - DB_PASSWORD: $(DB_PASSWORD) + # Uninstall ODBC Driver before running tests + if [ "$(packageManager)" = "apt" ]; then + # Ubuntu/Debian + docker exec build-container-$(distroName)-$(targetArch) bash -c " + export DEBIAN_FRONTEND=noninteractive + apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql + rm -f /lib/x86_64-linux-gnu/libodbcinst.so.2 + rm -f /lib/aarch64-linux-gnu/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled ODBC Driver and cleaned up libraries' + echo 'Verifying $(targetArch) debian_ubuntu driver library signatures:' + if [ '$(targetArch)' = 'x86_64' ]; then + ldd mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " + elif [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) sh -c " + apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'Some packages were not installed' + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql + rm -f /usr/lib/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled ODBC Driver and cleaned up libraries' + echo 'Verifying $(targetArch) alpine driver library signatures:' + if [ '$(targetArch)' = 'x86_64' ]; then + ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " + else + # RHEL/DNF + docker exec build-container-$(distroName)-$(targetArch) bash -c " + dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql + rm -f /lib64/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled ODBC Driver and cleaned up libraries' + echo 'Verifying $(targetArch) rhel driver library signatures:' + if [ '$(targetArch)' = 'x86_64' ]; then + ldd mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " + fi + displayName: 'Uninstall ODBC Driver before running tests in $(distroName) $(targetArch) container' - script: | # Run tests in the container @@ -1104,7 +1141,7 @@ jobs: -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ -e DB_PASSWORD="$(DB_PASSWORD)" \ build-container-$(distroName)-$(targetArch) bash -c " - source /opt/venv/bin/activate + source /workspace/venv/bin/activate echo 'Build successful, running tests now on $(distroName) $(targetArch)' echo 'Python version:' \$(python --version) echo 'Architecture:' \$(uname -m) From a7f5ea2b8fa2ac66ac5848215deaf7b9686c69e1 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 17:27:27 +0530 Subject: [PATCH 18/93] use workspace venv --- eng/pipelines/build-whl-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 1ddc27149..877d60101 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -1155,7 +1155,7 @@ jobs: - script: | # Build wheel package in the container docker exec build-container-$(distroName)-$(targetArch) bash -c " - source /opt/venv/bin/activate + source /workspace/venv/bin/activate echo 'Building wheel for $(distroName) $(targetArch) Python $(pythonVersion)' echo 'Python version:' \$(python --version) echo 'Architecture:' \$(uname -m) From 5690ce2071556eadf2a7d3e628563f501fb52073 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 17:55:03 +0530 Subject: [PATCH 19/93] add changes for musllinux in setup --- setup.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index 7cb1433cc..84d86b339 100644 --- a/setup.py +++ b/setup.py @@ -31,15 +31,19 @@ def get_platform_info(): return 'universal2', 'macosx_15_0_universal2' elif sys.platform.startswith('linux'): - # Linux platform - use manylinux2014 tags - # Use targetArch from environment or fallback to platform.machine() + # Linux platform - use musllinux or manylinux tags based on architecture + # Get target architecture from environment variable or default to platform machine type import platform target_arch = os.environ.get('targetArch', platform.machine()) + + # Detect libc type + libc_name, _ = platform.libc_ver() + is_musl = libc_name == '' or 'musl' in libc_name.lower() if target_arch == 'x86_64': - return 'x86_64', 'manylinux2014_x86_64' + return 'x86_64', 'musllinux_1_1_x86_64' if is_musl else 'manylinux2014_x86_64' elif target_arch in ['aarch64', 'arm64']: - return 'aarch64', 'manylinux2014_aarch64' + return 'aarch64', 'musllinux_1_1_aarch64' if is_musl else 'manylinux2014_aarch64' else: raise OSError(f"Unsupported architecture '{target_arch}' for Linux; expected 'x86_64' or 'aarch64'.") From 5a2704ccb91ce9fb16e29b658dd4a40cfcac2d43 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 18:19:29 +0530 Subject: [PATCH 20/93] fix docker colima usage in macOS --- eng/pipelines/build-whl-pipeline.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 877d60101..982672916 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -286,8 +286,13 @@ jobs: brew update brew install docker colima - # Start Colima with extra resources - colima start --cpu 4 --memory 8 --disk 50 + # Try VZ first, fallback to QEMU if it fails + # Use more conservative resource allocation for Azure DevOps runners + colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ + colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu + + # Set a timeout to ensure Colima starts properly + sleep 30 # Optional: set Docker context (usually automatic) docker context use colima >/dev/null || true From 43958e46da14b3b23a4047c8bf3a1fed0094a664 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 18:30:02 +0530 Subject: [PATCH 21/93] fix conn pooling speed --- tests/test_003_connection.py | 53 +++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/tests/test_003_connection.py b/tests/test_003_connection.py index c71e769b9..51fce818e 100644 --- a/tests/test_003_connection.py +++ b/tests/test_003_connection.py @@ -226,51 +226,54 @@ def test_connection_close(conn_str): temp_conn.close() def test_connection_pooling_speed(conn_str): + """Test that connection pooling provides performance benefits over multiple iterations.""" + import statistics + + # Warm up to eliminate cold start effects + for _ in range(3): + conn = connect(conn_str) + conn.close() + # Disable pooling first pooling(enabled=False) - # Warm up - establish initial connection to avoid first-connection overhead - warmup = connect(conn_str) - warmup.close() - - # Measure multiple non-pooled connections - non_pooled_times = [] - for _ in range(5): + # Test without pooling (multiple times) + no_pool_times = [] + for _ in range(10): start = time.perf_counter() conn = connect(conn_str) conn.close() end = time.perf_counter() - non_pooled_times.append(end - start) - - avg_no_pool = sum(non_pooled_times) / len(non_pooled_times) + no_pool_times.append(end - start) # Enable pooling pooling(max_size=5, idle_timeout=30) - # Prime the pool with a connection - primer = connect(conn_str) - primer.close() - - # Small delay to ensure connection is properly returned to pool - time.sleep(0.1) - - # Measure multiple pooled connections - pooled_times = [] - for _ in range(5): + # Test with pooling (multiple times) + pool_times = [] + for _ in range(10): start = time.perf_counter() conn = connect(conn_str) conn.close() end = time.perf_counter() - pooled_times.append(end - start) + pool_times.append(end - start) - avg_pooled = sum(pooled_times) / len(pooled_times) + # Use median times to reduce impact of outliers + median_no_pool = statistics.median(no_pool_times) + median_pool = statistics.median(pool_times) - # Pooled should be significantly faster than non-pooled - assert avg_pooled < avg_no_pool, \ - f"Pooled connections ({avg_pooled:.6f}s) not significantly faster than non-pooled ({avg_no_pool:.6f}s)" + # Allow for some variance - pooling should be at least 30% faster on average + improvement_threshold = 0.7 # Pool should be <= 70% of no-pool time + + print(f"No pool median: {median_no_pool:.6f}s") + print(f"Pool median: {median_pool:.6f}s") + print(f"Improvement ratio: {median_pool/median_no_pool:.2f}") # Clean up - disable pooling for other tests pooling(enabled=False) + + assert median_pool <= median_no_pool * improvement_threshold, \ + f"Expected pooling to be at least 30% faster. No-pool: {median_no_pool:.6f}s, Pool: {median_pool:.6f}s" def test_connection_pooling_reuse_spid(conn_str): """Test that connections are actually reused from the pool""" From 1ada0c7b30bb0ea9482f002c8e898e12cfd8d69f Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 21:09:22 +0530 Subject: [PATCH 22/93] added retryOnTaskFailure for pipeline jobs --- eng/pipelines/build-whl-pipeline.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 982672916..7fc9455d7 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -22,6 +22,9 @@ jobs: pool: vmImage: 'windows-latest' displayName: 'Build Windows -' + # On failure of any task in this job, retry the job up to 2 times + # This will not retry on success and retry just the failed tasks + retryCountOnTaskFailure: 2 # Strategy matrix to build all combinations strategy: matrix: @@ -215,6 +218,9 @@ jobs: vmImage: 'macos-latest' # Display name for the job in Azure DevOps UI displayName: 'Build macOS - ' + # On failure of any task in this job, retry the job up to 2 times + # This will not retry on success and retry just the failed tasks + retryCountOnTaskFailure: 2 strategy: matrix: # Python 3.13 (universal2 for both arm64 and x86_64) @@ -371,6 +377,9 @@ jobs: vmImage: 'ubuntu-latest' displayName: 'Build Linux -' + # On failure of any task in this job, retry the job up to 2 times + # This will not retry on success and retry just the failed tasks + retryCountOnTaskFailure: 2 strategy: matrix: # Python 3.10 (x86_64 and ARM64) From e925979009dc4694924cc4a949bc82f04ded4dec Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 21:14:59 +0530 Subject: [PATCH 23/93] added timeoutInMinutes for docker colima step in macOS --- eng/pipelines/build-whl-pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 7fc9455d7..9f7b7227d 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -307,6 +307,7 @@ jobs: docker version docker ps displayName: 'Install and start Colima-based Docker' + timeoutInMinutes: 15 - script: | # Pull and run SQL Server container From c0905da103674f6b5eb63eb51d1dc91bd29eeb59 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 21:39:07 +0530 Subject: [PATCH 24/93] python3.13 installing in debian --- eng/pipelines/build-whl-pipeline.yml | 49 ++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 9f7b7227d..dbdabf8a2 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -537,6 +537,8 @@ jobs: dockerImage: 'ubuntu:22.04' distroName: 'Ubuntu' packageManager: 'apt' + + # Python 3.13 (x86_64 and ARM64) - Built from source for Debian and RHEL (not available via package managers) py313_x86_64_debian: pythonVersion: '3.13' shortPyVer: '313' @@ -724,12 +726,12 @@ jobs: apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils PYTHON_CMD=python$(pythonVersion) ;; - '3.10'|'3.12'|'3.13') + '3.10'|'3.12') # These versions may not be available in Debian 12, use python3 and create symlinks echo 'Python $(pythonVersion) may not be available in Debian 12, using available python3' apt-get install -y python3 python3-dev python3-venv # Note: distutils is not available for Python 3.12+ - if [ '$(pythonVersion)' != '3.12' ] && [ '$(pythonVersion)' != '3.13' ]; then + if [ '$(pythonVersion)' != '3.12' ]; then apt-get install -y python3-distutils || echo 'distutils not available for this Python version' fi # Create symlinks to make the desired version available @@ -740,6 +742,49 @@ jobs: ln -sf /usr/bin/python3 /usr/local/bin/python PYTHON_CMD=/usr/local/bin/python$(pythonVersion) ;; + '3.13') + # Python 3.13 requires building from source + echo 'Python $(pythonVersion) requires building from source' + + # Install dependencies needed for Python source compilation + apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \ + apt-get install -y libreadline-dev libsqlite3-dev wget curl llvm + apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev + apt-get install -y libffi-dev liblzma-dev python3-openssl + apt-get install -y libgdbm-dev libnss3-dev libedit-dev || echo 'Some optional dependencies not available' + + # Download Python source + cd /tmp + PYTHON_URL='https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz' + echo \"Downloading Python from \$PYTHON_URL\" + wget \$PYTHON_URL -O python-$(pythonVersion).tgz + tar -xzf python-$(pythonVersion).tgz + cd Python-$(pythonVersion)* + + # Configure and compile Python with optimizations + echo 'Configuring Python build' + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations + + echo 'Compiling Python (this may take several minutes)' + make -j\$(nproc) + + echo 'Installing Python' + make altinstall + + # Create symlinks + ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) + ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python + + # Verify installation + /usr/local/bin/python$(pythonVersion) --version + + # Clean up + cd / + rm -rf /tmp/Python-$(pythonVersion)* /tmp/python-$(pythonVersion).tgz + + echo 'Successfully built and installed Python $(pythonVersion) from source' + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + ;; *) echo 'Unsupported Python version $(pythonVersion) for Debian, using python3' apt-get install -y python3 python3-dev python3-venv From 10ea38ad6a1bc1a5f7604587720f95d50b3cde87 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 21:43:50 +0530 Subject: [PATCH 25/93] remove retryCountOnTaskFalure --- eng/pipelines/build-whl-pipeline.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index dbdabf8a2..b63fbde82 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -22,9 +22,6 @@ jobs: pool: vmImage: 'windows-latest' displayName: 'Build Windows -' - # On failure of any task in this job, retry the job up to 2 times - # This will not retry on success and retry just the failed tasks - retryCountOnTaskFailure: 2 # Strategy matrix to build all combinations strategy: matrix: @@ -218,9 +215,6 @@ jobs: vmImage: 'macos-latest' # Display name for the job in Azure DevOps UI displayName: 'Build macOS - ' - # On failure of any task in this job, retry the job up to 2 times - # This will not retry on success and retry just the failed tasks - retryCountOnTaskFailure: 2 strategy: matrix: # Python 3.13 (universal2 for both arm64 and x86_64) @@ -378,9 +372,6 @@ jobs: vmImage: 'ubuntu-latest' displayName: 'Build Linux -' - # On failure of any task in this job, retry the job up to 2 times - # This will not retry on success and retry just the failed tasks - retryCountOnTaskFailure: 2 strategy: matrix: # Python 3.10 (x86_64 and ARM64) From 1829af4a7b3c1c982d229d86988dbc4ca0ede229 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Wed, 6 Aug 2025 23:57:53 +0530 Subject: [PATCH 26/93] ssl issues for compilation --- eng/pipelines/build-whl-pipeline.yml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index b63fbde82..e3c67818e 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -738,12 +738,17 @@ jobs: echo 'Python $(pythonVersion) requires building from source' # Install dependencies needed for Python source compilation - apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \ + apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev apt-get install -y libreadline-dev libsqlite3-dev wget curl llvm apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev apt-get install -y libffi-dev liblzma-dev python3-openssl apt-get install -y libgdbm-dev libnss3-dev libedit-dev || echo 'Some optional dependencies not available' + # Verify SSL development libraries are installed + echo 'Verifying SSL development libraries:' + dpkg -l | grep libssl-dev || echo 'libssl-dev not found' + pkg-config --exists openssl && echo 'OpenSSL pkg-config found' || echo 'OpenSSL pkg-config missing' + # Download Python source cd /tmp PYTHON_URL='https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz' @@ -752,9 +757,9 @@ jobs: tar -xzf python-$(pythonVersion).tgz cd Python-$(pythonVersion)* - # Configure and compile Python with optimizations - echo 'Configuring Python build' - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations + # Configure and compile Python with SSL support explicitly enabled + echo 'Configuring Python build with SSL support' + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr echo 'Compiling Python (this may take several minutes)' make -j\$(nproc) @@ -766,8 +771,10 @@ jobs: ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - # Verify installation + # Verify installation and SSL support /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL support in Python:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' # Clean up cd / @@ -924,7 +931,7 @@ jobs: # Configure and compile Python with optimizations disabled for missing deps echo 'Configuring Python build (optimizations may be disabled due to missing dependencies)' - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr echo 'Compiling Python (this may take several minutes)' make -j\$(nproc) @@ -936,8 +943,10 @@ jobs: ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - # Verify installation + # Verify installation and SSL support /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL support in Python:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' PYTHON_INSTALLED=true # Clean up From 8a99335956eb44f60ddfafdaa18b6f3c5cf43079 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 00:24:38 +0530 Subject: [PATCH 27/93] python symlinks error --- eng/pipelines/build-whl-pipeline.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index e3c67818e..e3484d2ed 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -767,8 +767,7 @@ jobs: echo 'Installing Python' make altinstall - # Create symlinks - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) + # Create symlinks - altinstall creates python3.13, we create python symlink ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python # Verify installation and SSL support @@ -939,8 +938,7 @@ jobs: echo 'Installing Python' make altinstall - # Create symlinks - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) + # Create symlinks - altinstall creates python3.13, we create python symlink ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python # Verify installation and SSL support @@ -1098,6 +1096,11 @@ jobs: \$PYTHON_CMD -m venv /workspace/venv source /workspace/venv/bin/activate + # Verify virtual environment is working + echo 'Virtual environment activated:' + echo 'Python executable:' \$(which python) + echo 'Python version in venv:' \$(python --version) + # Upgrade pip and install dependencies python -m pip install --upgrade pip python -m pip install pybind11 From 2ba83d35b1109d0d02015b991d6079551b11376d Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 16:06:34 +0530 Subject: [PATCH 28/93] just check alpine --- eng/pipelines/build-whl-pipeline.yml | 1056 +++++++++++++------------- 1 file changed, 530 insertions(+), 526 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index e3484d2ed..607123b9f 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -17,355 +17,355 @@ schedules: always: true # Always run even if there are no changes jobs: -- job: BuildWindowsWheels - # Use the latest Windows image for building - pool: - vmImage: 'windows-latest' - displayName: 'Build Windows -' - # Strategy matrix to build all combinations - strategy: - matrix: - # Python 3.10 (only x64) - py310_x64: - pythonVersion: '3.10' # Host Python version - shortPyVer: '310' # Used in filenames like cp310 - architecture: 'x64' # Host Python architecture - targetArch: 'x64' # Target architecture to pass to build.bat +# - job: BuildWindowsWheels +# # Use the latest Windows image for building +# pool: +# vmImage: 'windows-latest' +# displayName: 'Build Windows -' +# # Strategy matrix to build all combinations +# strategy: +# matrix: +# # Python 3.10 (only x64) +# py310_x64: +# pythonVersion: '3.10' # Host Python version +# shortPyVer: '310' # Used in filenames like cp310 +# architecture: 'x64' # Host Python architecture +# targetArch: 'x64' # Target architecture to pass to build.bat - # Python 3.11 - py311_x64: - pythonVersion: '3.11' # Host Python version - shortPyVer: '311' # Used in filenames like cp311 - architecture: 'x64' # Host Python architecture - targetArch: 'x64' # Target architecture to pass to build.bat - py311_arm64: - pythonVersion: '3.11' - shortPyVer: '311' - architecture: 'x64' # No arm64 Python, use x64 host - targetArch: 'arm64' +# # Python 3.11 +# py311_x64: +# pythonVersion: '3.11' # Host Python version +# shortPyVer: '311' # Used in filenames like cp311 +# architecture: 'x64' # Host Python architecture +# targetArch: 'x64' # Target architecture to pass to build.bat +# py311_arm64: +# pythonVersion: '3.11' +# shortPyVer: '311' +# architecture: 'x64' # No arm64 Python, use x64 host +# targetArch: 'arm64' - # Python 3.12 - py312_x64: - pythonVersion: '3.12' - shortPyVer: '312' - architecture: 'x64' - targetArch: 'x64' - py312_arm64: - pythonVersion: '3.12' - shortPyVer: '312' - architecture: 'x64' - targetArch: 'arm64' +# # Python 3.12 +# py312_x64: +# pythonVersion: '3.12' +# shortPyVer: '312' +# architecture: 'x64' +# targetArch: 'x64' +# py312_arm64: +# pythonVersion: '3.12' +# shortPyVer: '312' +# architecture: 'x64' +# targetArch: 'arm64' - # Python 3.13 - py313_x64: - pythonVersion: '3.13' - shortPyVer: '313' - architecture: 'x64' - targetArch: 'x64' - py313_arm64: - pythonVersion: '3.13' - shortPyVer: '313' - architecture: 'x64' - targetArch: 'arm64' +# # Python 3.13 +# py313_x64: +# pythonVersion: '3.13' +# shortPyVer: '313' +# architecture: 'x64' +# targetArch: 'x64' +# py313_arm64: +# pythonVersion: '3.13' +# shortPyVer: '313' +# architecture: 'x64' +# targetArch: 'arm64' - steps: - # Use correct Python version and architecture for the current job - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(pythonVersion)' - architecture: '$(architecture)' - addToPath: true - displayName: 'Use Python $(pythonVersion) ($(architecture))' +# steps: +# # Use correct Python version and architecture for the current job +# - task: UsePythonVersion@0 +# inputs: +# versionSpec: '$(pythonVersion)' +# architecture: '$(architecture)' +# addToPath: true +# displayName: 'Use Python $(pythonVersion) ($(architecture))' - # Install required packages: pip, CMake, pybind11 - - script: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install cmake pybind11 - displayName: 'Install dependencies' +# # Install required packages: pip, CMake, pybind11 +# - script: | +# python -m pip install --upgrade pip +# pip install -r requirements.txt +# pip install cmake pybind11 +# displayName: 'Install dependencies' - # Start LocalDB instance - - powershell: | - sqllocaldb create MSSQLLocalDB - sqllocaldb start MSSQLLocalDB - displayName: 'Start LocalDB instance' +# # Start LocalDB instance +# - powershell: | +# sqllocaldb create MSSQLLocalDB +# sqllocaldb start MSSQLLocalDB +# displayName: 'Start LocalDB instance' - # Create database and user - - powershell: | - sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" - sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" - sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" - sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" - displayName: 'Setup database and user' - env: - DB_PASSWORD: $(DB_PASSWORD) +# # Create database and user +# - powershell: | +# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" +# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" +# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" +# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" +# displayName: 'Setup database and user' +# env: +# DB_PASSWORD: $(DB_PASSWORD) - - task: DownloadPipelineArtifact@2 - condition: eq(variables['targetArch'], 'arm64') - inputs: - buildType: 'specific' - project: '$(System.TeamProject)' - definition: 2162 - buildVersionToDownload: 'latest' - artifactName: 'mssql-python-arm64-libs' - targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - displayName: 'Download ARM64 Python libs from latest successful run on branches' +# - task: DownloadPipelineArtifact@2 +# condition: eq(variables['targetArch'], 'arm64') +# inputs: +# buildType: 'specific' +# project: '$(System.TeamProject)' +# definition: 2162 +# buildVersionToDownload: 'latest' +# artifactName: 'mssql-python-arm64-libs' +# targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' +# displayName: 'Download ARM64 Python libs from latest successful run on branches' - # Build the PYD file by calling build.bat - - script: | - echo "Python Version: $(pythonVersion)" - echo "Short Tag: $(shortPyVer)" - echo "Architecture: Host=$(architecture), Target=$(targetArch)" +# # Build the PYD file by calling build.bat +# - script: | +# echo "Python Version: $(pythonVersion)" +# echo "Short Tag: $(shortPyVer)" +# echo "Architecture: Host=$(architecture), Target=$(targetArch)" - cd "$(Build.SourcesDirectory)\mssql_python\pybind" +# cd "$(Build.SourcesDirectory)\mssql_python\pybind" - REM Optional: override lib path if building for ARM64 since we cannot install arm64 python on x64 host - if "$(targetArch)"=="arm64" ( - echo Using arm64-specific Python library... - set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 - ) +# REM Optional: override lib path if building for ARM64 since we cannot install arm64 python on x64 host +# if "$(targetArch)"=="arm64" ( +# echo Using arm64-specific Python library... +# set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 +# ) - REM Call build.bat to build the PYD file - call build.bat $(targetArch) +# REM Call build.bat to build the PYD file +# call build.bat $(targetArch) - REM Calling keep_single_arch.bat to remove ODBC libs of other architectures - call keep_single_arch.bat $(targetArch) +# REM Calling keep_single_arch.bat to remove ODBC libs of other architectures +# call keep_single_arch.bat $(targetArch) - cd ..\.. - displayName: 'Build PYD for $(targetArch)' - continueOnError: false +# cd ..\.. +# displayName: 'Build PYD for $(targetArch)' +# continueOnError: false - # Run pytests before packaging - - powershell: | - Write-Host "Running pytests to validate bindings" - if ("$(targetArch)" -eq "arm64") { - Write-Host "Skipping pytests on Windows ARM64" - } else { - python -m pytest -v - } - displayName: 'Run pytests' - env: - DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' +# # Run pytests before packaging +# - powershell: | +# Write-Host "Running pytests to validate bindings" +# if ("$(targetArch)" -eq "arm64") { +# Write-Host "Skipping pytests on Windows ARM64" +# } else { +# python -m pytest -v +# } +# displayName: 'Run pytests' +# env: +# DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - # Copy the built .pyd file to staging folder for artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' - Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' - TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' - displayName: 'Place PYD file into artifacts directory' +# # Copy the built .pyd file to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' +# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' +# TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' +# displayName: 'Place PYD file into artifacts directory' - # Copy the built .pdb files to staging folder for artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' - Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdbs' - TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' - displayName: 'Place PDB file into artifacts directory' +# # Copy the built .pdb files to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' +# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdbs' +# TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' +# displayName: 'Place PDB file into artifacts directory' - # Build wheel package for the current architecture - - script: | - python -m pip install --upgrade pip - pip install wheel setuptools - set ARCHITECTURE=$(targetArch) - python setup.py bdist_wheel - displayName: 'Build wheel package for Python $(pythonVersion) ($(targetArch))' +# # Build wheel package for the current architecture +# - script: | +# python -m pip install --upgrade pip +# pip install wheel setuptools +# set ARCHITECTURE=$(targetArch) +# python setup.py bdist_wheel +# displayName: 'Build wheel package for Python $(pythonVersion) ($(targetArch))' - # Copy the wheel file to the artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)\dist' - Contents: '*.whl' - TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' - displayName: 'Collect wheel package' +# # Copy the wheel file to the artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)\dist' +# Contents: '*.whl' +# TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' +# displayName: 'Collect wheel package' - # Publish the collected .pyd file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish all PYDs as artifacts' +# # Publish the collected .pyd file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish all PYDs as artifacts' - # Publish the python arm64 libraries as build artifacts for next builds if ARM64 - # We publish them only for ARM64 builds since we cannot install arm64 Python on x64 host - # This allows us to reuse the libraries in future ARM64 builds - # Publishing will retain the libraries in the build artifacts - - task: PublishBuildArtifacts@1 - condition: eq(variables['targetArch'], 'arm64') - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - ArtifactName: 'mssql-python-arm64-libs' - publishLocation: 'Container' - displayName: 'Publish arm64 libs as artifacts' +# # Publish the python arm64 libraries as build artifacts for next builds if ARM64 +# # We publish them only for ARM64 builds since we cannot install arm64 Python on x64 host +# # This allows us to reuse the libraries in future ARM64 builds +# # Publishing will retain the libraries in the build artifacts +# - task: PublishBuildArtifacts@1 +# condition: eq(variables['targetArch'], 'arm64') +# inputs: +# PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' +# ArtifactName: 'mssql-python-arm64-libs' +# publishLocation: 'Container' +# displayName: 'Publish arm64 libs as artifacts' - # Publish the collected wheel file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' - ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish all wheels as artifacts' +# # Publish the collected wheel file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish all wheels as artifacts' -- job: BuildMacOSWheels - # Use the latest macOS image for building - pool: - vmImage: 'macos-latest' - # Display name for the job in Azure DevOps UI - displayName: 'Build macOS - ' - strategy: - matrix: - # Python 3.13 (universal2 for both arm64 and x86_64) - py313_universal2: - pythonVersion: '3.13' - shortPyVer: '313' - # Always use universal2 for macOS - targetArch: 'universal2' +# - job: BuildMacOSWheels +# # Use the latest macOS image for building +# pool: +# vmImage: 'macos-latest' +# # Display name for the job in Azure DevOps UI +# displayName: 'Build macOS - ' +# strategy: +# matrix: +# # Python 3.13 (universal2 for both arm64 and x86_64) +# py313_universal2: +# pythonVersion: '3.13' +# shortPyVer: '313' +# # Always use universal2 for macOS +# targetArch: 'universal2' - # Python 3.12 (universal2 for both arm64 and x86_64) - py312_universal2: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'universal2' +# # Python 3.12 (universal2 for both arm64 and x86_64) +# py312_universal2: +# pythonVersion: '3.12' +# shortPyVer: '312' +# targetArch: 'universal2' - # Python 3.11 (universal2 for both arm64 and x86_64) - py311_universal2: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'universal2' +# # Python 3.11 (universal2 for both arm64 and x86_64) +# py311_universal2: +# pythonVersion: '3.11' +# shortPyVer: '311' +# targetArch: 'universal2' - # Python 3.10 (universal2 for both arm64 and x86_64) - py310_universal2: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'universal2' +# # Python 3.10 (universal2 for both arm64 and x86_64) +# py310_universal2: +# pythonVersion: '3.10' +# shortPyVer: '310' +# targetArch: 'universal2' - steps: - # Use correct Python version and architecture for the current job - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(pythonVersion)' - addToPath: true - displayName: 'Use Python $(pythonVersion) (Universal2)' +# steps: +# # Use correct Python version and architecture for the current job +# - task: UsePythonVersion@0 +# inputs: +# versionSpec: '$(pythonVersion)' +# addToPath: true +# displayName: 'Use Python $(pythonVersion) (Universal2)' - # Install CMake on macOS - - script: | - brew update - brew install cmake - displayName: 'Install CMake' +# # Install CMake on macOS +# - script: | +# brew update +# brew install cmake +# displayName: 'Install CMake' - # Install required packages: pip, CMake, pybind11 - - script: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install cmake pybind11 - displayName: 'Install dependencies' +# # Install required packages: pip, CMake, pybind11 +# - script: | +# python -m pip install --upgrade pip +# pip install -r requirements.txt +# pip install cmake pybind11 +# displayName: 'Install dependencies' - # Build the .so file by calling build.sh - - script: | - echo "Python Version: $(pythonVersion)" - echo "Short Tag: $(shortPyVer)" - echo "Building Universal2 Binary" - cd "$(Build.SourcesDirectory)/mssql_python/pybind" - # Call build.sh to build the .so file - ./build.sh - displayName: 'Build .so file' - continueOnError: false +# # Build the .so file by calling build.sh +# - script: | +# echo "Python Version: $(pythonVersion)" +# echo "Short Tag: $(shortPyVer)" +# echo "Building Universal2 Binary" +# cd "$(Build.SourcesDirectory)/mssql_python/pybind" +# # Call build.sh to build the .so file +# ./build.sh +# displayName: 'Build .so file' +# continueOnError: false - # Copy the built .so file to staging folder for artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)/mssql_python' - Contents: '*.so' - TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' - displayName: 'Place .so file into artifacts directory' +# # Copy the built .so file to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)/mssql_python' +# Contents: '*.so' +# TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' +# displayName: 'Place .so file into artifacts directory' - - script: | - brew update - brew install docker colima +# - script: | +# brew update +# brew install docker colima - # Try VZ first, fallback to QEMU if it fails - # Use more conservative resource allocation for Azure DevOps runners - colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ - colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu +# # Try VZ first, fallback to QEMU if it fails +# # Use more conservative resource allocation for Azure DevOps runners +# colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ +# colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu - # Set a timeout to ensure Colima starts properly - sleep 30 +# # Set a timeout to ensure Colima starts properly +# sleep 30 - # Optional: set Docker context (usually automatic) - docker context use colima >/dev/null || true +# # Optional: set Docker context (usually automatic) +# docker context use colima >/dev/null || true - # Confirm Docker is operational - docker version - docker ps - displayName: 'Install and start Colima-based Docker' - timeoutInMinutes: 15 +# # Confirm Docker is operational +# docker version +# docker ps +# displayName: 'Install and start Colima-based Docker' +# timeoutInMinutes: 15 - - script: | - # Pull and run SQL Server container - docker pull mcr.microsoft.com/mssql/server:2022-latest - docker run \ - --name sqlserver \ - -e ACCEPT_EULA=Y \ - -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ - -p 1433:1433 \ - -d mcr.microsoft.com/mssql/server:2022-latest +# - script: | +# # Pull and run SQL Server container +# docker pull mcr.microsoft.com/mssql/server:2022-latest +# docker run \ +# --name sqlserver \ +# -e ACCEPT_EULA=Y \ +# -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ +# -p 1433:1433 \ +# -d mcr.microsoft.com/mssql/server:2022-latest - # Starting SQL Server container… - for i in {1..30}; do - docker exec sqlserver \ - /opt/mssql-tools18/bin/sqlcmd \ - -S localhost \ - -U SA \ - -P "$DB_PASSWORD" \ - -C -Q "SELECT 1" && break - sleep 2 - done - displayName: 'Pull & start SQL Server (Docker)' - env: - DB_PASSWORD: $(DB_PASSWORD) +# # Starting SQL Server container… +# for i in {1..30}; do +# docker exec sqlserver \ +# /opt/mssql-tools18/bin/sqlcmd \ +# -S localhost \ +# -U SA \ +# -P "$DB_PASSWORD" \ +# -C -Q "SELECT 1" && break +# sleep 2 +# done +# displayName: 'Pull & start SQL Server (Docker)' +# env: +# DB_PASSWORD: $(DB_PASSWORD) - # Run Pytest to ensure the bindings work correctly - - script: | - python -m pytest -v - displayName: 'Run Pytest to validate bindings' - env: - DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' +# # Run Pytest to ensure the bindings work correctly +# - script: | +# python -m pytest -v +# displayName: 'Run Pytest to validate bindings' +# env: +# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - # Build wheel package for universal2 - - script: | - python -m pip install --upgrade pip - pip install wheel setuptools - python setup.py bdist_wheel - displayName: 'Build $(pythonVersion) universal2 whl' +# # Build wheel package for universal2 +# - script: | +# python -m pip install --upgrade pip +# pip install wheel setuptools +# python setup.py bdist_wheel +# displayName: 'Build $(pythonVersion) universal2 whl' - # Copy the wheel file to the artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)/dist' - Contents: '*.whl' - TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' - displayName: 'Collect wheel package' +# # Copy the wheel file to the artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)/dist' +# Contents: '*.whl' +# TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' +# displayName: 'Collect wheel package' - # Publish the collected .so file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish all .so files as artifacts' +# # Publish the collected .so file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish all .so files as artifacts' - # Publish the collected wheel file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' - ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish all wheels as artifacts' +# # Publish the collected wheel file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish all wheels as artifacts' - job: BuildLinuxWheels pool: @@ -375,159 +375,159 @@ jobs: strategy: matrix: # Python 3.10 (x86_64 and ARM64) - py310_x86_64_ubuntu: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' - py310_arm64_ubuntu: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' - py310_x86_64_debian: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py310_arm64_debian: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py310_x86_64_rhel: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - buildFromSource: 'true' - py310_arm64_rhel: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - buildFromSource: 'true' + # py310_x86_64_ubuntu: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py310_arm64_ubuntu: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py310_x86_64_debian: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py310_arm64_debian: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py310_x86_64_rhel: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # buildFromSource: 'true' + # py310_arm64_rhel: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # buildFromSource: 'true' - # Python 3.11 (x86_64 and ARM64) - py311_x86_64_ubuntu: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' - py311_arm64_ubuntu: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' - py311_x86_64_debian: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py311_arm64_debian: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py311_x86_64_rhel: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - py311_arm64_rhel: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' + # # Python 3.11 (x86_64 and ARM64) + # py311_x86_64_ubuntu: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py311_arm64_ubuntu: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py311_x86_64_debian: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py311_arm64_debian: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py311_x86_64_rhel: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # py311_arm64_rhel: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' - # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA - # Only build for Debian and RHEL where Python 3.12 is available - py312_x86_64_debian: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py312_arm64_debian: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py312_x86_64_rhel: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - py312_arm64_rhel: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' + # # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA + # # Only build for Debian and RHEL where Python 3.12 is available + # py312_x86_64_debian: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py312_arm64_debian: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py312_x86_64_rhel: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # py312_arm64_rhel: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' - # Python 3.13 (x86_64 and ARM64) - py313_x86_64_ubuntu: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' - py313_arm64_ubuntu: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' + # # Python 3.13 (x86_64 and ARM64) + # py313_x86_64_ubuntu: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py313_arm64_ubuntu: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' # Python 3.13 (x86_64 and ARM64) - Built from source for Debian and RHEL (not available via package managers) py313_x86_64_debian: @@ -566,70 +566,70 @@ jobs: buildFromSource: 'true' # Alpine Linux (x86_64 and ARM64) - py310_x86_64_alpine: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py310_arm64_alpine: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py311_x86_64_alpine: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py311_arm64_alpine: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py312_x86_64_alpine: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py312_arm64_alpine: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py313_x86_64_alpine: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py313_arm64_alpine: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' + # py310_x86_64_alpine: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' + # py310_arm64_alpine: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' + # py311_x86_64_alpine: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' + # py311_arm64_alpine: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' + # py312_x86_64_alpine: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' + # py312_arm64_alpine: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' + # py313_x86_64_alpine: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' + # py313_arm64_alpine: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' steps: # Set up Docker buildx for multi-architecture support @@ -736,6 +736,7 @@ jobs: '3.13') # Python 3.13 requires building from source echo 'Python $(pythonVersion) requires building from source' + echo 'DEBUG: pythonVersion = $(pythonVersion)' # Install dependencies needed for Python source compilation apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev @@ -749,13 +750,14 @@ jobs: dpkg -l | grep libssl-dev || echo 'libssl-dev not found' pkg-config --exists openssl && echo 'OpenSSL pkg-config found' || echo 'OpenSSL pkg-config missing' - # Download Python source + # Download Python source - fix version mismatch cd /tmp - PYTHON_URL='https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz' + PYTHON_FULL_VERSION='3.13.1' + PYTHON_URL=\"https://www.python.org/ftp/python/\$PYTHON_FULL_VERSION/Python-\$PYTHON_FULL_VERSION.tgz\" echo \"Downloading Python from \$PYTHON_URL\" - wget \$PYTHON_URL -O python-$(pythonVersion).tgz - tar -xzf python-$(pythonVersion).tgz - cd Python-$(pythonVersion)* + wget \$PYTHON_URL -O python-\$PYTHON_FULL_VERSION.tgz + tar -xzf python-\$PYTHON_FULL_VERSION.tgz + cd Python-\$PYTHON_FULL_VERSION # Configure and compile Python with SSL support explicitly enabled echo 'Configuring Python build with SSL support' @@ -771,13 +773,15 @@ jobs: ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python # Verify installation and SSL support + echo 'Verifying Python 3.13 installation:' + ls -l /usr/local/bin/python$(pythonVersion) || echo 'ERROR: Python $(pythonVersion) not found' /usr/local/bin/python$(pythonVersion) --version echo 'Testing SSL support in Python:' /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' # Clean up cd / - rm -rf /tmp/Python-$(pythonVersion)* /tmp/python-$(pythonVersion).tgz + rm -rf /tmp/Python-\$PYTHON_FULL_VERSION /tmp/python-\$PYTHON_FULL_VERSION.tgz echo 'Successfully built and installed Python $(pythonVersion) from source' PYTHON_CMD=/usr/local/bin/python$(pythonVersion) From ca76d67a5f495af5d2bd75de35b9e09e7642df2e Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 16:09:55 +0530 Subject: [PATCH 29/93] restore all distros --- eng/pipelines/build-whl-pipeline.yml | 1040 +++++++++++++------------- 1 file changed, 520 insertions(+), 520 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 607123b9f..981fe8db9 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -17,355 +17,355 @@ schedules: always: true # Always run even if there are no changes jobs: -# - job: BuildWindowsWheels -# # Use the latest Windows image for building -# pool: -# vmImage: 'windows-latest' -# displayName: 'Build Windows -' -# # Strategy matrix to build all combinations -# strategy: -# matrix: -# # Python 3.10 (only x64) -# py310_x64: -# pythonVersion: '3.10' # Host Python version -# shortPyVer: '310' # Used in filenames like cp310 -# architecture: 'x64' # Host Python architecture -# targetArch: 'x64' # Target architecture to pass to build.bat +- job: BuildWindowsWheels + # Use the latest Windows image for building + pool: + vmImage: 'windows-latest' + displayName: 'Build Windows -' + # Strategy matrix to build all combinations + strategy: + matrix: + # Python 3.10 (only x64) + py310_x64: + pythonVersion: '3.10' # Host Python version + shortPyVer: '310' # Used in filenames like cp310 + architecture: 'x64' # Host Python architecture + targetArch: 'x64' # Target architecture to pass to build.bat -# # Python 3.11 -# py311_x64: -# pythonVersion: '3.11' # Host Python version -# shortPyVer: '311' # Used in filenames like cp311 -# architecture: 'x64' # Host Python architecture -# targetArch: 'x64' # Target architecture to pass to build.bat -# py311_arm64: -# pythonVersion: '3.11' -# shortPyVer: '311' -# architecture: 'x64' # No arm64 Python, use x64 host -# targetArch: 'arm64' + # Python 3.11 + py311_x64: + pythonVersion: '3.11' # Host Python version + shortPyVer: '311' # Used in filenames like cp311 + architecture: 'x64' # Host Python architecture + targetArch: 'x64' # Target architecture to pass to build.bat + py311_arm64: + pythonVersion: '3.11' + shortPyVer: '311' + architecture: 'x64' # No arm64 Python, use x64 host + targetArch: 'arm64' -# # Python 3.12 -# py312_x64: -# pythonVersion: '3.12' -# shortPyVer: '312' -# architecture: 'x64' -# targetArch: 'x64' -# py312_arm64: -# pythonVersion: '3.12' -# shortPyVer: '312' -# architecture: 'x64' -# targetArch: 'arm64' + # Python 3.12 + py312_x64: + pythonVersion: '3.12' + shortPyVer: '312' + architecture: 'x64' + targetArch: 'x64' + py312_arm64: + pythonVersion: '3.12' + shortPyVer: '312' + architecture: 'x64' + targetArch: 'arm64' -# # Python 3.13 -# py313_x64: -# pythonVersion: '3.13' -# shortPyVer: '313' -# architecture: 'x64' -# targetArch: 'x64' -# py313_arm64: -# pythonVersion: '3.13' -# shortPyVer: '313' -# architecture: 'x64' -# targetArch: 'arm64' + # Python 3.13 + py313_x64: + pythonVersion: '3.13' + shortPyVer: '313' + architecture: 'x64' + targetArch: 'x64' + py313_arm64: + pythonVersion: '3.13' + shortPyVer: '313' + architecture: 'x64' + targetArch: 'arm64' -# steps: -# # Use correct Python version and architecture for the current job -# - task: UsePythonVersion@0 -# inputs: -# versionSpec: '$(pythonVersion)' -# architecture: '$(architecture)' -# addToPath: true -# displayName: 'Use Python $(pythonVersion) ($(architecture))' + steps: + # Use correct Python version and architecture for the current job + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(pythonVersion)' + architecture: '$(architecture)' + addToPath: true + displayName: 'Use Python $(pythonVersion) ($(architecture))' -# # Install required packages: pip, CMake, pybind11 -# - script: | -# python -m pip install --upgrade pip -# pip install -r requirements.txt -# pip install cmake pybind11 -# displayName: 'Install dependencies' + # Install required packages: pip, CMake, pybind11 + - script: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install cmake pybind11 + displayName: 'Install dependencies' -# # Start LocalDB instance -# - powershell: | -# sqllocaldb create MSSQLLocalDB -# sqllocaldb start MSSQLLocalDB -# displayName: 'Start LocalDB instance' + # Start LocalDB instance + - powershell: | + sqllocaldb create MSSQLLocalDB + sqllocaldb start MSSQLLocalDB + displayName: 'Start LocalDB instance' -# # Create database and user -# - powershell: | -# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" -# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" -# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" -# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" -# displayName: 'Setup database and user' -# env: -# DB_PASSWORD: $(DB_PASSWORD) + # Create database and user + - powershell: | + sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" + sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" + sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" + sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" + displayName: 'Setup database and user' + env: + DB_PASSWORD: $(DB_PASSWORD) -# - task: DownloadPipelineArtifact@2 -# condition: eq(variables['targetArch'], 'arm64') -# inputs: -# buildType: 'specific' -# project: '$(System.TeamProject)' -# definition: 2162 -# buildVersionToDownload: 'latest' -# artifactName: 'mssql-python-arm64-libs' -# targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' -# displayName: 'Download ARM64 Python libs from latest successful run on branches' + - task: DownloadPipelineArtifact@2 + condition: eq(variables['targetArch'], 'arm64') + inputs: + buildType: 'specific' + project: '$(System.TeamProject)' + definition: 2162 + buildVersionToDownload: 'latest' + artifactName: 'mssql-python-arm64-libs' + targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' + displayName: 'Download ARM64 Python libs from latest successful run on branches' -# # Build the PYD file by calling build.bat -# - script: | -# echo "Python Version: $(pythonVersion)" -# echo "Short Tag: $(shortPyVer)" -# echo "Architecture: Host=$(architecture), Target=$(targetArch)" + # Build the PYD file by calling build.bat + - script: | + echo "Python Version: $(pythonVersion)" + echo "Short Tag: $(shortPyVer)" + echo "Architecture: Host=$(architecture), Target=$(targetArch)" -# cd "$(Build.SourcesDirectory)\mssql_python\pybind" + cd "$(Build.SourcesDirectory)\mssql_python\pybind" -# REM Optional: override lib path if building for ARM64 since we cannot install arm64 python on x64 host -# if "$(targetArch)"=="arm64" ( -# echo Using arm64-specific Python library... -# set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 -# ) + REM Optional: override lib path if building for ARM64 since we cannot install arm64 python on x64 host + if "$(targetArch)"=="arm64" ( + echo Using arm64-specific Python library... + set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 + ) -# REM Call build.bat to build the PYD file -# call build.bat $(targetArch) + REM Call build.bat to build the PYD file + call build.bat $(targetArch) -# REM Calling keep_single_arch.bat to remove ODBC libs of other architectures -# call keep_single_arch.bat $(targetArch) + REM Calling keep_single_arch.bat to remove ODBC libs of other architectures + call keep_single_arch.bat $(targetArch) -# cd ..\.. -# displayName: 'Build PYD for $(targetArch)' -# continueOnError: false + cd ..\.. + displayName: 'Build PYD for $(targetArch)' + continueOnError: false -# # Run pytests before packaging -# - powershell: | -# Write-Host "Running pytests to validate bindings" -# if ("$(targetArch)" -eq "arm64") { -# Write-Host "Skipping pytests on Windows ARM64" -# } else { -# python -m pytest -v -# } -# displayName: 'Run pytests' -# env: -# DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + # Run pytests before packaging + - powershell: | + Write-Host "Running pytests to validate bindings" + if ("$(targetArch)" -eq "arm64") { + Write-Host "Skipping pytests on Windows ARM64" + } else { + python -m pytest -v + } + displayName: 'Run pytests' + env: + DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' -# # Copy the built .pyd file to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' -# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' -# TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' -# displayName: 'Place PYD file into artifacts directory' + # Copy the built .pyd file to staging folder for artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' + Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' + TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' + displayName: 'Place PYD file into artifacts directory' -# # Copy the built .pdb files to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' -# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdbs' -# TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' -# displayName: 'Place PDB file into artifacts directory' + # Copy the built .pdb files to staging folder for artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' + Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdbs' + TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' + displayName: 'Place PDB file into artifacts directory' -# # Build wheel package for the current architecture -# - script: | -# python -m pip install --upgrade pip -# pip install wheel setuptools -# set ARCHITECTURE=$(targetArch) -# python setup.py bdist_wheel -# displayName: 'Build wheel package for Python $(pythonVersion) ($(targetArch))' + # Build wheel package for the current architecture + - script: | + python -m pip install --upgrade pip + pip install wheel setuptools + set ARCHITECTURE=$(targetArch) + python setup.py bdist_wheel + displayName: 'Build wheel package for Python $(pythonVersion) ($(targetArch))' -# # Copy the wheel file to the artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)\dist' -# Contents: '*.whl' -# TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' -# displayName: 'Collect wheel package' + # Copy the wheel file to the artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)\dist' + Contents: '*.whl' + TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' + displayName: 'Collect wheel package' -# # Publish the collected .pyd file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish all PYDs as artifacts' + # Publish the collected .pyd file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + publishLocation: 'Container' + displayName: 'Publish all PYDs as artifacts' -# # Publish the python arm64 libraries as build artifacts for next builds if ARM64 -# # We publish them only for ARM64 builds since we cannot install arm64 Python on x64 host -# # This allows us to reuse the libraries in future ARM64 builds -# # Publishing will retain the libraries in the build artifacts -# - task: PublishBuildArtifacts@1 -# condition: eq(variables['targetArch'], 'arm64') -# inputs: -# PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' -# ArtifactName: 'mssql-python-arm64-libs' -# publishLocation: 'Container' -# displayName: 'Publish arm64 libs as artifacts' + # Publish the python arm64 libraries as build artifacts for next builds if ARM64 + # We publish them only for ARM64 builds since we cannot install arm64 Python on x64 host + # This allows us to reuse the libraries in future ARM64 builds + # Publishing will retain the libraries in the build artifacts + - task: PublishBuildArtifacts@1 + condition: eq(variables['targetArch'], 'arm64') + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' + ArtifactName: 'mssql-python-arm64-libs' + publishLocation: 'Container' + displayName: 'Publish arm64 libs as artifacts' -# # Publish the collected wheel file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish all wheels as artifacts' + # Publish the collected wheel file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' + ArtifactName: 'mssql-python-wheels-dist' + publishLocation: 'Container' + displayName: 'Publish all wheels as artifacts' -# - job: BuildMacOSWheels -# # Use the latest macOS image for building -# pool: -# vmImage: 'macos-latest' -# # Display name for the job in Azure DevOps UI -# displayName: 'Build macOS - ' -# strategy: -# matrix: -# # Python 3.13 (universal2 for both arm64 and x86_64) -# py313_universal2: -# pythonVersion: '3.13' -# shortPyVer: '313' -# # Always use universal2 for macOS -# targetArch: 'universal2' +- job: BuildMacOSWheels + # Use the latest macOS image for building + pool: + vmImage: 'macos-latest' + # Display name for the job in Azure DevOps UI + displayName: 'Build macOS - ' + strategy: + matrix: + # Python 3.13 (universal2 for both arm64 and x86_64) + py313_universal2: + pythonVersion: '3.13' + shortPyVer: '313' + # Always use universal2 for macOS + targetArch: 'universal2' -# # Python 3.12 (universal2 for both arm64 and x86_64) -# py312_universal2: -# pythonVersion: '3.12' -# shortPyVer: '312' -# targetArch: 'universal2' + # Python 3.12 (universal2 for both arm64 and x86_64) + py312_universal2: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'universal2' -# # Python 3.11 (universal2 for both arm64 and x86_64) -# py311_universal2: -# pythonVersion: '3.11' -# shortPyVer: '311' -# targetArch: 'universal2' + # Python 3.11 (universal2 for both arm64 and x86_64) + py311_universal2: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'universal2' -# # Python 3.10 (universal2 for both arm64 and x86_64) -# py310_universal2: -# pythonVersion: '3.10' -# shortPyVer: '310' -# targetArch: 'universal2' + # Python 3.10 (universal2 for both arm64 and x86_64) + py310_universal2: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'universal2' -# steps: -# # Use correct Python version and architecture for the current job -# - task: UsePythonVersion@0 -# inputs: -# versionSpec: '$(pythonVersion)' -# addToPath: true -# displayName: 'Use Python $(pythonVersion) (Universal2)' + steps: + # Use correct Python version and architecture for the current job + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(pythonVersion)' + addToPath: true + displayName: 'Use Python $(pythonVersion) (Universal2)' -# # Install CMake on macOS -# - script: | -# brew update -# brew install cmake -# displayName: 'Install CMake' + # Install CMake on macOS + - script: | + brew update + brew install cmake + displayName: 'Install CMake' -# # Install required packages: pip, CMake, pybind11 -# - script: | -# python -m pip install --upgrade pip -# pip install -r requirements.txt -# pip install cmake pybind11 -# displayName: 'Install dependencies' + # Install required packages: pip, CMake, pybind11 + - script: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install cmake pybind11 + displayName: 'Install dependencies' -# # Build the .so file by calling build.sh -# - script: | -# echo "Python Version: $(pythonVersion)" -# echo "Short Tag: $(shortPyVer)" -# echo "Building Universal2 Binary" -# cd "$(Build.SourcesDirectory)/mssql_python/pybind" -# # Call build.sh to build the .so file -# ./build.sh -# displayName: 'Build .so file' -# continueOnError: false + # Build the .so file by calling build.sh + - script: | + echo "Python Version: $(pythonVersion)" + echo "Short Tag: $(shortPyVer)" + echo "Building Universal2 Binary" + cd "$(Build.SourcesDirectory)/mssql_python/pybind" + # Call build.sh to build the .so file + ./build.sh + displayName: 'Build .so file' + continueOnError: false -# # Copy the built .so file to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)/mssql_python' -# Contents: '*.so' -# TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' -# displayName: 'Place .so file into artifacts directory' + # Copy the built .so file to staging folder for artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)/mssql_python' + Contents: '*.so' + TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' + displayName: 'Place .so file into artifacts directory' -# - script: | -# brew update -# brew install docker colima + - script: | + brew update + brew install docker colima -# # Try VZ first, fallback to QEMU if it fails -# # Use more conservative resource allocation for Azure DevOps runners -# colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ -# colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu + # Try VZ first, fallback to QEMU if it fails + # Use more conservative resource allocation for Azure DevOps runners + colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ + colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu -# # Set a timeout to ensure Colima starts properly -# sleep 30 + # Set a timeout to ensure Colima starts properly + sleep 30 -# # Optional: set Docker context (usually automatic) -# docker context use colima >/dev/null || true + # Optional: set Docker context (usually automatic) + docker context use colima >/dev/null || true -# # Confirm Docker is operational -# docker version -# docker ps -# displayName: 'Install and start Colima-based Docker' -# timeoutInMinutes: 15 + # Confirm Docker is operational + docker version + docker ps + displayName: 'Install and start Colima-based Docker' + timeoutInMinutes: 15 -# - script: | -# # Pull and run SQL Server container -# docker pull mcr.microsoft.com/mssql/server:2022-latest -# docker run \ -# --name sqlserver \ -# -e ACCEPT_EULA=Y \ -# -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ -# -p 1433:1433 \ -# -d mcr.microsoft.com/mssql/server:2022-latest + - script: | + # Pull and run SQL Server container + docker pull mcr.microsoft.com/mssql/server:2022-latest + docker run \ + --name sqlserver \ + -e ACCEPT_EULA=Y \ + -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ + -p 1433:1433 \ + -d mcr.microsoft.com/mssql/server:2022-latest -# # Starting SQL Server container… -# for i in {1..30}; do -# docker exec sqlserver \ -# /opt/mssql-tools18/bin/sqlcmd \ -# -S localhost \ -# -U SA \ -# -P "$DB_PASSWORD" \ -# -C -Q "SELECT 1" && break -# sleep 2 -# done -# displayName: 'Pull & start SQL Server (Docker)' -# env: -# DB_PASSWORD: $(DB_PASSWORD) + # Starting SQL Server container… + for i in {1..30}; do + docker exec sqlserver \ + /opt/mssql-tools18/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P "$DB_PASSWORD" \ + -C -Q "SELECT 1" && break + sleep 2 + done + displayName: 'Pull & start SQL Server (Docker)' + env: + DB_PASSWORD: $(DB_PASSWORD) -# # Run Pytest to ensure the bindings work correctly -# - script: | -# python -m pytest -v -# displayName: 'Run Pytest to validate bindings' -# env: -# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + # Run Pytest to ensure the bindings work correctly + - script: | + python -m pytest -v + displayName: 'Run Pytest to validate bindings' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' -# # Build wheel package for universal2 -# - script: | -# python -m pip install --upgrade pip -# pip install wheel setuptools -# python setup.py bdist_wheel -# displayName: 'Build $(pythonVersion) universal2 whl' + # Build wheel package for universal2 + - script: | + python -m pip install --upgrade pip + pip install wheel setuptools + python setup.py bdist_wheel + displayName: 'Build $(pythonVersion) universal2 whl' -# # Copy the wheel file to the artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)/dist' -# Contents: '*.whl' -# TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' -# displayName: 'Collect wheel package' + # Copy the wheel file to the artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)/dist' + Contents: '*.whl' + TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' + displayName: 'Collect wheel package' -# # Publish the collected .so file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish all .so files as artifacts' + # Publish the collected .so file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + publishLocation: 'Container' + displayName: 'Publish all .so files as artifacts' -# # Publish the collected wheel file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish all wheels as artifacts' + # Publish the collected wheel file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' + ArtifactName: 'mssql-python-wheels-dist' + publishLocation: 'Container' + displayName: 'Publish all wheels as artifacts' - job: BuildLinuxWheels pool: @@ -375,159 +375,159 @@ jobs: strategy: matrix: # Python 3.10 (x86_64 and ARM64) - # py310_x86_64_ubuntu: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py310_arm64_ubuntu: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py310_x86_64_debian: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py310_arm64_debian: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py310_x86_64_rhel: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # buildFromSource: 'true' - # py310_arm64_rhel: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # buildFromSource: 'true' + py310_x86_64_ubuntu: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'ubuntu:22.04' + distroName: 'Ubuntu' + packageManager: 'apt' + py310_arm64_ubuntu: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'ubuntu:22.04' + distroName: 'Ubuntu' + packageManager: 'apt' + py310_x86_64_debian: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'debian:12' + distroName: 'Debian' + packageManager: 'apt' + py310_arm64_debian: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'debian:12' + distroName: 'Debian' + packageManager: 'apt' + py310_x86_64_rhel: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + distroName: 'RHEL' + packageManager: 'dnf' + buildFromSource: 'true' + py310_arm64_rhel: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + distroName: 'RHEL' + packageManager: 'dnf' + buildFromSource: 'true' - # # Python 3.11 (x86_64 and ARM64) - # py311_x86_64_ubuntu: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py311_arm64_ubuntu: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py311_x86_64_debian: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py311_arm64_debian: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py311_x86_64_rhel: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # py311_arm64_rhel: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' + # Python 3.11 (x86_64 and ARM64) + py311_x86_64_ubuntu: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'ubuntu:22.04' + distroName: 'Ubuntu' + packageManager: 'apt' + py311_arm64_ubuntu: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'ubuntu:22.04' + distroName: 'Ubuntu' + packageManager: 'apt' + py311_x86_64_debian: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'debian:12' + distroName: 'Debian' + packageManager: 'apt' + py311_arm64_debian: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'debian:12' + distroName: 'Debian' + packageManager: 'apt' + py311_x86_64_rhel: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + distroName: 'RHEL' + packageManager: 'dnf' + py311_arm64_rhel: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + distroName: 'RHEL' + packageManager: 'dnf' - # # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA - # # Only build for Debian and RHEL where Python 3.12 is available - # py312_x86_64_debian: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py312_arm64_debian: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py312_x86_64_rhel: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # py312_arm64_rhel: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' + # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA + # Only build for Debian and RHEL where Python 3.12 is available + py312_x86_64_debian: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'debian:12' + distroName: 'Debian' + packageManager: 'apt' + py312_arm64_debian: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'debian:12' + distroName: 'Debian' + packageManager: 'apt' + py312_x86_64_rhel: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + distroName: 'RHEL' + packageManager: 'dnf' + py312_arm64_rhel: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + distroName: 'RHEL' + packageManager: 'dnf' - # # Python 3.13 (x86_64 and ARM64) - # py313_x86_64_ubuntu: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py313_arm64_ubuntu: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' + # Python 3.13 (x86_64 and ARM64) + py313_x86_64_ubuntu: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'ubuntu:22.04' + distroName: 'Ubuntu' + packageManager: 'apt' + py313_arm64_ubuntu: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'ubuntu:22.04' + distroName: 'Ubuntu' + packageManager: 'apt' # Python 3.13 (x86_64 and ARM64) - Built from source for Debian and RHEL (not available via package managers) py313_x86_64_debian: @@ -566,70 +566,70 @@ jobs: buildFromSource: 'true' # Alpine Linux (x86_64 and ARM64) - # py310_x86_64_alpine: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' - # py310_arm64_alpine: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' - # py311_x86_64_alpine: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' - # py311_arm64_alpine: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' - # py312_x86_64_alpine: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' - # py312_arm64_alpine: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' - # py313_x86_64_alpine: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' - # py313_arm64_alpine: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' + py310_x86_64_alpine: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py310_arm64_alpine: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py311_x86_64_alpine: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py311_arm64_alpine: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py312_x86_64_alpine: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py312_arm64_alpine: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py313_x86_64_alpine: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py313_arm64_alpine: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' steps: # Set up Docker buildx for multi-architecture support From 3282b4e374fbe711df9ac1e694b9ddc416102c76 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 17:04:26 +0530 Subject: [PATCH 30/93] added a 90min timeout for linux jobs --- eng/pipelines/build-whl-pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 981fe8db9..b5a321813 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -371,6 +371,7 @@ jobs: pool: vmImage: 'ubuntu-latest' displayName: 'Build Linux -' + timeoutInMinutes: 90 strategy: matrix: From 94347651f5faa135ae9c4c8bc85b6f251fcc0245 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 17:05:37 +0530 Subject: [PATCH 31/93] added a 120min timeout for linux jobs --- eng/pipelines/build-whl-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index b5a321813..710d88a34 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -371,7 +371,7 @@ jobs: pool: vmImage: 'ubuntu-latest' displayName: 'Build Linux -' - timeoutInMinutes: 90 + timeoutInMinutes: 120 strategy: matrix: From a184ec112483b6587f63edd07d0645e0ed3148d4 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 17:09:56 +0530 Subject: [PATCH 32/93] arm64 to not cause timeouts now --- eng/pipelines/build-whl-pipeline.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 710d88a34..cd45daf05 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -762,9 +762,15 @@ jobs: # Configure and compile Python with SSL support explicitly enabled echo 'Configuring Python build with SSL support' - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr + # Disable optimizations for ARM64 builds to speed up compilation in emulated environment + if [ '$(targetArch)' = 'arm64' ]; then + echo 'ARM64 build detected - disabling optimizations for faster compilation' + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr + else + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr + fi - echo 'Compiling Python (this may take several minutes)' + echo 'Compiling Python (this may take several minutes - ARM64 builds are slower due to emulation)' make -j\$(nproc) echo 'Installing Python' From 395f6a2d0fdd303017b910d270acae664f098d62 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 17:33:24 +0530 Subject: [PATCH 33/93] python building for alpine --- eng/pipelines/build-whl-pipeline.yml | 977 ++++++++++++++------------- 1 file changed, 513 insertions(+), 464 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index cd45daf05..05df324e2 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -17,355 +17,355 @@ schedules: always: true # Always run even if there are no changes jobs: -- job: BuildWindowsWheels - # Use the latest Windows image for building - pool: - vmImage: 'windows-latest' - displayName: 'Build Windows -' - # Strategy matrix to build all combinations - strategy: - matrix: - # Python 3.10 (only x64) - py310_x64: - pythonVersion: '3.10' # Host Python version - shortPyVer: '310' # Used in filenames like cp310 - architecture: 'x64' # Host Python architecture - targetArch: 'x64' # Target architecture to pass to build.bat +# - job: BuildWindowsWheels +# # Use the latest Windows image for building +# pool: +# vmImage: 'windows-latest' +# displayName: 'Build Windows -' +# # Strategy matrix to build all combinations +# strategy: +# matrix: +# # Python 3.10 (only x64) +# py310_x64: +# pythonVersion: '3.10' # Host Python version +# shortPyVer: '310' # Used in filenames like cp310 +# architecture: 'x64' # Host Python architecture +# targetArch: 'x64' # Target architecture to pass to build.bat - # Python 3.11 - py311_x64: - pythonVersion: '3.11' # Host Python version - shortPyVer: '311' # Used in filenames like cp311 - architecture: 'x64' # Host Python architecture - targetArch: 'x64' # Target architecture to pass to build.bat - py311_arm64: - pythonVersion: '3.11' - shortPyVer: '311' - architecture: 'x64' # No arm64 Python, use x64 host - targetArch: 'arm64' +# # Python 3.11 +# py311_x64: +# pythonVersion: '3.11' # Host Python version +# shortPyVer: '311' # Used in filenames like cp311 +# architecture: 'x64' # Host Python architecture +# targetArch: 'x64' # Target architecture to pass to build.bat +# py311_arm64: +# pythonVersion: '3.11' +# shortPyVer: '311' +# architecture: 'x64' # No arm64 Python, use x64 host +# targetArch: 'arm64' - # Python 3.12 - py312_x64: - pythonVersion: '3.12' - shortPyVer: '312' - architecture: 'x64' - targetArch: 'x64' - py312_arm64: - pythonVersion: '3.12' - shortPyVer: '312' - architecture: 'x64' - targetArch: 'arm64' +# # Python 3.12 +# py312_x64: +# pythonVersion: '3.12' +# shortPyVer: '312' +# architecture: 'x64' +# targetArch: 'x64' +# py312_arm64: +# pythonVersion: '3.12' +# shortPyVer: '312' +# architecture: 'x64' +# targetArch: 'arm64' - # Python 3.13 - py313_x64: - pythonVersion: '3.13' - shortPyVer: '313' - architecture: 'x64' - targetArch: 'x64' - py313_arm64: - pythonVersion: '3.13' - shortPyVer: '313' - architecture: 'x64' - targetArch: 'arm64' +# # Python 3.13 +# py313_x64: +# pythonVersion: '3.13' +# shortPyVer: '313' +# architecture: 'x64' +# targetArch: 'x64' +# py313_arm64: +# pythonVersion: '3.13' +# shortPyVer: '313' +# architecture: 'x64' +# targetArch: 'arm64' - steps: - # Use correct Python version and architecture for the current job - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(pythonVersion)' - architecture: '$(architecture)' - addToPath: true - displayName: 'Use Python $(pythonVersion) ($(architecture))' +# steps: +# # Use correct Python version and architecture for the current job +# - task: UsePythonVersion@0 +# inputs: +# versionSpec: '$(pythonVersion)' +# architecture: '$(architecture)' +# addToPath: true +# displayName: 'Use Python $(pythonVersion) ($(architecture))' - # Install required packages: pip, CMake, pybind11 - - script: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install cmake pybind11 - displayName: 'Install dependencies' +# # Install required packages: pip, CMake, pybind11 +# - script: | +# python -m pip install --upgrade pip +# pip install -r requirements.txt +# pip install cmake pybind11 +# displayName: 'Install dependencies' - # Start LocalDB instance - - powershell: | - sqllocaldb create MSSQLLocalDB - sqllocaldb start MSSQLLocalDB - displayName: 'Start LocalDB instance' +# # Start LocalDB instance +# - powershell: | +# sqllocaldb create MSSQLLocalDB +# sqllocaldb start MSSQLLocalDB +# displayName: 'Start LocalDB instance' - # Create database and user - - powershell: | - sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" - sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" - sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" - sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" - displayName: 'Setup database and user' - env: - DB_PASSWORD: $(DB_PASSWORD) +# # Create database and user +# - powershell: | +# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" +# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" +# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" +# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" +# displayName: 'Setup database and user' +# env: +# DB_PASSWORD: $(DB_PASSWORD) - - task: DownloadPipelineArtifact@2 - condition: eq(variables['targetArch'], 'arm64') - inputs: - buildType: 'specific' - project: '$(System.TeamProject)' - definition: 2162 - buildVersionToDownload: 'latest' - artifactName: 'mssql-python-arm64-libs' - targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - displayName: 'Download ARM64 Python libs from latest successful run on branches' +# - task: DownloadPipelineArtifact@2 +# condition: eq(variables['targetArch'], 'arm64') +# inputs: +# buildType: 'specific' +# project: '$(System.TeamProject)' +# definition: 2162 +# buildVersionToDownload: 'latest' +# artifactName: 'mssql-python-arm64-libs' +# targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' +# displayName: 'Download ARM64 Python libs from latest successful run on branches' - # Build the PYD file by calling build.bat - - script: | - echo "Python Version: $(pythonVersion)" - echo "Short Tag: $(shortPyVer)" - echo "Architecture: Host=$(architecture), Target=$(targetArch)" +# # Build the PYD file by calling build.bat +# - script: | +# echo "Python Version: $(pythonVersion)" +# echo "Short Tag: $(shortPyVer)" +# echo "Architecture: Host=$(architecture), Target=$(targetArch)" - cd "$(Build.SourcesDirectory)\mssql_python\pybind" +# cd "$(Build.SourcesDirectory)\mssql_python\pybind" - REM Optional: override lib path if building for ARM64 since we cannot install arm64 python on x64 host - if "$(targetArch)"=="arm64" ( - echo Using arm64-specific Python library... - set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 - ) +# REM Optional: override lib path if building for ARM64 since we cannot install arm64 python on x64 host +# if "$(targetArch)"=="arm64" ( +# echo Using arm64-specific Python library... +# set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 +# ) - REM Call build.bat to build the PYD file - call build.bat $(targetArch) +# REM Call build.bat to build the PYD file +# call build.bat $(targetArch) - REM Calling keep_single_arch.bat to remove ODBC libs of other architectures - call keep_single_arch.bat $(targetArch) +# REM Calling keep_single_arch.bat to remove ODBC libs of other architectures +# call keep_single_arch.bat $(targetArch) - cd ..\.. - displayName: 'Build PYD for $(targetArch)' - continueOnError: false +# cd ..\.. +# displayName: 'Build PYD for $(targetArch)' +# continueOnError: false - # Run pytests before packaging - - powershell: | - Write-Host "Running pytests to validate bindings" - if ("$(targetArch)" -eq "arm64") { - Write-Host "Skipping pytests on Windows ARM64" - } else { - python -m pytest -v - } - displayName: 'Run pytests' - env: - DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' +# # Run pytests before packaging +# - powershell: | +# Write-Host "Running pytests to validate bindings" +# if ("$(targetArch)" -eq "arm64") { +# Write-Host "Skipping pytests on Windows ARM64" +# } else { +# python -m pytest -v +# } +# displayName: 'Run pytests' +# env: +# DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - # Copy the built .pyd file to staging folder for artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' - Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' - TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' - displayName: 'Place PYD file into artifacts directory' +# # Copy the built .pyd file to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' +# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' +# TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' +# displayName: 'Place PYD file into artifacts directory' - # Copy the built .pdb files to staging folder for artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' - Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdbs' - TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' - displayName: 'Place PDB file into artifacts directory' +# # Copy the built .pdb files to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' +# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdbs' +# TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' +# displayName: 'Place PDB file into artifacts directory' - # Build wheel package for the current architecture - - script: | - python -m pip install --upgrade pip - pip install wheel setuptools - set ARCHITECTURE=$(targetArch) - python setup.py bdist_wheel - displayName: 'Build wheel package for Python $(pythonVersion) ($(targetArch))' +# # Build wheel package for the current architecture +# - script: | +# python -m pip install --upgrade pip +# pip install wheel setuptools +# set ARCHITECTURE=$(targetArch) +# python setup.py bdist_wheel +# displayName: 'Build wheel package for Python $(pythonVersion) ($(targetArch))' - # Copy the wheel file to the artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)\dist' - Contents: '*.whl' - TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' - displayName: 'Collect wheel package' +# # Copy the wheel file to the artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)\dist' +# Contents: '*.whl' +# TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' +# displayName: 'Collect wheel package' - # Publish the collected .pyd file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish all PYDs as artifacts' +# # Publish the collected .pyd file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish all PYDs as artifacts' - # Publish the python arm64 libraries as build artifacts for next builds if ARM64 - # We publish them only for ARM64 builds since we cannot install arm64 Python on x64 host - # This allows us to reuse the libraries in future ARM64 builds - # Publishing will retain the libraries in the build artifacts - - task: PublishBuildArtifacts@1 - condition: eq(variables['targetArch'], 'arm64') - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - ArtifactName: 'mssql-python-arm64-libs' - publishLocation: 'Container' - displayName: 'Publish arm64 libs as artifacts' +# # Publish the python arm64 libraries as build artifacts for next builds if ARM64 +# # We publish them only for ARM64 builds since we cannot install arm64 Python on x64 host +# # This allows us to reuse the libraries in future ARM64 builds +# # Publishing will retain the libraries in the build artifacts +# - task: PublishBuildArtifacts@1 +# condition: eq(variables['targetArch'], 'arm64') +# inputs: +# PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' +# ArtifactName: 'mssql-python-arm64-libs' +# publishLocation: 'Container' +# displayName: 'Publish arm64 libs as artifacts' - # Publish the collected wheel file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' - ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish all wheels as artifacts' +# # Publish the collected wheel file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish all wheels as artifacts' -- job: BuildMacOSWheels - # Use the latest macOS image for building - pool: - vmImage: 'macos-latest' - # Display name for the job in Azure DevOps UI - displayName: 'Build macOS - ' - strategy: - matrix: - # Python 3.13 (universal2 for both arm64 and x86_64) - py313_universal2: - pythonVersion: '3.13' - shortPyVer: '313' - # Always use universal2 for macOS - targetArch: 'universal2' +# - job: BuildMacOSWheels +# # Use the latest macOS image for building +# pool: +# vmImage: 'macos-latest' +# # Display name for the job in Azure DevOps UI +# displayName: 'Build macOS - ' +# strategy: +# matrix: +# # Python 3.13 (universal2 for both arm64 and x86_64) +# py313_universal2: +# pythonVersion: '3.13' +# shortPyVer: '313' +# # Always use universal2 for macOS +# targetArch: 'universal2' - # Python 3.12 (universal2 for both arm64 and x86_64) - py312_universal2: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'universal2' +# # Python 3.12 (universal2 for both arm64 and x86_64) +# py312_universal2: +# pythonVersion: '3.12' +# shortPyVer: '312' +# targetArch: 'universal2' - # Python 3.11 (universal2 for both arm64 and x86_64) - py311_universal2: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'universal2' +# # Python 3.11 (universal2 for both arm64 and x86_64) +# py311_universal2: +# pythonVersion: '3.11' +# shortPyVer: '311' +# targetArch: 'universal2' - # Python 3.10 (universal2 for both arm64 and x86_64) - py310_universal2: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'universal2' +# # Python 3.10 (universal2 for both arm64 and x86_64) +# py310_universal2: +# pythonVersion: '3.10' +# shortPyVer: '310' +# targetArch: 'universal2' - steps: - # Use correct Python version and architecture for the current job - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(pythonVersion)' - addToPath: true - displayName: 'Use Python $(pythonVersion) (Universal2)' +# steps: +# # Use correct Python version and architecture for the current job +# - task: UsePythonVersion@0 +# inputs: +# versionSpec: '$(pythonVersion)' +# addToPath: true +# displayName: 'Use Python $(pythonVersion) (Universal2)' - # Install CMake on macOS - - script: | - brew update - brew install cmake - displayName: 'Install CMake' +# # Install CMake on macOS +# - script: | +# brew update +# brew install cmake +# displayName: 'Install CMake' - # Install required packages: pip, CMake, pybind11 - - script: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install cmake pybind11 - displayName: 'Install dependencies' +# # Install required packages: pip, CMake, pybind11 +# - script: | +# python -m pip install --upgrade pip +# pip install -r requirements.txt +# pip install cmake pybind11 +# displayName: 'Install dependencies' - # Build the .so file by calling build.sh - - script: | - echo "Python Version: $(pythonVersion)" - echo "Short Tag: $(shortPyVer)" - echo "Building Universal2 Binary" - cd "$(Build.SourcesDirectory)/mssql_python/pybind" - # Call build.sh to build the .so file - ./build.sh - displayName: 'Build .so file' - continueOnError: false +# # Build the .so file by calling build.sh +# - script: | +# echo "Python Version: $(pythonVersion)" +# echo "Short Tag: $(shortPyVer)" +# echo "Building Universal2 Binary" +# cd "$(Build.SourcesDirectory)/mssql_python/pybind" +# # Call build.sh to build the .so file +# ./build.sh +# displayName: 'Build .so file' +# continueOnError: false - # Copy the built .so file to staging folder for artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)/mssql_python' - Contents: '*.so' - TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' - displayName: 'Place .so file into artifacts directory' +# # Copy the built .so file to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)/mssql_python' +# Contents: '*.so' +# TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' +# displayName: 'Place .so file into artifacts directory' - - script: | - brew update - brew install docker colima +# - script: | +# brew update +# brew install docker colima - # Try VZ first, fallback to QEMU if it fails - # Use more conservative resource allocation for Azure DevOps runners - colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ - colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu +# # Try VZ first, fallback to QEMU if it fails +# # Use more conservative resource allocation for Azure DevOps runners +# colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ +# colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu - # Set a timeout to ensure Colima starts properly - sleep 30 +# # Set a timeout to ensure Colima starts properly +# sleep 30 - # Optional: set Docker context (usually automatic) - docker context use colima >/dev/null || true +# # Optional: set Docker context (usually automatic) +# docker context use colima >/dev/null || true - # Confirm Docker is operational - docker version - docker ps - displayName: 'Install and start Colima-based Docker' - timeoutInMinutes: 15 +# # Confirm Docker is operational +# docker version +# docker ps +# displayName: 'Install and start Colima-based Docker' +# timeoutInMinutes: 15 - - script: | - # Pull and run SQL Server container - docker pull mcr.microsoft.com/mssql/server:2022-latest - docker run \ - --name sqlserver \ - -e ACCEPT_EULA=Y \ - -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ - -p 1433:1433 \ - -d mcr.microsoft.com/mssql/server:2022-latest +# - script: | +# # Pull and run SQL Server container +# docker pull mcr.microsoft.com/mssql/server:2022-latest +# docker run \ +# --name sqlserver \ +# -e ACCEPT_EULA=Y \ +# -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ +# -p 1433:1433 \ +# -d mcr.microsoft.com/mssql/server:2022-latest - # Starting SQL Server container… - for i in {1..30}; do - docker exec sqlserver \ - /opt/mssql-tools18/bin/sqlcmd \ - -S localhost \ - -U SA \ - -P "$DB_PASSWORD" \ - -C -Q "SELECT 1" && break - sleep 2 - done - displayName: 'Pull & start SQL Server (Docker)' - env: - DB_PASSWORD: $(DB_PASSWORD) +# # Starting SQL Server container… +# for i in {1..30}; do +# docker exec sqlserver \ +# /opt/mssql-tools18/bin/sqlcmd \ +# -S localhost \ +# -U SA \ +# -P "$DB_PASSWORD" \ +# -C -Q "SELECT 1" && break +# sleep 2 +# done +# displayName: 'Pull & start SQL Server (Docker)' +# env: +# DB_PASSWORD: $(DB_PASSWORD) - # Run Pytest to ensure the bindings work correctly - - script: | - python -m pytest -v - displayName: 'Run Pytest to validate bindings' - env: - DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' +# # Run Pytest to ensure the bindings work correctly +# - script: | +# python -m pytest -v +# displayName: 'Run Pytest to validate bindings' +# env: +# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - # Build wheel package for universal2 - - script: | - python -m pip install --upgrade pip - pip install wheel setuptools - python setup.py bdist_wheel - displayName: 'Build $(pythonVersion) universal2 whl' +# # Build wheel package for universal2 +# - script: | +# python -m pip install --upgrade pip +# pip install wheel setuptools +# python setup.py bdist_wheel +# displayName: 'Build $(pythonVersion) universal2 whl' - # Copy the wheel file to the artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)/dist' - Contents: '*.whl' - TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' - displayName: 'Collect wheel package' +# # Copy the wheel file to the artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)/dist' +# Contents: '*.whl' +# TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' +# displayName: 'Collect wheel package' - # Publish the collected .so file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish all .so files as artifacts' +# # Publish the collected .so file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish all .so files as artifacts' - # Publish the collected wheel file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' - ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish all wheels as artifacts' +# # Publish the collected wheel file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish all wheels as artifacts' - job: BuildLinuxWheels pool: @@ -376,159 +376,159 @@ jobs: strategy: matrix: # Python 3.10 (x86_64 and ARM64) - py310_x86_64_ubuntu: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' - py310_arm64_ubuntu: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' - py310_x86_64_debian: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py310_arm64_debian: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py310_x86_64_rhel: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - buildFromSource: 'true' - py310_arm64_rhel: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - buildFromSource: 'true' + # py310_x86_64_ubuntu: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py310_arm64_ubuntu: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py310_x86_64_debian: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py310_arm64_debian: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py310_x86_64_rhel: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # buildFromSource: 'true' + # py310_arm64_rhel: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # buildFromSource: 'true' - # Python 3.11 (x86_64 and ARM64) - py311_x86_64_ubuntu: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' - py311_arm64_ubuntu: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' - py311_x86_64_debian: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py311_arm64_debian: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py311_x86_64_rhel: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - py311_arm64_rhel: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' + # # Python 3.11 (x86_64 and ARM64) + # py311_x86_64_ubuntu: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py311_arm64_ubuntu: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py311_x86_64_debian: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py311_arm64_debian: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py311_x86_64_rhel: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # py311_arm64_rhel: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' - # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA - # Only build for Debian and RHEL where Python 3.12 is available - py312_x86_64_debian: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py312_arm64_debian: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py312_x86_64_rhel: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - py312_arm64_rhel: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' + # # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA + # # Only build for Debian and RHEL where Python 3.12 is available + # py312_x86_64_debian: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py312_arm64_debian: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py312_x86_64_rhel: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # py312_arm64_rhel: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' - # Python 3.13 (x86_64 and ARM64) - py313_x86_64_ubuntu: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' - py313_arm64_ubuntu: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'ubuntu:22.04' - distroName: 'Ubuntu' - packageManager: 'apt' + # # Python 3.13 (x86_64 and ARM64) + # py313_x86_64_ubuntu: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py313_arm64_ubuntu: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' # Python 3.13 (x86_64 and ARM64) - Built from source for Debian and RHEL (not available via package managers) py313_x86_64_debian: @@ -835,7 +835,7 @@ jobs: # Update package index apk update - # Install build tools and system dependencies + # Install base build tools and system dependencies apk add --no-cache \ build-base \ cmake \ @@ -850,13 +850,49 @@ jobs: libffi-dev \ openssl-dev \ zlib-dev \ - py3-pip \ - python3-dev \ patchelf - # Create symlinks for Python compatibility - ln -sf python3 /usr/bin/python || true - ln -sf pip3 /usr/bin/pip || true + # Python installation - hybrid approach + if [ '$(pythonVersion)' = '3.12' ]; then + # Use pre-available Python 3.12 from Alpine packages + echo 'Using pre-available Python 3.12 from Alpine packages' + apk add --no-cache py3-pip python3-dev + + # Create symlinks for Python compatibility + ln -sf python3 /usr/bin/python || true + ln -sf pip3 /usr/bin/pip || true + else + # Build Python from source for other versions (3.10, 3.11, 3.13) + echo 'Building Python $(pythonVersion) from source for Alpine Linux' + apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev + + # Download and compile Python from source + cd /tmp + wget https://www.python.org/ftp/python/$(pythonVersion).1/Python-$(pythonVersion).1.tgz + tar xzf Python-$(pythonVersion).1.tgz + cd Python-$(pythonVersion).1 + + # Configure and build Python with optimizations disabled for faster builds + ./configure --enable-optimizations --with-ensurepip=install --enable-shared LDFLAGS='-Wl,-rpath /usr/local/lib' + + # Disable PGO for ARM64 to speed up builds + if [ '$(targetArch)' = 'aarch64' ]; then + echo 'Disabling Profile-Guided Optimization for ARM64 to speed up build' + make -j\$(nproc) PROFILE_TASK=true + else + make -j\$(nproc) + fi + + make altinstall + + # Create symlinks for easier access + ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python + ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip + + # Clean up build files + cd / + rm -rf /tmp/Python-$(pythonVersion).1* + fi # Verify installation and architecture echo 'Architecture:' \$(uname -m) @@ -1084,8 +1120,21 @@ jobs: docker exec build-container-$(distroName)-$(targetArch) bash -c " # Determine which Python command to use if [ '$(packageManager)' = 'apk' ]; then - # Alpine Linux - use python directly - PYTHON_CMD=python + # Alpine Linux - check if we built from source or used pre-installed + if [ '$(pythonVersion)' = '3.12' ]; then + # Using pre-installed Python 3.12 + PYTHON_CMD=python3 + else + # Using source-compiled Python + if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + elif command -v python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=python$(pythonVersion) + else + echo 'No Python $(pythonVersion) interpreter found after source compilation' + exit 1 + fi + fi else # Ubuntu/Debian/RHEL - determine the best Python command if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then From eb84186b772d932ae411f0fc70fd6880a5cc01f5 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 17:57:11 +0530 Subject: [PATCH 34/93] python 3.13 building for alpine --- eng/pipelines/build-whl-pipeline.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 05df324e2..c01894c0b 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -864,7 +864,7 @@ jobs: else # Build Python from source for other versions (3.10, 3.11, 3.13) echo 'Building Python $(pythonVersion) from source for Alpine Linux' - apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev + apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev linux-headers # Download and compile Python from source cd /tmp @@ -872,8 +872,8 @@ jobs: tar xzf Python-$(pythonVersion).1.tgz cd Python-$(pythonVersion).1 - # Configure and build Python with optimizations disabled for faster builds - ./configure --enable-optimizations --with-ensurepip=install --enable-shared LDFLAGS='-Wl,-rpath /usr/local/lib' + # Configure and build Python - disable IPv6 for Alpine/musl compatibility + ./configure --disable-ipv6 --enable-optimizations --with-ensurepip=install --enable-shared LDFLAGS='-Wl,-rpath /usr/local/lib' # Disable PGO for ARM64 to speed up builds if [ '$(targetArch)' = 'aarch64' ]; then From b8e6796f44e13681bf0320fd2c01dbbd473f355b Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 18:27:44 +0530 Subject: [PATCH 35/93] fix building for alpine 3.10-3.13 --- eng/pipelines/build-whl-pipeline.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index c01894c0b..0756a75f0 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -872,8 +872,19 @@ jobs: tar xzf Python-$(pythonVersion).1.tgz cd Python-$(pythonVersion).1 - # Configure and build Python - disable IPv6 for Alpine/musl compatibility - ./configure --disable-ipv6 --enable-optimizations --with-ensurepip=install --enable-shared LDFLAGS='-Wl,-rpath /usr/local/lib' + # Configure and build Python - Alpine/musl specific configuration + # Set cache variables to help configure detect musl libc types correctly + export ac_cv_file__dev_ptmx=yes + export ac_cv_file__dev_ptc=no + export ac_cv_have_long_long_format=yes + + ./configure --disable-ipv6 --enable-optimizations --with-ensurepip=install --enable-shared \ + --build=aarch64-alpine-linux-musl \ + --host=aarch64-alpine-linux-musl \ + --target=aarch64-alpine-linux-musl \ + LDFLAGS='-Wl,-rpath /usr/local/lib' \ + CPPFLAGS='-I/usr/include' \ + LDFLAGS='-L/usr/lib -Wl,-rpath /usr/local/lib' # Disable PGO for ARM64 to speed up builds if [ '$(targetArch)' = 'aarch64' ]; then From 38d441fccbc5d02ab63e2001277081b1e51f2d1f Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 21:07:09 +0530 Subject: [PATCH 36/93] fix building for arm64 systems, encodings error --- eng/pipelines/build-whl-pipeline.yml | 59 +++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 0756a75f0..e0cf889f7 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -878,28 +878,45 @@ jobs: export ac_cv_file__dev_ptc=no export ac_cv_have_long_long_format=yes - ./configure --disable-ipv6 --enable-optimizations --with-ensurepip=install --enable-shared \ + ./configure \ + --prefix=/usr/local \ + --enable-shared \ + --with-ensurepip=install \ + --disable-ipv6 \ --build=aarch64-alpine-linux-musl \ --host=aarch64-alpine-linux-musl \ --target=aarch64-alpine-linux-musl \ - LDFLAGS='-Wl,-rpath /usr/local/lib' \ CPPFLAGS='-I/usr/include' \ - LDFLAGS='-L/usr/lib -Wl,-rpath /usr/local/lib' + LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' - # Disable PGO for ARM64 to speed up builds - if [ '$(targetArch)' = 'aarch64' ]; then - echo 'Disabling Profile-Guided Optimization for ARM64 to speed up build' - make -j\$(nproc) PROFILE_TASK=true - else - make -j\$(nproc) - fi + # Build Python without optimizations to avoid gcc segfault on ARM64 + echo 'Building Python $(pythonVersion) without PGO optimizations to avoid compilation issues' + make -j\$(nproc) make altinstall + # Set up environment for proper Python operation + export PYTHONHOME=/usr/local + export PYTHONPATH=/usr/local/lib/python$(pythonVersion) + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + # Create symlinks for easier access ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip + # Set up persistent environment variables for source-compiled Python + echo 'export PYTHONHOME=/usr/local' >> /etc/profile + echo 'export PYTHONPATH=/usr/local/lib/python$(pythonVersion)' >> /etc/profile + echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile + + # Verify Python installation and modules + echo 'Verifying Python $(pythonVersion) installation:' + ls -la /usr/local/bin/python$(pythonVersion) + /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL and encodings support:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support: OK\")' + echo 'Python installation successful' + # Clean up build files cd / rm -rf /tmp/Python-$(pythonVersion).1* @@ -1130,6 +1147,14 @@ jobs: # Install Python dependencies in the container using virtual environment docker exec build-container-$(distroName)-$(targetArch) bash -c " # Determine which Python command to use + # Set up Python environment before determining command + if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then + # For source-compiled Python on Alpine, set environment variables + export PYTHONHOME=/usr/local + export PYTHONPATH=/usr/local/lib/python$(pythonVersion) + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + fi + if [ '$(packageManager)' = 'apk' ]; then # Alpine Linux - check if we built from source or used pre-installed if [ '$(pythonVersion)' = '3.12' ]; then @@ -1275,6 +1300,13 @@ jobs: -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ -e DB_PASSWORD="$(DB_PASSWORD)" \ build-container-$(distroName)-$(targetArch) bash -c " + # Set environment for source-compiled Python on Alpine + if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then + export PYTHONHOME=/usr/local + export PYTHONPATH=/usr/local/lib/python$(pythonVersion) + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + fi + source /workspace/venv/bin/activate echo 'Build successful, running tests now on $(distroName) $(targetArch)' echo 'Python version:' \$(python --version) @@ -1289,6 +1321,13 @@ jobs: - script: | # Build wheel package in the container docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Set environment for source-compiled Python on Alpine + if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then + export PYTHONHOME=/usr/local + export PYTHONPATH=/usr/local/lib/python$(pythonVersion) + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + fi + source /workspace/venv/bin/activate echo 'Building wheel for $(distroName) $(targetArch) Python $(pythonVersion)' echo 'Python version:' \$(python --version) From a8bb723f6207938f0a581453db9969273cc90654 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 21:29:29 +0530 Subject: [PATCH 37/93] fix building for arm64 systems, LONG_BIT error --- eng/pipelines/build-whl-pipeline.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index e0cf889f7..8209e051c 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -877,6 +877,11 @@ jobs: export ac_cv_file__dev_ptmx=yes export ac_cv_file__dev_ptc=no export ac_cv_have_long_long_format=yes + # Fix LONG_BIT detection for musl libc on ARM64 + export ac_cv_sizeof_long=8 + export ac_cv_sizeof_size_t=8 + export ac_cv_sizeof_pid_t=4 + export ac_cv_sizeof_void_p=8 ./configure \ --prefix=/usr/local \ @@ -886,8 +891,9 @@ jobs: --build=aarch64-alpine-linux-musl \ --host=aarch64-alpine-linux-musl \ --target=aarch64-alpine-linux-musl \ - CPPFLAGS='-I/usr/include' \ - LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' + CPPFLAGS='-I/usr/include -DLONG_BIT=64' \ + LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' \ + CFLAGS='-DLONG_BIT=64' # Build Python without optimizations to avoid gcc segfault on ARM64 echo 'Building Python $(pythonVersion) without PGO optimizations to avoid compilation issues' From b7a81a3055343c557b31e9c627b446569551a53f Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 21:41:26 +0530 Subject: [PATCH 38/93] fix building for arm64 musl systems --- eng/pipelines/build-whl-pipeline.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 8209e051c..aa72c3c3f 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -882,6 +882,8 @@ jobs: export ac_cv_sizeof_size_t=8 export ac_cv_sizeof_pid_t=4 export ac_cv_sizeof_void_p=8 + # Fix float word ordering detection for ARM64 + export ax_cv_c_float_words_bigendian=no ./configure \ --prefix=/usr/local \ From 25fe8d34e5640407e80651ee68892f6592fa5d3f Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 23:14:16 +0530 Subject: [PATCH 39/93] fix building for arm64 python 3.3 alpine/debian --- eng/pipelines/build-whl-pipeline.yml | 50 ++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index aa72c3c3f..8934fc7f3 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -762,16 +762,26 @@ jobs: # Configure and compile Python with SSL support explicitly enabled echo 'Configuring Python build with SSL support' - # Disable optimizations for ARM64 builds to speed up compilation in emulated environment + # Disable optimizations for ARM64 builds to prevent GCC segfaults and speed up compilation if [ '$(targetArch)' = 'arm64' ]; then - echo 'ARM64 build detected - disabling optimizations for faster compilation' + echo 'ARM64 build detected - using reduced optimization and GCC stability flags' + # Set compiler flags to prevent GCC internal compiler errors on ARM64 + export CFLAGS="-O1 -g -fno-semantic-interposition -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free" + export CXXFLAGS="-O1 -g -fno-semantic-interposition" + export OPT="-DNDEBUG -g -O1" ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr else ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr fi - echo 'Compiling Python (this may take several minutes - ARM64 builds are slower due to emulation)' - make -j\$(nproc) + echo 'Compiling Python (this may take several minutes - ARM64 builds are slower and use reduced optimization)' + # Use single-threaded build on ARM64 to reduce memory pressure and avoid GCC crashes + if [ '$(targetArch)' = 'arm64' ]; then + echo 'Using single-threaded build for ARM64 stability' + make + else + make -j\$(nproc) + fi echo 'Installing Python' make altinstall @@ -899,13 +909,21 @@ jobs: # Build Python without optimizations to avoid gcc segfault on ARM64 echo 'Building Python $(pythonVersion) without PGO optimizations to avoid compilation issues' - make -j\$(nproc) + make -j\$(nproc) 2>&1 | tee /tmp/make.log || { + echo "Build completed with some module failures, proceeding with installation..." + grep -E "(error|failed|Error)" /tmp/make.log | tail -10 || echo "No critical errors found" + } - make altinstall + make altinstall 2>&1 | tee /tmp/install.log - # Set up environment for proper Python operation + # Check if essential files were installed + echo "Checking Python installation files:" + ls -la /usr/local/bin/python$(pythonVersion) || { echo "ERROR: Python binary not installed"; exit 1; } + ls -la /usr/local/lib/python$(pythonVersion)/encodings/ || echo "WARNING: encodings directory not found" + + # Set up environment for proper Python operation with correct paths export PYTHONHOME=/usr/local - export PYTHONPATH=/usr/local/lib/python$(pythonVersion) + export PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload:/usr/local/lib/python$(pythonVersion)/site-packages" export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH # Create symlinks for easier access @@ -914,15 +932,25 @@ jobs: # Set up persistent environment variables for source-compiled Python echo 'export PYTHONHOME=/usr/local' >> /etc/profile - echo 'export PYTHONPATH=/usr/local/lib/python$(pythonVersion)' >> /etc/profile + echo 'export PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload:/usr/local/lib/python$(pythonVersion)/site-packages"' >> /etc/profile echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile + # Also set environment variables for the current session + export PYTHONHOME=/usr/local + export PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload:/usr/local/lib/python$(pythonVersion)/site-packages" + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + # Verify Python installation and modules echo 'Verifying Python $(pythonVersion) installation:' ls -la /usr/local/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL and encodings support:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support: OK\")' + + echo 'Testing basic Python functionality:' + echo 'import sys; print("Python path:", sys.path[:3])' | PYTHONHOME=/usr/local PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload" /usr/local/bin/python$(pythonVersion) || echo "Basic import test failed" + + echo 'Testing encodings module:' + echo 'import encodings; print("Encodings module: OK")' | PYTHONHOME=/usr/local PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload" /usr/local/bin/python$(pythonVersion) || echo "Encodings test failed" + echo 'Python installation successful' # Clean up build files From 2f27964d14469ffdc65bd60617f51bc834f478de Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 23:16:52 +0530 Subject: [PATCH 40/93] only run arm64 tests in linux --- eng/pipelines/build-whl-pipeline.yml | 98 ++++++++++++++-------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 8934fc7f3..96027888e 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -531,14 +531,14 @@ jobs: # packageManager: 'apt' # Python 3.13 (x86_64 and ARM64) - Built from source for Debian and RHEL (not available via package managers) - py313_x86_64_debian: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' + # py313_x86_64_debian: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' py313_arm64_debian: pythonVersion: '3.13' shortPyVer: '313' @@ -547,15 +547,15 @@ jobs: dockerImage: 'debian:12' distroName: 'Debian' packageManager: 'apt' - py313_x86_64_rhel: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - buildFromSource: 'true' + # py313_x86_64_rhel: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # buildFromSource: 'true' py313_arm64_rhel: pythonVersion: '3.13' shortPyVer: '313' @@ -567,14 +567,14 @@ jobs: buildFromSource: 'true' # Alpine Linux (x86_64 and ARM64) - py310_x86_64_alpine: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' + # py310_x86_64_alpine: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' py310_arm64_alpine: pythonVersion: '3.10' shortPyVer: '310' @@ -583,14 +583,14 @@ jobs: dockerImage: 'alpine:latest' distroName: 'alpine' packageManager: 'apk' - py311_x86_64_alpine: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' + # py311_x86_64_alpine: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' py311_arm64_alpine: pythonVersion: '3.11' shortPyVer: '311' @@ -599,14 +599,14 @@ jobs: dockerImage: 'alpine:latest' distroName: 'alpine' packageManager: 'apk' - py312_x86_64_alpine: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' + # py312_x86_64_alpine: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' py312_arm64_alpine: pythonVersion: '3.12' shortPyVer: '312' @@ -615,14 +615,14 @@ jobs: dockerImage: 'alpine:latest' distroName: 'alpine' packageManager: 'apk' - py313_x86_64_alpine: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' + # py313_x86_64_alpine: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'alpine:latest' + # distroName: 'alpine' + # packageManager: 'apk' py313_arm64_alpine: pythonVersion: '3.13' shortPyVer: '313' From eb192ed7bd2fe44c4e76ae8ce4fb6a279cd33cc1 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 23:24:58 +0530 Subject: [PATCH 41/93] only run arm64 tests in linux --- eng/pipelines/build-whl-pipeline.yml | 130 ++++++++++++++++++++++----- 1 file changed, 106 insertions(+), 24 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 96027888e..bff3c59a1 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -882,7 +882,7 @@ jobs: tar xzf Python-$(pythonVersion).1.tgz cd Python-$(pythonVersion).1 - # Configure and build Python - Alpine/musl specific configuration + # Configure and build Python - Alpine/musl specific configuration with ARM64 stability # Set cache variables to help configure detect musl libc types correctly export ac_cv_file__dev_ptmx=yes export ac_cv_file__dev_ptc=no @@ -895,6 +895,13 @@ jobs: # Fix float word ordering detection for ARM64 export ax_cv_c_float_words_bigendian=no + # Set ultra-conservative compiler flags for Alpine ARM64 to prevent GCC segfaults + echo 'Setting ultra-conservative compiler flags for Alpine ARM64 GCC stability' + export CFLAGS='-DLONG_BIT=64 -O0 -g -fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations -fno-builtin -fno-inline' + export CXXFLAGS='-O0 -g -fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations' + export OPT='-DNDEBUG -g -O0' + export EXTRA_CFLAGS='-fno-strict-overflow -fno-delete-null-pointer-checks' + ./configure \ --prefix=/usr/local \ --enable-shared \ @@ -904,22 +911,45 @@ jobs: --host=aarch64-alpine-linux-musl \ --target=aarch64-alpine-linux-musl \ CPPFLAGS='-I/usr/include -DLONG_BIT=64' \ - LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' \ - CFLAGS='-DLONG_BIT=64' + LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' - # Build Python without optimizations to avoid gcc segfault on ARM64 - echo 'Building Python $(pythonVersion) without PGO optimizations to avoid compilation issues' - make -j\$(nproc) 2>&1 | tee /tmp/make.log || { - echo "Build completed with some module failures, proceeding with installation..." - grep -E "(error|failed|Error)" /tmp/make.log | tail -10 || echo "No critical errors found" - } + # Build Python with extreme stability measures for Alpine ARM64 + echo 'Building Python $(pythonVersion) with ARM64 stability measures for Alpine/musl' + # Use single-threaded make to reduce memory pressure and avoid GCC crashes + echo 'Using single-threaded build to prevent GCC segmentation faults on ARM64' + make 2>&1 | tee /tmp/make.log + + # Check for critical compilation failures (GCC segfaults, etc.) + if grep -q "internal compiler error\|Segmentation fault\|collect2.*Error" /tmp/make.log; then + echo "CRITICAL: GCC segmentation fault or internal compiler error detected!" + echo "Build cannot continue with corrupted compilation. Exiting." + grep -A2 -B2 "internal compiler error\|Segmentation fault\|collect2.*Error" /tmp/make.log + exit 1 + fi + + # Check if Python binary was successfully built + if [ ! -f "./python" ]; then + echo "CRITICAL: Python binary was not built successfully" + exit 1 + fi + + echo 'Installing Python...' make altinstall 2>&1 | tee /tmp/install.log - # Check if essential files were installed + # Check if essential files were installed - CRITICAL validation echo "Checking Python installation files:" ls -la /usr/local/bin/python$(pythonVersion) || { echo "ERROR: Python binary not installed"; exit 1; } - ls -la /usr/local/lib/python$(pythonVersion)/encodings/ || echo "WARNING: encodings directory not found" + + # Critical check: encodings directory MUST exist for Python to work + if [ ! -d "/usr/local/lib/python$(pythonVersion)/encodings" ]; then + echo "CRITICAL ERROR: encodings directory not found!" + echo "Python installation is incomplete and unusable." + echo "Available lib contents:" + ls -la /usr/local/lib/python$(pythonVersion)/ 2>/dev/null || echo "Python lib directory doesn't exist" + exit 1 + fi + echo "✓ Encodings directory found" # Set up environment for proper Python operation with correct paths export PYTHONHOME=/usr/local @@ -940,18 +970,30 @@ jobs: export PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload:/usr/local/lib/python$(pythonVersion)/site-packages" export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - # Verify Python installation and modules - echo 'Verifying Python $(pythonVersion) installation:' - ls -la /usr/local/bin/python$(pythonVersion) - /usr/local/bin/python$(pythonVersion) --version + # CRITICAL: Validate Python actually works before proceeding + echo 'Performing critical Python functionality tests:' - echo 'Testing basic Python functionality:' - echo 'import sys; print("Python path:", sys.path[:3])' | PYTHONHOME=/usr/local PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload" /usr/local/bin/python$(pythonVersion) || echo "Basic import test failed" + # Test 1: Basic version check + /usr/local/bin/python$(pythonVersion) --version || { + echo "CRITICAL: Python version check failed" + exit 1 + } + echo "✓ Python version check passed" + + # Test 2: Encodings module (this was failing in the log) + /usr/local/bin/python$(pythonVersion) -c "import encodings; print('Encodings module: OK')" || { + echo "CRITICAL: Encodings module test failed" + echo "Python installation is incomplete and cannot be used" + exit 1 + } + echo "✓ Encodings module test passed" - echo 'Testing encodings module:' - echo 'import encodings; print("Encodings module: OK")' | PYTHONHOME=/usr/local PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload" /usr/local/bin/python$(pythonVersion) || echo "Encodings test failed" + # Test 3: SSL module (important for pip) + /usr/local/bin/python$(pythonVersion) -c "import ssl; print('SSL module: OK')" || { + echo "WARNING: SSL module not available - pip may not work" + } - echo 'Python installation successful' + echo '✓ All critical Python tests passed - installation successful' # Clean up build files cd / @@ -1222,11 +1264,39 @@ jobs: fi echo 'Selected Python command:' \$PYTHON_CMD - echo 'Python version:' \$(\$PYTHON_CMD --version) + + # CRITICAL: Validate Python command works before proceeding + echo 'Validating Python command before creating virtual environment:' + \$PYTHON_CMD --version || { + echo "CRITICAL: Selected Python command \$PYTHON_CMD failed" + echo "Available Python executables:" + find /usr -name "python*" -type f 2>/dev/null | head -10 + exit 1 + } + + # Test encodings module before creating venv (this was failing) + \$PYTHON_CMD -c "import encodings" || { + echo "CRITICAL: Python encodings module not available" + echo "Cannot create virtual environment with broken Python installation" + exit 1 + } + echo "✓ Python validation passed" # Create virtual environment at consistent path - \$PYTHON_CMD -m venv /workspace/venv - source /workspace/venv/bin/activate + echo 'Creating virtual environment...' + \$PYTHON_CMD -m venv /workspace/venv || { + echo "CRITICAL: Failed to create virtual environment" + echo "Python command: \$PYTHON_CMD" + \$PYTHON_CMD -c "import venv" || echo "venv module not available" + exit 1 + } + + source /workspace/venv/bin/activate || { + echo "CRITICAL: Failed to activate virtual environment" + echo "Virtual environment files:" + ls -la /workspace/venv/ 2>/dev/null || echo "Virtual environment directory doesn't exist" + exit 1 + } # Verify virtual environment is working echo 'Virtual environment activated:' @@ -1249,8 +1319,20 @@ jobs: - script: | # Build pybind bindings in the container docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Validate virtual environment exists before attempting to activate + if [ ! -f '/workspace/venv/bin/activate' ]; then + echo 'CRITICAL: Virtual environment not found!' + echo 'This indicates the Python dependencies installation step failed.' + echo 'Available files in /workspace:' + ls -la /workspace/ 2>/dev/null || echo 'Workspace directory not accessible' + exit 1 + fi + # Activate virtual environment - source /workspace/venv/bin/activate + source /workspace/venv/bin/activate || { + echo 'CRITICAL: Failed to activate virtual environment' + exit 1 + } echo 'Building pybind bindings for $(distroName) $(targetArch)' echo 'Python version:' \$(python --version) From 99f95ee1988671b6a4735aec4818c2da57a85c8d Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 23:45:34 +0530 Subject: [PATCH 42/93] fixed syntax errors --- eng/pipelines/build-whl-pipeline.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index bff3c59a1..79b45ea50 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -780,7 +780,7 @@ jobs: echo 'Using single-threaded build for ARM64 stability' make else - make -j\$(nproc) + make -j\$\$(nproc) fi echo 'Installing Python' @@ -1086,7 +1086,7 @@ jobs: ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr echo 'Compiling Python (this may take several minutes)' - make -j\$(nproc) + make -j\$\$(nproc) echo 'Installing Python' make altinstall From 44470c7deb3390da1e2b59bd43f6719d89d84921 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Thu, 7 Aug 2025 23:54:37 +0530 Subject: [PATCH 43/93] fixed syntax errors changed from sh to bash --- eng/pipelines/build-whl-pipeline.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 79b45ea50..839b0c424 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -841,7 +841,7 @@ jobs: " elif [ "$(packageManager)" = "apk" ]; then # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) sh -c " + docker exec build-container-$(distroName)-$(targetArch) bash -c " # Update package index apk update @@ -1373,7 +1373,7 @@ jobs: " elif [ "$(packageManager)" = "apk" ]; then # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) sh -c " + docker exec build-container-$(distroName)-$(targetArch) bash -c " apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'Some packages were not installed' rm -f /usr/bin/sqlcmd rm -f /usr/bin/bcp From af6965157868ea4c8a9ea0f27483959abba41a76 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Fri, 8 Aug 2025 00:04:04 +0530 Subject: [PATCH 44/93] revamped the whole thing --- eng/pipelines/build-whl-pipeline.yml | 1238 ++++++-------------------- 1 file changed, 264 insertions(+), 974 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 839b0c424..4171d76e8 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -1,20 +1,17 @@ -# Pipeline name shown in ADO UI name: build-whl-pipeline -# Trigger the pipeline on changes to the main branch trigger: branches: include: - main -# Schedule the pipeline to run on main branch daily at 07:00 AM IST schedules: - cron: "30 1 * * *" displayName: Daily run at 07:00 AM IST branches: include: - main - always: true # Always run even if there are no changes + always: true jobs: # - job: BuildWindowsWheels @@ -375,170 +372,6 @@ jobs: strategy: matrix: - # Python 3.10 (x86_64 and ARM64) - # py310_x86_64_ubuntu: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py310_arm64_ubuntu: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py310_x86_64_debian: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py310_arm64_debian: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py310_x86_64_rhel: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # buildFromSource: 'true' - # py310_arm64_rhel: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # buildFromSource: 'true' - - # # Python 3.11 (x86_64 and ARM64) - # py311_x86_64_ubuntu: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py311_arm64_ubuntu: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py311_x86_64_debian: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py311_arm64_debian: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py311_x86_64_rhel: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # py311_arm64_rhel: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - - # # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA - # # Only build for Debian and RHEL where Python 3.12 is available - # py312_x86_64_debian: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py312_arm64_debian: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py312_x86_64_rhel: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # py312_arm64_rhel: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - - # # Python 3.13 (x86_64 and ARM64) - # py313_x86_64_ubuntu: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py313_arm64_ubuntu: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - - # Python 3.13 (x86_64 and ARM64) - Built from source for Debian and RHEL (not available via package managers) - # py313_x86_64_debian: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' py313_arm64_debian: pythonVersion: '3.13' shortPyVer: '313' @@ -547,15 +380,6 @@ jobs: dockerImage: 'debian:12' distroName: 'Debian' packageManager: 'apt' - # py313_x86_64_rhel: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # buildFromSource: 'true' py313_arm64_rhel: pythonVersion: '3.13' shortPyVer: '313' @@ -564,17 +388,6 @@ jobs: dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' distroName: 'RHEL' packageManager: 'dnf' - buildFromSource: 'true' - - # Alpine Linux (x86_64 and ARM64) - # py310_x86_64_alpine: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' py310_arm64_alpine: pythonVersion: '3.10' shortPyVer: '310' @@ -583,14 +396,6 @@ jobs: dockerImage: 'alpine:latest' distroName: 'alpine' packageManager: 'apk' - # py311_x86_64_alpine: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' py311_arm64_alpine: pythonVersion: '3.11' shortPyVer: '311' @@ -599,14 +404,6 @@ jobs: dockerImage: 'alpine:latest' distroName: 'alpine' packageManager: 'apk' - # py312_x86_64_alpine: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' py312_arm64_alpine: pythonVersion: '3.12' shortPyVer: '312' @@ -615,14 +412,6 @@ jobs: dockerImage: 'alpine:latest' distroName: 'alpine' packageManager: 'apk' - # py313_x86_64_alpine: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'alpine:latest' - # distroName: 'alpine' - # packageManager: 'apk' py313_arm64_alpine: pythonVersion: '3.13' shortPyVer: '313' @@ -633,15 +422,13 @@ jobs: packageManager: 'apk' steps: - # Set up Docker buildx for multi-architecture support - script: | docker run --rm --privileged multiarch/qemu-user-static --reset -p yes docker buildx create --name multiarch --driver docker-container --use || true docker buildx inspect --bootstrap - displayName: 'Setup Docker buildx for multi-architecture support' + displayName: 'Setup Docker buildx' - script: | - # Create a Docker container for building docker run -d --name build-container-$(distroName)-$(targetArch) \ --platform $(dockerPlatform) \ -v $(Build.SourcesDirectory):/workspace \ @@ -652,7 +439,6 @@ jobs: displayName: 'Create $(distroName) $(targetArch) container' - script: | - # Start SQL Server container (always x86_64 since SQL Server doesn't support ARM64) docker run -d --name sqlserver-$(distroName)-$(targetArch) \ --platform linux/amd64 \ -e ACCEPT_EULA=Y \ @@ -660,7 +446,6 @@ jobs: -p 1433:1433 \ mcr.microsoft.com/mssql/server:2022-latest - # Wait for SQL Server to be ready echo "Waiting for SQL Server to start..." for i in {1..60}; do if docker exec sqlserver-$(distroName)-$(targetArch) \ @@ -676,817 +461,324 @@ jobs: sleep 2 done - # Create test database docker exec sqlserver-$(distroName)-$(targetArch) \ /opt/mssql-tools18/bin/sqlcmd \ -S localhost \ -U SA \ -P "$(DB_PASSWORD)" \ -C -Q "CREATE DATABASE TestDB" - displayName: 'Start SQL Server container for $(distroName) $(targetArch)' + displayName: 'Start SQL Server container' env: DB_PASSWORD: $(DB_PASSWORD) + # Create setup scripts as files to avoid complex escaping - script: | - # Install dependencies in the container - if [ "$(packageManager)" = "apt" ]; then - # Ubuntu/Debian - docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive - export TZ=UTC - ln -snf /usr/share/zoneinfo/\$TZ /etc/localtime && echo \$TZ > /etc/timezone - - # Update package lists - apt-get update - - # Install basic tools first - apt-get install -y software-properties-common curl wget gnupg build-essential cmake - - # Add deadsnakes PPA for newer Python versions (Ubuntu only) - if [ '$(distroName)' = 'Ubuntu' ]; then - add-apt-repository -y ppa:deadsnakes/ppa - apt-get update - fi - - # Install Python and development packages - # Handle different Python version availability per distribution - if [ '$(distroName)' = 'Debian' ]; then - # Debian 12 has Python 3.11 by default, some older/newer versions may not be available - case '$(pythonVersion)' in - '3.11') - # Python 3.11 is the default in Debian 12 - apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils - PYTHON_CMD=python$(pythonVersion) - ;; - '3.10'|'3.12') - # These versions may not be available in Debian 12, use python3 and create symlinks - echo 'Python $(pythonVersion) may not be available in Debian 12, using available python3' - apt-get install -y python3 python3-dev python3-venv - # Note: distutils is not available for Python 3.12+ - if [ '$(pythonVersion)' != '3.12' ]; then - apt-get install -y python3-distutils || echo 'distutils not available for this Python version' - fi - # Create symlinks to make the desired version available - # Find the actual python3 version and create proper symlinks - ACTUAL_PYTHON=\$(python3 --version | grep -o '[0-9]\+\.[0-9]\+') - echo 'Detected Python version:' \$ACTUAL_PYTHON - ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python3 /usr/local/bin/python - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - ;; - '3.13') - # Python 3.13 requires building from source - echo 'Python $(pythonVersion) requires building from source' - echo 'DEBUG: pythonVersion = $(pythonVersion)' - - # Install dependencies needed for Python source compilation - apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev - apt-get install -y libreadline-dev libsqlite3-dev wget curl llvm - apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev - apt-get install -y libffi-dev liblzma-dev python3-openssl - apt-get install -y libgdbm-dev libnss3-dev libedit-dev || echo 'Some optional dependencies not available' - - # Verify SSL development libraries are installed - echo 'Verifying SSL development libraries:' - dpkg -l | grep libssl-dev || echo 'libssl-dev not found' - pkg-config --exists openssl && echo 'OpenSSL pkg-config found' || echo 'OpenSSL pkg-config missing' - - # Download Python source - fix version mismatch - cd /tmp - PYTHON_FULL_VERSION='3.13.1' - PYTHON_URL=\"https://www.python.org/ftp/python/\$PYTHON_FULL_VERSION/Python-\$PYTHON_FULL_VERSION.tgz\" - echo \"Downloading Python from \$PYTHON_URL\" - wget \$PYTHON_URL -O python-\$PYTHON_FULL_VERSION.tgz - tar -xzf python-\$PYTHON_FULL_VERSION.tgz - cd Python-\$PYTHON_FULL_VERSION - - # Configure and compile Python with SSL support explicitly enabled - echo 'Configuring Python build with SSL support' - # Disable optimizations for ARM64 builds to prevent GCC segfaults and speed up compilation - if [ '$(targetArch)' = 'arm64' ]; then - echo 'ARM64 build detected - using reduced optimization and GCC stability flags' - # Set compiler flags to prevent GCC internal compiler errors on ARM64 - export CFLAGS="-O1 -g -fno-semantic-interposition -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free" - export CXXFLAGS="-O1 -g -fno-semantic-interposition" - export OPT="-DNDEBUG -g -O1" - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr - else - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr - fi - - echo 'Compiling Python (this may take several minutes - ARM64 builds are slower and use reduced optimization)' - # Use single-threaded build on ARM64 to reduce memory pressure and avoid GCC crashes - if [ '$(targetArch)' = 'arm64' ]; then - echo 'Using single-threaded build for ARM64 stability' - make - else - make -j\$\$(nproc) - fi - - echo 'Installing Python' - make altinstall - - # Create symlinks - altinstall creates python3.13, we create python symlink - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - - # Verify installation and SSL support - echo 'Verifying Python 3.13 installation:' - ls -l /usr/local/bin/python$(pythonVersion) || echo 'ERROR: Python $(pythonVersion) not found' - /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL support in Python:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' - - # Clean up - cd / - rm -rf /tmp/Python-\$PYTHON_FULL_VERSION /tmp/python-\$PYTHON_FULL_VERSION.tgz - - echo 'Successfully built and installed Python $(pythonVersion) from source' - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - ;; - *) - echo 'Unsupported Python version $(pythonVersion) for Debian, using python3' - apt-get install -y python3 python3-dev python3-venv - ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python3 /usr/local/bin/python - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - ;; - esac - else - # Ubuntu has deadsnakes PPA, so more versions are available - # Note: distutils is not available for newer Python versions (3.12+) - if [ '$(pythonVersion)' = '3.12' ] || [ '$(pythonVersion)' = '3.13' ]; then - apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv - else - apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils - fi - # For Ubuntu, create symlinks for consistency - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - fi - - # Install pip for the specific Python version - curl -sS https://bootstrap.pypa.io/get-pip.py | \$PYTHON_CMD - - # Install remaining packages - apt-get install -y pybind11-dev || echo 'pybind11-dev not available, will install via pip' - - # Verify Python installation - echo 'Python installation verification:' - echo 'Using PYTHON_CMD:' \$PYTHON_CMD - \$PYTHON_CMD --version - if [ -f /usr/local/bin/python ]; then - /usr/local/bin/python --version - fi - " - elif [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Update package index - apk update - - # Install base build tools and system dependencies - apk add --no-cache \ - build-base \ - cmake \ - clang \ - git \ - bash \ - wget \ - curl \ - gnupg \ - unixodbc \ - unixodbc-dev \ - libffi-dev \ - openssl-dev \ - zlib-dev \ - patchelf - - # Python installation - hybrid approach - if [ '$(pythonVersion)' = '3.12' ]; then - # Use pre-available Python 3.12 from Alpine packages - echo 'Using pre-available Python 3.12 from Alpine packages' - apk add --no-cache py3-pip python3-dev - - # Create symlinks for Python compatibility - ln -sf python3 /usr/bin/python || true - ln -sf pip3 /usr/bin/pip || true - else - # Build Python from source for other versions (3.10, 3.11, 3.13) - echo 'Building Python $(pythonVersion) from source for Alpine Linux' - apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev linux-headers - - # Download and compile Python from source - cd /tmp - wget https://www.python.org/ftp/python/$(pythonVersion).1/Python-$(pythonVersion).1.tgz - tar xzf Python-$(pythonVersion).1.tgz - cd Python-$(pythonVersion).1 - - # Configure and build Python - Alpine/musl specific configuration with ARM64 stability - # Set cache variables to help configure detect musl libc types correctly - export ac_cv_file__dev_ptmx=yes - export ac_cv_file__dev_ptc=no - export ac_cv_have_long_long_format=yes - # Fix LONG_BIT detection for musl libc on ARM64 - export ac_cv_sizeof_long=8 - export ac_cv_sizeof_size_t=8 - export ac_cv_sizeof_pid_t=4 - export ac_cv_sizeof_void_p=8 - # Fix float word ordering detection for ARM64 - export ax_cv_c_float_words_bigendian=no - - # Set ultra-conservative compiler flags for Alpine ARM64 to prevent GCC segfaults - echo 'Setting ultra-conservative compiler flags for Alpine ARM64 GCC stability' - export CFLAGS='-DLONG_BIT=64 -O0 -g -fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations -fno-builtin -fno-inline' - export CXXFLAGS='-O0 -g -fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations' - export OPT='-DNDEBUG -g -O0' - export EXTRA_CFLAGS='-fno-strict-overflow -fno-delete-null-pointer-checks' - - ./configure \ - --prefix=/usr/local \ - --enable-shared \ - --with-ensurepip=install \ - --disable-ipv6 \ - --build=aarch64-alpine-linux-musl \ - --host=aarch64-alpine-linux-musl \ - --target=aarch64-alpine-linux-musl \ - CPPFLAGS='-I/usr/include -DLONG_BIT=64' \ - LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' - - # Build Python with extreme stability measures for Alpine ARM64 - echo 'Building Python $(pythonVersion) with ARM64 stability measures for Alpine/musl' - - # Use single-threaded make to reduce memory pressure and avoid GCC crashes - echo 'Using single-threaded build to prevent GCC segmentation faults on ARM64' - make 2>&1 | tee /tmp/make.log - - # Check for critical compilation failures (GCC segfaults, etc.) - if grep -q "internal compiler error\|Segmentation fault\|collect2.*Error" /tmp/make.log; then - echo "CRITICAL: GCC segmentation fault or internal compiler error detected!" - echo "Build cannot continue with corrupted compilation. Exiting." - grep -A2 -B2 "internal compiler error\|Segmentation fault\|collect2.*Error" /tmp/make.log - exit 1 - fi - - # Check if Python binary was successfully built - if [ ! -f "./python" ]; then - echo "CRITICAL: Python binary was not built successfully" - exit 1 - fi - - echo 'Installing Python...' - make altinstall 2>&1 | tee /tmp/install.log - - # Check if essential files were installed - CRITICAL validation - echo "Checking Python installation files:" - ls -la /usr/local/bin/python$(pythonVersion) || { echo "ERROR: Python binary not installed"; exit 1; } - - # Critical check: encodings directory MUST exist for Python to work - if [ ! -d "/usr/local/lib/python$(pythonVersion)/encodings" ]; then - echo "CRITICAL ERROR: encodings directory not found!" - echo "Python installation is incomplete and unusable." - echo "Available lib contents:" - ls -la /usr/local/lib/python$(pythonVersion)/ 2>/dev/null || echo "Python lib directory doesn't exist" - exit 1 - fi - echo "✓ Encodings directory found" - - # Set up environment for proper Python operation with correct paths - export PYTHONHOME=/usr/local - export PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload:/usr/local/lib/python$(pythonVersion)/site-packages" - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - - # Create symlinks for easier access - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip - - # Set up persistent environment variables for source-compiled Python - echo 'export PYTHONHOME=/usr/local' >> /etc/profile - echo 'export PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload:/usr/local/lib/python$(pythonVersion)/site-packages"' >> /etc/profile - echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile - - # Also set environment variables for the current session - export PYTHONHOME=/usr/local - export PYTHONPATH="/usr/local/lib/python$(pythonVersion):/usr/local/lib/python$(pythonVersion)/lib-dynload:/usr/local/lib/python$(pythonVersion)/site-packages" - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - - # CRITICAL: Validate Python actually works before proceeding - echo 'Performing critical Python functionality tests:' - - # Test 1: Basic version check - /usr/local/bin/python$(pythonVersion) --version || { - echo "CRITICAL: Python version check failed" - exit 1 - } - echo "✓ Python version check passed" - - # Test 2: Encodings module (this was failing in the log) - /usr/local/bin/python$(pythonVersion) -c "import encodings; print('Encodings module: OK')" || { - echo "CRITICAL: Encodings module test failed" - echo "Python installation is incomplete and cannot be used" - exit 1 - } - echo "✓ Encodings module test passed" - - # Test 3: SSL module (important for pip) - /usr/local/bin/python$(pythonVersion) -c "import ssl; print('SSL module: OK')" || { - echo "WARNING: SSL module not available - pip may not work" - } - - echo '✓ All critical Python tests passed - installation successful' - - # Clean up build files - cd / - rm -rf /tmp/Python-$(pythonVersion).1* - fi - - # Verify installation and architecture - echo 'Architecture:' \$(uname -m) - echo 'Alpine version:' \$(cat /etc/alpine-release) - python --version - which cmake - " + # Create installation script for Debian + cat > install_debian.sh << 'EOF' + #!/bin/bash + set -e + export DEBIAN_FRONTEND=noninteractive + export TZ=UTC + ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + + apt-get update + apt-get install -y software-properties-common curl wget gnupg build-essential cmake + + # Install Python 3.13 from source + apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \ + libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \ + libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev \ + libgdbm-dev libnss3-dev libedit-dev + + cd /tmp + wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz + tar -xzf Python-3.13.1.tgz + cd Python-3.13.1 + + if [ "$(uname -m)" = "aarch64" ]; then + export CFLAGS="-O1 -g" + export CXXFLAGS="-O1 -g" + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions else - # RHEL/DNF - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Enable CodeReady Builder repository for additional packages (skip if not available) - dnf install -y dnf-plugins-core || true - dnf install -y epel-release || echo 'EPEL not available in UBI9, continuing without it' - dnf config-manager --set-enabled crb || dnf config-manager --set-enabled powertools || echo 'No additional repos to enable' - - # Install dependencies - dnf update -y - dnf groupinstall -y 'Development Tools' || echo 'Development Tools group not available, installing individual packages' - - # Install development tools and cmake separately to ensure they work - # Note: Handle curl conflicts by replacing curl-minimal with curl - dnf install -y wget gnupg2 glibc-devel kernel-headers - dnf install -y --allowerasing curl || dnf install -y curl || echo 'curl installation failed, continuing' - dnf install -y gcc gcc-c++ make binutils - dnf install -y cmake - - # Install additional dependencies needed for Python source compilation - # Some packages may not be available in UBI9, so install what we can - dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel || echo 'Some core devel packages failed' - dnf install -y ncurses-devel sqlite-devel xz-devel || echo 'Some optional devel packages not available' - # These are often missing in UBI9, install if available - dnf install -y readline-devel tk-devel gdbm-devel libnsl2-devel libuuid-devel || echo 'Some Python build dependencies not available in UBI9' - - # If that doesn't work, try installing from different repositories - if ! which gcc; then - echo 'Trying alternative gcc installation...' - dnf --enablerepo=ubi-9-codeready-builder install -y gcc gcc-c++ - fi - - # For RHEL, we need to handle Python versions more carefully - # RHEL 9 UBI has python3.9 by default, but we don't support 3.9 - # We need to install specific versions or build from source - - # First, try to install the specific Python version - PYTHON_INSTALLED=false - echo 'Trying to install Python $(pythonVersion) from available repositories' - # Try from default repos first - if dnf install -y python$(pythonVersion) python$(pythonVersion)-devel python$(pythonVersion)-pip; then - echo 'Successfully installed Python $(pythonVersion) from default repos' - PYTHON_INSTALLED=true - # Create symlinks for the specific version - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python - else - echo 'Python $(pythonVersion) not available in default RHEL repos' - # For Python 3.11+ which might be available in newer RHEL versions - if [ '$(pythonVersion)' = '3.11' ] || [ '$(pythonVersion)' = '3.12' ]; then - echo 'Trying alternative installation for Python $(pythonVersion)' - # Try installing from additional repos - dnf install -y python$(pythonVersion) python$(pythonVersion)-devel python$(pythonVersion)-pip || true - if command -v python$(pythonVersion) >/dev/null 2>&1; then - echo 'Found Python $(pythonVersion) after alternative installation' - PYTHON_INSTALLED=true - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python - fi - elif [ '$(pythonVersion)' = '3.10' ] || [ '$(pythonVersion)' = '3.13' ]; then - echo 'Python $(pythonVersion) requires building from source' - - # Download Python source - cd /tmp - if [ '$(pythonVersion)' = '3.10' ]; then - PYTHON_URL='https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tgz' - elif [ '$(pythonVersion)' = '3.13' ]; then - PYTHON_URL='https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz' - fi - - echo \"Downloading Python from \$PYTHON_URL\" - wget \$PYTHON_URL -O python-$(pythonVersion).tgz - tar -xzf python-$(pythonVersion).tgz - cd Python-$(pythonVersion)* - - # Configure and compile Python with optimizations disabled for missing deps - echo 'Configuring Python build (optimizations may be disabled due to missing dependencies)' - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr - - echo 'Compiling Python (this may take several minutes)' - make -j\$\$(nproc) - - echo 'Installing Python' - make altinstall - - # Create symlinks - altinstall creates python3.13, we create python symlink - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - - # Verify installation and SSL support - /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL support in Python:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' - PYTHON_INSTALLED=true - - # Clean up - cd / - rm -rf /tmp/Python-$(pythonVersion)* /tmp/python-$(pythonVersion).tgz - - echo 'Successfully built and installed Python $(pythonVersion) from source' - fi - fi - - # If we couldn't install the specific version, fail the build - if [ \"\$PYTHON_INSTALLED\" = \"false\" ]; then - echo 'ERROR: Could not install Python $(pythonVersion) - unsupported version' - echo 'Supported versions for RHEL: 3.11, 3.12 (and 3.10, 3.13 via source compilation)' - exit 1 - fi - - # Install pybind11 development headers - dnf install -y python3-pybind11-devel || echo 'pybind11-devel not available, will install via pip' - - # Verify installations - echo 'Verifying installations:' - python3 --version - which gcc && which g++ - gcc --version - g++ --version - cmake --version || echo 'cmake not found in PATH' - which cmake || echo 'cmake binary not found' - " + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations fi - displayName: 'Install basic dependencies in $(distroName) $(targetArch) container' + + make -j$(nproc) + make altinstall + ln -sf /usr/local/bin/python3.13 /usr/local/bin/python + + # Install pip + curl -sS https://bootstrap.pypa.io/get-pip.py | /usr/local/bin/python3.13 + + # Verify installation + /usr/local/bin/python3.13 --version + EOF + chmod +x install_debian.sh + displayName: 'Create Debian installation script' + condition: eq(variables['distroName'], 'Debian') - script: | - # Install ODBC driver in the container - if [ "$(packageManager)" = "apt" ]; then - # Ubuntu/Debian - docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive - - # Download the package to configure the Microsoft repo - if [ '$(distroName)' = 'Ubuntu' ]; then - curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb - else - # Debian 12 - curl -sSL -O https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb - fi - - # Install the package - dpkg -i packages-microsoft-prod.deb || true - rm packages-microsoft-prod.deb - - # Update package list - apt-get update - - # Install the driver - ACCEPT_EULA=Y apt-get install -y msodbcsql18 - # optional: for bcp and sqlcmd - ACCEPT_EULA=Y apt-get install -y mssql-tools18 - # optional: for unixODBC development headers - apt-get install -y unixodbc-dev - " - elif [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Detect architecture for ODBC driver download - case \$(uname -m) in - x86_64) architecture='amd64' ;; - arm64|aarch64) architecture='arm64' ;; - *) architecture='unsupported' ;; - esac - - if [[ 'unsupported' == '\$architecture' ]]; then - echo 'Alpine architecture \$(uname -m) is not currently supported.' - exit 1 - fi - - echo 'Detected architecture: '\$architecture - - # Download the packages - curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.apk - curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.apk - - # Download signatures for verification - curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.sig - curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.sig - - # Import Microsoft GPG key and verify packages - curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - - gpg --verify msodbcsql18_18.5.1.1-1_\$architecture.sig msodbcsql18_18.5.1.1-1_\$architecture.apk - gpg --verify mssql-tools18_18.4.1.1-1_\$architecture.sig mssql-tools18_18.4.1.1-1_\$architecture.apk - - # Install the packages - apk add --allow-untrusted msodbcsql18_18.5.1.1-1_\$architecture.apk - apk add --allow-untrusted mssql-tools18_18.4.1.1-1_\$architecture.apk - - # Cleanup - rm -f msodbcsql18_18.5.1.1-1_\$architecture.* mssql-tools18_18.4.1.1-1_\$architecture.* - - # Add mssql-tools to PATH - export PATH=\"\$PATH:/opt/mssql-tools18/bin\" - echo 'export PATH=\"\$PATH:/opt/mssql-tools18/bin\"' >> ~/.bashrc - " - else - # RHEL/DNF - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Add Microsoft repository for RHEL 9 - curl -sSL -O https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm - rpm -Uvh packages-microsoft-prod.rpm - rm packages-microsoft-prod.rpm - - # Update package list - dnf update -y - - # Install the driver - ACCEPT_EULA=Y dnf install -y msodbcsql18 - # optional: for bcp and sqlcmd - ACCEPT_EULA=Y dnf install -y mssql-tools18 - # optional: for unixODBC development headers - dnf install -y unixODBC-devel - " - fi - displayName: 'Install ODBC Driver in $(distroName) $(targetArch) container' + # Create installation script for RHEL + cat > install_rhel.sh << 'EOF' + #!/bin/bash + set -e + + dnf update -y + dnf groupinstall -y 'Development Tools' + dnf install -y wget gnupg2 glibc-devel kernel-headers gcc gcc-c++ make binutils cmake + dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel + + # Build Python 3.13 from source + cd /tmp + wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz + tar -xzf Python-3.13.1.tgz + cd Python-3.13.1 + + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions + make -j$(nproc) + make altinstall + ln -sf /usr/local/bin/python3.13 /usr/local/bin/python + + # Verify installation + /usr/local/bin/python3.13 --version + EOF + chmod +x install_rhel.sh + displayName: 'Create RHEL installation script' + condition: eq(variables['distroName'], 'RHEL') - script: | - # Install Python dependencies in the container using virtual environment - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Determine which Python command to use - # Set up Python environment before determining command - if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then - # For source-compiled Python on Alpine, set environment variables - export PYTHONHOME=/usr/local - export PYTHONPATH=/usr/local/lib/python$(pythonVersion) - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - fi - - if [ '$(packageManager)' = 'apk' ]; then - # Alpine Linux - check if we built from source or used pre-installed - if [ '$(pythonVersion)' = '3.12' ]; then - # Using pre-installed Python 3.12 - PYTHON_CMD=python3 - else - # Using source-compiled Python - if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - elif command -v python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=python$(pythonVersion) - else - echo 'No Python $(pythonVersion) interpreter found after source compilation' - exit 1 - fi - fi - else - # Ubuntu/Debian/RHEL - determine the best Python command - if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - elif command -v python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=python$(pythonVersion) - elif command -v python3 >/dev/null 2>&1; then - PYTHON_CMD=python3 - else - echo 'No Python interpreter found' - exit 1 - fi - fi - - echo 'Selected Python command:' \$PYTHON_CMD - - # CRITICAL: Validate Python command works before proceeding - echo 'Validating Python command before creating virtual environment:' - \$PYTHON_CMD --version || { - echo "CRITICAL: Selected Python command \$PYTHON_CMD failed" - echo "Available Python executables:" - find /usr -name "python*" -type f 2>/dev/null | head -10 - exit 1 - } + # Create installation script for Alpine + cat > install_alpine.sh << 'EOF' + #!/bin/sh + set -e + + apk update + apk add --no-cache build-base cmake clang git bash wget curl gnupg \ + unixodbc unixodbc-dev libffi-dev openssl-dev zlib-dev patchelf + + # Handle Python installation + PYTHON_VERSION=$1 + + if [ "$PYTHON_VERSION" = "3.12" ]; then + # Use pre-installed Python 3.12 + apk add --no-cache py3-pip python3-dev + ln -sf python3 /usr/bin/python || true + ln -sf pip3 /usr/bin/pip || true + else + # Build from source + apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev \ + gdbm-dev db-dev bzip2-dev xz-dev linux-headers - # Test encodings module before creating venv (this was failing) - \$PYTHON_CMD -c "import encodings" || { - echo "CRITICAL: Python encodings module not available" - echo "Cannot create virtual environment with broken Python installation" - exit 1 - } - echo "✓ Python validation passed" + cd /tmp + wget https://www.python.org/ftp/python/${PYTHON_VERSION}.1/Python-${PYTHON_VERSION}.1.tgz + tar xzf Python-${PYTHON_VERSION}.1.tgz + cd Python-${PYTHON_VERSION}.1 - # Create virtual environment at consistent path - echo 'Creating virtual environment...' - \$PYTHON_CMD -m venv /workspace/venv || { - echo "CRITICAL: Failed to create virtual environment" - echo "Python command: \$PYTHON_CMD" - \$PYTHON_CMD -c "import venv" || echo "venv module not available" - exit 1 - } + # Configure for Alpine/musl + export CFLAGS="-O0 -g" + export CXXFLAGS="-O0 -g" - source /workspace/venv/bin/activate || { - echo "CRITICAL: Failed to activate virtual environment" - echo "Virtual environment files:" - ls -la /workspace/venv/ 2>/dev/null || echo "Virtual environment directory doesn't exist" - exit 1 - } + ./configure --prefix=/usr/local --enable-shared --with-ensurepip=install \ + --disable-ipv6 --build=aarch64-alpine-linux-musl - # Verify virtual environment is working - echo 'Virtual environment activated:' - echo 'Python executable:' \$(which python) - echo 'Python version in venv:' \$(python --version) + # Single-threaded build for stability + make + make altinstall - # Upgrade pip and install dependencies - python -m pip install --upgrade pip - python -m pip install pybind11 - python -m pip install -r requirements.txt - python -m pip install wheel setuptools + ln -sf /usr/local/bin/python${PYTHON_VERSION} /usr/local/bin/python - # Verify installation - echo 'Python version in venv:' \$(python --version) - echo 'Python executable:' \$(which python) - echo 'Pip version:' \$(pip --version) - " - displayName: 'Install Python dependencies in $(distroName) $(targetArch) container' + # Set up environment + export PYTHONHOME=/usr/local + export PYTHONPATH="/usr/local/lib/python${PYTHON_VERSION}" + export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH + fi + + python --version + EOF + chmod +x install_alpine.sh + displayName: 'Create Alpine installation script' + condition: eq(variables['distroName'], 'alpine') + # Copy and execute the appropriate installation script - script: | - # Build pybind bindings in the container - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Validate virtual environment exists before attempting to activate - if [ ! -f '/workspace/venv/bin/activate' ]; then - echo 'CRITICAL: Virtual environment not found!' - echo 'This indicates the Python dependencies installation step failed.' - echo 'Available files in /workspace:' - ls -la /workspace/ 2>/dev/null || echo 'Workspace directory not accessible' - exit 1 - fi - - # Activate virtual environment - source /workspace/venv/bin/activate || { - echo 'CRITICAL: Failed to activate virtual environment' - exit 1 - } - - echo 'Building pybind bindings for $(distroName) $(targetArch)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - - # Verify build tools (for RHEL debugging) - if [ '$(packageManager)' = 'dnf' ]; then - echo 'CMake status:' - cmake --version || echo 'cmake not available' - fi - - cd mssql_python/pybind - chmod +x build.sh - ./build.sh - " - displayName: 'Build pybind bindings (.so) in $(distroName) $(targetArch) container' - + if [ "$(distroName)" = "Debian" ]; then + docker cp install_debian.sh build-container-$(distroName)-$(targetArch):/tmp/ + docker exec build-container-$(distroName)-$(targetArch) bash /tmp/install_debian.sh + elif [ "$(distroName)" = "RHEL" ]; then + docker cp install_rhel.sh build-container-$(distroName)-$(targetArch):/tmp/ + docker exec build-container-$(distroName)-$(targetArch) bash /tmp/install_rhel.sh + elif [ "$(distroName)" = "alpine" ]; then + docker cp install_alpine.sh build-container-$(distroName)-$(targetArch):/tmp/ + docker exec build-container-$(distroName)-$(targetArch) sh /tmp/install_alpine.sh $(pythonVersion) + fi + displayName: 'Install dependencies in $(distroName) $(targetArch) container' + + # Install ODBC driver - script: | - # Uninstall ODBC Driver before running tests - if [ "$(packageManager)" = "apt" ]; then - # Ubuntu/Debian - docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive - apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /lib/x86_64-linux-gnu/libodbcinst.so.2 - rm -f /lib/aarch64-linux-gnu/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) debian_ubuntu driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - elif [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) bash -c " - apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'Some packages were not installed' - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /usr/lib/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) alpine driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " + cat > install_odbc.sh << 'EOF' + #!/bin/bash + set -e + + PACKAGE_MANAGER=$1 + DISTRO_NAME=$2 + + if [ "$PACKAGE_MANAGER" = "apt" ]; then + export DEBIAN_FRONTEND=noninteractive + if [ "$DISTRO_NAME" = "Ubuntu" ]; then + curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb + else + curl -sSL -O https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb + fi + dpkg -i packages-microsoft-prod.deb || true + rm packages-microsoft-prod.deb + apt-get update + ACCEPT_EULA=Y apt-get install -y msodbcsql18 mssql-tools18 unixodbc-dev + elif [ "$PACKAGE_MANAGER" = "apk" ]; then + case $(uname -m) in + x86_64) architecture='amd64' ;; + arm64|aarch64) architecture='arm64' ;; + *) echo "Unsupported architecture"; exit 1 ;; + esac + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_${architecture}.apk + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_${architecture}.apk + apk add --allow-untrusted msodbcsql18_18.5.1.1-1_${architecture}.apk + apk add --allow-untrusted mssql-tools18_18.4.1.1-1_${architecture}.apk + rm -f *.apk else - # RHEL/DNF - docker exec build-container-$(distroName)-$(targetArch) bash -c " - dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /lib64/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) rhel driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " + # RHEL + curl -sSL -O https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm + rpm -Uvh packages-microsoft-prod.rpm + rm packages-microsoft-prod.rpm + dnf update -y + ACCEPT_EULA=Y dnf install -y msodbcsql18 mssql-tools18 unixODBC-devel fi - displayName: 'Uninstall ODBC Driver before running tests in $(distroName) $(targetArch) container' + EOF + chmod +x install_odbc.sh + docker cp install_odbc.sh build-container-$(distroName)-$(targetArch):/tmp/ + docker exec build-container-$(distroName)-$(targetArch) bash /tmp/install_odbc.sh $(packageManager) $(distroName) + displayName: 'Install ODBC Driver' + # Install Python dependencies and build + - script: | + cat > build_package.sh << 'EOF' + #!/bin/bash + set -e + + # Set up environment for Alpine if needed + if [ -f /etc/alpine-release ] && [ "$1" != "3.12" ]; then + export PYTHONHOME=/usr/local + export PYTHONPATH="/usr/local/lib/python$1" + export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH + fi + + # Find Python command + if command -v /usr/local/bin/python3.13 >/dev/null 2>&1; then + PYTHON_CMD=/usr/local/bin/python3.13 + elif command -v /usr/local/bin/python$1 >/dev/null 2>&1; then + PYTHON_CMD=/usr/local/bin/python$1 + elif command -v python3 >/dev/null 2>&1; then + PYTHON_CMD=python3 + else + echo "No Python interpreter found" + exit 1 + fi + + echo "Using Python: $PYTHON_CMD" + $PYTHON_CMD --version + + # Create virtual environment + $PYTHON_CMD -m venv /workspace/venv + source /workspace/venv/bin/activate + + # Install dependencies + python -m pip install --upgrade pip + python -m pip install pybind11 wheel setuptools + python -m pip install -r requirements.txt + + # Build the bindings + cd mssql_python/pybind + chmod +x build.sh + ./build.sh + + # Build the wheel + cd /workspace + python setup.py bdist_wheel + ls -la dist/ + EOF + chmod +x build_package.sh + docker cp build_package.sh build-container-$(distroName)-$(targetArch):/tmp/ + docker exec build-container-$(distroName)-$(targetArch) bash /tmp/build_package.sh $(pythonVersion) + displayName: 'Build package' + + # Run tests - script: | - # Run tests in the container - # Get SQL Server container IP SQLSERVER_IP=$(docker inspect sqlserver-$(distroName)-$(targetArch) --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') echo "SQL Server IP: $SQLSERVER_IP" + cat > run_tests.sh << 'EOF' + #!/bin/bash + set -e + + # Set up environment for Alpine if needed + if [ -f /etc/alpine-release ] && [ "$1" != "3.12" ]; then + export PYTHONHOME=/usr/local + export PYTHONPATH="/usr/local/lib/python$1" + export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH + fi + + source /workspace/venv/bin/activate + + # Remove system ODBC driver to test with bundled one + if command -v apt-get >/dev/null 2>&1; then + apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev || true + elif command -v apk >/dev/null 2>&1; then + apk del msodbcsql18 mssql-tools18 unixodbc-dev || true + else + dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel || true + fi + + echo "Running tests..." + python -m pytest -v --junitxml=test-results.xml --cov=. --cov-report=xml:coverage.xml + EOF + chmod +x run_tests.sh + docker cp run_tests.sh build-container-$(distroName)-$(targetArch):/tmp/ + docker exec \ -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ -e DB_PASSWORD="$(DB_PASSWORD)" \ - build-container-$(distroName)-$(targetArch) bash -c " - # Set environment for source-compiled Python on Alpine - if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then - export PYTHONHOME=/usr/local - export PYTHONPATH=/usr/local/lib/python$(pythonVersion) - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - fi - - source /workspace/venv/bin/activate - echo 'Build successful, running tests now on $(distroName) $(targetArch)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - echo 'Using connection string: Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=***;TrustServerCertificate=yes' - python -m pytest -v --junitxml=test-results-$(distroName)-$(targetArch).xml --cov=. --cov-report=xml:coverage-$(distroName)-$(targetArch).xml --capture=tee-sys --cache-clear - " - displayName: 'Run pytest with coverage in $(distroName) $(targetArch) container' + build-container-$(distroName)-$(targetArch) bash /tmp/run_tests.sh $(pythonVersion) + displayName: 'Run tests' env: DB_PASSWORD: $(DB_PASSWORD) + # Copy artifacts - script: | - # Build wheel package in the container - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Set environment for source-compiled Python on Alpine - if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then - export PYTHONHOME=/usr/local - export PYTHONPATH=/usr/local/lib/python$(pythonVersion) - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - fi - - source /workspace/venv/bin/activate - echo 'Building wheel for $(distroName) $(targetArch) Python $(pythonVersion)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - python -m pip install --upgrade pip wheel setuptools - python setup.py bdist_wheel - - # Verify the wheel was created - ls -la dist/ - " - displayName: 'Build wheel package in $(distroName) $(targetArch) container' - - - script: | - # Copy test results from container to host - docker cp build-container-$(distroName)-$(targetArch):/workspace/test-results-$(distroName)-$(targetArch).xml $(Build.SourcesDirectory)/ - docker cp build-container-$(distroName)-$(targetArch):/workspace/coverage-$(distroName)-$(targetArch).xml $(Build.SourcesDirectory)/ + docker cp build-container-$(distroName)-$(targetArch):/workspace/test-results.xml $(Build.SourcesDirectory)/test-results-$(distroName)-$(targetArch).xml || true + docker cp build-container-$(distroName)-$(targetArch):/workspace/coverage.xml $(Build.SourcesDirectory)/coverage-$(distroName)-$(targetArch).xml || true - # Copy wheel files from container to host mkdir -p $(Build.ArtifactStagingDirectory)/dist - docker cp build-container-$(distroName)-$(targetArch):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || echo "Failed to copy dist directory" + docker cp build-container-$(distroName)-$(targetArch):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || true - # Copy .so files from container to host mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch) - docker cp build-container-$(distroName)-$(targetArch):/workspace/mssql_python/ddbc_bindings.cp$(shortPyVer)-$(targetArch).so $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch)/ || echo "Failed to copy .so files" - displayName: 'Copy results and artifacts from $(distroName) $(targetArch) container' + docker cp build-container-$(distroName)-$(targetArch):/workspace/mssql_python/ddbc_bindings.cp$(shortPyVer)-$(targetArch).so $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch)/ || true + displayName: 'Copy artifacts' condition: always() + # Cleanup - script: | - # Clean up containers docker stop build-container-$(distroName)-$(targetArch) || true docker rm build-container-$(distroName)-$(targetArch) || true docker stop sqlserver-$(distroName)-$(targetArch) || true docker rm sqlserver-$(distroName)-$(targetArch) || true - displayName: 'Clean up $(distroName) $(targetArch) containers' + displayName: 'Cleanup' condition: always() + # Publish results - task: PublishTestResults@2 condition: succeededOrFailed() inputs: testResultsFiles: '**/test-results-$(distroName)-$(targetArch).xml' - testRunTitle: 'Publish pytest results on $(distroName) $(targetArch)' + testRunTitle: 'Test results for $(distroName) $(targetArch)' - task: PublishBuildArtifacts@1 condition: succeededOrFailed() @@ -1494,7 +786,6 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' ArtifactName: 'mssql-python-ddbc-bindings' publishLocation: 'Container' - displayName: 'Publish .so files as artifacts' - task: PublishBuildArtifacts@1 condition: succeededOrFailed() @@ -1502,4 +793,3 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' ArtifactName: 'mssql-python-wheels-dist' publishLocation: 'Container' - displayName: 'Publish wheels as artifacts' From c0138c34c19e0a56c99328075ebd9f380c25e014 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Fri, 8 Aug 2025 00:17:34 +0530 Subject: [PATCH 45/93] restored and optimized --- eng/pipelines/build-whl-pipeline.yml | 1131 ++++++++++++++++++++------ 1 file changed, 867 insertions(+), 264 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 4171d76e8..e4b8bd0bb 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -1,17 +1,20 @@ +# Pipeline name shown in ADO UI name: build-whl-pipeline +# Trigger the pipeline on changes to the main branch trigger: branches: include: - main +# Schedule the pipeline to run on main branch daily at 07:00 AM IST schedules: - cron: "30 1 * * *" displayName: Daily run at 07:00 AM IST branches: include: - main - always: true + always: true # Always run even if there are no changes jobs: # - job: BuildWindowsWheels @@ -372,6 +375,170 @@ jobs: strategy: matrix: + # Python 3.10 (x86_64 and ARM64) + # py310_x86_64_ubuntu: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py310_arm64_ubuntu: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py310_x86_64_debian: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py310_arm64_debian: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py310_x86_64_rhel: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # buildFromSource: 'true' + # py310_arm64_rhel: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # buildFromSource: 'true' + + # # Python 3.11 (x86_64 and ARM64) + # py311_x86_64_ubuntu: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py311_arm64_ubuntu: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py311_x86_64_debian: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py311_arm64_debian: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py311_x86_64_rhel: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # py311_arm64_rhel: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + + # # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA + # # Only build for Debian and RHEL where Python 3.12 is available + # py312_x86_64_debian: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py312_arm64_debian: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py312_x86_64_rhel: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # py312_arm64_rhel: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + + # # Python 3.13 (x86_64 and ARM64) + # py313_x86_64_ubuntu: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py313_arm64_ubuntu: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + + # Python 3.13 (x86_64 and ARM64) - Built from source for Debian and RHEL (not available via package managers) + py313_x86_64_debian: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'debian:12' + distroName: 'Debian' + packageManager: 'apt' py313_arm64_debian: pythonVersion: '3.13' shortPyVer: '313' @@ -380,6 +547,15 @@ jobs: dockerImage: 'debian:12' distroName: 'Debian' packageManager: 'apt' + py313_x86_64_rhel: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + distroName: 'RHEL' + packageManager: 'dnf' + buildFromSource: 'true' py313_arm64_rhel: pythonVersion: '3.13' shortPyVer: '313' @@ -388,6 +564,17 @@ jobs: dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' distroName: 'RHEL' packageManager: 'dnf' + buildFromSource: 'true' + + # Alpine Linux (x86_64 and ARM64) + py310_x86_64_alpine: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' py310_arm64_alpine: pythonVersion: '3.10' shortPyVer: '310' @@ -396,6 +583,14 @@ jobs: dockerImage: 'alpine:latest' distroName: 'alpine' packageManager: 'apk' + py311_x86_64_alpine: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' py311_arm64_alpine: pythonVersion: '3.11' shortPyVer: '311' @@ -404,6 +599,14 @@ jobs: dockerImage: 'alpine:latest' distroName: 'alpine' packageManager: 'apk' + py312_x86_64_alpine: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' py312_arm64_alpine: pythonVersion: '3.12' shortPyVer: '312' @@ -412,6 +615,14 @@ jobs: dockerImage: 'alpine:latest' distroName: 'alpine' packageManager: 'apk' + py313_x86_64_alpine: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' py313_arm64_alpine: pythonVersion: '3.13' shortPyVer: '313' @@ -422,13 +633,15 @@ jobs: packageManager: 'apk' steps: + # Set up Docker buildx for multi-architecture support - script: | docker run --rm --privileged multiarch/qemu-user-static --reset -p yes docker buildx create --name multiarch --driver docker-container --use || true docker buildx inspect --bootstrap - displayName: 'Setup Docker buildx' + displayName: 'Setup Docker buildx for multi-architecture support' - script: | + # Create a Docker container for building docker run -d --name build-container-$(distroName)-$(targetArch) \ --platform $(dockerPlatform) \ -v $(Build.SourcesDirectory):/workspace \ @@ -439,6 +652,7 @@ jobs: displayName: 'Create $(distroName) $(targetArch) container' - script: | + # Start SQL Server container (always x86_64 since SQL Server doesn't support ARM64) docker run -d --name sqlserver-$(distroName)-$(targetArch) \ --platform linux/amd64 \ -e ACCEPT_EULA=Y \ @@ -446,6 +660,7 @@ jobs: -p 1433:1433 \ mcr.microsoft.com/mssql/server:2022-latest + # Wait for SQL Server to be ready echo "Waiting for SQL Server to start..." for i in {1..60}; do if docker exec sqlserver-$(distroName)-$(targetArch) \ @@ -461,324 +676,710 @@ jobs: sleep 2 done + # Create test database docker exec sqlserver-$(distroName)-$(targetArch) \ /opt/mssql-tools18/bin/sqlcmd \ -S localhost \ -U SA \ -P "$(DB_PASSWORD)" \ -C -Q "CREATE DATABASE TestDB" - displayName: 'Start SQL Server container' + displayName: 'Start SQL Server container for $(distroName) $(targetArch)' env: DB_PASSWORD: $(DB_PASSWORD) - # Create setup scripts as files to avoid complex escaping - script: | - # Create installation script for Debian - cat > install_debian.sh << 'EOF' - #!/bin/bash - set -e - export DEBIAN_FRONTEND=noninteractive - export TZ=UTC - ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - - apt-get update - apt-get install -y software-properties-common curl wget gnupg build-essential cmake - - # Install Python 3.13 from source - apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \ - libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \ - libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev \ - libgdbm-dev libnss3-dev libedit-dev - - cd /tmp - wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz - tar -xzf Python-3.13.1.tgz - cd Python-3.13.1 - - if [ "$(uname -m)" = "aarch64" ]; then - export CFLAGS="-O1 -g" - export CXXFLAGS="-O1 -g" - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions + # Install dependencies in the container + if [ "$(packageManager)" = "apt" ]; then + # Ubuntu/Debian + docker exec build-container-$(distroName)-$(targetArch) bash -c " + export DEBIAN_FRONTEND=noninteractive + export TZ=UTC + ln -snf /usr/share/zoneinfo/\$TZ /etc/localtime && echo \$TZ > /etc/timezone + + # Update package lists + apt-get update + + # Install basic tools first + apt-get install -y software-properties-common curl wget gnupg build-essential cmake + + # Add deadsnakes PPA for newer Python versions (Ubuntu only) + if [ '$(distroName)' = 'Ubuntu' ]; then + add-apt-repository -y ppa:deadsnakes/ppa + apt-get update + fi + + # Install Python and development packages + # Handle different Python version availability per distribution + if [ '$(distroName)' = 'Debian' ]; then + # Debian 12 has Python 3.11 by default, some older/newer versions may not be available + case '$(pythonVersion)' in + '3.11') + # Python 3.11 is the default in Debian 12 + apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils + PYTHON_CMD=python$(pythonVersion) + ;; + '3.10'|'3.12') + # These versions may not be available in Debian 12, use python3 and create symlinks + echo 'Python $(pythonVersion) may not be available in Debian 12, using available python3' + apt-get install -y python3 python3-dev python3-venv + # Note: distutils is not available for Python 3.12+ + if [ '$(pythonVersion)' != '3.12' ]; then + apt-get install -y python3-distutils || echo 'distutils not available for this Python version' + fi + # Create symlinks to make the desired version available + # Find the actual python3 version and create proper symlinks + ACTUAL_PYTHON=\$(python3 --version | grep -o '[0-9]\+\.[0-9]\+') + echo 'Detected Python version:' \$ACTUAL_PYTHON + ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python3 /usr/local/bin/python + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + ;; + '3.13') + # Python 3.13 requires building from source + echo 'Python $(pythonVersion) requires building from source' + echo 'DEBUG: pythonVersion = $(pythonVersion)' + + # Install dependencies needed for Python source compilation + apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev + apt-get install -y libreadline-dev libsqlite3-dev wget curl llvm + apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev + apt-get install -y libffi-dev liblzma-dev python3-openssl + apt-get install -y libgdbm-dev libnss3-dev libedit-dev || echo 'Some optional dependencies not available' + + # Verify SSL development libraries are installed + echo 'Verifying SSL development libraries:' + dpkg -l | grep libssl-dev || echo 'libssl-dev not found' + pkg-config --exists openssl && echo 'OpenSSL pkg-config found' || echo 'OpenSSL pkg-config missing' + + # Download Python source - fix version mismatch + cd /tmp + PYTHON_FULL_VERSION='3.13.1' + PYTHON_URL=\"https://www.python.org/ftp/python/\$PYTHON_FULL_VERSION/Python-\$PYTHON_FULL_VERSION.tgz\" + echo \"Downloading Python from \$PYTHON_URL\" + wget \$PYTHON_URL -O python-\$PYTHON_FULL_VERSION.tgz + tar -xzf python-\$PYTHON_FULL_VERSION.tgz + cd Python-\$PYTHON_FULL_VERSION + + # Configure and compile Python with SSL support explicitly enabled + echo 'Configuring Python build with SSL support' + # Disable optimizations for ARM64 builds to speed up compilation in emulated environment + if [ '$(targetArch)' = 'arm64' ]; then + echo 'ARM64 build detected - disabling optimizations for faster compilation' + # Disable compiler optimizations to prevent GCC ICE in emulated ARM64 + export CFLAGS="-O0 -fno-strict-overflow" + export CXXFLAGS="-O0" + export CPPFLAGS="" + + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr + + else + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr + fi + + make -j1 + make altinstall + + # Create symlinks - altinstall creates python3.13, we create python symlink + ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python + + # Verify installation and SSL support + echo 'Verifying Python 3.13 installation:' + ls -l /usr/local/bin/python$(pythonVersion) || echo 'ERROR: Python $(pythonVersion) not found' + /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL support in Python:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' + + # Clean up + cd / + rm -rf /tmp/Python-\$PYTHON_FULL_VERSION /tmp/python-\$PYTHON_FULL_VERSION.tgz + + echo 'Successfully built and installed Python $(pythonVersion) from source' + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + ;; + *) + echo 'Unsupported Python version $(pythonVersion) for Debian, using python3' + apt-get install -y python3 python3-dev python3-venv + ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python3 /usr/local/bin/python + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + ;; + esac + else + # Ubuntu has deadsnakes PPA, so more versions are available + # Note: distutils is not available for newer Python versions (3.12+) + if [ '$(pythonVersion)' = '3.12' ] || [ '$(pythonVersion)' = '3.13' ]; then + apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv + else + apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils + fi + # For Ubuntu, create symlinks for consistency + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + fi + + # Install pip for the specific Python version + curl -sS https://bootstrap.pypa.io/get-pip.py | \$PYTHON_CMD + + # Install remaining packages + apt-get install -y pybind11-dev || echo 'pybind11-dev not available, will install via pip' + + # Verify Python installation + echo 'Python installation verification:' + echo 'Using PYTHON_CMD:' \$PYTHON_CMD + \$PYTHON_CMD --version + if [ -f /usr/local/bin/python ]; then + /usr/local/bin/python --version + fi + " + elif [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) sh -c " + # Update package index + apk update + + # Install base build tools and system dependencies + apk add --no-cache \ + build-base \ + cmake \ + clang \ + git \ + bash \ + wget \ + curl \ + gnupg \ + unixodbc \ + unixodbc-dev \ + libffi-dev \ + openssl-dev \ + zlib-dev \ + patchelf + + # Python installation - hybrid approach + if [ '$(pythonVersion)' = '3.12' ]; then + # Use pre-available Python 3.12 from Alpine packages + echo 'Using pre-available Python 3.12 from Alpine packages' + apk add --no-cache py3-pip python3-dev + + # Create symlinks for Python compatibility + ln -sf python3 /usr/bin/python || true + ln -sf pip3 /usr/bin/pip || true + else + # Build Python from source for other versions (3.10, 3.11, 3.13) + echo 'Building Python $(pythonVersion) from source for Alpine Linux' + apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev linux-headers + + # Download and compile Python from source + cd /tmp + wget https://www.python.org/ftp/python/$(pythonVersion).1/Python-$(pythonVersion).1.tgz + tar xzf Python-$(pythonVersion).1.tgz + cd Python-$(pythonVersion).1 + + # Configure and build Python - Alpine/musl specific configuration + # Set cache variables to help configure detect musl libc types correctly + export ac_cv_file__dev_ptmx=yes + export ac_cv_file__dev_ptc=no + export ac_cv_have_long_long_format=yes + # Fix LONG_BIT detection for musl libc on ARM64 + export ac_cv_sizeof_long=8 + export ac_cv_sizeof_size_t=8 + export ac_cv_sizeof_pid_t=4 + export ac_cv_sizeof_void_p=8 + # Fix float word ordering detection for ARM64 + export ax_cv_c_float_words_bigendian=no + + ./configure \ + --prefix=/usr/local \ + --enable-shared \ + --with-ensurepip=install \ + --disable-ipv6 \ + --build=aarch64-alpine-linux-musl \ + --host=aarch64-alpine-linux-musl \ + --target=aarch64-alpine-linux-musl \ + CPPFLAGS='-I/usr/include -DLONG_BIT=64' \ + LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' \ + CFLAGS='-DLONG_BIT=64' + + # Build Python without optimizations to avoid gcc segfault on ARM64 + echo 'Building Python $(pythonVersion) without PGO optimizations to avoid compilation issues' + make -j\$(nproc) + + make altinstall + + # Set up environment for proper Python operation + export PYTHONHOME=/usr/local + export PYTHONPATH=/usr/local/lib/python$(pythonVersion) + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + + # Create symlinks for easier access + ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python + ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip + + # Set up persistent environment variables for source-compiled Python + echo 'export PYTHONHOME=/usr/local' >> /etc/profile + echo 'export PYTHONPATH=/usr/local/lib/python$(pythonVersion)' >> /etc/profile + echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile + + # Verify Python installation and modules + echo 'Verifying Python $(pythonVersion) installation:' + ls -la /usr/local/bin/python$(pythonVersion) + /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL and encodings support:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support: OK\")' + echo 'Python installation successful' + + # Clean up build files + cd / + rm -rf /tmp/Python-$(pythonVersion).1* + fi + + # Verify installation and architecture + echo 'Architecture:' \$(uname -m) + echo 'Alpine version:' \$(cat /etc/alpine-release) + python --version + which cmake + " else - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations + # RHEL/DNF + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Enable CodeReady Builder repository for additional packages (skip if not available) + dnf install -y dnf-plugins-core || true + dnf install -y epel-release || echo 'EPEL not available in UBI9, continuing without it' + dnf config-manager --set-enabled crb || dnf config-manager --set-enabled powertools || echo 'No additional repos to enable' + + # Install dependencies + dnf update -y + dnf groupinstall -y 'Development Tools' || echo 'Development Tools group not available, installing individual packages' + + # Install development tools and cmake separately to ensure they work + # Note: Handle curl conflicts by replacing curl-minimal with curl + dnf install -y wget gnupg2 glibc-devel kernel-headers + dnf install -y --allowerasing curl || dnf install -y curl || echo 'curl installation failed, continuing' + dnf install -y gcc gcc-c++ make binutils + dnf install -y cmake + + # Install additional dependencies needed for Python source compilation + # Some packages may not be available in UBI9, so install what we can + dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel || echo 'Some core devel packages failed' + dnf install -y ncurses-devel sqlite-devel xz-devel || echo 'Some optional devel packages not available' + # These are often missing in UBI9, install if available + dnf install -y readline-devel tk-devel gdbm-devel libnsl2-devel libuuid-devel || echo 'Some Python build dependencies not available in UBI9' + + # If that doesn't work, try installing from different repositories + if ! which gcc; then + echo 'Trying alternative gcc installation...' + dnf --enablerepo=ubi-9-codeready-builder install -y gcc gcc-c++ + fi + + # For RHEL, we need to handle Python versions more carefully + # RHEL 9 UBI has python3.9 by default, but we don't support 3.9 + # We need to install specific versions or build from source + + # First, try to install the specific Python version + PYTHON_INSTALLED=false + echo 'Trying to install Python $(pythonVersion) from available repositories' + # Try from default repos first + if dnf install -y python$(pythonVersion) python$(pythonVersion)-devel python$(pythonVersion)-pip; then + echo 'Successfully installed Python $(pythonVersion) from default repos' + PYTHON_INSTALLED=true + # Create symlinks for the specific version + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python + else + echo 'Python $(pythonVersion) not available in default RHEL repos' + # For Python 3.11+ which might be available in newer RHEL versions + if [ '$(pythonVersion)' = '3.11' ] || [ '$(pythonVersion)' = '3.12' ]; then + echo 'Trying alternative installation for Python $(pythonVersion)' + # Try installing from additional repos + dnf install -y python$(pythonVersion) python$(pythonVersion)-devel python$(pythonVersion)-pip || true + if command -v python$(pythonVersion) >/dev/null 2>&1; then + echo 'Found Python $(pythonVersion) after alternative installation' + PYTHON_INSTALLED=true + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python + fi + elif [ '$(pythonVersion)' = '3.10' ] || [ '$(pythonVersion)' = '3.13' ]; then + echo 'Python $(pythonVersion) requires building from source' + + # Download Python source + cd /tmp + if [ '$(pythonVersion)' = '3.10' ]; then + PYTHON_URL='https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tgz' + elif [ '$(pythonVersion)' = '3.13' ]; then + PYTHON_URL='https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz' + fi + + echo \"Downloading Python from \$PYTHON_URL\" + wget \$PYTHON_URL -O python-$(pythonVersion).tgz + tar -xzf python-$(pythonVersion).tgz + cd Python-$(pythonVersion)* + + # Disable compiler optimizations to prevent GCC ICE in emulated ARM64 + export CFLAGS="-O0 -fno-strict-overflow" + export CXXFLAGS="-O0" + export CPPFLAGS="" + + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr + + # Use single-threaded build to reduce memory pressure under QEMU + make -j1 + make altinstall + # Create symlinks - altinstall creates python3.13, we create python symlink + ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python + + # Verify installation and SSL support + /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL support in Python:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' + PYTHON_INSTALLED=true + + # Clean up + cd / + rm -rf /tmp/Python-$(pythonVersion)* /tmp/python-$(pythonVersion).tgz + + echo 'Successfully built and installed Python $(pythonVersion) from source' + fi + fi + + # If we couldn't install the specific version, fail the build + if [ \"\$PYTHON_INSTALLED\" = \"false\" ]; then + echo 'ERROR: Could not install Python $(pythonVersion) - unsupported version' + echo 'Supported versions for RHEL: 3.11, 3.12 (and 3.10, 3.13 via source compilation)' + exit 1 + fi + + # Install pybind11 development headers + dnf install -y python3-pybind11-devel || echo 'pybind11-devel not available, will install via pip' + + # Verify installations + echo 'Verifying installations:' + python3 --version + which gcc && which g++ + gcc --version + g++ --version + cmake --version || echo 'cmake not found in PATH' + which cmake || echo 'cmake binary not found' + " fi - - make -j$(nproc) - make altinstall - ln -sf /usr/local/bin/python3.13 /usr/local/bin/python - - # Install pip - curl -sS https://bootstrap.pypa.io/get-pip.py | /usr/local/bin/python3.13 - - # Verify installation - /usr/local/bin/python3.13 --version - EOF - chmod +x install_debian.sh - displayName: 'Create Debian installation script' - condition: eq(variables['distroName'], 'Debian') + displayName: 'Install basic dependencies in $(distroName) $(targetArch) container' - script: | - # Create installation script for RHEL - cat > install_rhel.sh << 'EOF' - #!/bin/bash - set -e - - dnf update -y - dnf groupinstall -y 'Development Tools' - dnf install -y wget gnupg2 glibc-devel kernel-headers gcc gcc-c++ make binutils cmake - dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel - - # Build Python 3.13 from source - cd /tmp - wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz - tar -xzf Python-3.13.1.tgz - cd Python-3.13.1 - - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions - make -j$(nproc) - make altinstall - ln -sf /usr/local/bin/python3.13 /usr/local/bin/python - - # Verify installation - /usr/local/bin/python3.13 --version - EOF - chmod +x install_rhel.sh - displayName: 'Create RHEL installation script' - condition: eq(variables['distroName'], 'RHEL') + # Install ODBC driver in the container + if [ "$(packageManager)" = "apt" ]; then + # Ubuntu/Debian + docker exec build-container-$(distroName)-$(targetArch) bash -c " + export DEBIAN_FRONTEND=noninteractive + + # Download the package to configure the Microsoft repo + if [ '$(distroName)' = 'Ubuntu' ]; then + curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb + else + # Debian 12 + curl -sSL -O https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb + fi + + # Install the package + dpkg -i packages-microsoft-prod.deb || true + rm packages-microsoft-prod.deb + + # Update package list + apt-get update + + # Install the driver + ACCEPT_EULA=Y apt-get install -y msodbcsql18 + # optional: for bcp and sqlcmd + ACCEPT_EULA=Y apt-get install -y mssql-tools18 + # optional: for unixODBC development headers + apt-get install -y unixodbc-dev + " + elif [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Detect architecture for ODBC driver download + case \$(uname -m) in + x86_64) architecture='amd64' ;; + arm64|aarch64) architecture='arm64' ;; + *) architecture='unsupported' ;; + esac + + if [[ 'unsupported' == '\$architecture' ]]; then + echo 'Alpine architecture \$(uname -m) is not currently supported.' + exit 1 + fi + + echo 'Detected architecture: '\$architecture + + # Download the packages + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.apk + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Download signatures for verification + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.sig + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.sig + + # Import Microsoft GPG key and verify packages + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - + gpg --verify msodbcsql18_18.5.1.1-1_\$architecture.sig msodbcsql18_18.5.1.1-1_\$architecture.apk + gpg --verify mssql-tools18_18.4.1.1-1_\$architecture.sig mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Install the packages + apk add --allow-untrusted msodbcsql18_18.5.1.1-1_\$architecture.apk + apk add --allow-untrusted mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Cleanup + rm -f msodbcsql18_18.5.1.1-1_\$architecture.* mssql-tools18_18.4.1.1-1_\$architecture.* + + # Add mssql-tools to PATH + export PATH=\"\$PATH:/opt/mssql-tools18/bin\" + echo 'export PATH=\"\$PATH:/opt/mssql-tools18/bin\"' >> ~/.bashrc + " + else + # RHEL/DNF + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Add Microsoft repository for RHEL 9 + curl -sSL -O https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm + rpm -Uvh packages-microsoft-prod.rpm + rm packages-microsoft-prod.rpm + + # Update package list + dnf update -y + + # Install the driver + ACCEPT_EULA=Y dnf install -y msodbcsql18 + # optional: for bcp and sqlcmd + ACCEPT_EULA=Y dnf install -y mssql-tools18 + # optional: for unixODBC development headers + dnf install -y unixODBC-devel + " + fi + displayName: 'Install ODBC Driver in $(distroName) $(targetArch) container' - script: | - # Create installation script for Alpine - cat > install_alpine.sh << 'EOF' - #!/bin/sh - set -e - - apk update - apk add --no-cache build-base cmake clang git bash wget curl gnupg \ - unixodbc unixodbc-dev libffi-dev openssl-dev zlib-dev patchelf - - # Handle Python installation - PYTHON_VERSION=$1 - - if [ "$PYTHON_VERSION" = "3.12" ]; then - # Use pre-installed Python 3.12 - apk add --no-cache py3-pip python3-dev - ln -sf python3 /usr/bin/python || true - ln -sf pip3 /usr/bin/pip || true - else - # Build from source - apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev \ - gdbm-dev db-dev bzip2-dev xz-dev linux-headers + # Install Python dependencies in the container using virtual environment + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Determine which Python command to use + # Set up Python environment before determining command + if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then + # For source-compiled Python on Alpine, set environment variables + export PYTHONHOME=/usr/local + export PYTHONPATH=/usr/local/lib/python$(pythonVersion) + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + fi - cd /tmp - wget https://www.python.org/ftp/python/${PYTHON_VERSION}.1/Python-${PYTHON_VERSION}.1.tgz - tar xzf Python-${PYTHON_VERSION}.1.tgz - cd Python-${PYTHON_VERSION}.1 + if [ '$(packageManager)' = 'apk' ]; then + # Alpine Linux - check if we built from source or used pre-installed + if [ '$(pythonVersion)' = '3.12' ]; then + # Using pre-installed Python 3.12 + PYTHON_CMD=python3 + else + # Using source-compiled Python + if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + elif command -v python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=python$(pythonVersion) + else + echo 'No Python $(pythonVersion) interpreter found after source compilation' + exit 1 + fi + fi + else + # Ubuntu/Debian/RHEL - determine the best Python command + if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + elif command -v python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=python$(pythonVersion) + elif command -v python3 >/dev/null 2>&1; then + PYTHON_CMD=python3 + else + echo 'No Python interpreter found' + exit 1 + fi + fi - # Configure for Alpine/musl - export CFLAGS="-O0 -g" - export CXXFLAGS="-O0 -g" + echo 'Selected Python command:' \$PYTHON_CMD + echo 'Python version:' \$(\$PYTHON_CMD --version) - ./configure --prefix=/usr/local --enable-shared --with-ensurepip=install \ - --disable-ipv6 --build=aarch64-alpine-linux-musl + # Create virtual environment at consistent path + \$PYTHON_CMD -m venv /workspace/venv + source /workspace/venv/bin/activate - # Single-threaded build for stability - make - make altinstall + # Verify virtual environment is working + echo 'Virtual environment activated:' + echo 'Python executable:' \$(which python) + echo 'Python version in venv:' \$(python --version) - ln -sf /usr/local/bin/python${PYTHON_VERSION} /usr/local/bin/python + # Upgrade pip and install dependencies + python -m pip install --upgrade pip + python -m pip install pybind11 + python -m pip install -r requirements.txt + python -m pip install wheel setuptools - # Set up environment - export PYTHONHOME=/usr/local - export PYTHONPATH="/usr/local/lib/python${PYTHON_VERSION}" - export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH - fi - - python --version - EOF - chmod +x install_alpine.sh - displayName: 'Create Alpine installation script' - condition: eq(variables['distroName'], 'alpine') + # Verify installation + echo 'Python version in venv:' \$(python --version) + echo 'Python executable:' \$(which python) + echo 'Pip version:' \$(pip --version) + " + displayName: 'Install Python dependencies in $(distroName) $(targetArch) container' - # Copy and execute the appropriate installation script - script: | - if [ "$(distroName)" = "Debian" ]; then - docker cp install_debian.sh build-container-$(distroName)-$(targetArch):/tmp/ - docker exec build-container-$(distroName)-$(targetArch) bash /tmp/install_debian.sh - elif [ "$(distroName)" = "RHEL" ]; then - docker cp install_rhel.sh build-container-$(distroName)-$(targetArch):/tmp/ - docker exec build-container-$(distroName)-$(targetArch) bash /tmp/install_rhel.sh - elif [ "$(distroName)" = "alpine" ]; then - docker cp install_alpine.sh build-container-$(distroName)-$(targetArch):/tmp/ - docker exec build-container-$(distroName)-$(targetArch) sh /tmp/install_alpine.sh $(pythonVersion) - fi - displayName: 'Install dependencies in $(distroName) $(targetArch) container' - - # Install ODBC driver - - script: | - cat > install_odbc.sh << 'EOF' - #!/bin/bash - set -e - - PACKAGE_MANAGER=$1 - DISTRO_NAME=$2 - - if [ "$PACKAGE_MANAGER" = "apt" ]; then - export DEBIAN_FRONTEND=noninteractive - if [ "$DISTRO_NAME" = "Ubuntu" ]; then - curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb - else - curl -sSL -O https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb + # Build pybind bindings in the container + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Activate virtual environment + source /workspace/venv/bin/activate + + echo 'Building pybind bindings for $(distroName) $(targetArch)' + echo 'Python version:' \$(python --version) + echo 'Architecture:' \$(uname -m) + + # Verify build tools (for RHEL debugging) + if [ '$(packageManager)' = 'dnf' ]; then + echo 'CMake status:' + cmake --version || echo 'cmake not available' fi - dpkg -i packages-microsoft-prod.deb || true - rm packages-microsoft-prod.deb - apt-get update - ACCEPT_EULA=Y apt-get install -y msodbcsql18 mssql-tools18 unixodbc-dev - elif [ "$PACKAGE_MANAGER" = "apk" ]; then - case $(uname -m) in - x86_64) architecture='amd64' ;; - arm64|aarch64) architecture='arm64' ;; - *) echo "Unsupported architecture"; exit 1 ;; - esac - curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_${architecture}.apk - curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_${architecture}.apk - apk add --allow-untrusted msodbcsql18_18.5.1.1-1_${architecture}.apk - apk add --allow-untrusted mssql-tools18_18.4.1.1-1_${architecture}.apk - rm -f *.apk - else - # RHEL - curl -sSL -O https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm - rpm -Uvh packages-microsoft-prod.rpm - rm packages-microsoft-prod.rpm - dnf update -y - ACCEPT_EULA=Y dnf install -y msodbcsql18 mssql-tools18 unixODBC-devel - fi - EOF - chmod +x install_odbc.sh - docker cp install_odbc.sh build-container-$(distroName)-$(targetArch):/tmp/ - docker exec build-container-$(distroName)-$(targetArch) bash /tmp/install_odbc.sh $(packageManager) $(distroName) - displayName: 'Install ODBC Driver' - - # Install Python dependencies and build + + cd mssql_python/pybind + chmod +x build.sh + ./build.sh + " + displayName: 'Build pybind bindings (.so) in $(distroName) $(targetArch) container' + - script: | - cat > build_package.sh << 'EOF' - #!/bin/bash - set -e - - # Set up environment for Alpine if needed - if [ -f /etc/alpine-release ] && [ "$1" != "3.12" ]; then - export PYTHONHOME=/usr/local - export PYTHONPATH="/usr/local/lib/python$1" - export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH - fi - - # Find Python command - if command -v /usr/local/bin/python3.13 >/dev/null 2>&1; then - PYTHON_CMD=/usr/local/bin/python3.13 - elif command -v /usr/local/bin/python$1 >/dev/null 2>&1; then - PYTHON_CMD=/usr/local/bin/python$1 - elif command -v python3 >/dev/null 2>&1; then - PYTHON_CMD=python3 + # Uninstall ODBC Driver before running tests + if [ "$(packageManager)" = "apt" ]; then + # Ubuntu/Debian + docker exec build-container-$(distroName)-$(targetArch) bash -c " + export DEBIAN_FRONTEND=noninteractive + apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql + rm -f /lib/x86_64-linux-gnu/libodbcinst.so.2 + rm -f /lib/aarch64-linux-gnu/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled ODBC Driver and cleaned up libraries' + echo 'Verifying $(targetArch) debian_ubuntu driver library signatures:' + if [ '$(targetArch)' = 'x86_64' ]; then + ldd mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " + elif [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) sh -c " + apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'Some packages were not installed' + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql + rm -f /usr/lib/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled ODBC Driver and cleaned up libraries' + echo 'Verifying $(targetArch) alpine driver library signatures:' + if [ '$(targetArch)' = 'x86_64' ]; then + ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " else - echo "No Python interpreter found" - exit 1 + # RHEL/DNF + docker exec build-container-$(distroName)-$(targetArch) bash -c " + dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql + rm -f /lib64/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled ODBC Driver and cleaned up libraries' + echo 'Verifying $(targetArch) rhel driver library signatures:' + if [ '$(targetArch)' = 'x86_64' ]; then + ldd mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " fi - - echo "Using Python: $PYTHON_CMD" - $PYTHON_CMD --version - - # Create virtual environment - $PYTHON_CMD -m venv /workspace/venv - source /workspace/venv/bin/activate - - # Install dependencies - python -m pip install --upgrade pip - python -m pip install pybind11 wheel setuptools - python -m pip install -r requirements.txt - - # Build the bindings - cd mssql_python/pybind - chmod +x build.sh - ./build.sh - - # Build the wheel - cd /workspace - python setup.py bdist_wheel - ls -la dist/ - EOF - chmod +x build_package.sh - docker cp build_package.sh build-container-$(distroName)-$(targetArch):/tmp/ - docker exec build-container-$(distroName)-$(targetArch) bash /tmp/build_package.sh $(pythonVersion) - displayName: 'Build package' - - # Run tests + displayName: 'Uninstall ODBC Driver before running tests in $(distroName) $(targetArch) container' + - script: | + # Run tests in the container + # Get SQL Server container IP SQLSERVER_IP=$(docker inspect sqlserver-$(distroName)-$(targetArch) --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') echo "SQL Server IP: $SQLSERVER_IP" - cat > run_tests.sh << 'EOF' - #!/bin/bash - set -e - - # Set up environment for Alpine if needed - if [ -f /etc/alpine-release ] && [ "$1" != "3.12" ]; then - export PYTHONHOME=/usr/local - export PYTHONPATH="/usr/local/lib/python$1" - export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH - fi - - source /workspace/venv/bin/activate - - # Remove system ODBC driver to test with bundled one - if command -v apt-get >/dev/null 2>&1; then - apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev || true - elif command -v apk >/dev/null 2>&1; then - apk del msodbcsql18 mssql-tools18 unixodbc-dev || true - else - dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel || true - fi - - echo "Running tests..." - python -m pytest -v --junitxml=test-results.xml --cov=. --cov-report=xml:coverage.xml - EOF - chmod +x run_tests.sh - docker cp run_tests.sh build-container-$(distroName)-$(targetArch):/tmp/ - docker exec \ -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ -e DB_PASSWORD="$(DB_PASSWORD)" \ - build-container-$(distroName)-$(targetArch) bash /tmp/run_tests.sh $(pythonVersion) - displayName: 'Run tests' + build-container-$(distroName)-$(targetArch) bash -c " + # Set environment for source-compiled Python on Alpine + if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then + export PYTHONHOME=/usr/local + export PYTHONPATH=/usr/local/lib/python$(pythonVersion) + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + fi + + source /workspace/venv/bin/activate + echo 'Build successful, running tests now on $(distroName) $(targetArch)' + echo 'Python version:' \$(python --version) + echo 'Architecture:' \$(uname -m) + echo 'Using connection string: Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=***;TrustServerCertificate=yes' + python -m pytest -v --junitxml=test-results-$(distroName)-$(targetArch).xml --cov=. --cov-report=xml:coverage-$(distroName)-$(targetArch).xml --capture=tee-sys --cache-clear + " + displayName: 'Run pytest with coverage in $(distroName) $(targetArch) container' env: DB_PASSWORD: $(DB_PASSWORD) - # Copy artifacts - script: | - docker cp build-container-$(distroName)-$(targetArch):/workspace/test-results.xml $(Build.SourcesDirectory)/test-results-$(distroName)-$(targetArch).xml || true - docker cp build-container-$(distroName)-$(targetArch):/workspace/coverage.xml $(Build.SourcesDirectory)/coverage-$(distroName)-$(targetArch).xml || true + # Build wheel package in the container + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Set environment for source-compiled Python on Alpine + if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then + export PYTHONHOME=/usr/local + export PYTHONPATH=/usr/local/lib/python$(pythonVersion) + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + fi + + source /workspace/venv/bin/activate + echo 'Building wheel for $(distroName) $(targetArch) Python $(pythonVersion)' + echo 'Python version:' \$(python --version) + echo 'Architecture:' \$(uname -m) + python -m pip install --upgrade pip wheel setuptools + python setup.py bdist_wheel + + # Verify the wheel was created + ls -la dist/ + " + displayName: 'Build wheel package in $(distroName) $(targetArch) container' + + - script: | + # Copy test results from container to host + docker cp build-container-$(distroName)-$(targetArch):/workspace/test-results-$(distroName)-$(targetArch).xml $(Build.SourcesDirectory)/ + docker cp build-container-$(distroName)-$(targetArch):/workspace/coverage-$(distroName)-$(targetArch).xml $(Build.SourcesDirectory)/ + # Copy wheel files from container to host mkdir -p $(Build.ArtifactStagingDirectory)/dist - docker cp build-container-$(distroName)-$(targetArch):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || true + docker cp build-container-$(distroName)-$(targetArch):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || echo "Failed to copy dist directory" + # Copy .so files from container to host mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch) - docker cp build-container-$(distroName)-$(targetArch):/workspace/mssql_python/ddbc_bindings.cp$(shortPyVer)-$(targetArch).so $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch)/ || true - displayName: 'Copy artifacts' + docker cp build-container-$(distroName)-$(targetArch):/workspace/mssql_python/ddbc_bindings.cp$(shortPyVer)-$(targetArch).so $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch)/ || echo "Failed to copy .so files" + displayName: 'Copy results and artifacts from $(distroName) $(targetArch) container' condition: always() - # Cleanup - script: | + # Clean up containers docker stop build-container-$(distroName)-$(targetArch) || true docker rm build-container-$(distroName)-$(targetArch) || true docker stop sqlserver-$(distroName)-$(targetArch) || true docker rm sqlserver-$(distroName)-$(targetArch) || true - displayName: 'Cleanup' + displayName: 'Clean up $(distroName) $(targetArch) containers' condition: always() - # Publish results - task: PublishTestResults@2 condition: succeededOrFailed() inputs: testResultsFiles: '**/test-results-$(distroName)-$(targetArch).xml' - testRunTitle: 'Test results for $(distroName) $(targetArch)' + testRunTitle: 'Publish pytest results on $(distroName) $(targetArch)' - task: PublishBuildArtifacts@1 condition: succeededOrFailed() @@ -786,6 +1387,7 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' ArtifactName: 'mssql-python-ddbc-bindings' publishLocation: 'Container' + displayName: 'Publish .so files as artifacts' - task: PublishBuildArtifacts@1 condition: succeededOrFailed() @@ -793,3 +1395,4 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' ArtifactName: 'mssql-python-wheels-dist' publishLocation: 'Container' + displayName: 'Publish wheels as artifacts' \ No newline at end of file From 29eef653aeb0e6d5198a0be1a9a4eff698989f02 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Fri, 8 Aug 2025 00:38:19 +0530 Subject: [PATCH 46/93] refactored pipeline to use templates and better layout --- eng/pipelines/build-whl-pipeline.yml | 1621 ++++------------- .../templates/install-odbc-linux.yml | 68 + .../templates/install-python-linux.yml | 130 ++ .../templates/uninstall-odbc-linux.yml | 59 + 4 files changed, 656 insertions(+), 1222 deletions(-) create mode 100644 eng/pipelines/templates/install-odbc-linux.yml create mode 100644 eng/pipelines/templates/install-python-linux.yml create mode 100644 eng/pipelines/templates/uninstall-odbc-linux.yml diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index e4b8bd0bb..5dafa5d82 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -1,647 +1,358 @@ -# Pipeline name shown in ADO UI name: build-whl-pipeline -# Trigger the pipeline on changes to the main branch trigger: branches: - include: - - main + include: [main] -# Schedule the pipeline to run on main branch daily at 07:00 AM IST schedules: - - cron: "30 1 * * *" + - cron: "30 1 * * *" # Daily at 07:00 AM IST displayName: Daily run at 07:00 AM IST branches: - include: - - main - always: true # Always run even if there are no changes + include: [main] + always: true -jobs: -# - job: BuildWindowsWheels -# # Use the latest Windows image for building -# pool: -# vmImage: 'windows-latest' -# displayName: 'Build Windows -' -# # Strategy matrix to build all combinations -# strategy: -# matrix: -# # Python 3.10 (only x64) -# py310_x64: -# pythonVersion: '3.10' # Host Python version -# shortPyVer: '310' # Used in filenames like cp310 -# architecture: 'x64' # Host Python architecture -# targetArch: 'x64' # Target architecture to pass to build.bat - -# # Python 3.11 -# py311_x64: -# pythonVersion: '3.11' # Host Python version -# shortPyVer: '311' # Used in filenames like cp311 -# architecture: 'x64' # Host Python architecture -# targetArch: 'x64' # Target architecture to pass to build.bat -# py311_arm64: -# pythonVersion: '3.11' -# shortPyVer: '311' -# architecture: 'x64' # No arm64 Python, use x64 host -# targetArch: 'arm64' - -# # Python 3.12 -# py312_x64: -# pythonVersion: '3.12' -# shortPyVer: '312' -# architecture: 'x64' -# targetArch: 'x64' -# py312_arm64: -# pythonVersion: '3.12' -# shortPyVer: '312' -# architecture: 'x64' -# targetArch: 'arm64' - -# # Python 3.13 -# py313_x64: -# pythonVersion: '3.13' -# shortPyVer: '313' -# architecture: 'x64' -# targetArch: 'x64' -# py313_arm64: -# pythonVersion: '3.13' -# shortPyVer: '313' -# architecture: 'x64' -# targetArch: 'arm64' - -# steps: -# # Use correct Python version and architecture for the current job -# - task: UsePythonVersion@0 -# inputs: -# versionSpec: '$(pythonVersion)' -# architecture: '$(architecture)' -# addToPath: true -# displayName: 'Use Python $(pythonVersion) ($(architecture))' - -# # Install required packages: pip, CMake, pybind11 -# - script: | -# python -m pip install --upgrade pip -# pip install -r requirements.txt -# pip install cmake pybind11 -# displayName: 'Install dependencies' - -# # Start LocalDB instance -# - powershell: | -# sqllocaldb create MSSQLLocalDB -# sqllocaldb start MSSQLLocalDB -# displayName: 'Start LocalDB instance' - -# # Create database and user -# - powershell: | -# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" -# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" -# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" -# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" -# displayName: 'Setup database and user' -# env: -# DB_PASSWORD: $(DB_PASSWORD) - -# - task: DownloadPipelineArtifact@2 -# condition: eq(variables['targetArch'], 'arm64') -# inputs: -# buildType: 'specific' -# project: '$(System.TeamProject)' -# definition: 2162 -# buildVersionToDownload: 'latest' -# artifactName: 'mssql-python-arm64-libs' -# targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' -# displayName: 'Download ARM64 Python libs from latest successful run on branches' - -# # Build the PYD file by calling build.bat -# - script: | -# echo "Python Version: $(pythonVersion)" -# echo "Short Tag: $(shortPyVer)" -# echo "Architecture: Host=$(architecture), Target=$(targetArch)" - -# cd "$(Build.SourcesDirectory)\mssql_python\pybind" - -# REM Optional: override lib path if building for ARM64 since we cannot install arm64 python on x64 host -# if "$(targetArch)"=="arm64" ( -# echo Using arm64-specific Python library... -# set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 -# ) - -# REM Call build.bat to build the PYD file -# call build.bat $(targetArch) - -# REM Calling keep_single_arch.bat to remove ODBC libs of other architectures -# call keep_single_arch.bat $(targetArch) - -# cd ..\.. -# displayName: 'Build PYD for $(targetArch)' -# continueOnError: false - -# # Run pytests before packaging -# - powershell: | -# Write-Host "Running pytests to validate bindings" -# if ("$(targetArch)" -eq "arm64") { -# Write-Host "Skipping pytests on Windows ARM64" -# } else { -# python -m pytest -v -# } -# displayName: 'Run pytests' -# env: -# DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - -# # Copy the built .pyd file to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' -# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' -# TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' -# displayName: 'Place PYD file into artifacts directory' - -# # Copy the built .pdb files to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' -# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdbs' -# TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' -# displayName: 'Place PDB file into artifacts directory' - -# # Build wheel package for the current architecture -# - script: | -# python -m pip install --upgrade pip -# pip install wheel setuptools -# set ARCHITECTURE=$(targetArch) -# python setup.py bdist_wheel -# displayName: 'Build wheel package for Python $(pythonVersion) ($(targetArch))' - -# # Copy the wheel file to the artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)\dist' -# Contents: '*.whl' -# TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' -# displayName: 'Collect wheel package' - -# # Publish the collected .pyd file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish all PYDs as artifacts' - -# # Publish the python arm64 libraries as build artifacts for next builds if ARM64 -# # We publish them only for ARM64 builds since we cannot install arm64 Python on x64 host -# # This allows us to reuse the libraries in future ARM64 builds -# # Publishing will retain the libraries in the build artifacts -# - task: PublishBuildArtifacts@1 -# condition: eq(variables['targetArch'], 'arm64') -# inputs: -# PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' -# ArtifactName: 'mssql-python-arm64-libs' -# publishLocation: 'Container' -# displayName: 'Publish arm64 libs as artifacts' - -# # Publish the collected wheel file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish all wheels as artifacts' - -# - job: BuildMacOSWheels -# # Use the latest macOS image for building -# pool: -# vmImage: 'macos-latest' -# # Display name for the job in Azure DevOps UI -# displayName: 'Build macOS - ' -# strategy: -# matrix: -# # Python 3.13 (universal2 for both arm64 and x86_64) -# py313_universal2: -# pythonVersion: '3.13' -# shortPyVer: '313' -# # Always use universal2 for macOS -# targetArch: 'universal2' - -# # Python 3.12 (universal2 for both arm64 and x86_64) -# py312_universal2: -# pythonVersion: '3.12' -# shortPyVer: '312' -# targetArch: 'universal2' - -# # Python 3.11 (universal2 for both arm64 and x86_64) -# py311_universal2: -# pythonVersion: '3.11' -# shortPyVer: '311' -# targetArch: 'universal2' - -# # Python 3.10 (universal2 for both arm64 and x86_64) -# py310_universal2: -# pythonVersion: '3.10' -# shortPyVer: '310' -# targetArch: 'universal2' - -# steps: -# # Use correct Python version and architecture for the current job -# - task: UsePythonVersion@0 -# inputs: -# versionSpec: '$(pythonVersion)' -# addToPath: true -# displayName: 'Use Python $(pythonVersion) (Universal2)' - -# # Install CMake on macOS -# - script: | -# brew update -# brew install cmake -# displayName: 'Install CMake' - -# # Install required packages: pip, CMake, pybind11 -# - script: | -# python -m pip install --upgrade pip -# pip install -r requirements.txt -# pip install cmake pybind11 -# displayName: 'Install dependencies' - -# # Build the .so file by calling build.sh -# - script: | -# echo "Python Version: $(pythonVersion)" -# echo "Short Tag: $(shortPyVer)" -# echo "Building Universal2 Binary" -# cd "$(Build.SourcesDirectory)/mssql_python/pybind" -# # Call build.sh to build the .so file -# ./build.sh -# displayName: 'Build .so file' -# continueOnError: false - -# # Copy the built .so file to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)/mssql_python' -# Contents: '*.so' -# TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' -# displayName: 'Place .so file into artifacts directory' - -# - script: | -# brew update -# brew install docker colima - -# # Try VZ first, fallback to QEMU if it fails -# # Use more conservative resource allocation for Azure DevOps runners -# colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ -# colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu - -# # Set a timeout to ensure Colima starts properly -# sleep 30 - -# # Optional: set Docker context (usually automatic) -# docker context use colima >/dev/null || true +# Common variables +variables: + - name: DB_PASSWORD + value: $(DB_PASSWORD) + - name: pythonVersions + value: '3.10,3.11,3.12,3.13' -# # Confirm Docker is operational -# docker version -# docker ps -# displayName: 'Install and start Colima-based Docker' -# timeoutInMinutes: 15 - -# - script: | -# # Pull and run SQL Server container -# docker pull mcr.microsoft.com/mssql/server:2022-latest -# docker run \ -# --name sqlserver \ -# -e ACCEPT_EULA=Y \ -# -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ -# -p 1433:1433 \ -# -d mcr.microsoft.com/mssql/server:2022-latest - -# # Starting SQL Server container… -# for i in {1..30}; do -# docker exec sqlserver \ -# /opt/mssql-tools18/bin/sqlcmd \ -# -S localhost \ -# -U SA \ -# -P "$DB_PASSWORD" \ -# -C -Q "SELECT 1" && break -# sleep 2 -# done -# displayName: 'Pull & start SQL Server (Docker)' -# env: -# DB_PASSWORD: $(DB_PASSWORD) - -# # Run Pytest to ensure the bindings work correctly -# - script: | -# python -m pytest -v -# displayName: 'Run Pytest to validate bindings' -# env: -# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - -# # Build wheel package for universal2 -# - script: | -# python -m pip install --upgrade pip -# pip install wheel setuptools -# python setup.py bdist_wheel -# displayName: 'Build $(pythonVersion) universal2 whl' - -# # Copy the wheel file to the artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)/dist' -# Contents: '*.whl' -# TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' -# displayName: 'Collect wheel package' - -# # Publish the collected .so file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish all .so files as artifacts' - -# # Publish the collected wheel file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish all wheels as artifacts' - -- job: BuildLinuxWheels +jobs: +# ===== Windows Build Job ===== +- job: BuildWindowsWheels pool: - vmImage: 'ubuntu-latest' - displayName: 'Build Linux -' - timeoutInMinutes: 120 - + vmImage: 'windows-latest' + displayName: 'Build Windows' strategy: matrix: - # Python 3.10 (x86_64 and ARM64) - # py310_x86_64_ubuntu: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py310_arm64_ubuntu: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py310_x86_64_debian: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py310_arm64_debian: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py310_x86_64_rhel: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # buildFromSource: 'true' - # py310_arm64_rhel: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # buildFromSource: 'true' - - # # Python 3.11 (x86_64 and ARM64) - # py311_x86_64_ubuntu: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py311_arm64_ubuntu: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py311_x86_64_debian: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py311_arm64_debian: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py311_x86_64_rhel: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # py311_arm64_rhel: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - - # # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA - # # Only build for Debian and RHEL where Python 3.12 is available - # py312_x86_64_debian: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py312_arm64_debian: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py312_x86_64_rhel: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # py312_arm64_rhel: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - - # # Python 3.13 (x86_64 and ARM64) - # py313_x86_64_ubuntu: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py313_arm64_ubuntu: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - - # Python 3.13 (x86_64 and ARM64) - Built from source for Debian and RHEL (not available via package managers) - py313_x86_64_debian: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py313_arm64_debian: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py313_x86_64_rhel: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - buildFromSource: 'true' - py313_arm64_rhel: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - buildFromSource: 'true' - - # Alpine Linux (x86_64 and ARM64) - py310_x86_64_alpine: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py310_arm64_alpine: + # Python 3.10 (x64 only) + py310_x64: pythonVersion: '3.10' shortPyVer: '310' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py311_x86_64_alpine: + architecture: 'x64' + targetArch: 'x64' + + # Python 3.11 (x64 + ARM64) + py311_x64: pythonVersion: '3.11' shortPyVer: '311' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py311_arm64_alpine: + architecture: 'x64' + targetArch: 'x64' + py311_arm64: pythonVersion: '3.11' shortPyVer: '311' + architecture: 'x64' # Build on x64 host targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py312_x86_64_alpine: + + # Python 3.12 (x64 + ARM64) + py312_x64: pythonVersion: '3.12' shortPyVer: '312' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py312_arm64_alpine: + architecture: 'x64' + targetArch: 'x64' + py312_arm64: pythonVersion: '3.12' shortPyVer: '312' + architecture: 'x64' targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py313_x86_64_alpine: + + # Python 3.13 (x64 + ARM64) + py313_x64: pythonVersion: '3.13' shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py313_arm64_alpine: + architecture: 'x64' + targetArch: 'x64' + py313_arm64: pythonVersion: '3.13' shortPyVer: '313' + architecture: 'x64' targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' steps: - # Set up Docker buildx for multi-architecture support + # Setup Python + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(pythonVersion)' + architecture: '$(architecture)' + addToPath: true + displayName: 'Setup Python $(pythonVersion) ($(architecture))' + + # Install dependencies + - script: | + python -m pip install --upgrade pip + pip install -r requirements.txt cmake pybind11 + displayName: 'Install dependencies' + + # Setup LocalDB for testing + - powershell: | + sqllocaldb create MSSQLLocalDB + sqllocaldb start MSSQLLocalDB + displayName: 'Start LocalDB' + + - powershell: | + sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" + sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" + sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" + sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" + displayName: 'Setup test database' + env: + DB_PASSWORD: $(DB_PASSWORD) + + # Download ARM64 libs if building for ARM64 + - task: DownloadPipelineArtifact@2 + condition: eq(variables['targetArch'], 'arm64') + inputs: + buildType: 'specific' + project: '$(System.TeamProject)' + definition: 2162 + buildVersionToDownload: 'latest' + artifactName: 'mssql-python-arm64-libs' + targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' + displayName: 'Download ARM64 Python libs' + + # Build PYD + - script: | + echo Building for Python $(pythonVersion) $(targetArch) + cd "$(Build.SourcesDirectory)\mssql_python\pybind" + + REM Set ARM64 lib path if needed + if "$(targetArch)"=="arm64" ( + set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 + ) + + call build.bat $(targetArch) + call keep_single_arch.bat $(targetArch) + cd ..\.. + displayName: 'Build PYD for $(targetArch)' + continueOnError: false + + # Run tests (skip for ARM64) + - powershell: | + if ("$(targetArch)" -eq "arm64") { + Write-Host "Skipping tests on Windows ARM64" + } else { + python -m pytest -v + } + displayName: 'Run tests' + env: + DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + + # Copy artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' + Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' + TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' + displayName: 'Collect PYD files' + + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' + Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdb' + TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' + displayName: 'Collect PDB files' + + # Build wheel + - script: | + python -m pip install wheel setuptools + set ARCHITECTURE=$(targetArch) + python setup.py bdist_wheel + displayName: 'Build wheel' + + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)\dist' + Contents: '*.whl' + TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' + displayName: 'Collect wheel' + + # Publish artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + displayName: 'Publish PYD artifacts' + + - task: PublishBuildArtifacts@1 + condition: eq(variables['targetArch'], 'arm64') + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' + ArtifactName: 'mssql-python-arm64-libs' + displayName: 'Publish ARM64 libs' + + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' + ArtifactName: 'mssql-python-wheels-dist' + displayName: 'Publish wheels' + +# ===== macOS Build Job ===== +- job: BuildMacOSWheels + pool: + vmImage: 'macos-latest' + displayName: 'Build macOS' + strategy: + matrix: + # All versions use universal2 (x86_64 + arm64) + py310_universal2: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'universal2'} + py311_universal2: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'universal2'} + py312_universal2: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'universal2'} + py313_universal2: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'universal2'} + + steps: + # Setup Python + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(pythonVersion)' + addToPath: true + displayName: 'Setup Python $(pythonVersion)' + + # Install dependencies + - script: | + brew update && brew install cmake + python -m pip install --upgrade pip + pip install -r requirements.txt cmake pybind11 + displayName: 'Install dependencies' + + # Build .so file + - script: | + echo "Building universal2 binary for Python $(pythonVersion)" + cd "$(Build.SourcesDirectory)/mssql_python/pybind" + ./build.sh + displayName: 'Build .so file' + + # Copy artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)/mssql_python' + Contents: '*.so' + TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' + displayName: 'Collect .so files' + + # Setup Docker for SQL Server + - script: | + brew update && brew install docker colima + # Try VZ virtualization first, fallback to QEMU + colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ + colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu + sleep 30 + docker version + displayName: 'Setup Docker with Colima' + timeoutInMinutes: 15 + + # Start SQL Server + - script: | + docker pull mcr.microsoft.com/mssql/server:2022-latest + docker run -d --name sqlserver \ + -e ACCEPT_EULA=Y \ + -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ + -p 1433:1433 \ + mcr.microsoft.com/mssql/server:2022-latest + + # Wait for SQL Server + for i in {1..30}; do + docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ + -S localhost -U SA -P "$DB_PASSWORD" -C -Q "SELECT 1" && break + sleep 2 + done + displayName: 'Start SQL Server' + env: + DB_PASSWORD: $(DB_PASSWORD) + + # Run tests + - script: python -m pytest -v + displayName: 'Run tests' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + + # Build wheel + - script: | + python -m pip install wheel setuptools + python setup.py bdist_wheel + displayName: 'Build wheel' + + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)/dist' + Contents: '*.whl' + TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' + displayName: 'Collect wheel' + + # Publish artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + displayName: 'Publish .so artifacts' + + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' + ArtifactName: 'mssql-python-wheels-dist' + displayName: 'Publish wheels' + +# ===== Linux Build Job ===== +- job: BuildLinuxWheels + pool: + vmImage: 'ubuntu-latest' + displayName: 'Build Linux' + timeoutInMinutes: 120 + + strategy: + matrix: + # Python 3.10 + py310_x86_64_ubuntu: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} + py310_arm64_ubuntu: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} + py310_x86_64_debian: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} + py310_arm64_debian: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} + py310_x86_64_rhel: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf', buildFromSource: 'true'} + py310_arm64_rhel: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf', buildFromSource: 'true'} + py310_x86_64_alpine: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} + py310_arm64_alpine: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} + + # Python 3.11 + py311_x86_64_ubuntu: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} + py311_arm64_ubuntu: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} + py311_x86_64_debian: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} + py311_arm64_debian: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} + py311_x86_64_rhel: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf'} + py311_arm64_rhel: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf'} + py311_x86_64_alpine: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} + py311_arm64_alpine: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} + + # Python 3.12 (not available for Ubuntu 22.04) + py312_x86_64_debian: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} + py312_arm64_debian: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} + py312_x86_64_rhel: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf'} + py312_arm64_rhel: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf'} + py312_x86_64_alpine: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} + py312_arm64_alpine: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} + + # Python 3.13 + py313_x86_64_ubuntu: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} + py313_arm64_ubuntu: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} + py313_x86_64_debian: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} + py313_arm64_debian: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} + py313_x86_64_rhel: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf', buildFromSource: 'true'} + py313_arm64_rhel: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf', buildFromSource: 'true'} + py313_x86_64_alpine: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} + py313_arm64_alpine: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} + + steps: + # Setup Docker buildx - script: | docker run --rm --privileged multiarch/qemu-user-static --reset -p yes docker buildx create --name multiarch --driver docker-container --use || true docker buildx inspect --bootstrap - displayName: 'Setup Docker buildx for multi-architecture support' + displayName: 'Setup Docker buildx' + # Create build container - script: | - # Create a Docker container for building docker run -d --name build-container-$(distroName)-$(targetArch) \ --platform $(dockerPlatform) \ -v $(Build.SourcesDirectory):/workspace \ @@ -649,10 +360,10 @@ jobs: --network bridge \ $(dockerImage) \ tail -f /dev/null - displayName: 'Create $(distroName) $(targetArch) container' + displayName: 'Create container' + # Start SQL Server - script: | - # Start SQL Server container (always x86_64 since SQL Server doesn't support ARM64) docker run -d --name sqlserver-$(distroName)-$(targetArch) \ --platform linux/amd64 \ -e ACCEPT_EULA=Y \ @@ -660,658 +371,131 @@ jobs: -p 1433:1433 \ mcr.microsoft.com/mssql/server:2022-latest - # Wait for SQL Server to be ready - echo "Waiting for SQL Server to start..." + # Wait for SQL Server + echo "Waiting for SQL Server..." for i in {1..60}; do if docker exec sqlserver-$(distroName)-$(targetArch) \ - /opt/mssql-tools18/bin/sqlcmd \ - -S localhost \ - -U SA \ - -P "$(DB_PASSWORD)" \ - -C -Q "SELECT 1" >/dev/null 2>&1; then - echo "SQL Server is ready!" + /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then + echo "SQL Server ready!" break fi - echo "Waiting... ($i/60)" sleep 2 done # Create test database docker exec sqlserver-$(distroName)-$(targetArch) \ - /opt/mssql-tools18/bin/sqlcmd \ - -S localhost \ - -U SA \ - -P "$(DB_PASSWORD)" \ - -C -Q "CREATE DATABASE TestDB" - displayName: 'Start SQL Server container for $(distroName) $(targetArch)' + /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "CREATE DATABASE TestDB" + displayName: 'Start SQL Server' env: DB_PASSWORD: $(DB_PASSWORD) + # Install base dependencies - script: | - # Install dependencies in the container if [ "$(packageManager)" = "apt" ]; then - # Ubuntu/Debian docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive - export TZ=UTC + export DEBIAN_FRONTEND=noninteractive TZ=UTC ln -snf /usr/share/zoneinfo/\$TZ /etc/localtime && echo \$TZ > /etc/timezone - - # Update package lists apt-get update - - # Install basic tools first apt-get install -y software-properties-common curl wget gnupg build-essential cmake - # Add deadsnakes PPA for newer Python versions (Ubuntu only) + # Add deadsnakes PPA for Ubuntu if [ '$(distroName)' = 'Ubuntu' ]; then - add-apt-repository -y ppa:deadsnakes/ppa - apt-get update - fi - - # Install Python and development packages - # Handle different Python version availability per distribution - if [ '$(distroName)' = 'Debian' ]; then - # Debian 12 has Python 3.11 by default, some older/newer versions may not be available - case '$(pythonVersion)' in - '3.11') - # Python 3.11 is the default in Debian 12 - apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils - PYTHON_CMD=python$(pythonVersion) - ;; - '3.10'|'3.12') - # These versions may not be available in Debian 12, use python3 and create symlinks - echo 'Python $(pythonVersion) may not be available in Debian 12, using available python3' - apt-get install -y python3 python3-dev python3-venv - # Note: distutils is not available for Python 3.12+ - if [ '$(pythonVersion)' != '3.12' ]; then - apt-get install -y python3-distutils || echo 'distutils not available for this Python version' - fi - # Create symlinks to make the desired version available - # Find the actual python3 version and create proper symlinks - ACTUAL_PYTHON=\$(python3 --version | grep -o '[0-9]\+\.[0-9]\+') - echo 'Detected Python version:' \$ACTUAL_PYTHON - ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python3 /usr/local/bin/python - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - ;; - '3.13') - # Python 3.13 requires building from source - echo 'Python $(pythonVersion) requires building from source' - echo 'DEBUG: pythonVersion = $(pythonVersion)' - - # Install dependencies needed for Python source compilation - apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev - apt-get install -y libreadline-dev libsqlite3-dev wget curl llvm - apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev - apt-get install -y libffi-dev liblzma-dev python3-openssl - apt-get install -y libgdbm-dev libnss3-dev libedit-dev || echo 'Some optional dependencies not available' - - # Verify SSL development libraries are installed - echo 'Verifying SSL development libraries:' - dpkg -l | grep libssl-dev || echo 'libssl-dev not found' - pkg-config --exists openssl && echo 'OpenSSL pkg-config found' || echo 'OpenSSL pkg-config missing' - - # Download Python source - fix version mismatch - cd /tmp - PYTHON_FULL_VERSION='3.13.1' - PYTHON_URL=\"https://www.python.org/ftp/python/\$PYTHON_FULL_VERSION/Python-\$PYTHON_FULL_VERSION.tgz\" - echo \"Downloading Python from \$PYTHON_URL\" - wget \$PYTHON_URL -O python-\$PYTHON_FULL_VERSION.tgz - tar -xzf python-\$PYTHON_FULL_VERSION.tgz - cd Python-\$PYTHON_FULL_VERSION - - # Configure and compile Python with SSL support explicitly enabled - echo 'Configuring Python build with SSL support' - # Disable optimizations for ARM64 builds to speed up compilation in emulated environment - if [ '$(targetArch)' = 'arm64' ]; then - echo 'ARM64 build detected - disabling optimizations for faster compilation' - # Disable compiler optimizations to prevent GCC ICE in emulated ARM64 - export CFLAGS="-O0 -fno-strict-overflow" - export CXXFLAGS="-O0" - export CPPFLAGS="" - - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr - - else - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr - fi - - make -j1 - make altinstall - - # Create symlinks - altinstall creates python3.13, we create python symlink - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - - # Verify installation and SSL support - echo 'Verifying Python 3.13 installation:' - ls -l /usr/local/bin/python$(pythonVersion) || echo 'ERROR: Python $(pythonVersion) not found' - /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL support in Python:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' - - # Clean up - cd / - rm -rf /tmp/Python-\$PYTHON_FULL_VERSION /tmp/python-\$PYTHON_FULL_VERSION.tgz - - echo 'Successfully built and installed Python $(pythonVersion) from source' - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - ;; - *) - echo 'Unsupported Python version $(pythonVersion) for Debian, using python3' - apt-get install -y python3 python3-dev python3-venv - ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python3 /usr/local/bin/python - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - ;; - esac - else - # Ubuntu has deadsnakes PPA, so more versions are available - # Note: distutils is not available for newer Python versions (3.12+) - if [ '$(pythonVersion)' = '3.12' ] || [ '$(pythonVersion)' = '3.13' ]; then - apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv - else - apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils - fi - # For Ubuntu, create symlinks for consistency - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - fi - - # Install pip for the specific Python version - curl -sS https://bootstrap.pypa.io/get-pip.py | \$PYTHON_CMD - - # Install remaining packages - apt-get install -y pybind11-dev || echo 'pybind11-dev not available, will install via pip' - - # Verify Python installation - echo 'Python installation verification:' - echo 'Using PYTHON_CMD:' \$PYTHON_CMD - \$PYTHON_CMD --version - if [ -f /usr/local/bin/python ]; then - /usr/local/bin/python --version + add-apt-repository -y ppa:deadsnakes/ppa && apt-get update fi " elif [ "$(packageManager)" = "apk" ]; then - # Alpine Linux docker exec build-container-$(distroName)-$(targetArch) sh -c " - # Update package index apk update - - # Install base build tools and system dependencies - apk add --no-cache \ - build-base \ - cmake \ - clang \ - git \ - bash \ - wget \ - curl \ - gnupg \ - unixodbc \ - unixodbc-dev \ - libffi-dev \ - openssl-dev \ - zlib-dev \ - patchelf - - # Python installation - hybrid approach - if [ '$(pythonVersion)' = '3.12' ]; then - # Use pre-available Python 3.12 from Alpine packages - echo 'Using pre-available Python 3.12 from Alpine packages' - apk add --no-cache py3-pip python3-dev - - # Create symlinks for Python compatibility - ln -sf python3 /usr/bin/python || true - ln -sf pip3 /usr/bin/pip || true - else - # Build Python from source for other versions (3.10, 3.11, 3.13) - echo 'Building Python $(pythonVersion) from source for Alpine Linux' - apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev linux-headers - - # Download and compile Python from source - cd /tmp - wget https://www.python.org/ftp/python/$(pythonVersion).1/Python-$(pythonVersion).1.tgz - tar xzf Python-$(pythonVersion).1.tgz - cd Python-$(pythonVersion).1 - - # Configure and build Python - Alpine/musl specific configuration - # Set cache variables to help configure detect musl libc types correctly - export ac_cv_file__dev_ptmx=yes - export ac_cv_file__dev_ptc=no - export ac_cv_have_long_long_format=yes - # Fix LONG_BIT detection for musl libc on ARM64 - export ac_cv_sizeof_long=8 - export ac_cv_sizeof_size_t=8 - export ac_cv_sizeof_pid_t=4 - export ac_cv_sizeof_void_p=8 - # Fix float word ordering detection for ARM64 - export ax_cv_c_float_words_bigendian=no - - ./configure \ - --prefix=/usr/local \ - --enable-shared \ - --with-ensurepip=install \ - --disable-ipv6 \ - --build=aarch64-alpine-linux-musl \ - --host=aarch64-alpine-linux-musl \ - --target=aarch64-alpine-linux-musl \ - CPPFLAGS='-I/usr/include -DLONG_BIT=64' \ - LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' \ - CFLAGS='-DLONG_BIT=64' - - # Build Python without optimizations to avoid gcc segfault on ARM64 - echo 'Building Python $(pythonVersion) without PGO optimizations to avoid compilation issues' - make -j\$(nproc) - - make altinstall - - # Set up environment for proper Python operation - export PYTHONHOME=/usr/local - export PYTHONPATH=/usr/local/lib/python$(pythonVersion) - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - - # Create symlinks for easier access - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip - - # Set up persistent environment variables for source-compiled Python - echo 'export PYTHONHOME=/usr/local' >> /etc/profile - echo 'export PYTHONPATH=/usr/local/lib/python$(pythonVersion)' >> /etc/profile - echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile - - # Verify Python installation and modules - echo 'Verifying Python $(pythonVersion) installation:' - ls -la /usr/local/bin/python$(pythonVersion) - /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL and encodings support:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support: OK\")' - echo 'Python installation successful' - - # Clean up build files - cd / - rm -rf /tmp/Python-$(pythonVersion).1* - fi - - # Verify installation and architecture - echo 'Architecture:' \$(uname -m) - echo 'Alpine version:' \$(cat /etc/alpine-release) - python --version - which cmake + apk add --no-cache build-base cmake clang git bash wget curl gnupg \ + unixodbc unixodbc-dev libffi-dev openssl-dev zlib-dev patchelf " else # RHEL/DNF docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Enable CodeReady Builder repository for additional packages (skip if not available) dnf install -y dnf-plugins-core || true - dnf install -y epel-release || echo 'EPEL not available in UBI9, continuing without it' - dnf config-manager --set-enabled crb || dnf config-manager --set-enabled powertools || echo 'No additional repos to enable' - - # Install dependencies + dnf install -y epel-release || echo 'EPEL not available' + dnf config-manager --set-enabled crb || dnf config-manager --set-enabled powertools || true dnf update -y - dnf groupinstall -y 'Development Tools' || echo 'Development Tools group not available, installing individual packages' - - # Install development tools and cmake separately to ensure they work - # Note: Handle curl conflicts by replacing curl-minimal with curl - dnf install -y wget gnupg2 glibc-devel kernel-headers - dnf install -y --allowerasing curl || dnf install -y curl || echo 'curl installation failed, continuing' - dnf install -y gcc gcc-c++ make binutils - dnf install -y cmake - - # Install additional dependencies needed for Python source compilation - # Some packages may not be available in UBI9, so install what we can - dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel || echo 'Some core devel packages failed' - dnf install -y ncurses-devel sqlite-devel xz-devel || echo 'Some optional devel packages not available' - # These are often missing in UBI9, install if available - dnf install -y readline-devel tk-devel gdbm-devel libnsl2-devel libuuid-devel || echo 'Some Python build dependencies not available in UBI9' - - # If that doesn't work, try installing from different repositories - if ! which gcc; then - echo 'Trying alternative gcc installation...' - dnf --enablerepo=ubi-9-codeready-builder install -y gcc gcc-c++ - fi - - # For RHEL, we need to handle Python versions more carefully - # RHEL 9 UBI has python3.9 by default, but we don't support 3.9 - # We need to install specific versions or build from source - - # First, try to install the specific Python version - PYTHON_INSTALLED=false - echo 'Trying to install Python $(pythonVersion) from available repositories' - # Try from default repos first - if dnf install -y python$(pythonVersion) python$(pythonVersion)-devel python$(pythonVersion)-pip; then - echo 'Successfully installed Python $(pythonVersion) from default repos' - PYTHON_INSTALLED=true - # Create symlinks for the specific version - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python - else - echo 'Python $(pythonVersion) not available in default RHEL repos' - # For Python 3.11+ which might be available in newer RHEL versions - if [ '$(pythonVersion)' = '3.11' ] || [ '$(pythonVersion)' = '3.12' ]; then - echo 'Trying alternative installation for Python $(pythonVersion)' - # Try installing from additional repos - dnf install -y python$(pythonVersion) python$(pythonVersion)-devel python$(pythonVersion)-pip || true - if command -v python$(pythonVersion) >/dev/null 2>&1; then - echo 'Found Python $(pythonVersion) after alternative installation' - PYTHON_INSTALLED=true - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python - fi - elif [ '$(pythonVersion)' = '3.10' ] || [ '$(pythonVersion)' = '3.13' ]; then - echo 'Python $(pythonVersion) requires building from source' - - # Download Python source - cd /tmp - if [ '$(pythonVersion)' = '3.10' ]; then - PYTHON_URL='https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tgz' - elif [ '$(pythonVersion)' = '3.13' ]; then - PYTHON_URL='https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz' - fi - - echo \"Downloading Python from \$PYTHON_URL\" - wget \$PYTHON_URL -O python-$(pythonVersion).tgz - tar -xzf python-$(pythonVersion).tgz - cd Python-$(pythonVersion)* - - # Disable compiler optimizations to prevent GCC ICE in emulated ARM64 - export CFLAGS="-O0 -fno-strict-overflow" - export CXXFLAGS="-O0" - export CPPFLAGS="" - - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr - - # Use single-threaded build to reduce memory pressure under QEMU - make -j1 - make altinstall - # Create symlinks - altinstall creates python3.13, we create python symlink - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - - # Verify installation and SSL support - /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL support in Python:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' - PYTHON_INSTALLED=true - - # Clean up - cd / - rm -rf /tmp/Python-$(pythonVersion)* /tmp/python-$(pythonVersion).tgz - - echo 'Successfully built and installed Python $(pythonVersion) from source' - fi - fi - - # If we couldn't install the specific version, fail the build - if [ \"\$PYTHON_INSTALLED\" = \"false\" ]; then - echo 'ERROR: Could not install Python $(pythonVersion) - unsupported version' - echo 'Supported versions for RHEL: 3.11, 3.12 (and 3.10, 3.13 via source compilation)' - exit 1 - fi - - # Install pybind11 development headers - dnf install -y python3-pybind11-devel || echo 'pybind11-devel not available, will install via pip' - - # Verify installations - echo 'Verifying installations:' - python3 --version - which gcc && which g++ - gcc --version - g++ --version - cmake --version || echo 'cmake not found in PATH' - which cmake || echo 'cmake binary not found' + dnf install -y gcc gcc-c++ make cmake wget gnupg2 glibc-devel kernel-headers + dnf install -y --allowerasing curl || true + dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel || true " fi - displayName: 'Install basic dependencies in $(distroName) $(targetArch) container' - + displayName: 'Install base dependencies' + + # Install Python + - template: templates/install-python-linux.yml + parameters: + distroName: $(distroName) + packageManager: $(packageManager) + pythonVersion: $(pythonVersion) + targetArch: $(targetArch) + + # Install ODBC driver + - template: templates/install-odbc-linux.yml + parameters: + distroName: $(distroName) + packageManager: $(packageManager) + targetArch: $(targetArch) + + # Install Python packages - script: | - # Install ODBC driver in the container - if [ "$(packageManager)" = "apt" ]; then - # Ubuntu/Debian - docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive - - # Download the package to configure the Microsoft repo - if [ '$(distroName)' = 'Ubuntu' ]; then - curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb - else - # Debian 12 - curl -sSL -O https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb - fi - - # Install the package - dpkg -i packages-microsoft-prod.deb || true - rm packages-microsoft-prod.deb - - # Update package list - apt-get update - - # Install the driver - ACCEPT_EULA=Y apt-get install -y msodbcsql18 - # optional: for bcp and sqlcmd - ACCEPT_EULA=Y apt-get install -y mssql-tools18 - # optional: for unixODBC development headers - apt-get install -y unixodbc-dev - " - elif [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Detect architecture for ODBC driver download - case \$(uname -m) in - x86_64) architecture='amd64' ;; - arm64|aarch64) architecture='arm64' ;; - *) architecture='unsupported' ;; - esac - - if [[ 'unsupported' == '\$architecture' ]]; then - echo 'Alpine architecture \$(uname -m) is not currently supported.' - exit 1 - fi - - echo 'Detected architecture: '\$architecture - - # Download the packages - curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.apk - curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.apk - - # Download signatures for verification - curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.sig - curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.sig - - # Import Microsoft GPG key and verify packages - curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - - gpg --verify msodbcsql18_18.5.1.1-1_\$architecture.sig msodbcsql18_18.5.1.1-1_\$architecture.apk - gpg --verify mssql-tools18_18.4.1.1-1_\$architecture.sig mssql-tools18_18.4.1.1-1_\$architecture.apk - - # Install the packages - apk add --allow-untrusted msodbcsql18_18.5.1.1-1_\$architecture.apk - apk add --allow-untrusted mssql-tools18_18.4.1.1-1_\$architecture.apk - - # Cleanup - rm -f msodbcsql18_18.5.1.1-1_\$architecture.* mssql-tools18_18.4.1.1-1_\$architecture.* - - # Add mssql-tools to PATH - export PATH=\"\$PATH:/opt/mssql-tools18/bin\" - echo 'export PATH=\"\$PATH:/opt/mssql-tools18/bin\"' >> ~/.bashrc - " - else - # RHEL/DNF - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Add Microsoft repository for RHEL 9 - curl -sSL -O https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm - rpm -Uvh packages-microsoft-prod.rpm - rm packages-microsoft-prod.rpm - - # Update package list - dnf update -y - - # Install the driver - ACCEPT_EULA=Y dnf install -y msodbcsql18 - # optional: for bcp and sqlcmd - ACCEPT_EULA=Y dnf install -y mssql-tools18 - # optional: for unixODBC development headers - dnf install -y unixODBC-devel - " - fi - displayName: 'Install ODBC Driver in $(distroName) $(targetArch) container' - - - script: | - # Install Python dependencies in the container using virtual environment docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Determine which Python command to use - # Set up Python environment before determining command + # Setup Python environment for Alpine if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then - # For source-compiled Python on Alpine, set environment variables export PYTHONHOME=/usr/local export PYTHONPATH=/usr/local/lib/python$(pythonVersion) export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH fi - if [ '$(packageManager)' = 'apk' ]; then - # Alpine Linux - check if we built from source or used pre-installed - if [ '$(pythonVersion)' = '3.12' ]; then - # Using pre-installed Python 3.12 - PYTHON_CMD=python3 - else - # Using source-compiled Python - if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - elif command -v python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=python$(pythonVersion) - else - echo 'No Python $(pythonVersion) interpreter found after source compilation' - exit 1 - fi - fi + # Find Python command + if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' = '3.12' ]; then + PYTHON_CMD=python3 + elif command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + elif command -v python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=python$(pythonVersion) else - # Ubuntu/Debian/RHEL - determine the best Python command - if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - elif command -v python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=python$(pythonVersion) - elif command -v python3 >/dev/null 2>&1; then - PYTHON_CMD=python3 - else - echo 'No Python interpreter found' - exit 1 - fi + PYTHON_CMD=python3 fi - echo 'Selected Python command:' \$PYTHON_CMD - echo 'Python version:' \$(\$PYTHON_CMD --version) - - # Create virtual environment at consistent path + # Create virtual environment \$PYTHON_CMD -m venv /workspace/venv source /workspace/venv/bin/activate - # Verify virtual environment is working - echo 'Virtual environment activated:' - echo 'Python executable:' \$(which python) - echo 'Python version in venv:' \$(python --version) - - # Upgrade pip and install dependencies + # Install packages python -m pip install --upgrade pip - python -m pip install pybind11 + python -m pip install pybind11 wheel setuptools python -m pip install -r requirements.txt - python -m pip install wheel setuptools - - # Verify installation - echo 'Python version in venv:' \$(python --version) - echo 'Python executable:' \$(which python) - echo 'Pip version:' \$(pip --version) " - displayName: 'Install Python dependencies in $(distroName) $(targetArch) container' + displayName: 'Install Python packages' + # Build bindings - script: | - # Build pybind bindings in the container docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Activate virtual environment source /workspace/venv/bin/activate - - echo 'Building pybind bindings for $(distroName) $(targetArch)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - - # Verify build tools (for RHEL debugging) - if [ '$(packageManager)' = 'dnf' ]; then - echo 'CMake status:' - cmake --version || echo 'cmake not available' - fi - cd mssql_python/pybind chmod +x build.sh ./build.sh " - displayName: 'Build pybind bindings (.so) in $(distroName) $(targetArch) container' - - - script: | - # Uninstall ODBC Driver before running tests - if [ "$(packageManager)" = "apt" ]; then - # Ubuntu/Debian - docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive - apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /lib/x86_64-linux-gnu/libodbcinst.so.2 - rm -f /lib/aarch64-linux-gnu/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) debian_ubuntu driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - elif [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) sh -c " - apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'Some packages were not installed' - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /usr/lib/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) alpine driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - else - # RHEL/DNF - docker exec build-container-$(distroName)-$(targetArch) bash -c " - dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /lib64/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) rhel driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - fi - displayName: 'Uninstall ODBC Driver before running tests in $(distroName) $(targetArch) container' + displayName: 'Build bindings' + # Uninstall ODBC for testing + - template: templates/uninstall-odbc-linux.yml + parameters: + distroName: $(distroName) + packageManager: $(packageManager) + targetArch: $(targetArch) + + # Run tests - script: | - # Run tests in the container - # Get SQL Server container IP SQLSERVER_IP=$(docker inspect sqlserver-$(distroName)-$(targetArch) --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') - echo "SQL Server IP: $SQLSERVER_IP" docker exec \ -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ -e DB_PASSWORD="$(DB_PASSWORD)" \ build-container-$(distroName)-$(targetArch) bash -c " - # Set environment for source-compiled Python on Alpine + # Setup Python environment for Alpine if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then export PYTHONHOME=/usr/local export PYTHONPATH=/usr/local/lib/python$(pythonVersion) @@ -1319,20 +503,18 @@ jobs: fi source /workspace/venv/bin/activate - echo 'Build successful, running tests now on $(distroName) $(targetArch)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - echo 'Using connection string: Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=***;TrustServerCertificate=yes' - python -m pytest -v --junitxml=test-results-$(distroName)-$(targetArch).xml --cov=. --cov-report=xml:coverage-$(distroName)-$(targetArch).xml --capture=tee-sys --cache-clear + python -m pytest -v --junitxml=test-results-$(distroName)-$(targetArch).xml \ + --cov=. --cov-report=xml:coverage-$(distroName)-$(targetArch).xml \ + --capture=tee-sys --cache-clear " - displayName: 'Run pytest with coverage in $(distroName) $(targetArch) container' + displayName: 'Run tests' env: DB_PASSWORD: $(DB_PASSWORD) + # Build wheel - script: | - # Build wheel package in the container docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Set environment for source-compiled Python on Alpine + # Setup Python environment for Alpine if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then export PYTHONHOME=/usr/local export PYTHONPATH=/usr/local/lib/python$(pythonVersion) @@ -1340,59 +522,54 @@ jobs: fi source /workspace/venv/bin/activate - echo 'Building wheel for $(distroName) $(targetArch) Python $(pythonVersion)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - python -m pip install --upgrade pip wheel setuptools python setup.py bdist_wheel - - # Verify the wheel was created ls -la dist/ " - displayName: 'Build wheel package in $(distroName) $(targetArch) container' + displayName: 'Build wheel' + # Copy artifacts - script: | - # Copy test results from container to host + # Copy test results docker cp build-container-$(distroName)-$(targetArch):/workspace/test-results-$(distroName)-$(targetArch).xml $(Build.SourcesDirectory)/ docker cp build-container-$(distroName)-$(targetArch):/workspace/coverage-$(distroName)-$(targetArch).xml $(Build.SourcesDirectory)/ - # Copy wheel files from container to host + # Copy wheels mkdir -p $(Build.ArtifactStagingDirectory)/dist - docker cp build-container-$(distroName)-$(targetArch):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || echo "Failed to copy dist directory" + docker cp build-container-$(distroName)-$(targetArch):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || true - # Copy .so files from container to host + # Copy .so files mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch) - docker cp build-container-$(distroName)-$(targetArch):/workspace/mssql_python/ddbc_bindings.cp$(shortPyVer)-$(targetArch).so $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch)/ || echo "Failed to copy .so files" - displayName: 'Copy results and artifacts from $(distroName) $(targetArch) container' + docker cp build-container-$(distroName)-$(targetArch):/workspace/mssql_python/ddbc_bindings.cp$(shortPyVer)-$(targetArch).so \ + $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch)/ || true + displayName: 'Copy artifacts' condition: always() + # Cleanup - script: | - # Clean up containers docker stop build-container-$(distroName)-$(targetArch) || true docker rm build-container-$(distroName)-$(targetArch) || true docker stop sqlserver-$(distroName)-$(targetArch) || true docker rm sqlserver-$(distroName)-$(targetArch) || true - displayName: 'Clean up $(distroName) $(targetArch) containers' + displayName: 'Cleanup containers' condition: always() + # Publish results - task: PublishTestResults@2 condition: succeededOrFailed() inputs: testResultsFiles: '**/test-results-$(distroName)-$(targetArch).xml' - testRunTitle: 'Publish pytest results on $(distroName) $(targetArch)' + testRunTitle: 'Tests - $(distroName) $(targetArch)' - task: PublishBuildArtifacts@1 condition: succeededOrFailed() inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish .so files as artifacts' + displayName: 'Publish bindings' - task: PublishBuildArtifacts@1 condition: succeededOrFailed() inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish wheels as artifacts' \ No newline at end of file + displayName: 'Publish wheels' \ No newline at end of file diff --git a/eng/pipelines/templates/install-odbc-linux.yml b/eng/pipelines/templates/install-odbc-linux.yml new file mode 100644 index 000000000..cce9906b6 --- /dev/null +++ b/eng/pipelines/templates/install-odbc-linux.yml @@ -0,0 +1,68 @@ +parameters: + - name: distroName + type: string + - name: packageManager + type: string + - name: targetArch + type: string + +steps: +- script: | + if [ "${{ parameters.packageManager }}" = "apt" ]; then + docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " + export DEBIAN_FRONTEND=noninteractive + + # Configure Microsoft repo + if [ '${{ parameters.distroName }}' = 'Ubuntu' ]; then + curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb + else + curl -sSL -O https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb + fi + + dpkg -i packages-microsoft-prod.deb || true + rm packages-microsoft-prod.deb + apt-get update + + # Install ODBC driver and tools + ACCEPT_EULA=Y apt-get install -y msodbcsql18 mssql-tools18 unixodbc-dev + " + elif [ "${{ parameters.packageManager }}" = "apk" ]; then + docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " + # Detect architecture + case \$(uname -m) in + x86_64) arch='amd64' ;; + arm64|aarch64) arch='arm64' ;; + *) echo 'Unsupported architecture'; exit 1 ;; + esac + + # Download and verify packages + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\${arch}.apk + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\${arch}.apk + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\${arch}.sig + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\${arch}.sig + + # Verify and install + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - + gpg --verify msodbcsql18_18.5.1.1-1_\${arch}.sig msodbcsql18_18.5.1.1-1_\${arch}.apk + gpg --verify mssql-tools18_18.4.1.1-1_\${arch}.sig mssql-tools18_18.4.1.1-1_\${arch}.apk + + apk add --allow-untrusted msodbcsql18_18.5.1.1-1_\${arch}.apk mssql-tools18_18.4.1.1-1_\${arch}.apk + rm -f msodbcsql18_18.5.1.1-1_\${arch}.* mssql-tools18_18.4.1.1-1_\${arch}.* + + export PATH=\"\$PATH:/opt/mssql-tools18/bin\" + echo 'export PATH=\"\$PATH:/opt/mssql-tools18/bin\"' >> ~/.bashrc + " + else + # RHEL/DNF + docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " + # Configure Microsoft repo + curl -sSL -O https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm + rpm -Uvh packages-microsoft-prod.rpm + rm packages-microsoft-prod.rpm + dnf update -y + + # Install ODBC driver and tools + ACCEPT_EULA=Y dnf install -y msodbcsql18 mssql-tools18 unixODBC-devel + " + fi + displayName: 'Install ODBC Driver' diff --git a/eng/pipelines/templates/install-python-linux.yml b/eng/pipelines/templates/install-python-linux.yml new file mode 100644 index 000000000..29de88d52 --- /dev/null +++ b/eng/pipelines/templates/install-python-linux.yml @@ -0,0 +1,130 @@ +parameters: + - name: distroName + type: string + - name: packageManager + type: string + - name: pythonVersion + type: string + - name: targetArch + type: string + +steps: +- script: | + if [ "${{ parameters.packageManager }}" = "apt" ]; then + docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " + # Handle Python installation for Debian/Ubuntu + if [ '${{ parameters.distroName }}' = 'Debian' ]; then + case '${{ parameters.pythonVersion }}' in + '3.11') + apt-get install -y python${{ parameters.pythonVersion }} python${{ parameters.pythonVersion }}-dev python${{ parameters.pythonVersion }}-venv + ;; + '3.10'|'3.12') + apt-get install -y python3 python3-dev python3-venv + ln -sf /usr/bin/python3 /usr/local/bin/python${{ parameters.pythonVersion }} + ;; + '3.13') + # Build from source + apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \ + wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev + cd /tmp + wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz + tar -xzf Python-3.13.1.tgz + cd Python-3.13.1 + + # Disable optimizations for ARM64 + if [ '${{ parameters.targetArch }}' = 'arm64' ]; then + export CFLAGS='-O0 -fno-strict-overflow' + export CXXFLAGS='-O0' + fi + + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr + make -j1 + make altinstall + ln -sf /usr/local/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python + ;; + esac + else + # Ubuntu - use deadsnakes PPA + if [ '${{ parameters.pythonVersion }}' = '3.12' ] || [ '${{ parameters.pythonVersion }}' = '3.13' ]; then + apt-get install -y python${{ parameters.pythonVersion }} python${{ parameters.pythonVersion }}-dev python${{ parameters.pythonVersion }}-venv + else + apt-get install -y python${{ parameters.pythonVersion }} python${{ parameters.pythonVersion }}-dev python${{ parameters.pythonVersion }}-venv python${{ parameters.pythonVersion }}-distutils + fi + ln -sf /usr/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python${{ parameters.pythonVersion }} + ln -sf /usr/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python + fi + + # Install pip + curl -sS https://bootstrap.pypa.io/get-pip.py | python${{ parameters.pythonVersion }} + " + elif [ "${{ parameters.packageManager }}" = "apk" ]; then + docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} sh -c " + if [ '${{ parameters.pythonVersion }}' = '3.12' ]; then + # Use pre-installed Python 3.12 + apk add --no-cache py3-pip python3-dev + ln -sf python3 /usr/bin/python || true + else + # Build from source + apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev linux-headers + cd /tmp + wget https://www.python.org/ftp/python/${{ parameters.pythonVersion }}.1/Python-${{ parameters.pythonVersion }}.1.tgz + tar xzf Python-${{ parameters.pythonVersion }}.1.tgz + cd Python-${{ parameters.pythonVersion }}.1 + + # Configure for musl libc + export ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no + export ac_cv_have_long_long_format=yes ax_cv_c_float_words_bigendian=no + export ac_cv_sizeof_long=8 ac_cv_sizeof_size_t=8 ac_cv_sizeof_pid_t=4 ac_cv_sizeof_void_p=8 + + ./configure --prefix=/usr/local --enable-shared --with-ensurepip=install --disable-ipv6 \ + --build=aarch64-alpine-linux-musl --host=aarch64-alpine-linux-musl --target=aarch64-alpine-linux-musl \ + CPPFLAGS='-I/usr/include -DLONG_BIT=64' LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' CFLAGS='-DLONG_BIT=64' + + make -j\$(nproc) + make altinstall + + # Setup environment + export PYTHONHOME=/usr/local + export PYTHONPATH=/usr/local/lib/python${{ parameters.pythonVersion }} + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + + ln -sf /usr/local/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python + ln -sf /usr/local/bin/pip${{ parameters.pythonVersion }} /usr/local/bin/pip + + # Persist environment + echo 'export PYTHONHOME=/usr/local' >> /etc/profile + echo 'export PYTHONPATH=/usr/local/lib/python${{ parameters.pythonVersion }}' >> /etc/profile + echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile + fi + " + else + # RHEL/DNF + docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " + # Try to install from repos first + if dnf install -y python${{ parameters.pythonVersion }} python${{ parameters.pythonVersion }}-devel python${{ parameters.pythonVersion }}-pip; then + ln -sf /usr/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python${{ parameters.pythonVersion }} + ln -sf /usr/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python + elif [ '${{ parameters.pythonVersion }}' = '3.10' ] || [ '${{ parameters.pythonVersion }}' = '3.13' ]; then + # Build from source + cd /tmp + if [ '${{ parameters.pythonVersion }}' = '3.10' ]; then + wget https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tgz -O python-${{ parameters.pythonVersion }}.tgz + else + wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz -O python-${{ parameters.pythonVersion }}.tgz + fi + + tar -xzf python-${{ parameters.pythonVersion }}.tgz + cd Python-${{ parameters.pythonVersion }}* + + # Disable optimizations for ARM64 + export CFLAGS='-O0 -fno-strict-overflow' + export CXXFLAGS='-O0' + + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr + make -j1 + make altinstall + ln -sf /usr/local/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python + fi + " + fi + displayName: 'Install Python ${{ parameters.pythonVersion }}' diff --git a/eng/pipelines/templates/uninstall-odbc-linux.yml b/eng/pipelines/templates/uninstall-odbc-linux.yml new file mode 100644 index 000000000..648dc224a --- /dev/null +++ b/eng/pipelines/templates/uninstall-odbc-linux.yml @@ -0,0 +1,59 @@ +parameters: + - name: distroName + type: string + - name: packageManager + type: string + - name: targetArch + type: string + +steps: +- script: | + if [ "${{ parameters.packageManager }}" = "apt" ]; then + docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " + export DEBIAN_FRONTEND=noninteractive + apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev + rm -rf /opt/microsoft/msodbcsql /usr/bin/sqlcmd /usr/bin/bcp + rm -f /lib/x86_64-linux-gnu/libodbcinst.so.2 /lib/aarch64-linux-gnu/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + + # Verify bundled driver + echo 'Verifying bundled driver library:' + if [ '${{ parameters.targetArch }}' = 'x86_64' ]; then + ldd mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " + elif [ "${{ parameters.packageManager }}" = "apk" ]; then + docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} sh -c " + apk del msodbcsql18 mssql-tools18 unixodbc-dev || true + rm -rf /opt/microsoft/msodbcsql /usr/bin/sqlcmd /usr/bin/bcp + rm -f /usr/lib/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + + # Verify bundled driver + echo 'Verifying bundled driver library:' + if [ '${{ parameters.targetArch }}' = 'x86_64' ]; then + ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " + else + # RHEL/DNF + docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " + dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel + rm -rf /opt/microsoft/msodbcsql /usr/bin/sqlcmd /usr/bin/bcp + rm -f /lib64/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + + # Verify bundled driver + echo 'Verifying bundled driver library:' + if [ '${{ parameters.targetArch }}' = 'x86_64' ]; then + ldd mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " + fi + displayName: 'Uninstall ODBC Driver for testing' From 9aac4d863899daa083677c05a4f6d33a5a5142e9 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Fri, 8 Aug 2025 12:19:50 +0530 Subject: [PATCH 47/93] arm64 more fixes --- eng/pipelines/build-whl-pipeline.yml | 1639 +++++++++++++---- .../templates/install-odbc-linux.yml | 68 - .../templates/install-python-linux.yml | 130 -- .../templates/uninstall-odbc-linux.yml | 59 - 4 files changed, 1240 insertions(+), 656 deletions(-) delete mode 100644 eng/pipelines/templates/install-odbc-linux.yml delete mode 100644 eng/pipelines/templates/install-python-linux.yml delete mode 100644 eng/pipelines/templates/uninstall-odbc-linux.yml diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 5dafa5d82..d462dadf9 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -1,358 +1,647 @@ +# Pipeline name shown in ADO UI name: build-whl-pipeline +# Trigger the pipeline on changes to the main branch trigger: branches: - include: [main] + include: + - main +# Schedule the pipeline to run on main branch daily at 07:00 AM IST schedules: - - cron: "30 1 * * *" # Daily at 07:00 AM IST + - cron: "30 1 * * *" displayName: Daily run at 07:00 AM IST branches: - include: [main] - always: true - -# Common variables -variables: - - name: DB_PASSWORD - value: $(DB_PASSWORD) - - name: pythonVersions - value: '3.10,3.11,3.12,3.13' + include: + - main + always: true # Always run even if there are no changes jobs: -# ===== Windows Build Job ===== -- job: BuildWindowsWheels +# - job: BuildWindowsWheels +# # Use the latest Windows image for building +# pool: +# vmImage: 'windows-latest' +# displayName: 'Build Windows -' +# # Strategy matrix to build all combinations +# strategy: +# matrix: +# # Python 3.10 (only x64) +# py310_x64: +# pythonVersion: '3.10' # Host Python version +# shortPyVer: '310' # Used in filenames like cp310 +# architecture: 'x64' # Host Python architecture +# targetArch: 'x64' # Target architecture to pass to build.bat + +# # Python 3.11 +# py311_x64: +# pythonVersion: '3.11' # Host Python version +# shortPyVer: '311' # Used in filenames like cp311 +# architecture: 'x64' # Host Python architecture +# targetArch: 'x64' # Target architecture to pass to build.bat +# py311_arm64: +# pythonVersion: '3.11' +# shortPyVer: '311' +# architecture: 'x64' # No arm64 Python, use x64 host +# targetArch: 'arm64' + +# # Python 3.12 +# py312_x64: +# pythonVersion: '3.12' +# shortPyVer: '312' +# architecture: 'x64' +# targetArch: 'x64' +# py312_arm64: +# pythonVersion: '3.12' +# shortPyVer: '312' +# architecture: 'x64' +# targetArch: 'arm64' + +# # Python 3.13 +# py313_x64: +# pythonVersion: '3.13' +# shortPyVer: '313' +# architecture: 'x64' +# targetArch: 'x64' +# py313_arm64: +# pythonVersion: '3.13' +# shortPyVer: '313' +# architecture: 'x64' +# targetArch: 'arm64' + +# steps: +# # Use correct Python version and architecture for the current job +# - task: UsePythonVersion@0 +# inputs: +# versionSpec: '$(pythonVersion)' +# architecture: '$(architecture)' +# addToPath: true +# displayName: 'Use Python $(pythonVersion) ($(architecture))' + +# # Install required packages: pip, CMake, pybind11 +# - script: | +# python -m pip install --upgrade pip +# pip install -r requirements.txt +# pip install cmake pybind11 +# displayName: 'Install dependencies' + +# # Start LocalDB instance +# - powershell: | +# sqllocaldb create MSSQLLocalDB +# sqllocaldb start MSSQLLocalDB +# displayName: 'Start LocalDB instance' + +# # Create database and user +# - powershell: | +# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" +# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" +# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" +# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" +# displayName: 'Setup database and user' +# env: +# DB_PASSWORD: $(DB_PASSWORD) + +# - task: DownloadPipelineArtifact@2 +# condition: eq(variables['targetArch'], 'arm64') +# inputs: +# buildType: 'specific' +# project: '$(System.TeamProject)' +# definition: 2162 +# buildVersionToDownload: 'latest' +# artifactName: 'mssql-python-arm64-libs' +# targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' +# displayName: 'Download ARM64 Python libs from latest successful run on branches' + +# # Build the PYD file by calling build.bat +# - script: | +# echo "Python Version: $(pythonVersion)" +# echo "Short Tag: $(shortPyVer)" +# echo "Architecture: Host=$(architecture), Target=$(targetArch)" + +# cd "$(Build.SourcesDirectory)\mssql_python\pybind" + +# REM Optional: override lib path if building for ARM64 since we cannot install arm64 python on x64 host +# if "$(targetArch)"=="arm64" ( +# echo Using arm64-specific Python library... +# set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 +# ) + +# REM Call build.bat to build the PYD file +# call build.bat $(targetArch) + +# REM Calling keep_single_arch.bat to remove ODBC libs of other architectures +# call keep_single_arch.bat $(targetArch) + +# cd ..\.. +# displayName: 'Build PYD for $(targetArch)' +# continueOnError: false + +# # Run pytests before packaging +# - powershell: | +# Write-Host "Running pytests to validate bindings" +# if ("$(targetArch)" -eq "arm64") { +# Write-Host "Skipping pytests on Windows ARM64" +# } else { +# python -m pytest -v +# } +# displayName: 'Run pytests' +# env: +# DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + +# # Copy the built .pyd file to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' +# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' +# TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' +# displayName: 'Place PYD file into artifacts directory' + +# # Copy the built .pdb files to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' +# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdbs' +# TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' +# displayName: 'Place PDB file into artifacts directory' + +# # Build wheel package for the current architecture +# - script: | +# python -m pip install --upgrade pip +# pip install wheel setuptools +# set ARCHITECTURE=$(targetArch) +# python setup.py bdist_wheel +# displayName: 'Build wheel package for Python $(pythonVersion) ($(targetArch))' + +# # Copy the wheel file to the artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)\dist' +# Contents: '*.whl' +# TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' +# displayName: 'Collect wheel package' + +# # Publish the collected .pyd file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish all PYDs as artifacts' + +# # Publish the python arm64 libraries as build artifacts for next builds if ARM64 +# # We publish them only for ARM64 builds since we cannot install arm64 Python on x64 host +# # This allows us to reuse the libraries in future ARM64 builds +# # Publishing will retain the libraries in the build artifacts +# - task: PublishBuildArtifacts@1 +# condition: eq(variables['targetArch'], 'arm64') +# inputs: +# PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' +# ArtifactName: 'mssql-python-arm64-libs' +# publishLocation: 'Container' +# displayName: 'Publish arm64 libs as artifacts' + +# # Publish the collected wheel file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish all wheels as artifacts' + +# - job: BuildMacOSWheels +# # Use the latest macOS image for building +# pool: +# vmImage: 'macos-latest' +# # Display name for the job in Azure DevOps UI +# displayName: 'Build macOS - ' +# strategy: +# matrix: +# # Python 3.13 (universal2 for both arm64 and x86_64) +# py313_universal2: +# pythonVersion: '3.13' +# shortPyVer: '313' +# # Always use universal2 for macOS +# targetArch: 'universal2' + +# # Python 3.12 (universal2 for both arm64 and x86_64) +# py312_universal2: +# pythonVersion: '3.12' +# shortPyVer: '312' +# targetArch: 'universal2' + +# # Python 3.11 (universal2 for both arm64 and x86_64) +# py311_universal2: +# pythonVersion: '3.11' +# shortPyVer: '311' +# targetArch: 'universal2' + +# # Python 3.10 (universal2 for both arm64 and x86_64) +# py310_universal2: +# pythonVersion: '3.10' +# shortPyVer: '310' +# targetArch: 'universal2' + +# steps: +# # Use correct Python version and architecture for the current job +# - task: UsePythonVersion@0 +# inputs: +# versionSpec: '$(pythonVersion)' +# addToPath: true +# displayName: 'Use Python $(pythonVersion) (Universal2)' + +# # Install CMake on macOS +# - script: | +# brew update +# brew install cmake +# displayName: 'Install CMake' + +# # Install required packages: pip, CMake, pybind11 +# - script: | +# python -m pip install --upgrade pip +# pip install -r requirements.txt +# pip install cmake pybind11 +# displayName: 'Install dependencies' + +# # Build the .so file by calling build.sh +# - script: | +# echo "Python Version: $(pythonVersion)" +# echo "Short Tag: $(shortPyVer)" +# echo "Building Universal2 Binary" +# cd "$(Build.SourcesDirectory)/mssql_python/pybind" +# # Call build.sh to build the .so file +# ./build.sh +# displayName: 'Build .so file' +# continueOnError: false + +# # Copy the built .so file to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)/mssql_python' +# Contents: '*.so' +# TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' +# displayName: 'Place .so file into artifacts directory' + +# - script: | +# brew update +# brew install docker colima + +# # Try VZ first, fallback to QEMU if it fails +# # Use more conservative resource allocation for Azure DevOps runners +# colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ +# colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu + +# # Set a timeout to ensure Colima starts properly +# sleep 30 + +# # Optional: set Docker context (usually automatic) +# docker context use colima >/dev/null || true + +# # Confirm Docker is operational +# docker version +# docker ps +# displayName: 'Install and start Colima-based Docker' +# timeoutInMinutes: 15 + +# - script: | +# # Pull and run SQL Server container +# docker pull mcr.microsoft.com/mssql/server:2022-latest +# docker run \ +# --name sqlserver \ +# -e ACCEPT_EULA=Y \ +# -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ +# -p 1433:1433 \ +# -d mcr.microsoft.com/mssql/server:2022-latest + +# # Starting SQL Server container… +# for i in {1..30}; do +# docker exec sqlserver \ +# /opt/mssql-tools18/bin/sqlcmd \ +# -S localhost \ +# -U SA \ +# -P "$DB_PASSWORD" \ +# -C -Q "SELECT 1" && break +# sleep 2 +# done +# displayName: 'Pull & start SQL Server (Docker)' +# env: +# DB_PASSWORD: $(DB_PASSWORD) + +# # Run Pytest to ensure the bindings work correctly +# - script: | +# python -m pytest -v +# displayName: 'Run Pytest to validate bindings' +# env: +# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + +# # Build wheel package for universal2 +# - script: | +# python -m pip install --upgrade pip +# pip install wheel setuptools +# python setup.py bdist_wheel +# displayName: 'Build $(pythonVersion) universal2 whl' + +# # Copy the wheel file to the artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)/dist' +# Contents: '*.whl' +# TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' +# displayName: 'Collect wheel package' + +# # Publish the collected .so file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish all .so files as artifacts' + +# # Publish the collected wheel file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish all wheels as artifacts' + +- job: BuildLinuxWheels pool: - vmImage: 'windows-latest' - displayName: 'Build Windows' + vmImage: 'ubuntu-latest' + displayName: 'Build Linux -' + timeoutInMinutes: 120 + strategy: matrix: - # Python 3.10 (x64 only) - py310_x64: + # Python 3.10 (x86_64 and ARM64) + # py310_x86_64_ubuntu: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py310_arm64_ubuntu: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py310_x86_64_debian: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py310_arm64_debian: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py310_x86_64_rhel: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # buildFromSource: 'true' + # py310_arm64_rhel: + # pythonVersion: '3.10' + # shortPyVer: '310' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # buildFromSource: 'true' + + # # Python 3.11 (x86_64 and ARM64) + # py311_x86_64_ubuntu: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py311_arm64_ubuntu: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py311_x86_64_debian: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py311_arm64_debian: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py311_x86_64_rhel: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # py311_arm64_rhel: + # pythonVersion: '3.11' + # shortPyVer: '311' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + + # # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA + # # Only build for Debian and RHEL where Python 3.12 is available + # py312_x86_64_debian: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py312_arm64_debian: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'debian:12' + # distroName: 'Debian' + # packageManager: 'apt' + # py312_x86_64_rhel: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + # py312_arm64_rhel: + # pythonVersion: '3.12' + # shortPyVer: '312' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + # distroName: 'RHEL' + # packageManager: 'dnf' + + # # Python 3.13 (x86_64 and ARM64) + # py313_x86_64_ubuntu: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'x86_64' + # dockerPlatform: 'linux/amd64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + # py313_arm64_ubuntu: + # pythonVersion: '3.13' + # shortPyVer: '313' + # targetArch: 'arm64' + # dockerPlatform: 'linux/arm64' + # dockerImage: 'ubuntu:22.04' + # distroName: 'Ubuntu' + # packageManager: 'apt' + + # Python 3.13 (x86_64 and ARM64) - Built from source for Debian and RHEL (not available via package managers) + py313_x86_64_debian: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'debian:12' + distroName: 'Debian' + packageManager: 'apt' + py313_arm64_debian: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'debian:12' + distroName: 'Debian' + packageManager: 'apt' + py313_x86_64_rhel: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + distroName: 'RHEL' + packageManager: 'dnf' + buildFromSource: 'true' + py313_arm64_rhel: + pythonVersion: '3.13' + shortPyVer: '313' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' + distroName: 'RHEL' + packageManager: 'dnf' + buildFromSource: 'true' + + # Alpine Linux (x86_64 and ARM64) + py310_x86_64_alpine: pythonVersion: '3.10' shortPyVer: '310' - architecture: 'x64' - targetArch: 'x64' - - # Python 3.11 (x64 + ARM64) - py311_x64: + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py310_arm64_alpine: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py311_x86_64_alpine: pythonVersion: '3.11' shortPyVer: '311' - architecture: 'x64' - targetArch: 'x64' - py311_arm64: + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py311_arm64_alpine: pythonVersion: '3.11' shortPyVer: '311' - architecture: 'x64' # Build on x64 host targetArch: 'arm64' - - # Python 3.12 (x64 + ARM64) - py312_x64: + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py312_x86_64_alpine: pythonVersion: '3.12' shortPyVer: '312' - architecture: 'x64' - targetArch: 'x64' - py312_arm64: + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py312_arm64_alpine: pythonVersion: '3.12' shortPyVer: '312' - architecture: 'x64' targetArch: 'arm64' - - # Python 3.13 (x64 + ARM64) - py313_x64: + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py313_x86_64_alpine: pythonVersion: '3.13' shortPyVer: '313' - architecture: 'x64' - targetArch: 'x64' - py313_arm64: + targetArch: 'x86_64' + dockerPlatform: 'linux/amd64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' + py313_arm64_alpine: pythonVersion: '3.13' shortPyVer: '313' - architecture: 'x64' targetArch: 'arm64' + dockerPlatform: 'linux/arm64' + dockerImage: 'alpine:latest' + distroName: 'alpine' + packageManager: 'apk' steps: - # Setup Python - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(pythonVersion)' - architecture: '$(architecture)' - addToPath: true - displayName: 'Setup Python $(pythonVersion) ($(architecture))' - - # Install dependencies - - script: | - python -m pip install --upgrade pip - pip install -r requirements.txt cmake pybind11 - displayName: 'Install dependencies' - - # Setup LocalDB for testing - - powershell: | - sqllocaldb create MSSQLLocalDB - sqllocaldb start MSSQLLocalDB - displayName: 'Start LocalDB' - - - powershell: | - sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" - sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" - sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" - sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" - displayName: 'Setup test database' - env: - DB_PASSWORD: $(DB_PASSWORD) - - # Download ARM64 libs if building for ARM64 - - task: DownloadPipelineArtifact@2 - condition: eq(variables['targetArch'], 'arm64') - inputs: - buildType: 'specific' - project: '$(System.TeamProject)' - definition: 2162 - buildVersionToDownload: 'latest' - artifactName: 'mssql-python-arm64-libs' - targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - displayName: 'Download ARM64 Python libs' - - # Build PYD - - script: | - echo Building for Python $(pythonVersion) $(targetArch) - cd "$(Build.SourcesDirectory)\mssql_python\pybind" - - REM Set ARM64 lib path if needed - if "$(targetArch)"=="arm64" ( - set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 - ) - - call build.bat $(targetArch) - call keep_single_arch.bat $(targetArch) - cd ..\.. - displayName: 'Build PYD for $(targetArch)' - continueOnError: false - - # Run tests (skip for ARM64) - - powershell: | - if ("$(targetArch)" -eq "arm64") { - Write-Host "Skipping tests on Windows ARM64" - } else { - python -m pytest -v - } - displayName: 'Run tests' - env: - DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - - # Copy artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' - Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' - TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' - displayName: 'Collect PYD files' - - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' - Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdb' - TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' - displayName: 'Collect PDB files' - - # Build wheel - - script: | - python -m pip install wheel setuptools - set ARCHITECTURE=$(targetArch) - python setup.py bdist_wheel - displayName: 'Build wheel' - - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)\dist' - Contents: '*.whl' - TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' - displayName: 'Collect wheel' - - # Publish artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - displayName: 'Publish PYD artifacts' - - - task: PublishBuildArtifacts@1 - condition: eq(variables['targetArch'], 'arm64') - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - ArtifactName: 'mssql-python-arm64-libs' - displayName: 'Publish ARM64 libs' - - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' - ArtifactName: 'mssql-python-wheels-dist' - displayName: 'Publish wheels' - -# ===== macOS Build Job ===== -- job: BuildMacOSWheels - pool: - vmImage: 'macos-latest' - displayName: 'Build macOS' - strategy: - matrix: - # All versions use universal2 (x86_64 + arm64) - py310_universal2: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'universal2'} - py311_universal2: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'universal2'} - py312_universal2: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'universal2'} - py313_universal2: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'universal2'} - - steps: - # Setup Python - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(pythonVersion)' - addToPath: true - displayName: 'Setup Python $(pythonVersion)' - - # Install dependencies - - script: | - brew update && brew install cmake - python -m pip install --upgrade pip - pip install -r requirements.txt cmake pybind11 - displayName: 'Install dependencies' - - # Build .so file - - script: | - echo "Building universal2 binary for Python $(pythonVersion)" - cd "$(Build.SourcesDirectory)/mssql_python/pybind" - ./build.sh - displayName: 'Build .so file' - - # Copy artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)/mssql_python' - Contents: '*.so' - TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' - displayName: 'Collect .so files' - - # Setup Docker for SQL Server - - script: | - brew update && brew install docker colima - # Try VZ virtualization first, fallback to QEMU - colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ - colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu - sleep 30 - docker version - displayName: 'Setup Docker with Colima' - timeoutInMinutes: 15 - - # Start SQL Server - - script: | - docker pull mcr.microsoft.com/mssql/server:2022-latest - docker run -d --name sqlserver \ - -e ACCEPT_EULA=Y \ - -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ - -p 1433:1433 \ - mcr.microsoft.com/mssql/server:2022-latest - - # Wait for SQL Server - for i in {1..30}; do - docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ - -S localhost -U SA -P "$DB_PASSWORD" -C -Q "SELECT 1" && break - sleep 2 - done - displayName: 'Start SQL Server' - env: - DB_PASSWORD: $(DB_PASSWORD) - - # Run tests - - script: python -m pytest -v - displayName: 'Run tests' - env: - DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - - # Build wheel - - script: | - python -m pip install wheel setuptools - python setup.py bdist_wheel - displayName: 'Build wheel' - - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)/dist' - Contents: '*.whl' - TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' - displayName: 'Collect wheel' - - # Publish artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - displayName: 'Publish .so artifacts' - - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' - ArtifactName: 'mssql-python-wheels-dist' - displayName: 'Publish wheels' - -# ===== Linux Build Job ===== -- job: BuildLinuxWheels - pool: - vmImage: 'ubuntu-latest' - displayName: 'Build Linux' - timeoutInMinutes: 120 - - strategy: - matrix: - # Python 3.10 - py310_x86_64_ubuntu: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} - py310_arm64_ubuntu: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} - py310_x86_64_debian: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} - py310_arm64_debian: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} - py310_x86_64_rhel: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf', buildFromSource: 'true'} - py310_arm64_rhel: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf', buildFromSource: 'true'} - py310_x86_64_alpine: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} - py310_arm64_alpine: {pythonVersion: '3.10', shortPyVer: '310', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} - - # Python 3.11 - py311_x86_64_ubuntu: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} - py311_arm64_ubuntu: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} - py311_x86_64_debian: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} - py311_arm64_debian: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} - py311_x86_64_rhel: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf'} - py311_arm64_rhel: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf'} - py311_x86_64_alpine: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} - py311_arm64_alpine: {pythonVersion: '3.11', shortPyVer: '311', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} - - # Python 3.12 (not available for Ubuntu 22.04) - py312_x86_64_debian: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} - py312_arm64_debian: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} - py312_x86_64_rhel: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf'} - py312_arm64_rhel: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf'} - py312_x86_64_alpine: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} - py312_arm64_alpine: {pythonVersion: '3.12', shortPyVer: '312', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} - - # Python 3.13 - py313_x86_64_ubuntu: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} - py313_arm64_ubuntu: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'ubuntu:22.04', distroName: 'Ubuntu', packageManager: 'apt'} - py313_x86_64_debian: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} - py313_arm64_debian: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'debian:12', distroName: 'Debian', packageManager: 'apt'} - py313_x86_64_rhel: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf', buildFromSource: 'true'} - py313_arm64_rhel: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest', distroName: 'RHEL', packageManager: 'dnf', buildFromSource: 'true'} - py313_x86_64_alpine: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'x86_64', dockerPlatform: 'linux/amd64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} - py313_arm64_alpine: {pythonVersion: '3.13', shortPyVer: '313', targetArch: 'arm64', dockerPlatform: 'linux/arm64', dockerImage: 'alpine:latest', distroName: 'alpine', packageManager: 'apk'} - - steps: - # Setup Docker buildx + # Set up Docker buildx for multi-architecture support - script: | docker run --rm --privileged multiarch/qemu-user-static --reset -p yes docker buildx create --name multiarch --driver docker-container --use || true docker buildx inspect --bootstrap - displayName: 'Setup Docker buildx' + displayName: 'Setup Docker buildx for multi-architecture support' - # Create build container - script: | + # Create a Docker container for building docker run -d --name build-container-$(distroName)-$(targetArch) \ --platform $(dockerPlatform) \ -v $(Build.SourcesDirectory):/workspace \ @@ -360,10 +649,10 @@ jobs: --network bridge \ $(dockerImage) \ tail -f /dev/null - displayName: 'Create container' + displayName: 'Create $(distroName) $(targetArch) container' - # Start SQL Server - script: | + # Start SQL Server container (always x86_64 since SQL Server doesn't support ARM64) docker run -d --name sqlserver-$(distroName)-$(targetArch) \ --platform linux/amd64 \ -e ACCEPT_EULA=Y \ @@ -371,131 +660,676 @@ jobs: -p 1433:1433 \ mcr.microsoft.com/mssql/server:2022-latest - # Wait for SQL Server - echo "Waiting for SQL Server..." + # Wait for SQL Server to be ready + echo "Waiting for SQL Server to start..." for i in {1..60}; do if docker exec sqlserver-$(distroName)-$(targetArch) \ - /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then - echo "SQL Server ready!" + /opt/mssql-tools18/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P "$(DB_PASSWORD)" \ + -C -Q "SELECT 1" >/dev/null 2>&1; then + echo "SQL Server is ready!" break fi + echo "Waiting... ($i/60)" sleep 2 done # Create test database docker exec sqlserver-$(distroName)-$(targetArch) \ - /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "CREATE DATABASE TestDB" - displayName: 'Start SQL Server' + /opt/mssql-tools18/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P "$(DB_PASSWORD)" \ + -C -Q "CREATE DATABASE TestDB" + displayName: 'Start SQL Server container for $(distroName) $(targetArch)' env: DB_PASSWORD: $(DB_PASSWORD) - # Install base dependencies - script: | + # Install dependencies in the container if [ "$(packageManager)" = "apt" ]; then + # Ubuntu/Debian docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive TZ=UTC + export DEBIAN_FRONTEND=noninteractive + export TZ=UTC ln -snf /usr/share/zoneinfo/\$TZ /etc/localtime && echo \$TZ > /etc/timezone + + # Update package lists apt-get update + + # Install basic tools first apt-get install -y software-properties-common curl wget gnupg build-essential cmake - # Add deadsnakes PPA for Ubuntu + # Add deadsnakes PPA for newer Python versions (Ubuntu only) if [ '$(distroName)' = 'Ubuntu' ]; then - add-apt-repository -y ppa:deadsnakes/ppa && apt-get update + add-apt-repository -y ppa:deadsnakes/ppa + apt-get update + fi + + # Install Python and development packages + # Handle different Python version availability per distribution + if [ '$(distroName)' = 'Debian' ]; then + # Debian 12 has Python 3.11 by default, some older/newer versions may not be available + case '$(pythonVersion)' in + '3.11') + # Python 3.11 is the default in Debian 12 + apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils + PYTHON_CMD=python$(pythonVersion) + ;; + '3.10'|'3.12') + # These versions may not be available in Debian 12, use python3 and create symlinks + echo 'Python $(pythonVersion) may not be available in Debian 12, using available python3' + apt-get install -y python3 python3-dev python3-venv + # Note: distutils is not available for Python 3.12+ + if [ '$(pythonVersion)' != '3.12' ]; then + apt-get install -y python3-distutils || echo 'distutils not available for this Python version' + fi + # Create symlinks to make the desired version available + # Find the actual python3 version and create proper symlinks + ACTUAL_PYTHON=\$(python3 --version | grep -o '[0-9]\+\.[0-9]\+') + echo 'Detected Python version:' \$ACTUAL_PYTHON + ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python3 /usr/local/bin/python + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + ;; + '3.13') + # Python 3.13 requires building from source + echo 'Python $(pythonVersion) requires building from source' + echo 'DEBUG: pythonVersion = $(pythonVersion)' + + # Install dependencies needed for Python source compilation + apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev + apt-get install -y libreadline-dev libsqlite3-dev wget curl llvm + apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev + apt-get install -y libffi-dev liblzma-dev python3-openssl + apt-get install -y libgdbm-dev libnss3-dev libedit-dev || echo 'Some optional dependencies not available' + + # Verify SSL development libraries are installed + echo 'Verifying SSL development libraries:' + dpkg -l | grep libssl-dev || echo 'libssl-dev not found' + pkg-config --exists openssl && echo 'OpenSSL pkg-config found' || echo 'OpenSSL pkg-config missing' + + # Download Python source - fix version mismatch + cd /tmp + PYTHON_FULL_VERSION='3.13.1' + PYTHON_URL=\"https://www.python.org/ftp/python/\$PYTHON_FULL_VERSION/Python-\$PYTHON_FULL_VERSION.tgz\" + echo \"Downloading Python from \$PYTHON_URL\" + wget \$PYTHON_URL -O python-\$PYTHON_FULL_VERSION.tgz + tar -xzf python-\$PYTHON_FULL_VERSION.tgz + cd Python-\$PYTHON_FULL_VERSION + + # Configure and compile Python with SSL support explicitly enabled + echo 'Configuring Python build with SSL support' + # Disable optimizations for ARM64 builds to speed up compilation in emulated environment + if [ '$(targetArch)' = 'arm64' ]; then + echo 'ARM64 build detected - disabling optimizations for faster compilation' + # Disable compiler optimizations to prevent GCC ICE in emulated ARM64 + export CFLAGS="-O0 -fno-strict-overflow" + export CXXFLAGS="-O0" + export OPT="-O0" + + ./configure \\ + --prefix=/usr/local \\ + --with-ensurepip=install \\ + --enable-loadable-sqlite-extensions \\ + --with-openssl=/usr \\ + OPT=\"\$OPT\" \\ + CFLAGS=\"\$CFLAGS\" + + else + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr + fi + + make -j1 OPT=\"\$OPT\" CFLAGS=\"\$CFLAGS\" + make altinstall + + # Create symlinks - altinstall creates python3.13, we create python symlink + ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python + + # Verify installation and SSL support + echo 'Verifying Python 3.13 installation:' + ls -l /usr/local/bin/python$(pythonVersion) || echo 'ERROR: Python $(pythonVersion) not found' + /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL support in Python:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' + + # Clean up + cd / + rm -rf /tmp/Python-\$PYTHON_FULL_VERSION /tmp/python-\$PYTHON_FULL_VERSION.tgz + + echo 'Successfully built and installed Python $(pythonVersion) from source' + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + ;; + *) + echo 'Unsupported Python version $(pythonVersion) for Debian, using python3' + apt-get install -y python3 python3-dev python3-venv + ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python3 /usr/local/bin/python + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + ;; + esac + else + # Ubuntu has deadsnakes PPA, so more versions are available + # Note: distutils is not available for newer Python versions (3.12+) + if [ '$(pythonVersion)' = '3.12' ] || [ '$(pythonVersion)' = '3.13' ]; then + apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv + else + apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils + fi + # For Ubuntu, create symlinks for consistency + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + fi + + # Install pip for the specific Python version + curl -sS https://bootstrap.pypa.io/get-pip.py | \$PYTHON_CMD + + # Install remaining packages + apt-get install -y pybind11-dev || echo 'pybind11-dev not available, will install via pip' + + # Verify Python installation + echo 'Python installation verification:' + echo 'Using PYTHON_CMD:' \$PYTHON_CMD + \$PYTHON_CMD --version || echo 'Python version check failed' + if [ -f /usr/local/bin/python ]; then + /usr/local/bin/python --version || echo 'Local python version check failed' fi " elif [ "$(packageManager)" = "apk" ]; then + # Alpine Linux docker exec build-container-$(distroName)-$(targetArch) sh -c " + # Update package index apk update - apk add --no-cache build-base cmake clang git bash wget curl gnupg \ - unixodbc unixodbc-dev libffi-dev openssl-dev zlib-dev patchelf + + # Install base build tools and system dependencies + apk add --no-cache \ + build-base \ + cmake \ + clang \ + git \ + bash \ + wget \ + curl \ + gnupg \ + unixodbc \ + unixodbc-dev \ + libffi-dev \ + openssl-dev \ + zlib-dev \ + patchelf + + # Python installation - hybrid approach + if [ '$(pythonVersion)' = '3.12' ]; then + # Use pre-available Python 3.12 from Alpine packages + echo 'Using pre-available Python 3.12 from Alpine packages' + apk add --no-cache py3-pip python3-dev + + # Create symlinks for Python compatibility + ln -sf python3 /usr/bin/python || true + ln -sf pip3 /usr/bin/pip || true + else + # Build Python from source for other versions (3.10, 3.11, 3.13) + echo 'Building Python $(pythonVersion) from source for Alpine Linux' + apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev linux-headers + + # Download and compile Python from source + cd /tmp + wget https://www.python.org/ftp/python/$(pythonVersion).1/Python-$(pythonVersion).1.tgz + tar xzf Python-$(pythonVersion).1.tgz + cd Python-$(pythonVersion).1 + + # Configure and build Python - Alpine/musl specific configuration + # Set cache variables to help configure detect musl libc types correctly + export ac_cv_file__dev_ptmx=yes + export ac_cv_file__dev_ptc=no + export ac_cv_have_long_long_format=yes + # Fix LONG_BIT detection for musl libc on ARM64 + export ac_cv_sizeof_long=8 + export ac_cv_sizeof_size_t=8 + export ac_cv_sizeof_pid_t=4 + export ac_cv_sizeof_void_p=8 + # Fix float word ordering detection for ARM64 + export ax_cv_c_float_words_bigendian=no + + # Disable optimizations to prevent GCC ICE and compilation errors + export CFLAGS="-O0 -fno-strict-overflow" + export CXXFLAGS="-O0" + export OPT="-O0" + + ./configure \\ + --prefix=/usr/local \\ + --enable-shared \\ + --with-ensurepip=install \\ + --disable-ipv6 \\ + --build=aarch64-alpine-linux-musl \\ + --host=aarch64-alpine-linux-musl \\ + --target=aarch64-alpine-linux-musl \\ + OPT=\"\$OPT\" \\ + CFLAGS=\"\$CFLAGS\" \\ + CPPFLAGS='-I/usr/include -DLONG_BIT=64' \\ + LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' + + # Build Python without optimizations and with explicit flags + echo 'Building Python $(pythonVersion) with disabled optimizations to avoid compilation issues' + make -j1 OPT=\"\$OPT\" CFLAGS=\"\$CFLAGS\" + + make altinstall + + # Set up environment for proper Python operation + export PYTHONHOME=/usr/local + export PYTHONPATH=/usr/local/lib/python$(pythonVersion) + export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH + + # Create symlinks for easier access + ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python + ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip + + # Set up persistent environment variables for source-compiled Python + echo 'export PYTHONHOME=/usr/local' >> /etc/profile + echo 'export PYTHONPATH=/usr/local/lib/python$(pythonVersion)' >> /etc/profile + echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile + + # Verify Python installation and modules + echo 'Verifying Python $(pythonVersion) installation:' + ls -la /usr/local/bin/python$(pythonVersion) + /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL and encodings support:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support: OK\")' + echo 'Python installation successful' + + # Clean up build files + cd / + rm -rf /tmp/Python-$(pythonVersion).1* + fi + + # Verify installation and architecture + echo 'Architecture:' \$(uname -m) + echo 'Alpine version:' \$(cat /etc/alpine-release) + python --version + which cmake " else # RHEL/DNF docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Enable CodeReady Builder repository for additional packages (skip if not available) dnf install -y dnf-plugins-core || true - dnf install -y epel-release || echo 'EPEL not available' - dnf config-manager --set-enabled crb || dnf config-manager --set-enabled powertools || true + dnf install -y epel-release || echo 'EPEL not available in UBI9, continuing without it' + dnf config-manager --set-enabled crb || dnf config-manager --set-enabled powertools || echo 'No additional repos to enable' + + # Install dependencies dnf update -y - dnf install -y gcc gcc-c++ make cmake wget gnupg2 glibc-devel kernel-headers - dnf install -y --allowerasing curl || true - dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel || true + dnf groupinstall -y 'Development Tools' || echo 'Development Tools group not available, installing individual packages' + + # Install development tools and cmake separately to ensure they work + # Note: Handle curl conflicts by replacing curl-minimal with curl + dnf install -y wget gnupg2 glibc-devel kernel-headers + dnf install -y --allowerasing curl || dnf install -y curl || echo 'curl installation failed, continuing' + dnf install -y gcc gcc-c++ make binutils + dnf install -y cmake + + # Install additional dependencies needed for Python source compilation + # Some packages may not be available in UBI9, so install what we can + dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel || echo 'Some core devel packages failed' + dnf install -y ncurses-devel sqlite-devel xz-devel || echo 'Some optional devel packages not available' + # These are often missing in UBI9, install if available + dnf install -y readline-devel tk-devel gdbm-devel libnsl2-devel libuuid-devel || echo 'Some Python build dependencies not available in UBI9' + + # If that doesn't work, try installing from different repositories + if ! which gcc; then + echo 'Trying alternative gcc installation...' + dnf --enablerepo=ubi-9-codeready-builder install -y gcc gcc-c++ + fi + + # For RHEL, we need to handle Python versions more carefully + # RHEL 9 UBI has python3.9 by default, but we don't support 3.9 + # We need to install specific versions or build from source + + # First, try to install the specific Python version + PYTHON_INSTALLED=false + echo 'Trying to install Python $(pythonVersion) from available repositories' + # Try from default repos first + if dnf install -y python$(pythonVersion) python$(pythonVersion)-devel python$(pythonVersion)-pip; then + echo 'Successfully installed Python $(pythonVersion) from default repos' + PYTHON_INSTALLED=true + # Create symlinks for the specific version + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python + else + echo 'Python $(pythonVersion) not available in default RHEL repos' + # For Python 3.11+ which might be available in newer RHEL versions + if [ '$(pythonVersion)' = '3.11' ] || [ '$(pythonVersion)' = '3.12' ]; then + echo 'Trying alternative installation for Python $(pythonVersion)' + # Try installing from additional repos + dnf install -y python$(pythonVersion) python$(pythonVersion)-devel python$(pythonVersion)-pip || true + if command -v python$(pythonVersion) >/dev/null 2>&1; then + echo 'Found Python $(pythonVersion) after alternative installation' + PYTHON_INSTALLED=true + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python + fi + elif [ '$(pythonVersion)' = '3.10' ] || [ '$(pythonVersion)' = '3.13' ]; then + echo 'Python $(pythonVersion) requires building from source' + + # Download Python source + cd /tmp + if [ '$(pythonVersion)' = '3.10' ]; then + PYTHON_URL='https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tgz' + elif [ '$(pythonVersion)' = '3.13' ]; then + PYTHON_URL='https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz' + fi + + echo \"Downloading Python from \$PYTHON_URL\" + wget \$PYTHON_URL -O python-$(pythonVersion).tgz + tar -xzf python-$(pythonVersion).tgz + cd Python-$(pythonVersion)* + + # Disable compiler optimizations to prevent GCC ICE in emulated ARM64 + export CFLAGS="-O0 -fno-strict-overflow" + export CXXFLAGS="-O0" + export OPT="-O0" + + ./configure \\ + --prefix=/usr/local \\ + --with-ensurepip=install \\ + --enable-loadable-sqlite-extensions \\ + --with-openssl=/usr \\ + OPT=\"\$OPT\" \\ + CFLAGS=\"\$CFLAGS\" + + # Use single-threaded build to reduce memory pressure under QEMU + make -j1 OPT=\"\$OPT\" CFLAGS=\"\$CFLAGS\" + make altinstall + # Create symlinks - altinstall creates python3.13, we create python symlink + ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python + + # Verify installation and SSL support + /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL support in Python:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' + PYTHON_INSTALLED=true + + # Clean up + cd / + rm -rf /tmp/Python-$(pythonVersion)* /tmp/python-$(pythonVersion).tgz + + echo 'Successfully built and installed Python $(pythonVersion) from source' + fi + fi + + # If we couldn't install the specific version, fail the build + if [ \"\$PYTHON_INSTALLED\" = \"false\" ]; then + echo 'ERROR: Could not install Python $(pythonVersion) - unsupported version' + echo 'Supported versions for RHEL: 3.11, 3.12 (and 3.10, 3.13 via source compilation)' + exit 1 + fi + + # Install pybind11 development headers + dnf install -y python3-pybind11-devel || echo 'pybind11-devel not available, will install via pip' + + # Verify installations + echo 'Verifying installations:' + python3 --version || echo 'python3 not found' + which gcc && which g++ || echo 'gcc/g++ not found' + gcc --version || echo 'gcc version check failed' + g++ --version || echo 'g++ version check failed' + cmake --version || echo 'cmake not found in PATH' + which cmake || echo 'cmake binary not found' " fi - displayName: 'Install base dependencies' - - # Install Python - - template: templates/install-python-linux.yml - parameters: - distroName: $(distroName) - packageManager: $(packageManager) - pythonVersion: $(pythonVersion) - targetArch: $(targetArch) - - # Install ODBC driver - - template: templates/install-odbc-linux.yml - parameters: - distroName: $(distroName) - packageManager: $(packageManager) - targetArch: $(targetArch) - - # Install Python packages + displayName: 'Install basic dependencies in $(distroName) $(targetArch) container' + - script: | + # Install ODBC driver in the container + if [ "$(packageManager)" = "apt" ]; then + # Ubuntu/Debian + docker exec build-container-$(distroName)-$(targetArch) bash -c " + export DEBIAN_FRONTEND=noninteractive + + # Download the package to configure the Microsoft repo + if [ '$(distroName)' = 'Ubuntu' ]; then + curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb + else + # Debian 12 + curl -sSL -O https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb + fi + + # Install the package + dpkg -i packages-microsoft-prod.deb || true + rm packages-microsoft-prod.deb + + # Update package list + apt-get update + + # Install the driver + ACCEPT_EULA=Y apt-get install -y msodbcsql18 + # optional: for bcp and sqlcmd + ACCEPT_EULA=Y apt-get install -y mssql-tools18 + # optional: for unixODBC development headers + apt-get install -y unixodbc-dev + " + elif [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Detect architecture for ODBC driver download + case \$(uname -m) in + x86_64) architecture='amd64' ;; + arm64|aarch64) architecture='arm64' ;; + *) architecture='unsupported' ;; + esac + + if [[ 'unsupported' == '\$architecture' ]]; then + echo 'Alpine architecture \$(uname -m) is not currently supported.' + exit 1 + fi + + echo 'Detected architecture: '\$architecture + + # Download the packages + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.apk + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Download signatures for verification + curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.sig + curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.sig + + # Import Microsoft GPG key and verify packages + curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - + gpg --verify msodbcsql18_18.5.1.1-1_\$architecture.sig msodbcsql18_18.5.1.1-1_\$architecture.apk + gpg --verify mssql-tools18_18.4.1.1-1_\$architecture.sig mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Install the packages + apk add --allow-untrusted msodbcsql18_18.5.1.1-1_\$architecture.apk + apk add --allow-untrusted mssql-tools18_18.4.1.1-1_\$architecture.apk + + # Cleanup + rm -f msodbcsql18_18.5.1.1-1_\$architecture.* mssql-tools18_18.4.1.1-1_\$architecture.* + + # Add mssql-tools to PATH + export PATH=\"\$PATH:/opt/mssql-tools18/bin\" + echo 'export PATH=\"\$PATH:/opt/mssql-tools18/bin\"' >> ~/.bashrc + " + else + # RHEL/DNF + docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Add Microsoft repository for RHEL 9 + curl -sSL -O https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm + rpm -Uvh packages-microsoft-prod.rpm + rm packages-microsoft-prod.rpm + + # Update package list + dnf update -y + + # Install the driver + ACCEPT_EULA=Y dnf install -y msodbcsql18 + # optional: for bcp and sqlcmd + ACCEPT_EULA=Y dnf install -y mssql-tools18 + # optional: for unixODBC development headers + dnf install -y unixODBC-devel + " + fi + displayName: 'Install ODBC Driver in $(distroName) $(targetArch) container' + + - script: | + # Install Python dependencies in the container using virtual environment docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Setup Python environment for Alpine + # Determine which Python command to use + # Set up Python environment before determining command if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then + # For source-compiled Python on Alpine, set environment variables export PYTHONHOME=/usr/local export PYTHONPATH=/usr/local/lib/python$(pythonVersion) export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH fi - # Find Python command - if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' = '3.12' ]; then - PYTHON_CMD=python3 - elif command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - elif command -v python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=python$(pythonVersion) + if [ '$(packageManager)' = 'apk' ]; then + # Alpine Linux - check if we built from source or used pre-installed + if [ '$(pythonVersion)' = '3.12' ]; then + # Using pre-installed Python 3.12 + PYTHON_CMD=python3 + else + # Using source-compiled Python + if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + elif command -v python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=python$(pythonVersion) + else + echo 'No Python $(pythonVersion) interpreter found after source compilation' + exit 1 + fi + fi else - PYTHON_CMD=python3 + # Ubuntu/Debian/RHEL - determine the best Python command + if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + elif command -v python$(pythonVersion) >/dev/null 2>&1; then + PYTHON_CMD=python$(pythonVersion) + elif command -v python3 >/dev/null 2>&1; then + PYTHON_CMD=python3 + else + echo 'No Python interpreter found' + exit 1 + fi fi - # Create virtual environment + echo 'Selected Python command:' \$PYTHON_CMD + echo 'Python version:' \$(\$PYTHON_CMD --version) + + # Create virtual environment at consistent path \$PYTHON_CMD -m venv /workspace/venv source /workspace/venv/bin/activate - # Install packages + # Verify virtual environment is working + echo 'Virtual environment activated:' + echo 'Python executable:' \$(which python) + echo 'Python version in venv:' \$(python --version) + + # Upgrade pip and install dependencies python -m pip install --upgrade pip - python -m pip install pybind11 wheel setuptools + python -m pip install pybind11 python -m pip install -r requirements.txt + python -m pip install wheel setuptools + + # Verify installation + echo 'Python version in venv:' \$(python --version) + echo 'Python executable:' \$(which python) + echo 'Pip version:' \$(pip --version) " - displayName: 'Install Python packages' + displayName: 'Install Python dependencies in $(distroName) $(targetArch) container' - # Build bindings - script: | + # Build pybind bindings in the container docker exec build-container-$(distroName)-$(targetArch) bash -c " + # Activate virtual environment source /workspace/venv/bin/activate + + echo 'Building pybind bindings for $(distroName) $(targetArch)' + echo 'Python version:' \$(python --version) + echo 'Architecture:' \$(uname -m) + + # Verify build tools (for RHEL debugging) + if [ '$(packageManager)' = 'dnf' ]; then + echo 'CMake status:' + cmake --version || echo 'cmake not available' + fi + cd mssql_python/pybind chmod +x build.sh ./build.sh " - displayName: 'Build bindings' - - # Uninstall ODBC for testing - - template: templates/uninstall-odbc-linux.yml - parameters: - distroName: $(distroName) - packageManager: $(packageManager) - targetArch: $(targetArch) + displayName: 'Build pybind bindings (.so) in $(distroName) $(targetArch) container' + + - script: | + # Uninstall ODBC Driver before running tests + if [ "$(packageManager)" = "apt" ]; then + # Ubuntu/Debian + docker exec build-container-$(distroName)-$(targetArch) bash -c " + export DEBIAN_FRONTEND=noninteractive + apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql + rm -f /lib/x86_64-linux-gnu/libodbcinst.so.2 + rm -f /lib/aarch64-linux-gnu/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled ODBC Driver and cleaned up libraries' + echo 'Verifying $(targetArch) debian_ubuntu driver library signatures:' + if [ '$(targetArch)' = 'x86_64' ]; then + ldd mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " + elif [ "$(packageManager)" = "apk" ]; then + # Alpine Linux + docker exec build-container-$(distroName)-$(targetArch) sh -c " + apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'Some packages were not installed' + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql + rm -f /usr/lib/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled ODBC Driver and cleaned up libraries' + echo 'Verifying $(targetArch) alpine driver library signatures:' + if [ '$(targetArch)' = 'x86_64' ]; then + ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " + else + # RHEL/DNF + docker exec build-container-$(distroName)-$(targetArch) bash -c " + dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel + rm -f /usr/bin/sqlcmd + rm -f /usr/bin/bcp + rm -rf /opt/microsoft/msodbcsql + rm -f /lib64/libodbcinst.so.2 + odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true + echo 'Uninstalled ODBC Driver and cleaned up libraries' + echo 'Verifying $(targetArch) rhel driver library signatures:' + if [ '$(targetArch)' = 'x86_64' ]; then + ldd mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 + else + ldd mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 + fi + " + fi + displayName: 'Uninstall ODBC Driver before running tests in $(distroName) $(targetArch) container' - # Run tests - script: | + # Run tests in the container + # Get SQL Server container IP SQLSERVER_IP=$(docker inspect sqlserver-$(distroName)-$(targetArch) --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') + echo "SQL Server IP: $SQLSERVER_IP" docker exec \ -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ -e DB_PASSWORD="$(DB_PASSWORD)" \ build-container-$(distroName)-$(targetArch) bash -c " - # Setup Python environment for Alpine + # Set environment for source-compiled Python on Alpine if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then export PYTHONHOME=/usr/local export PYTHONPATH=/usr/local/lib/python$(pythonVersion) @@ -503,18 +1337,20 @@ jobs: fi source /workspace/venv/bin/activate - python -m pytest -v --junitxml=test-results-$(distroName)-$(targetArch).xml \ - --cov=. --cov-report=xml:coverage-$(distroName)-$(targetArch).xml \ - --capture=tee-sys --cache-clear + echo 'Build successful, running tests now on $(distroName) $(targetArch)' + echo 'Python version:' \$(python --version) + echo 'Architecture:' \$(uname -m) + echo 'Using connection string: Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=***;TrustServerCertificate=yes' + python -m pytest -v --junitxml=test-results-$(distroName)-$(targetArch).xml --cov=. --cov-report=xml:coverage-$(distroName)-$(targetArch).xml --capture=tee-sys --cache-clear " - displayName: 'Run tests' + displayName: 'Run pytest with coverage in $(distroName) $(targetArch) container' env: DB_PASSWORD: $(DB_PASSWORD) - # Build wheel - script: | + # Build wheel package in the container docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Setup Python environment for Alpine + # Set environment for source-compiled Python on Alpine if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then export PYTHONHOME=/usr/local export PYTHONPATH=/usr/local/lib/python$(pythonVersion) @@ -522,54 +1358,59 @@ jobs: fi source /workspace/venv/bin/activate + echo 'Building wheel for $(distroName) $(targetArch) Python $(pythonVersion)' + echo 'Python version:' \$(python --version) + echo 'Architecture:' \$(uname -m) + python -m pip install --upgrade pip wheel setuptools python setup.py bdist_wheel + + # Verify the wheel was created ls -la dist/ " - displayName: 'Build wheel' + displayName: 'Build wheel package in $(distroName) $(targetArch) container' - # Copy artifacts - script: | - # Copy test results + # Copy test results from container to host docker cp build-container-$(distroName)-$(targetArch):/workspace/test-results-$(distroName)-$(targetArch).xml $(Build.SourcesDirectory)/ docker cp build-container-$(distroName)-$(targetArch):/workspace/coverage-$(distroName)-$(targetArch).xml $(Build.SourcesDirectory)/ - # Copy wheels + # Copy wheel files from container to host mkdir -p $(Build.ArtifactStagingDirectory)/dist - docker cp build-container-$(distroName)-$(targetArch):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || true + docker cp build-container-$(distroName)-$(targetArch):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || echo "Failed to copy dist directory" - # Copy .so files + # Copy .so files from container to host mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch) - docker cp build-container-$(distroName)-$(targetArch):/workspace/mssql_python/ddbc_bindings.cp$(shortPyVer)-$(targetArch).so \ - $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch)/ || true - displayName: 'Copy artifacts' + docker cp build-container-$(distroName)-$(targetArch):/workspace/mssql_python/ddbc_bindings.cp$(shortPyVer)-$(targetArch).so $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch)/ || echo "Failed to copy .so files" + displayName: 'Copy results and artifacts from $(distroName) $(targetArch) container' condition: always() - # Cleanup - script: | + # Clean up containers docker stop build-container-$(distroName)-$(targetArch) || true docker rm build-container-$(distroName)-$(targetArch) || true docker stop sqlserver-$(distroName)-$(targetArch) || true docker rm sqlserver-$(distroName)-$(targetArch) || true - displayName: 'Cleanup containers' + displayName: 'Clean up $(distroName) $(targetArch) containers' condition: always() - # Publish results - task: PublishTestResults@2 condition: succeededOrFailed() inputs: testResultsFiles: '**/test-results-$(distroName)-$(targetArch).xml' - testRunTitle: 'Tests - $(distroName) $(targetArch)' + testRunTitle: 'Publish pytest results on $(distroName) $(targetArch)' - task: PublishBuildArtifacts@1 condition: succeededOrFailed() inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' ArtifactName: 'mssql-python-ddbc-bindings' - displayName: 'Publish bindings' + publishLocation: 'Container' + displayName: 'Publish .so files as artifacts' - task: PublishBuildArtifacts@1 condition: succeededOrFailed() inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' ArtifactName: 'mssql-python-wheels-dist' - displayName: 'Publish wheels' \ No newline at end of file + publishLocation: 'Container' + displayName: 'Publish wheels as artifacts' \ No newline at end of file diff --git a/eng/pipelines/templates/install-odbc-linux.yml b/eng/pipelines/templates/install-odbc-linux.yml deleted file mode 100644 index cce9906b6..000000000 --- a/eng/pipelines/templates/install-odbc-linux.yml +++ /dev/null @@ -1,68 +0,0 @@ -parameters: - - name: distroName - type: string - - name: packageManager - type: string - - name: targetArch - type: string - -steps: -- script: | - if [ "${{ parameters.packageManager }}" = "apt" ]; then - docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " - export DEBIAN_FRONTEND=noninteractive - - # Configure Microsoft repo - if [ '${{ parameters.distroName }}' = 'Ubuntu' ]; then - curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb - else - curl -sSL -O https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb - fi - - dpkg -i packages-microsoft-prod.deb || true - rm packages-microsoft-prod.deb - apt-get update - - # Install ODBC driver and tools - ACCEPT_EULA=Y apt-get install -y msodbcsql18 mssql-tools18 unixodbc-dev - " - elif [ "${{ parameters.packageManager }}" = "apk" ]; then - docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " - # Detect architecture - case \$(uname -m) in - x86_64) arch='amd64' ;; - arm64|aarch64) arch='arm64' ;; - *) echo 'Unsupported architecture'; exit 1 ;; - esac - - # Download and verify packages - curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\${arch}.apk - curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\${arch}.apk - curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\${arch}.sig - curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\${arch}.sig - - # Verify and install - curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - - gpg --verify msodbcsql18_18.5.1.1-1_\${arch}.sig msodbcsql18_18.5.1.1-1_\${arch}.apk - gpg --verify mssql-tools18_18.4.1.1-1_\${arch}.sig mssql-tools18_18.4.1.1-1_\${arch}.apk - - apk add --allow-untrusted msodbcsql18_18.5.1.1-1_\${arch}.apk mssql-tools18_18.4.1.1-1_\${arch}.apk - rm -f msodbcsql18_18.5.1.1-1_\${arch}.* mssql-tools18_18.4.1.1-1_\${arch}.* - - export PATH=\"\$PATH:/opt/mssql-tools18/bin\" - echo 'export PATH=\"\$PATH:/opt/mssql-tools18/bin\"' >> ~/.bashrc - " - else - # RHEL/DNF - docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " - # Configure Microsoft repo - curl -sSL -O https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm - rpm -Uvh packages-microsoft-prod.rpm - rm packages-microsoft-prod.rpm - dnf update -y - - # Install ODBC driver and tools - ACCEPT_EULA=Y dnf install -y msodbcsql18 mssql-tools18 unixODBC-devel - " - fi - displayName: 'Install ODBC Driver' diff --git a/eng/pipelines/templates/install-python-linux.yml b/eng/pipelines/templates/install-python-linux.yml deleted file mode 100644 index 29de88d52..000000000 --- a/eng/pipelines/templates/install-python-linux.yml +++ /dev/null @@ -1,130 +0,0 @@ -parameters: - - name: distroName - type: string - - name: packageManager - type: string - - name: pythonVersion - type: string - - name: targetArch - type: string - -steps: -- script: | - if [ "${{ parameters.packageManager }}" = "apt" ]; then - docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " - # Handle Python installation for Debian/Ubuntu - if [ '${{ parameters.distroName }}' = 'Debian' ]; then - case '${{ parameters.pythonVersion }}' in - '3.11') - apt-get install -y python${{ parameters.pythonVersion }} python${{ parameters.pythonVersion }}-dev python${{ parameters.pythonVersion }}-venv - ;; - '3.10'|'3.12') - apt-get install -y python3 python3-dev python3-venv - ln -sf /usr/bin/python3 /usr/local/bin/python${{ parameters.pythonVersion }} - ;; - '3.13') - # Build from source - apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \ - wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev - cd /tmp - wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz - tar -xzf Python-3.13.1.tgz - cd Python-3.13.1 - - # Disable optimizations for ARM64 - if [ '${{ parameters.targetArch }}' = 'arm64' ]; then - export CFLAGS='-O0 -fno-strict-overflow' - export CXXFLAGS='-O0' - fi - - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr - make -j1 - make altinstall - ln -sf /usr/local/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python - ;; - esac - else - # Ubuntu - use deadsnakes PPA - if [ '${{ parameters.pythonVersion }}' = '3.12' ] || [ '${{ parameters.pythonVersion }}' = '3.13' ]; then - apt-get install -y python${{ parameters.pythonVersion }} python${{ parameters.pythonVersion }}-dev python${{ parameters.pythonVersion }}-venv - else - apt-get install -y python${{ parameters.pythonVersion }} python${{ parameters.pythonVersion }}-dev python${{ parameters.pythonVersion }}-venv python${{ parameters.pythonVersion }}-distutils - fi - ln -sf /usr/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python${{ parameters.pythonVersion }} - ln -sf /usr/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python - fi - - # Install pip - curl -sS https://bootstrap.pypa.io/get-pip.py | python${{ parameters.pythonVersion }} - " - elif [ "${{ parameters.packageManager }}" = "apk" ]; then - docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} sh -c " - if [ '${{ parameters.pythonVersion }}' = '3.12' ]; then - # Use pre-installed Python 3.12 - apk add --no-cache py3-pip python3-dev - ln -sf python3 /usr/bin/python || true - else - # Build from source - apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev linux-headers - cd /tmp - wget https://www.python.org/ftp/python/${{ parameters.pythonVersion }}.1/Python-${{ parameters.pythonVersion }}.1.tgz - tar xzf Python-${{ parameters.pythonVersion }}.1.tgz - cd Python-${{ parameters.pythonVersion }}.1 - - # Configure for musl libc - export ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no - export ac_cv_have_long_long_format=yes ax_cv_c_float_words_bigendian=no - export ac_cv_sizeof_long=8 ac_cv_sizeof_size_t=8 ac_cv_sizeof_pid_t=4 ac_cv_sizeof_void_p=8 - - ./configure --prefix=/usr/local --enable-shared --with-ensurepip=install --disable-ipv6 \ - --build=aarch64-alpine-linux-musl --host=aarch64-alpine-linux-musl --target=aarch64-alpine-linux-musl \ - CPPFLAGS='-I/usr/include -DLONG_BIT=64' LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' CFLAGS='-DLONG_BIT=64' - - make -j\$(nproc) - make altinstall - - # Setup environment - export PYTHONHOME=/usr/local - export PYTHONPATH=/usr/local/lib/python${{ parameters.pythonVersion }} - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - - ln -sf /usr/local/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python - ln -sf /usr/local/bin/pip${{ parameters.pythonVersion }} /usr/local/bin/pip - - # Persist environment - echo 'export PYTHONHOME=/usr/local' >> /etc/profile - echo 'export PYTHONPATH=/usr/local/lib/python${{ parameters.pythonVersion }}' >> /etc/profile - echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile - fi - " - else - # RHEL/DNF - docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " - # Try to install from repos first - if dnf install -y python${{ parameters.pythonVersion }} python${{ parameters.pythonVersion }}-devel python${{ parameters.pythonVersion }}-pip; then - ln -sf /usr/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python${{ parameters.pythonVersion }} - ln -sf /usr/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python - elif [ '${{ parameters.pythonVersion }}' = '3.10' ] || [ '${{ parameters.pythonVersion }}' = '3.13' ]; then - # Build from source - cd /tmp - if [ '${{ parameters.pythonVersion }}' = '3.10' ]; then - wget https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tgz -O python-${{ parameters.pythonVersion }}.tgz - else - wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz -O python-${{ parameters.pythonVersion }}.tgz - fi - - tar -xzf python-${{ parameters.pythonVersion }}.tgz - cd Python-${{ parameters.pythonVersion }}* - - # Disable optimizations for ARM64 - export CFLAGS='-O0 -fno-strict-overflow' - export CXXFLAGS='-O0' - - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr - make -j1 - make altinstall - ln -sf /usr/local/bin/python${{ parameters.pythonVersion }} /usr/local/bin/python - fi - " - fi - displayName: 'Install Python ${{ parameters.pythonVersion }}' diff --git a/eng/pipelines/templates/uninstall-odbc-linux.yml b/eng/pipelines/templates/uninstall-odbc-linux.yml deleted file mode 100644 index 648dc224a..000000000 --- a/eng/pipelines/templates/uninstall-odbc-linux.yml +++ /dev/null @@ -1,59 +0,0 @@ -parameters: - - name: distroName - type: string - - name: packageManager - type: string - - name: targetArch - type: string - -steps: -- script: | - if [ "${{ parameters.packageManager }}" = "apt" ]; then - docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " - export DEBIAN_FRONTEND=noninteractive - apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev - rm -rf /opt/microsoft/msodbcsql /usr/bin/sqlcmd /usr/bin/bcp - rm -f /lib/x86_64-linux-gnu/libodbcinst.so.2 /lib/aarch64-linux-gnu/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - - # Verify bundled driver - echo 'Verifying bundled driver library:' - if [ '${{ parameters.targetArch }}' = 'x86_64' ]; then - ldd mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - elif [ "${{ parameters.packageManager }}" = "apk" ]; then - docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} sh -c " - apk del msodbcsql18 mssql-tools18 unixodbc-dev || true - rm -rf /opt/microsoft/msodbcsql /usr/bin/sqlcmd /usr/bin/bcp - rm -f /usr/lib/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - - # Verify bundled driver - echo 'Verifying bundled driver library:' - if [ '${{ parameters.targetArch }}' = 'x86_64' ]; then - ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - else - # RHEL/DNF - docker exec build-container-${{ parameters.distroName }}-${{ parameters.targetArch }} bash -c " - dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel - rm -rf /opt/microsoft/msodbcsql /usr/bin/sqlcmd /usr/bin/bcp - rm -f /lib64/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - - # Verify bundled driver - echo 'Verifying bundled driver library:' - if [ '${{ parameters.targetArch }}' = 'x86_64' ]; then - ldd mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - fi - displayName: 'Uninstall ODBC Driver for testing' From 96ee31a186d369ef170179fe7bfecca2326d6334 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Fri, 8 Aug 2025 12:59:19 +0530 Subject: [PATCH 48/93] arm64 restored and integrated again --- eng/pipelines/build-whl-pipeline.yml | 164 +++++++++++++++------------ 1 file changed, 89 insertions(+), 75 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index d462dadf9..a99170d3d 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -763,26 +763,43 @@ jobs: # Configure and compile Python with SSL support explicitly enabled echo 'Configuring Python build with SSL support' # Disable optimizations for ARM64 builds to speed up compilation in emulated environment + # Inside Debian block when compiling Python if [ '$(targetArch)' = 'arm64' ]; then - echo 'ARM64 build detected - disabling optimizations for faster compilation' - # Disable compiler optimizations to prevent GCC ICE in emulated ARM64 - export CFLAGS="-O0 -fno-strict-overflow" - export CXXFLAGS="-O0" - export OPT="-O0" - - ./configure \\ - --prefix=/usr/local \\ - --with-ensurepip=install \\ - --enable-loadable-sqlite-extensions \\ - --with-openssl=/usr \\ - OPT=\"\$OPT\" \\ - CFLAGS=\"\$CFLAGS\" + echo 'ARM64 build detected - using safer build flags to avoid GCC segfaults' + # Install gcc-13 and g++-13 if available + apt-get install -y gcc-13 g++-13 || echo 'GCC 13 not available, continuing with default gcc' + + # Use GCC 13 if installed + export CC=$(command -v gcc-13 || echo gcc) + export CXX=$(command -v g++-13 || echo g++) + + # Apply safer compiler flags to avoid register pressure and tree optimizations + export CFLAGS="-O2 -fno-var-tracking -fno-tree-vectorize" + export CPPFLAGS="-I/usr/include" + export LDFLAGS="-L/usr/lib" + + # Configure without PGO or LTO + ./configure \ + --prefix=/usr/local \ + --with-ensurepip=install \ + --enable-loadable-sqlite-extensions \ + --with-openssl=/usr + + echo 'Compiling Python with reduced parallel jobs to avoid memory issues' + make -j2 else - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr + ./configure \ + --prefix=/usr/local \ + --with-ensurepip=install \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --with-openssl=/usr + + make -j$(nproc) fi - - make -j1 OPT=\"\$OPT\" CFLAGS=\"\$CFLAGS\" + + echo 'Installing Python' make altinstall # Create symlinks - altinstall creates python3.13, we create python symlink @@ -833,9 +850,9 @@ jobs: # Verify Python installation echo 'Python installation verification:' echo 'Using PYTHON_CMD:' \$PYTHON_CMD - \$PYTHON_CMD --version || echo 'Python version check failed' + \$PYTHON_CMD --version if [ -f /usr/local/bin/python ]; then - /usr/local/bin/python --version || echo 'Local python version check failed' + /usr/local/bin/python --version fi " elif [ "$(packageManager)" = "apk" ]; then @@ -843,7 +860,7 @@ jobs: docker exec build-container-$(distroName)-$(targetArch) sh -c " # Update package index apk update - + # Install base build tools and system dependencies apk add --no-cache \ build-base \ @@ -860,13 +877,13 @@ jobs: openssl-dev \ zlib-dev \ patchelf - + # Python installation - hybrid approach if [ '$(pythonVersion)' = '3.12' ]; then # Use pre-available Python 3.12 from Alpine packages echo 'Using pre-available Python 3.12 from Alpine packages' apk add --no-cache py3-pip python3-dev - + # Create symlinks for Python compatibility ln -sf python3 /usr/bin/python || true ln -sf pip3 /usr/bin/pip || true @@ -874,77 +891,80 @@ jobs: # Build Python from source for other versions (3.10, 3.11, 3.13) echo 'Building Python $(pythonVersion) from source for Alpine Linux' apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev linux-headers - + # Download and compile Python from source cd /tmp wget https://www.python.org/ftp/python/$(pythonVersion).1/Python-$(pythonVersion).1.tgz tar xzf Python-$(pythonVersion).1.tgz cd Python-$(pythonVersion).1 - + # Configure and build Python - Alpine/musl specific configuration # Set cache variables to help configure detect musl libc types correctly export ac_cv_file__dev_ptmx=yes export ac_cv_file__dev_ptc=no export ac_cv_have_long_long_format=yes - # Fix LONG_BIT detection for musl libc on ARM64 export ac_cv_sizeof_long=8 export ac_cv_sizeof_size_t=8 export ac_cv_sizeof_pid_t=4 export ac_cv_sizeof_void_p=8 - # Fix float word ordering detection for ARM64 export ax_cv_c_float_words_bigendian=no - - # Disable optimizations to prevent GCC ICE and compilation errors - export CFLAGS="-O0 -fno-strict-overflow" - export CXXFLAGS="-O0" - export OPT="-O0" - - ./configure \\ - --prefix=/usr/local \\ - --enable-shared \\ - --with-ensurepip=install \\ - --disable-ipv6 \\ - --build=aarch64-alpine-linux-musl \\ - --host=aarch64-alpine-linux-musl \\ - --target=aarch64-alpine-linux-musl \\ - OPT=\"\$OPT\" \\ - CFLAGS=\"\$CFLAGS\" \\ - CPPFLAGS='-I/usr/include -DLONG_BIT=64' \\ - LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' - - # Build Python without optimizations and with explicit flags - echo 'Building Python $(pythonVersion) with disabled optimizations to avoid compilation issues' - make -j1 OPT=\"\$OPT\" CFLAGS=\"\$CFLAGS\" - + + # 🛠️ Apply GCC stability fixes for ARM64: safer build flags + export CFLAGS=\"-O2 -fno-lto -fno-tree-vectorize -fno-var-tracking-assignments -DLONG_BIT=64\" + export LDFLAGS=\"-L/usr/lib -Wl,-rpath,/usr/local/lib\" + export CPPFLAGS=\"-I/usr/include\" + + # ❌ Skip problematic crypto module (_hacl/libHacl_Hash_SHA2.a) + export CONFIG_SITE=config.site + echo 'ac_cv_module__hacl_hash_sha2=no' > config.site + + # Clean up broken installs if any + rm -rf /usr/local/lib/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) /usr/local/include/python$(pythonVersion)* + + ./configure \ + --prefix=/usr/local \ + --enable-shared \ + --with-ensurepip=install \ + --disable-ipv6 \ + --build=aarch64-alpine-linux-musl \ + --host=aarch64-alpine-linux-musl \ + --target=aarch64-alpine-linux-musl + + # Build Python with reduced parallelism to prevent QEMU segfaults + echo 'Building Python $(pythonVersion) with safer flags and -j2 for stability' + make -j2 make altinstall - + # Set up environment for proper Python operation export PYTHONHOME=/usr/local export PYTHONPATH=/usr/local/lib/python$(pythonVersion) export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - + # Create symlinks for easier access ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip - + # Set up persistent environment variables for source-compiled Python echo 'export PYTHONHOME=/usr/local' >> /etc/profile echo 'export PYTHONPATH=/usr/local/lib/python$(pythonVersion)' >> /etc/profile echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile - - # Verify Python installation and modules + + # ✅ Verify Python installation and core modules echo 'Verifying Python $(pythonVersion) installation:' ls -la /usr/local/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL and encodings support:' /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support: OK\")' + /usr/local/bin/python$(pythonVersion) -c 'import encodings; print(\"Encodings support: OK\")' + echo 'Python installation successful' - + # Clean up build files cd / rm -rf /tmp/Python-$(pythonVersion).1* fi - + # Verify installation and architecture echo 'Architecture:' \$(uname -m) echo 'Alpine version:' \$(cat /etc/alpine-release) @@ -1026,22 +1046,16 @@ jobs: tar -xzf python-$(pythonVersion).tgz cd Python-$(pythonVersion)* - # Disable compiler optimizations to prevent GCC ICE in emulated ARM64 - export CFLAGS="-O0 -fno-strict-overflow" - export CXXFLAGS="-O0" - export OPT="-O0" - - ./configure \\ - --prefix=/usr/local \\ - --with-ensurepip=install \\ - --enable-loadable-sqlite-extensions \\ - --with-openssl=/usr \\ - OPT=\"\$OPT\" \\ - CFLAGS=\"\$CFLAGS\" - - # Use single-threaded build to reduce memory pressure under QEMU - make -j1 OPT=\"\$OPT\" CFLAGS=\"\$CFLAGS\" + # Configure and compile Python with optimizations disabled for missing deps + echo 'Configuring Python build (optimizations may be disabled due to missing dependencies)' + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr + + echo 'Compiling Python (this may take several minutes)' + make -j\$(nproc) + + echo 'Installing Python' make altinstall + # Create symlinks - altinstall creates python3.13, we create python symlink ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python @@ -1071,10 +1085,10 @@ jobs: # Verify installations echo 'Verifying installations:' - python3 --version || echo 'python3 not found' - which gcc && which g++ || echo 'gcc/g++ not found' - gcc --version || echo 'gcc version check failed' - g++ --version || echo 'g++ version check failed' + python3 --version + which gcc && which g++ + gcc --version + g++ --version cmake --version || echo 'cmake not found in PATH' which cmake || echo 'cmake binary not found' " @@ -1413,4 +1427,4 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' ArtifactName: 'mssql-python-wheels-dist' publishLocation: 'Container' - displayName: 'Publish wheels as artifacts' \ No newline at end of file + displayName: 'Publish wheels as artifacts' From 05d1f0345dccfca56ea6eab5ab4fba4fc2411e42 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Fri, 8 Aug 2025 13:15:12 +0530 Subject: [PATCH 49/93] syntax error for arm64 debian --- eng/pipelines/build-whl-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index a99170d3d..d562df90e 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -775,7 +775,7 @@ jobs: export CXX=$(command -v g++-13 || echo g++) # Apply safer compiler flags to avoid register pressure and tree optimizations - export CFLAGS="-O2 -fno-var-tracking -fno-tree-vectorize" + export CFLAGS=\"-O2 -fno-var-tracking -fno-tree-vectorize\" export CPPFLAGS="-I/usr/include" export LDFLAGS="-L/usr/lib" From 12f12aed59d01116efcdfaee5ee624643e3eaee0 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Fri, 8 Aug 2025 13:53:02 +0530 Subject: [PATCH 50/93] fixing arm64 debian first --- eng/pipelines/build-whl-pipeline.yml | 83 +++++++++++++--------------- 1 file changed, 37 insertions(+), 46 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index d562df90e..b6db83d90 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -735,58 +735,54 @@ jobs: PYTHON_CMD=/usr/local/bin/python$(pythonVersion) ;; '3.13') - # Python 3.13 requires building from source echo 'Python $(pythonVersion) requires building from source' echo 'DEBUG: pythonVersion = $(pythonVersion)' - + # Install dependencies needed for Python source compilation apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev apt-get install -y libreadline-dev libsqlite3-dev wget curl llvm apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev apt-get install -y libffi-dev liblzma-dev python3-openssl apt-get install -y libgdbm-dev libnss3-dev libedit-dev || echo 'Some optional dependencies not available' - - # Verify SSL development libraries are installed - echo 'Verifying SSL development libraries:' - dpkg -l | grep libssl-dev || echo 'libssl-dev not found' - pkg-config --exists openssl && echo 'OpenSSL pkg-config found' || echo 'OpenSSL pkg-config missing' - - # Download Python source - fix version mismatch + + # Verify compiler setup + echo 'Testing if gcc can compile...' + echo 'int main() { return 0; }' > /tmp/test.c + gcc /tmp/test.c -o /tmp/test.out || (echo 'ERROR: gcc cannot create executables' && exit 1) + rm /tmp/test.c /tmp/test.out + + # Download Python source cd /tmp PYTHON_FULL_VERSION='3.13.1' - PYTHON_URL=\"https://www.python.org/ftp/python/\$PYTHON_FULL_VERSION/Python-\$PYTHON_FULL_VERSION.tgz\" - echo \"Downloading Python from \$PYTHON_URL\" - wget \$PYTHON_URL -O python-\$PYTHON_FULL_VERSION.tgz - tar -xzf python-\$PYTHON_FULL_VERSION.tgz - cd Python-\$PYTHON_FULL_VERSION - - # Configure and compile Python with SSL support explicitly enabled + PYTHON_URL="https://www.python.org/ftp/python/$PYTHON_FULL_VERSION/Python-$PYTHON_FULL_VERSION.tgz" + echo "Downloading Python from $PYTHON_URL" + wget $PYTHON_URL -O python-$PYTHON_FULL_VERSION.tgz + tar -xzf python-$PYTHON_FULL_VERSION.tgz + cd Python-$PYTHON_FULL_VERSION + echo 'Configuring Python build with SSL support' - # Disable optimizations for ARM64 builds to speed up compilation in emulated environment - # Inside Debian block when compiling Python + if [ '$(targetArch)' = 'arm64' ]; then - echo 'ARM64 build detected - using safer build flags to avoid GCC segfaults' + echo 'ARM64 build detected - using safer flags to avoid GCC segfaults' - # Install gcc-13 and g++-13 if available - apt-get install -y gcc-13 g++-13 || echo 'GCC 13 not available, continuing with default gcc' + # Try GCC 13 if available + apt-get install -y gcc-13 g++-13 || echo 'GCC 13 not available, using default gcc' - # Use GCC 13 if installed export CC=$(command -v gcc-13 || echo gcc) export CXX=$(command -v g++-13 || echo g++) - # Apply safer compiler flags to avoid register pressure and tree optimizations - export CFLAGS=\"-O2 -fno-var-tracking -fno-tree-vectorize\" - export CPPFLAGS="-I/usr/include" - export LDFLAGS="-L/usr/lib" + # Safer flags to avoid register/memory pressure + export CFLAGS='-O2 -fno-lto -fno-tree-vectorize -fno-var-tracking-assignments' + export CPPFLAGS='-I/usr/include' + export LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' - # Configure without PGO or LTO ./configure \ --prefix=/usr/local \ --with-ensurepip=install \ --enable-loadable-sqlite-extensions \ --with-openssl=/usr - - echo 'Compiling Python with reduced parallel jobs to avoid memory issues' + + echo 'Compiling Python with make -j2 for stability' make -j2 else ./configure \ @@ -801,31 +797,26 @@ jobs: echo 'Installing Python' make altinstall - - # Create symlinks - altinstall creates python3.13, we create python symlink + + # Symlinks for consistency ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - - # Verify installation and SSL support + ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip || true + echo 'Verifying Python 3.13 installation:' ls -l /usr/local/bin/python$(pythonVersion) || echo 'ERROR: Python $(pythonVersion) not found' - /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL support in Python:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' - + /usr/local/bin/python$(pythonVersion) --version || echo 'Python did not install correctly' + + echo 'Testing SSL and encodings support:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print("SSL support:", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL not available' + /usr/local/bin/python$(pythonVersion) -c 'import encodings; print("Encodings OK")' || echo 'WARNING: Encodings module not found' + # Clean up cd / - rm -rf /tmp/Python-\$PYTHON_FULL_VERSION /tmp/python-\$PYTHON_FULL_VERSION.tgz - + rm -rf /tmp/Python-$PYTHON_FULL_VERSION /tmp/python-$PYTHON_FULL_VERSION.tgz + echo 'Successfully built and installed Python $(pythonVersion) from source' PYTHON_CMD=/usr/local/bin/python$(pythonVersion) ;; - *) - echo 'Unsupported Python version $(pythonVersion) for Debian, using python3' - apt-get install -y python3 python3-dev python3-venv - ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python3 /usr/local/bin/python - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - ;; esac else # Ubuntu has deadsnakes PPA, so more versions are available From cfd0f6f6819e2080f0a0fff345559f584a4cd798 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Fri, 8 Aug 2025 16:26:54 +0530 Subject: [PATCH 51/93] syntax fix for debian --- eng/pipelines/build-whl-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index b6db83d90..1ae2c50ab 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -812,7 +812,7 @@ jobs: # Clean up cd / - rm -rf /tmp/Python-$PYTHON_FULL_VERSION /tmp/python-$PYTHON_FULL_VERSION.tgz + rm -rf /tmp/Python-\$PYTHON_FULL_VERSION /tmp/python-\$PYTHON_FULL_VERSION.tgz echo 'Successfully built and installed Python $(pythonVersion) from source' PYTHON_CMD=/usr/local/bin/python$(pythonVersion) From 16483daeb5b3a629bab36c5c1b1ef1a1937ab2ef Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Fri, 8 Aug 2025 16:29:56 +0530 Subject: [PATCH 52/93] sizeof long double for alpine arm64 py313 --- eng/pipelines/build-whl-pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 1ae2c50ab..0851c60a5 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -898,6 +898,7 @@ jobs: export ac_cv_sizeof_size_t=8 export ac_cv_sizeof_pid_t=4 export ac_cv_sizeof_void_p=8 + export ac_cv_sizeof_long_double=16 export ax_cv_c_float_words_bigendian=no # 🛠️ Apply GCC stability fixes for ARM64: safer build flags From 217871fa89e2487e66908c16bfdfc8955e61cb5e Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Mon, 11 Aug 2025 12:55:12 +0530 Subject: [PATCH 53/93] syntax error fix --- eng/pipelines/build-whl-pipeline.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 0851c60a5..a406c9286 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -754,11 +754,11 @@ jobs: # Download Python source cd /tmp PYTHON_FULL_VERSION='3.13.1' - PYTHON_URL="https://www.python.org/ftp/python/$PYTHON_FULL_VERSION/Python-$PYTHON_FULL_VERSION.tgz" - echo "Downloading Python from $PYTHON_URL" - wget $PYTHON_URL -O python-$PYTHON_FULL_VERSION.tgz - tar -xzf python-$PYTHON_FULL_VERSION.tgz - cd Python-$PYTHON_FULL_VERSION + PYTHON_URL=\"https://www.python.org/ftp/python/\$PYTHON_FULL_VERSION/Python-\$PYTHON_FULL_VERSION.tgz\" + echo \"Downloading Python from \$PYTHON_URL\" + wget \$PYTHON_URL -O python-\$PYTHON_FULL_VERSION.tgz + tar -xzf python-\$PYTHON_FULL_VERSION.tgz + cd Python-\$PYTHON_FULL_VERSION echo 'Configuring Python build with SSL support' From abd3e50abd9d44eefbf84b493e6e547441799ef5 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Mon, 11 Aug 2025 13:57:15 +0530 Subject: [PATCH 54/93] reset to last stable stage --- eng/pipelines/build-whl-pipeline.yml | 147 +++++++++++---------------- 1 file changed, 60 insertions(+), 87 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index a406c9286..c66cd070d 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -735,23 +735,23 @@ jobs: PYTHON_CMD=/usr/local/bin/python$(pythonVersion) ;; '3.13') + # Python 3.13 requires building from source echo 'Python $(pythonVersion) requires building from source' echo 'DEBUG: pythonVersion = $(pythonVersion)' - + # Install dependencies needed for Python source compilation apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev apt-get install -y libreadline-dev libsqlite3-dev wget curl llvm apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev apt-get install -y libffi-dev liblzma-dev python3-openssl apt-get install -y libgdbm-dev libnss3-dev libedit-dev || echo 'Some optional dependencies not available' - - # Verify compiler setup - echo 'Testing if gcc can compile...' - echo 'int main() { return 0; }' > /tmp/test.c - gcc /tmp/test.c -o /tmp/test.out || (echo 'ERROR: gcc cannot create executables' && exit 1) - rm /tmp/test.c /tmp/test.out - - # Download Python source + + # Verify SSL development libraries are installed + echo 'Verifying SSL development libraries:' + dpkg -l | grep libssl-dev || echo 'libssl-dev not found' + pkg-config --exists openssl && echo 'OpenSSL pkg-config found' || echo 'OpenSSL pkg-config missing' + + # Download Python source - fix version mismatch cd /tmp PYTHON_FULL_VERSION='3.13.1' PYTHON_URL=\"https://www.python.org/ftp/python/\$PYTHON_FULL_VERSION/Python-\$PYTHON_FULL_VERSION.tgz\" @@ -759,64 +759,47 @@ jobs: wget \$PYTHON_URL -O python-\$PYTHON_FULL_VERSION.tgz tar -xzf python-\$PYTHON_FULL_VERSION.tgz cd Python-\$PYTHON_FULL_VERSION - + + # Configure and compile Python with SSL support explicitly enabled echo 'Configuring Python build with SSL support' - + # Disable optimizations for ARM64 builds to speed up compilation in emulated environment if [ '$(targetArch)' = 'arm64' ]; then - echo 'ARM64 build detected - using safer flags to avoid GCC segfaults' - - # Try GCC 13 if available - apt-get install -y gcc-13 g++-13 || echo 'GCC 13 not available, using default gcc' - - export CC=$(command -v gcc-13 || echo gcc) - export CXX=$(command -v g++-13 || echo g++) - - # Safer flags to avoid register/memory pressure - export CFLAGS='-O2 -fno-lto -fno-tree-vectorize -fno-var-tracking-assignments' - export CPPFLAGS='-I/usr/include' - export LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' - - ./configure \ - --prefix=/usr/local \ - --with-ensurepip=install \ - --enable-loadable-sqlite-extensions \ - --with-openssl=/usr - - echo 'Compiling Python with make -j2 for stability' - make -j2 + echo 'ARM64 build detected - disabling optimizations for faster compilation' + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr else - ./configure \ - --prefix=/usr/local \ - --with-ensurepip=install \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --with-openssl=/usr - - make -j$(nproc) + ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr fi - + + echo 'Compiling Python (this may take several minutes - ARM64 builds are slower due to emulation)' + make -j\$(nproc) + echo 'Installing Python' make altinstall - - # Symlinks for consistency + + # Create symlinks - altinstall creates python3.13, we create python symlink ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip || true - + + # Verify installation and SSL support echo 'Verifying Python 3.13 installation:' ls -l /usr/local/bin/python$(pythonVersion) || echo 'ERROR: Python $(pythonVersion) not found' - /usr/local/bin/python$(pythonVersion) --version || echo 'Python did not install correctly' - - echo 'Testing SSL and encodings support:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print("SSL support:", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL not available' - /usr/local/bin/python$(pythonVersion) -c 'import encodings; print("Encodings OK")' || echo 'WARNING: Encodings module not found' - + /usr/local/bin/python$(pythonVersion) --version + echo 'Testing SSL support in Python:' + /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' + # Clean up cd / rm -rf /tmp/Python-\$PYTHON_FULL_VERSION /tmp/python-\$PYTHON_FULL_VERSION.tgz - + echo 'Successfully built and installed Python $(pythonVersion) from source' PYTHON_CMD=/usr/local/bin/python$(pythonVersion) ;; + *) + echo 'Unsupported Python version $(pythonVersion) for Debian, using python3' + apt-get install -y python3 python3-dev python3-venv + ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) + ln -sf /usr/bin/python3 /usr/local/bin/python + PYTHON_CMD=/usr/local/bin/python$(pythonVersion) + ;; esac else # Ubuntu has deadsnakes PPA, so more versions are available @@ -851,7 +834,7 @@ jobs: docker exec build-container-$(distroName)-$(targetArch) sh -c " # Update package index apk update - + # Install base build tools and system dependencies apk add --no-cache \ build-base \ @@ -868,13 +851,13 @@ jobs: openssl-dev \ zlib-dev \ patchelf - + # Python installation - hybrid approach if [ '$(pythonVersion)' = '3.12' ]; then # Use pre-available Python 3.12 from Alpine packages echo 'Using pre-available Python 3.12 from Alpine packages' apk add --no-cache py3-pip python3-dev - + # Create symlinks for Python compatibility ln -sf python3 /usr/bin/python || true ln -sf pip3 /usr/bin/pip || true @@ -882,37 +865,26 @@ jobs: # Build Python from source for other versions (3.10, 3.11, 3.13) echo 'Building Python $(pythonVersion) from source for Alpine Linux' apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev linux-headers - + # Download and compile Python from source cd /tmp wget https://www.python.org/ftp/python/$(pythonVersion).1/Python-$(pythonVersion).1.tgz tar xzf Python-$(pythonVersion).1.tgz cd Python-$(pythonVersion).1 - + # Configure and build Python - Alpine/musl specific configuration # Set cache variables to help configure detect musl libc types correctly export ac_cv_file__dev_ptmx=yes export ac_cv_file__dev_ptc=no export ac_cv_have_long_long_format=yes + # Fix LONG_BIT detection for musl libc on ARM64 export ac_cv_sizeof_long=8 export ac_cv_sizeof_size_t=8 export ac_cv_sizeof_pid_t=4 export ac_cv_sizeof_void_p=8 - export ac_cv_sizeof_long_double=16 + # Fix float word ordering detection for ARM64 export ax_cv_c_float_words_bigendian=no - - # 🛠️ Apply GCC stability fixes for ARM64: safer build flags - export CFLAGS=\"-O2 -fno-lto -fno-tree-vectorize -fno-var-tracking-assignments -DLONG_BIT=64\" - export LDFLAGS=\"-L/usr/lib -Wl,-rpath,/usr/local/lib\" - export CPPFLAGS=\"-I/usr/include\" - - # ❌ Skip problematic crypto module (_hacl/libHacl_Hash_SHA2.a) - export CONFIG_SITE=config.site - echo 'ac_cv_module__hacl_hash_sha2=no' > config.site - - # Clean up broken installs if any - rm -rf /usr/local/lib/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) /usr/local/include/python$(pythonVersion)* - + ./configure \ --prefix=/usr/local \ --enable-shared \ @@ -920,43 +892,44 @@ jobs: --disable-ipv6 \ --build=aarch64-alpine-linux-musl \ --host=aarch64-alpine-linux-musl \ - --target=aarch64-alpine-linux-musl - - # Build Python with reduced parallelism to prevent QEMU segfaults - echo 'Building Python $(pythonVersion) with safer flags and -j2 for stability' - make -j2 + --target=aarch64-alpine-linux-musl \ + CPPFLAGS='-I/usr/include -DLONG_BIT=64' \ + LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' \ + CFLAGS='-DLONG_BIT=64' + + # Build Python without optimizations to avoid gcc segfault on ARM64 + echo 'Building Python $(pythonVersion) without PGO optimizations to avoid compilation issues' + make -j\$(nproc) + make altinstall - + # Set up environment for proper Python operation export PYTHONHOME=/usr/local export PYTHONPATH=/usr/local/lib/python$(pythonVersion) export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - + # Create symlinks for easier access ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip - + # Set up persistent environment variables for source-compiled Python echo 'export PYTHONHOME=/usr/local' >> /etc/profile echo 'export PYTHONPATH=/usr/local/lib/python$(pythonVersion)' >> /etc/profile echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile - - # ✅ Verify Python installation and core modules + + # Verify Python installation and modules echo 'Verifying Python $(pythonVersion) installation:' ls -la /usr/local/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL and encodings support:' /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support: OK\")' - /usr/local/bin/python$(pythonVersion) -c 'import encodings; print(\"Encodings support: OK\")' - echo 'Python installation successful' - + # Clean up build files cd / rm -rf /tmp/Python-$(pythonVersion).1* fi - + # Verify installation and architecture echo 'Architecture:' \$(uname -m) echo 'Alpine version:' \$(cat /etc/alpine-release) @@ -1419,4 +1392,4 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' ArtifactName: 'mssql-python-wheels-dist' publishLocation: 'Container' - displayName: 'Publish wheels as artifacts' + displayName: 'Publish wheels as artifacts' \ No newline at end of file From 5c9ffd304381a45326bb6b1213809de04d0d1447 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Mon, 11 Aug 2025 19:35:39 +0530 Subject: [PATCH 55/93] linux is revamped --- eng/pipelines/build-whl-pipeline.yml | 1116 +++----------------------- pyproject.toml | 22 + 2 files changed, 117 insertions(+), 1021 deletions(-) create mode 100644 pyproject.toml diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index c66cd070d..2bf5199c1 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -368,1028 +368,102 @@ jobs: # displayName: 'Publish all wheels as artifacts' - job: BuildLinuxWheels - pool: - vmImage: 'ubuntu-latest' - displayName: 'Build Linux -' + displayName: 'Build Linux wheels (manylinux + musllinux)' + pool: { vmImage: 'ubuntu-latest' } timeoutInMinutes: 120 - strategy: - matrix: - # Python 3.10 (x86_64 and ARM64) - # py310_x86_64_ubuntu: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py310_arm64_ubuntu: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py310_x86_64_debian: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py310_arm64_debian: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py310_x86_64_rhel: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # buildFromSource: 'true' - # py310_arm64_rhel: - # pythonVersion: '3.10' - # shortPyVer: '310' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # buildFromSource: 'true' - - # # Python 3.11 (x86_64 and ARM64) - # py311_x86_64_ubuntu: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py311_arm64_ubuntu: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py311_x86_64_debian: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py311_arm64_debian: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py311_x86_64_rhel: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # py311_arm64_rhel: - # pythonVersion: '3.11' - # shortPyVer: '311' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - - # # Python 3.12 (x86_64 and ARM64) - Note: Not available for Ubuntu 22.04 via deadsnakes PPA - # # Only build for Debian and RHEL where Python 3.12 is available - # py312_x86_64_debian: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py312_arm64_debian: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'debian:12' - # distroName: 'Debian' - # packageManager: 'apt' - # py312_x86_64_rhel: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - # py312_arm64_rhel: - # pythonVersion: '3.12' - # shortPyVer: '312' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - # distroName: 'RHEL' - # packageManager: 'dnf' - - # # Python 3.13 (x86_64 and ARM64) - # py313_x86_64_ubuntu: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'x86_64' - # dockerPlatform: 'linux/amd64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - # py313_arm64_ubuntu: - # pythonVersion: '3.13' - # shortPyVer: '313' - # targetArch: 'arm64' - # dockerPlatform: 'linux/arm64' - # dockerImage: 'ubuntu:22.04' - # distroName: 'Ubuntu' - # packageManager: 'apt' - - # Python 3.13 (x86_64 and ARM64) - Built from source for Debian and RHEL (not available via package managers) - py313_x86_64_debian: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py313_arm64_debian: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'debian:12' - distroName: 'Debian' - packageManager: 'apt' - py313_x86_64_rhel: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - buildFromSource: 'true' - py313_arm64_rhel: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'registry.access.redhat.com/ubi9/ubi:latest' - distroName: 'RHEL' - packageManager: 'dnf' - buildFromSource: 'true' - - # Alpine Linux (x86_64 and ARM64) - py310_x86_64_alpine: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py310_arm64_alpine: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py311_x86_64_alpine: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py311_arm64_alpine: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py312_x86_64_alpine: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py312_arm64_alpine: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py313_x86_64_alpine: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'x86_64' - dockerPlatform: 'linux/amd64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - py313_arm64_alpine: - pythonVersion: '3.13' - shortPyVer: '313' - targetArch: 'arm64' - dockerPlatform: 'linux/arm64' - dockerImage: 'alpine:latest' - distroName: 'alpine' - packageManager: 'apk' - steps: - # Set up Docker buildx for multi-architecture support - - script: | - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - docker buildx create --name multiarch --driver docker-container --use || true - docker buildx inspect --bootstrap - displayName: 'Setup Docker buildx for multi-architecture support' - - - script: | - # Create a Docker container for building - docker run -d --name build-container-$(distroName)-$(targetArch) \ - --platform $(dockerPlatform) \ - -v $(Build.SourcesDirectory):/workspace \ - -w /workspace \ - --network bridge \ - $(dockerImage) \ - tail -f /dev/null - displayName: 'Create $(distroName) $(targetArch) container' - - - script: | - # Start SQL Server container (always x86_64 since SQL Server doesn't support ARM64) - docker run -d --name sqlserver-$(distroName)-$(targetArch) \ - --platform linux/amd64 \ - -e ACCEPT_EULA=Y \ - -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ - -p 1433:1433 \ - mcr.microsoft.com/mssql/server:2022-latest - - # Wait for SQL Server to be ready - echo "Waiting for SQL Server to start..." - for i in {1..60}; do - if docker exec sqlserver-$(distroName)-$(targetArch) \ - /opt/mssql-tools18/bin/sqlcmd \ - -S localhost \ - -U SA \ - -P "$(DB_PASSWORD)" \ - -C -Q "SELECT 1" >/dev/null 2>&1; then - echo "SQL Server is ready!" - break - fi - echo "Waiting... ($i/60)" - sleep 2 - done - - # Create test database - docker exec sqlserver-$(distroName)-$(targetArch) \ - /opt/mssql-tools18/bin/sqlcmd \ - -S localhost \ - -U SA \ - -P "$(DB_PASSWORD)" \ - -C -Q "CREATE DATABASE TestDB" - displayName: 'Start SQL Server container for $(distroName) $(targetArch)' - env: - DB_PASSWORD: $(DB_PASSWORD) - - - script: | - # Install dependencies in the container - if [ "$(packageManager)" = "apt" ]; then - # Ubuntu/Debian - docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive - export TZ=UTC - ln -snf /usr/share/zoneinfo/\$TZ /etc/localtime && echo \$TZ > /etc/timezone - - # Update package lists - apt-get update - - # Install basic tools first - apt-get install -y software-properties-common curl wget gnupg build-essential cmake - - # Add deadsnakes PPA for newer Python versions (Ubuntu only) - if [ '$(distroName)' = 'Ubuntu' ]; then - add-apt-repository -y ppa:deadsnakes/ppa - apt-get update - fi - - # Install Python and development packages - # Handle different Python version availability per distribution - if [ '$(distroName)' = 'Debian' ]; then - # Debian 12 has Python 3.11 by default, some older/newer versions may not be available - case '$(pythonVersion)' in - '3.11') - # Python 3.11 is the default in Debian 12 - apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils - PYTHON_CMD=python$(pythonVersion) - ;; - '3.10'|'3.12') - # These versions may not be available in Debian 12, use python3 and create symlinks - echo 'Python $(pythonVersion) may not be available in Debian 12, using available python3' - apt-get install -y python3 python3-dev python3-venv - # Note: distutils is not available for Python 3.12+ - if [ '$(pythonVersion)' != '3.12' ]; then - apt-get install -y python3-distutils || echo 'distutils not available for this Python version' - fi - # Create symlinks to make the desired version available - # Find the actual python3 version and create proper symlinks - ACTUAL_PYTHON=\$(python3 --version | grep -o '[0-9]\+\.[0-9]\+') - echo 'Detected Python version:' \$ACTUAL_PYTHON - ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python3 /usr/local/bin/python - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - ;; - '3.13') - # Python 3.13 requires building from source - echo 'Python $(pythonVersion) requires building from source' - echo 'DEBUG: pythonVersion = $(pythonVersion)' - - # Install dependencies needed for Python source compilation - apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev - apt-get install -y libreadline-dev libsqlite3-dev wget curl llvm - apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev - apt-get install -y libffi-dev liblzma-dev python3-openssl - apt-get install -y libgdbm-dev libnss3-dev libedit-dev || echo 'Some optional dependencies not available' - - # Verify SSL development libraries are installed - echo 'Verifying SSL development libraries:' - dpkg -l | grep libssl-dev || echo 'libssl-dev not found' - pkg-config --exists openssl && echo 'OpenSSL pkg-config found' || echo 'OpenSSL pkg-config missing' - - # Download Python source - fix version mismatch - cd /tmp - PYTHON_FULL_VERSION='3.13.1' - PYTHON_URL=\"https://www.python.org/ftp/python/\$PYTHON_FULL_VERSION/Python-\$PYTHON_FULL_VERSION.tgz\" - echo \"Downloading Python from \$PYTHON_URL\" - wget \$PYTHON_URL -O python-\$PYTHON_FULL_VERSION.tgz - tar -xzf python-\$PYTHON_FULL_VERSION.tgz - cd Python-\$PYTHON_FULL_VERSION - - # Configure and compile Python with SSL support explicitly enabled - echo 'Configuring Python build with SSL support' - # Disable optimizations for ARM64 builds to speed up compilation in emulated environment - if [ '$(targetArch)' = 'arm64' ]; then - echo 'ARM64 build detected - disabling optimizations for faster compilation' - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr - else - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/usr - fi - - echo 'Compiling Python (this may take several minutes - ARM64 builds are slower due to emulation)' - make -j\$(nproc) - - echo 'Installing Python' - make altinstall - - # Create symlinks - altinstall creates python3.13, we create python symlink - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - - # Verify installation and SSL support - echo 'Verifying Python 3.13 installation:' - ls -l /usr/local/bin/python$(pythonVersion) || echo 'ERROR: Python $(pythonVersion) not found' - /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL support in Python:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' - - # Clean up - cd / - rm -rf /tmp/Python-\$PYTHON_FULL_VERSION /tmp/python-\$PYTHON_FULL_VERSION.tgz - - echo 'Successfully built and installed Python $(pythonVersion) from source' - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - ;; - *) - echo 'Unsupported Python version $(pythonVersion) for Debian, using python3' - apt-get install -y python3 python3-dev python3-venv - ln -sf /usr/bin/python3 /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python3 /usr/local/bin/python - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - ;; - esac - else - # Ubuntu has deadsnakes PPA, so more versions are available - # Note: distutils is not available for newer Python versions (3.12+) - if [ '$(pythonVersion)' = '3.12' ] || [ '$(pythonVersion)' = '3.13' ]; then - apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv - else - apt-get install -y python$(pythonVersion) python$(pythonVersion)-dev python$(pythonVersion)-venv python$(pythonVersion)-distutils - fi - # For Ubuntu, create symlinks for consistency - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - fi - - # Install pip for the specific Python version - curl -sS https://bootstrap.pypa.io/get-pip.py | \$PYTHON_CMD - - # Install remaining packages - apt-get install -y pybind11-dev || echo 'pybind11-dev not available, will install via pip' - - # Verify Python installation - echo 'Python installation verification:' - echo 'Using PYTHON_CMD:' \$PYTHON_CMD - \$PYTHON_CMD --version - if [ -f /usr/local/bin/python ]; then - /usr/local/bin/python --version - fi - " - elif [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) sh -c " - # Update package index - apk update - - # Install base build tools and system dependencies - apk add --no-cache \ - build-base \ - cmake \ - clang \ - git \ - bash \ - wget \ - curl \ - gnupg \ - unixodbc \ - unixodbc-dev \ - libffi-dev \ - openssl-dev \ - zlib-dev \ - patchelf - - # Python installation - hybrid approach - if [ '$(pythonVersion)' = '3.12' ]; then - # Use pre-available Python 3.12 from Alpine packages - echo 'Using pre-available Python 3.12 from Alpine packages' - apk add --no-cache py3-pip python3-dev - - # Create symlinks for Python compatibility - ln -sf python3 /usr/bin/python || true - ln -sf pip3 /usr/bin/pip || true - else - # Build Python from source for other versions (3.10, 3.11, 3.13) - echo 'Building Python $(pythonVersion) from source for Alpine Linux' - apk add --no-cache tar xz ncurses-dev sqlite-dev readline-dev tk-dev gdbm-dev db-dev bzip2-dev xz-dev linux-headers - - # Download and compile Python from source - cd /tmp - wget https://www.python.org/ftp/python/$(pythonVersion).1/Python-$(pythonVersion).1.tgz - tar xzf Python-$(pythonVersion).1.tgz - cd Python-$(pythonVersion).1 - - # Configure and build Python - Alpine/musl specific configuration - # Set cache variables to help configure detect musl libc types correctly - export ac_cv_file__dev_ptmx=yes - export ac_cv_file__dev_ptc=no - export ac_cv_have_long_long_format=yes - # Fix LONG_BIT detection for musl libc on ARM64 - export ac_cv_sizeof_long=8 - export ac_cv_sizeof_size_t=8 - export ac_cv_sizeof_pid_t=4 - export ac_cv_sizeof_void_p=8 - # Fix float word ordering detection for ARM64 - export ax_cv_c_float_words_bigendian=no - - ./configure \ - --prefix=/usr/local \ - --enable-shared \ - --with-ensurepip=install \ - --disable-ipv6 \ - --build=aarch64-alpine-linux-musl \ - --host=aarch64-alpine-linux-musl \ - --target=aarch64-alpine-linux-musl \ - CPPFLAGS='-I/usr/include -DLONG_BIT=64' \ - LDFLAGS='-L/usr/lib -Wl,-rpath,/usr/local/lib' \ - CFLAGS='-DLONG_BIT=64' - - # Build Python without optimizations to avoid gcc segfault on ARM64 - echo 'Building Python $(pythonVersion) without PGO optimizations to avoid compilation issues' - make -j\$(nproc) - - make altinstall - - # Set up environment for proper Python operation - export PYTHONHOME=/usr/local - export PYTHONPATH=/usr/local/lib/python$(pythonVersion) - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - - # Create symlinks for easier access - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - ln -sf /usr/local/bin/pip$(pythonVersion) /usr/local/bin/pip - - # Set up persistent environment variables for source-compiled Python - echo 'export PYTHONHOME=/usr/local' >> /etc/profile - echo 'export PYTHONPATH=/usr/local/lib/python$(pythonVersion)' >> /etc/profile - echo 'export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH' >> /etc/profile - - # Verify Python installation and modules - echo 'Verifying Python $(pythonVersion) installation:' - ls -la /usr/local/bin/python$(pythonVersion) - /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL and encodings support:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support: OK\")' - echo 'Python installation successful' - - # Clean up build files - cd / - rm -rf /tmp/Python-$(pythonVersion).1* - fi - - # Verify installation and architecture - echo 'Architecture:' \$(uname -m) - echo 'Alpine version:' \$(cat /etc/alpine-release) - python --version - which cmake - " - else - # RHEL/DNF - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Enable CodeReady Builder repository for additional packages (skip if not available) - dnf install -y dnf-plugins-core || true - dnf install -y epel-release || echo 'EPEL not available in UBI9, continuing without it' - dnf config-manager --set-enabled crb || dnf config-manager --set-enabled powertools || echo 'No additional repos to enable' - - # Install dependencies - dnf update -y - dnf groupinstall -y 'Development Tools' || echo 'Development Tools group not available, installing individual packages' - - # Install development tools and cmake separately to ensure they work - # Note: Handle curl conflicts by replacing curl-minimal with curl - dnf install -y wget gnupg2 glibc-devel kernel-headers - dnf install -y --allowerasing curl || dnf install -y curl || echo 'curl installation failed, continuing' - dnf install -y gcc gcc-c++ make binutils - dnf install -y cmake - - # Install additional dependencies needed for Python source compilation - # Some packages may not be available in UBI9, so install what we can - dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel || echo 'Some core devel packages failed' - dnf install -y ncurses-devel sqlite-devel xz-devel || echo 'Some optional devel packages not available' - # These are often missing in UBI9, install if available - dnf install -y readline-devel tk-devel gdbm-devel libnsl2-devel libuuid-devel || echo 'Some Python build dependencies not available in UBI9' - - # If that doesn't work, try installing from different repositories - if ! which gcc; then - echo 'Trying alternative gcc installation...' - dnf --enablerepo=ubi-9-codeready-builder install -y gcc gcc-c++ - fi - - # For RHEL, we need to handle Python versions more carefully - # RHEL 9 UBI has python3.9 by default, but we don't support 3.9 - # We need to install specific versions or build from source - - # First, try to install the specific Python version - PYTHON_INSTALLED=false - echo 'Trying to install Python $(pythonVersion) from available repositories' - # Try from default repos first - if dnf install -y python$(pythonVersion) python$(pythonVersion)-devel python$(pythonVersion)-pip; then - echo 'Successfully installed Python $(pythonVersion) from default repos' - PYTHON_INSTALLED=true - # Create symlinks for the specific version - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python - else - echo 'Python $(pythonVersion) not available in default RHEL repos' - # For Python 3.11+ which might be available in newer RHEL versions - if [ '$(pythonVersion)' = '3.11' ] || [ '$(pythonVersion)' = '3.12' ]; then - echo 'Trying alternative installation for Python $(pythonVersion)' - # Try installing from additional repos - dnf install -y python$(pythonVersion) python$(pythonVersion)-devel python$(pythonVersion)-pip || true - if command -v python$(pythonVersion) >/dev/null 2>&1; then - echo 'Found Python $(pythonVersion) after alternative installation' - PYTHON_INSTALLED=true - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python$(pythonVersion) - ln -sf /usr/bin/python$(pythonVersion) /usr/local/bin/python - fi - elif [ '$(pythonVersion)' = '3.10' ] || [ '$(pythonVersion)' = '3.13' ]; then - echo 'Python $(pythonVersion) requires building from source' - - # Download Python source - cd /tmp - if [ '$(pythonVersion)' = '3.10' ]; then - PYTHON_URL='https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tgz' - elif [ '$(pythonVersion)' = '3.13' ]; then - PYTHON_URL='https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz' - fi - - echo \"Downloading Python from \$PYTHON_URL\" - wget \$PYTHON_URL -O python-$(pythonVersion).tgz - tar -xzf python-$(pythonVersion).tgz - cd Python-$(pythonVersion)* - - # Configure and compile Python with optimizations disabled for missing deps - echo 'Configuring Python build (optimizations may be disabled due to missing dependencies)' - ./configure --prefix=/usr/local --with-ensurepip=install --enable-loadable-sqlite-extensions --with-openssl=/usr - - echo 'Compiling Python (this may take several minutes)' - make -j\$(nproc) - - echo 'Installing Python' - make altinstall - - # Create symlinks - altinstall creates python3.13, we create python symlink - ln -sf /usr/local/bin/python$(pythonVersion) /usr/local/bin/python - - # Verify installation and SSL support - /usr/local/bin/python$(pythonVersion) --version - echo 'Testing SSL support in Python:' - /usr/local/bin/python$(pythonVersion) -c 'import ssl; print(\"SSL support:\", ssl.OPENSSL_VERSION)' || echo 'WARNING: SSL module not available' - PYTHON_INSTALLED=true - - # Clean up - cd / - rm -rf /tmp/Python-$(pythonVersion)* /tmp/python-$(pythonVersion).tgz - - echo 'Successfully built and installed Python $(pythonVersion) from source' - fi - fi - - # If we couldn't install the specific version, fail the build - if [ \"\$PYTHON_INSTALLED\" = \"false\" ]; then - echo 'ERROR: Could not install Python $(pythonVersion) - unsupported version' - echo 'Supported versions for RHEL: 3.11, 3.12 (and 3.10, 3.13 via source compilation)' - exit 1 - fi - - # Install pybind11 development headers - dnf install -y python3-pybind11-devel || echo 'pybind11-devel not available, will install via pip' - - # Verify installations - echo 'Verifying installations:' - python3 --version - which gcc && which g++ - gcc --version - g++ --version - cmake --version || echo 'cmake not found in PATH' - which cmake || echo 'cmake binary not found' - " - fi - displayName: 'Install basic dependencies in $(distroName) $(targetArch) container' - - - script: | - # Install ODBC driver in the container - if [ "$(packageManager)" = "apt" ]; then - # Ubuntu/Debian - docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive - - # Download the package to configure the Microsoft repo - if [ '$(distroName)' = 'Ubuntu' ]; then - curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb - else - # Debian 12 - curl -sSL -O https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb - fi - - # Install the package - dpkg -i packages-microsoft-prod.deb || true - rm packages-microsoft-prod.deb - - # Update package list - apt-get update - - # Install the driver - ACCEPT_EULA=Y apt-get install -y msodbcsql18 - # optional: for bcp and sqlcmd - ACCEPT_EULA=Y apt-get install -y mssql-tools18 - # optional: for unixODBC development headers - apt-get install -y unixodbc-dev - " - elif [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Detect architecture for ODBC driver download - case \$(uname -m) in - x86_64) architecture='amd64' ;; - arm64|aarch64) architecture='arm64' ;; - *) architecture='unsupported' ;; - esac - - if [[ 'unsupported' == '\$architecture' ]]; then - echo 'Alpine architecture \$(uname -m) is not currently supported.' - exit 1 - fi - - echo 'Detected architecture: '\$architecture - - # Download the packages - curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.apk - curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.apk - - # Download signatures for verification - curl -O https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_\$architecture.sig - curl -O https://download.microsoft.com/download/7/6d/76de322a-d860-4894-9945-f0cc5d6a45f8/mssql-tools18_18.4.1.1-1_\$architecture.sig - - # Import Microsoft GPG key and verify packages - curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - - gpg --verify msodbcsql18_18.5.1.1-1_\$architecture.sig msodbcsql18_18.5.1.1-1_\$architecture.apk - gpg --verify mssql-tools18_18.4.1.1-1_\$architecture.sig mssql-tools18_18.4.1.1-1_\$architecture.apk - - # Install the packages - apk add --allow-untrusted msodbcsql18_18.5.1.1-1_\$architecture.apk - apk add --allow-untrusted mssql-tools18_18.4.1.1-1_\$architecture.apk - - # Cleanup - rm -f msodbcsql18_18.5.1.1-1_\$architecture.* mssql-tools18_18.4.1.1-1_\$architecture.* - - # Add mssql-tools to PATH - export PATH=\"\$PATH:/opt/mssql-tools18/bin\" - echo 'export PATH=\"\$PATH:/opt/mssql-tools18/bin\"' >> ~/.bashrc - " - else - # RHEL/DNF - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Add Microsoft repository for RHEL 9 - curl -sSL -O https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm - rpm -Uvh packages-microsoft-prod.rpm - rm packages-microsoft-prod.rpm - - # Update package list - dnf update -y - - # Install the driver - ACCEPT_EULA=Y dnf install -y msodbcsql18 - # optional: for bcp and sqlcmd - ACCEPT_EULA=Y dnf install -y mssql-tools18 - # optional: for unixODBC development headers - dnf install -y unixODBC-devel - " - fi - displayName: 'Install ODBC Driver in $(distroName) $(targetArch) container' - - - script: | - # Install Python dependencies in the container using virtual environment - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Determine which Python command to use - # Set up Python environment before determining command - if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then - # For source-compiled Python on Alpine, set environment variables - export PYTHONHOME=/usr/local - export PYTHONPATH=/usr/local/lib/python$(pythonVersion) - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - fi - - if [ '$(packageManager)' = 'apk' ]; then - # Alpine Linux - check if we built from source or used pre-installed - if [ '$(pythonVersion)' = '3.12' ]; then - # Using pre-installed Python 3.12 - PYTHON_CMD=python3 - else - # Using source-compiled Python - if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - elif command -v python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=python$(pythonVersion) - else - echo 'No Python $(pythonVersion) interpreter found after source compilation' - exit 1 - fi - fi - else - # Ubuntu/Debian/RHEL - determine the best Python command - if command -v /usr/local/bin/python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=/usr/local/bin/python$(pythonVersion) - elif command -v python$(pythonVersion) >/dev/null 2>&1; then - PYTHON_CMD=python$(pythonVersion) - elif command -v python3 >/dev/null 2>&1; then - PYTHON_CMD=python3 - else - echo 'No Python interpreter found' - exit 1 - fi - fi - - echo 'Selected Python command:' \$PYTHON_CMD - echo 'Python version:' \$(\$PYTHON_CMD --version) - - # Create virtual environment at consistent path - \$PYTHON_CMD -m venv /workspace/venv - source /workspace/venv/bin/activate - - # Verify virtual environment is working - echo 'Virtual environment activated:' - echo 'Python executable:' \$(which python) - echo 'Python version in venv:' \$(python --version) - - # Upgrade pip and install dependencies - python -m pip install --upgrade pip - python -m pip install pybind11 - python -m pip install -r requirements.txt - python -m pip install wheel setuptools + - checkout: self + fetchDepth: 0 + + - script: | + sudo docker run --rm --privileged tonistiigi/binfmt --install all + displayName: 'Enable QEMU (aarch64)' + + - script: | + python3 -m pip install -U pip pipx + pipx ensurepath + pipx install cibuildwheel + displayName: 'Install cibuildwheel' + + - script: | + rm -rf wheelhouse $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings + mkdir -p $(Build.ArtifactStagingDirectory)/dist + mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings + displayName: 'Prep output directories' + + # ---------- manylinux ---------- + - script: | + cibuildwheel --platform linux + cp -v wheelhouse/*.whl $(Build.ArtifactStagingDirectory)/dist/ || true + # Copy .so files + find mssql_python -name "*.so" -exec cp -v {} $(Build.ArtifactStagingDirectory)/ddbc-bindings/ \; + rm -rf wheelhouse + displayName: 'Build manylinux wheels (x86_64 + aarch64, cp310–cp313)' + env: + CIBW_BUILD: "cp310-manylinux* cp311-manylinux* cp312-manylinux* cp313-manylinux*" + CIBW_ARCHS_LINUX: "x86_64 aarch64" + CIBW_MANYLINUX_X86_64_IMAGE: "manylinux_2_28" + CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux_2_28" + CIBW_BEFORE_ALL_LINUX: > + bash -lc 'if command -v yum >/dev/null 2>&1; then + yum -y update || true; + yum -y install unixODBC-devel cmake make gcc gcc-c++ || true; + elif command -v dnf >/dev/null 2>&1; then + dnf -y update || true; + dnf -y install unixODBC-devel cmake make gcc gcc-c++ || true; + fi' + CIBW_BEFORE_BUILD: > + bash -lc 'PY=$(command -v python); + PIP=$(command -v pip || echo ""); + ln -sf "$PY" /usr/local/bin/python; + if [ -n "$PIP" ]; then ln -sf "$PIP" /usr/local/bin/pip; fi; + bash build.sh' + CIBW_TEST_COMMAND: "python -c \"import mssql_python, mssql_python.ddbc_bindings; print('import ok')\"" + CIBW_ENVIRONMENT_LINUX: "CMAKE_BUILD_TYPE=Release" + + # ---------- musllinux ---------- + - script: | + cibuildwheel --platform linux + cp -v wheelhouse/*.whl $(Build.ArtifactStagingDirectory)/dist/ || true + # Copy generated .so file from mssql_python dir to ddbc-bindings/linux (create if not exists) + mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux + cp -v mssql_python/*.so $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux || true - # Verify installation - echo 'Python version in venv:' \$(python --version) - echo 'Python executable:' \$(which python) - echo 'Pip version:' \$(pip --version) - " - displayName: 'Install Python dependencies in $(distroName) $(targetArch) container' - - - script: | - # Build pybind bindings in the container - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Activate virtual environment - source /workspace/venv/bin/activate - - echo 'Building pybind bindings for $(distroName) $(targetArch)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - - # Verify build tools (for RHEL debugging) - if [ '$(packageManager)' = 'dnf' ]; then - echo 'CMake status:' - cmake --version || echo 'cmake not available' - fi - - cd mssql_python/pybind - chmod +x build.sh - ./build.sh - " - displayName: 'Build pybind bindings (.so) in $(distroName) $(targetArch) container' - - - script: | - # Uninstall ODBC Driver before running tests - if [ "$(packageManager)" = "apt" ]; then - # Ubuntu/Debian - docker exec build-container-$(distroName)-$(targetArch) bash -c " - export DEBIAN_FRONTEND=noninteractive - apt-get remove --purge -y msodbcsql18 mssql-tools18 unixodbc-dev - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /lib/x86_64-linux-gnu/libodbcinst.so.2 - rm -f /lib/aarch64-linux-gnu/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) debian_ubuntu driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - elif [ "$(packageManager)" = "apk" ]; then - # Alpine Linux - docker exec build-container-$(distroName)-$(targetArch) sh -c " - apk del msodbcsql18 mssql-tools18 unixodbc-dev || echo 'Some packages were not installed' - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /usr/lib/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) alpine driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - else - # RHEL/DNF - docker exec build-container-$(distroName)-$(targetArch) bash -c " - dnf remove -y msodbcsql18 mssql-tools18 unixODBC-devel - rm -f /usr/bin/sqlcmd - rm -f /usr/bin/bcp - rm -rf /opt/microsoft/msodbcsql - rm -f /lib64/libodbcinst.so.2 - odbcinst -u -d -n 'ODBC Driver 18 for SQL Server' || true - echo 'Uninstalled ODBC Driver and cleaned up libraries' - echo 'Verifying $(targetArch) rhel driver library signatures:' - if [ '$(targetArch)' = 'x86_64' ]; then - ldd mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 - else - ldd mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 - fi - " - fi - displayName: 'Uninstall ODBC Driver before running tests in $(distroName) $(targetArch) container' - - - script: | - # Run tests in the container - # Get SQL Server container IP - SQLSERVER_IP=$(docker inspect sqlserver-$(distroName)-$(targetArch) --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') - echo "SQL Server IP: $SQLSERVER_IP" - - docker exec \ - -e DB_CONNECTION_STRING="Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes" \ - -e DB_PASSWORD="$(DB_PASSWORD)" \ - build-container-$(distroName)-$(targetArch) bash -c " - # Set environment for source-compiled Python on Alpine - if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then - export PYTHONHOME=/usr/local - export PYTHONPATH=/usr/local/lib/python$(pythonVersion) - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - fi - - source /workspace/venv/bin/activate - echo 'Build successful, running tests now on $(distroName) $(targetArch)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - echo 'Using connection string: Driver=ODBC Driver 18 for SQL Server;Server=$SQLSERVER_IP;Database=TestDB;Uid=SA;Pwd=***;TrustServerCertificate=yes' - python -m pytest -v --junitxml=test-results-$(distroName)-$(targetArch).xml --cov=. --cov-report=xml:coverage-$(distroName)-$(targetArch).xml --capture=tee-sys --cache-clear - " - displayName: 'Run pytest with coverage in $(distroName) $(targetArch) container' - env: - DB_PASSWORD: $(DB_PASSWORD) - - - script: | - # Build wheel package in the container - docker exec build-container-$(distroName)-$(targetArch) bash -c " - # Set environment for source-compiled Python on Alpine - if [ '$(packageManager)' = 'apk' ] && [ '$(pythonVersion)' != '3.12' ]; then - export PYTHONHOME=/usr/local - export PYTHONPATH=/usr/local/lib/python$(pythonVersion) - export LD_LIBRARY_PATH=/usr/local/lib:\$LD_LIBRARY_PATH - fi - - source /workspace/venv/bin/activate - echo 'Building wheel for $(distroName) $(targetArch) Python $(pythonVersion)' - echo 'Python version:' \$(python --version) - echo 'Architecture:' \$(uname -m) - python -m pip install --upgrade pip wheel setuptools - python setup.py bdist_wheel - - # Verify the wheel was created - ls -la dist/ - " - displayName: 'Build wheel package in $(distroName) $(targetArch) container' - - - script: | - # Copy test results from container to host - docker cp build-container-$(distroName)-$(targetArch):/workspace/test-results-$(distroName)-$(targetArch).xml $(Build.SourcesDirectory)/ - docker cp build-container-$(distroName)-$(targetArch):/workspace/coverage-$(distroName)-$(targetArch).xml $(Build.SourcesDirectory)/ - - # Copy wheel files from container to host - mkdir -p $(Build.ArtifactStagingDirectory)/dist - docker cp build-container-$(distroName)-$(targetArch):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || echo "Failed to copy dist directory" - - # Copy .so files from container to host - mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch) - docker cp build-container-$(distroName)-$(targetArch):/workspace/mssql_python/ddbc_bindings.cp$(shortPyVer)-$(targetArch).so $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux/$(distroName)-$(targetArch)/ || echo "Failed to copy .so files" - displayName: 'Copy results and artifacts from $(distroName) $(targetArch) container' - condition: always() - - - script: | - # Clean up containers - docker stop build-container-$(distroName)-$(targetArch) || true - docker rm build-container-$(distroName)-$(targetArch) || true - docker stop sqlserver-$(distroName)-$(targetArch) || true - docker rm sqlserver-$(distroName)-$(targetArch) || true - displayName: 'Clean up $(distroName) $(targetArch) containers' - condition: always() - - - task: PublishTestResults@2 - condition: succeededOrFailed() - inputs: - testResultsFiles: '**/test-results-$(distroName)-$(targetArch).xml' - testRunTitle: 'Publish pytest results on $(distroName) $(targetArch)' - - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish .so files as artifacts' - - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' - ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish wheels as artifacts' \ No newline at end of file + displayName: 'Build musllinux wheels (x86_64 + aarch64, cp310–cp313)' + env: + CIBW_BUILD: "cp310-musllinux* cp311-musllinux* cp312-musllinux* cp313-musllinux*" + CIBW_ARCHS_LINUX: "x86_64 aarch64" + CIBW_MUSLLINUX_X86_64_IMAGE: "musllinux_1_2" + CIBW_MUSLLINUX_AARCH64_IMAGE: "musllinux_1_2" + CIBW_BEFORE_ALL_LINUX: > + bash -lc 'if command -v apk >/dev/null 2>&1; then + apk update || true; + apk add --no-cache build-base cmake unixodbc-dev || true; + fi' + CIBW_BEFORE_BUILD: > + bash -lc 'PY=$(command -v python); + PIP=$(command -v pip || echo ""); + ln -sf "$PY" /usr/local/bin/python; + if [ -n "$PIP" ]; then ln -sf "$PIP" /usr/local/bin/pip; fi; + bash build.sh' + CIBW_TEST_COMMAND: "python -c \"import mssql_python, mssql_python.ddbc_bindings; print('import ok')\"" + CIBW_ENVIRONMENT_LINUX: "CMAKE_BUILD_TYPE=Release" + + # Publish wheels + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' + ArtifactName: 'mssql-python-wheels-dist' + publishLocation: 'Container' + displayName: 'Publish wheels as artifacts' + + # Publish .so files + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + publishLocation: 'Container' + displayName: 'Publish .so files as artifacts' diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..04436796a --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,22 @@ +# pyproject.toml — minimal, keeps your setup.py in charge + +[build-system] +requires = [ + "setuptools>=64", + "wheel", + "pybind11>=2.12", # if your setup.py/build.sh expects pybind11 headers from pip +] +build-backend = "setuptools.build_meta" + +[tool.setuptools] +# Make sure non-.py assets get into the wheel (your .so and any bundled libs) +include-package-data = true + +[tool.setuptools.package-data] +# adjust if your .so lands elsewhere; this ensures the extension and any helper libs are included +"mssql_python" = ["*.so", "libs/**/*"] + +[tool.setuptools.packages.find] +# typical layout; tweak if your package root differs +where = ["."] +exclude = ["tests*", "docs*", "examples*"] From 9dbd9f149b494f4b1de5c27f272ca5ae9c7568b0 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Mon, 11 Aug 2025 19:44:34 +0530 Subject: [PATCH 56/93] linux is revamped --- eng/pipelines/build-whl-pipeline.yml | 128 ++++++++++++++++----------- 1 file changed, 77 insertions(+), 51 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 2bf5199c1..b96ab3be8 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -368,86 +368,112 @@ jobs: # displayName: 'Publish all wheels as artifacts' - job: BuildLinuxWheels - displayName: 'Build Linux wheels (manylinux + musllinux)' + displayName: 'Build Linux wheels (manylinux + musllinux) [matrix]' pool: { vmImage: 'ubuntu-latest' } timeoutInMinutes: 120 + strategy: + matrix: + manylinux_x86_64: + LINUX_TAG: 'manylinux' + ARCHS: 'x86_64' + IMAGE_MANYLINUX: 'manylinux_2_28' + manylinux_aarch64: + LINUX_TAG: 'manylinux' + ARCHS: 'aarch64' + IMAGE_MANYLINUX: 'manylinux_2_28' + musllinux_x86_64: + LINUX_TAG: 'musllinux' + ARCHS: 'x86_64' + IMAGE_MUSLLINUX: 'musllinux_1_2' + musllinux_aarch64: + LINUX_TAG: 'musllinux' + ARCHS: 'aarch64' + IMAGE_MUSLLINUX: 'musllinux_1_2' + steps: - checkout: self fetchDepth: 0 + # Allow aarch64 builds on x86_64 agents - script: | sudo docker run --rm --privileged tonistiigi/binfmt --install all - displayName: 'Enable QEMU (aarch64)' + displayName: 'Enable QEMU (for aarch64)' + # Install cibuildwheel via pipx - script: | python3 -m pip install -U pip pipx pipx ensurepath pipx install cibuildwheel displayName: 'Install cibuildwheel' + # Prep output dirs - script: | - rm -rf wheelhouse $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings + rm -rf wheelhouse \ + $(Build.ArtifactStagingDirectory)/dist \ + $(Build.ArtifactStagingDirectory)/ddbc-bindings mkdir -p $(Build.ArtifactStagingDirectory)/dist mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings displayName: 'Prep output directories' - # ---------- manylinux ---------- + # Build for current matrix lane - script: | + echo "Building for $(LINUX_TAG) / $(ARCHS)" cibuildwheel --platform linux + # Collect wheels cp -v wheelhouse/*.whl $(Build.ArtifactStagingDirectory)/dist/ || true - # Copy .so files - find mssql_python -name "*.so" -exec cp -v {} $(Build.ArtifactStagingDirectory)/ddbc-bindings/ \; - rm -rf wheelhouse - displayName: 'Build manylinux wheels (x86_64 + aarch64, cp310–cp313)' + # Collect compiled .so from your package dir + find mssql_python -maxdepth 2 -name "*.so" -exec cp -v {} $(Build.ArtifactStagingDirectory)/ddbc-bindings/ \; || true + displayName: 'cibuildwheel ($(LINUX_TAG) / $(ARCHS))' env: - CIBW_BUILD: "cp310-manylinux* cp311-manylinux* cp312-manylinux* cp313-manylinux*" - CIBW_ARCHS_LINUX: "x86_64 aarch64" - CIBW_MANYLINUX_X86_64_IMAGE: "manylinux_2_28" - CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux_2_28" + # Build Python 3.10–3.13 for this linux tag + CIBW_BUILD: "cp310-$(LINUX_TAG)* cp311-$(LINUX_TAG)* cp312-$(LINUX_TAG)* cp313-$(LINUX_TAG)*" + # Current architecture + CIBW_ARCHS_LINUX: "$(ARCHS)" + + # Pin images (only the relevant one is used per lane) + CIBW_MANYLINUX_X86_64_IMAGE: "$(IMAGE_MANYLINUX)" + CIBW_MANYLINUX_AARCH64_IMAGE: "$(IMAGE_MANYLINUX)" + CIBW_MUSLLINUX_X86_64_IMAGE: "$(IMAGE_MUSLLINUX)" + CIBW_MUSLLINUX_AARCH64_IMAGE: "$(IMAGE_MUSLLINUX)" + + # Install system headers/tools inside the container prior to any build CIBW_BEFORE_ALL_LINUX: > - bash -lc 'if command -v yum >/dev/null 2>&1; then - yum -y update || true; - yum -y install unixODBC-devel cmake make gcc gcc-c++ || true; - elif command -v dnf >/dev/null 2>&1; then - dnf -y update || true; - dnf -y install unixODBC-devel cmake make gcc gcc-c++ || true; - fi' + bash -lc ' + if command -v yum >/dev/null 2>&1; then + yum -y update || true; + yum -y install unixODBC-devel cmake make gcc gcc-c++ ccache || true; + elif command -v dnf >/dev/null 2>&1; then + dnf -y update || true; + dnf -y install unixODBC-devel cmake make gcc gcc-c++ ccache || true; + elif command -v apk >/dev/null 2>&1; then + apk update || true; + apk add --no-cache bash build-base cmake unixodbc-dev ccache || true; + else + echo "No known pkg manager found"; + fi + ' + + # Make `python` point at the active interpreter; enable parallel compile; run your script CIBW_BEFORE_BUILD: > - bash -lc 'PY=$(command -v python); - PIP=$(command -v pip || echo ""); - ln -sf "$PY" /usr/local/bin/python; - if [ -n "$PIP" ]; then ln -sf "$PIP" /usr/local/bin/pip; fi; - bash build.sh' + bash -lc ' + set -e; + echo "CWD=$(pwd)"; ls -la; + PY=$(command -v python); PIP=$(command -v pip || echo ""); + ln -sf "$PY" /usr/local/bin/python; + if [ -n "$PIP" ]; then ln -sf "$PIP" /usr/local/bin/pip; fi; + chmod +x mssql_python/pybind/build.sh || true; + N=$(nproc 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null || echo 4); + export MAKEFLAGS=-j$N CMAKE_BUILD_PARALLEL_LEVEL=$N; + echo "Parallel jobs: $N"; + test -f mssql_python/pybind/build.sh || { echo "build.sh not found"; exit 127; } + bash mssql_python/pybind/build.sh + ' + + # Optional: quick import smoke (not full tests) CIBW_TEST_COMMAND: "python -c \"import mssql_python, mssql_python.ddbc_bindings; print('import ok')\"" - CIBW_ENVIRONMENT_LINUX: "CMAKE_BUILD_TYPE=Release" - # ---------- musllinux ---------- - - script: | - cibuildwheel --platform linux - cp -v wheelhouse/*.whl $(Build.ArtifactStagingDirectory)/dist/ || true - # Copy generated .so file from mssql_python dir to ddbc-bindings/linux (create if not exists) - mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux - cp -v mssql_python/*.so $(Build.ArtifactStagingDirectory)/ddbc-bindings/linux || true - - displayName: 'Build musllinux wheels (x86_64 + aarch64, cp310–cp313)' - env: - CIBW_BUILD: "cp310-musllinux* cp311-musllinux* cp312-musllinux* cp313-musllinux*" - CIBW_ARCHS_LINUX: "x86_64 aarch64" - CIBW_MUSLLINUX_X86_64_IMAGE: "musllinux_1_2" - CIBW_MUSLLINUX_AARCH64_IMAGE: "musllinux_1_2" - CIBW_BEFORE_ALL_LINUX: > - bash -lc 'if command -v apk >/dev/null 2>&1; then - apk update || true; - apk add --no-cache build-base cmake unixodbc-dev || true; - fi' - CIBW_BEFORE_BUILD: > - bash -lc 'PY=$(command -v python); - PIP=$(command -v pip || echo ""); - ln -sf "$PY" /usr/local/bin/python; - if [ -n "$PIP" ]; then ln -sf "$PIP" /usr/local/bin/pip; fi; - bash build.sh' - CIBW_TEST_COMMAND: "python -c \"import mssql_python, mssql_python.ddbc_bindings; print('import ok')\"" + # Extra env your native build can read CIBW_ENVIRONMENT_LINUX: "CMAKE_BUILD_TYPE=Release" # Publish wheels From 81cfbe891ebf5d7c7fbaef5d7b58c6197a210747 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Mon, 11 Aug 2025 22:58:17 +0530 Subject: [PATCH 57/93] add build failure detection --- eng/pipelines/build-whl-pipeline.yml | 41 +++++++++++++++++++++------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index b96ab3be8..79b04e3c7 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -368,7 +368,7 @@ jobs: # displayName: 'Publish all wheels as artifacts' - job: BuildLinuxWheels - displayName: 'Build Linux wheels (manylinux + musllinux) [matrix]' + displayName: 'Build Linux wheels (manylinux + musllinux) [matrix, debug]' pool: { vmImage: 'ubuntu-latest' } timeoutInMinutes: 120 @@ -428,18 +428,18 @@ jobs: env: # Build Python 3.10–3.13 for this linux tag CIBW_BUILD: "cp310-$(LINUX_TAG)* cp311-$(LINUX_TAG)* cp312-$(LINUX_TAG)* cp313-$(LINUX_TAG)*" - # Current architecture CIBW_ARCHS_LINUX: "$(ARCHS)" - # Pin images (only the relevant one is used per lane) + # Pin images CIBW_MANYLINUX_X86_64_IMAGE: "$(IMAGE_MANYLINUX)" CIBW_MANYLINUX_AARCH64_IMAGE: "$(IMAGE_MANYLINUX)" CIBW_MUSLLINUX_X86_64_IMAGE: "$(IMAGE_MUSLLINUX)" CIBW_MUSLLINUX_AARCH64_IMAGE: "$(IMAGE_MUSLLINUX)" - # Install system headers/tools inside the container prior to any build + # OS-side build deps inside the container CIBW_BEFORE_ALL_LINUX: > bash -lc ' + set -euxo pipefail; if command -v yum >/dev/null 2>&1; then yum -y update || true; yum -y install unixODBC-devel cmake make gcc gcc-c++ ccache || true; @@ -451,26 +451,47 @@ jobs: apk add --no-cache bash build-base cmake unixodbc-dev ccache || true; else echo "No known pkg manager found"; - fi + fi; + echo "==== System tool versions ===="; + uname -a || true; + gcc --version || true; + cmake --version || true; ' - # Make `python` point at the active interpreter; enable parallel compile; run your script + # Python-side deps + path fix + parallel compile + run your script (with DEBUG) CIBW_BEFORE_BUILD: > bash -lc ' - set -e; - echo "CWD=$(pwd)"; ls -la; - PY=$(command -v python); PIP=$(command -v pip || echo ""); + set -euxo pipefail; + echo "==== Context ===="; + echo "CWD=$(pwd)"; + ls -la; + echo "==== Active /opt/python entries ===="; + ls -1 /opt/python || true; + echo "==== Bind python/pip ===="; + PY=$(command -v python); + PIP=$(command -v pip || echo ""); + echo "PY=$PY"; echo "PIP=$PIP"; ln -sf "$PY" /usr/local/bin/python; if [ -n "$PIP" ]; then ln -sf "$PIP" /usr/local/bin/pip; fi; + echo "==== Python environment ===="; + python -V; + python -c "import sys,sysconfig; print(sys.executable); print(sys.version); print(sysconfig.get_paths())"; + echo "==== Installing Python build deps ===="; + python -m pip install -U pip setuptools wheel pybind11; + echo "==== Repo layout ===="; + ls -la mssql_python || true; + ls -la mssql_python/pybind || true; chmod +x mssql_python/pybind/build.sh || true; + echo "==== Parallelism ===="; N=$(nproc 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null || echo 4); export MAKEFLAGS=-j$N CMAKE_BUILD_PARALLEL_LEVEL=$N; echo "Parallel jobs: $N"; + echo "==== Run build.sh ===="; test -f mssql_python/pybind/build.sh || { echo "build.sh not found"; exit 127; } bash mssql_python/pybind/build.sh ' - # Optional: quick import smoke (not full tests) + # (Optional) quick import check; remove if you want zero tests CIBW_TEST_COMMAND: "python -c \"import mssql_python, mssql_python.ddbc_bindings; print('import ok')\"" # Extra env your native build can read From 3012e55b24d5f047116f832cdf7b8e94d3ad7f98 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 08:43:38 +0530 Subject: [PATCH 58/93] build failure detection steps --- eng/pipelines/build-whl-pipeline.yml | 37 +++++++++++++++++++--------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 79b04e3c7..f53f3b704 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -368,7 +368,7 @@ jobs: # displayName: 'Publish all wheels as artifacts' - job: BuildLinuxWheels - displayName: 'Build Linux wheels (manylinux + musllinux) [matrix, debug]' + displayName: 'Build Linux wheels (manylinux + musllinux) [matrix]' pool: { vmImage: 'ubuntu-latest' } timeoutInMinutes: 120 @@ -418,6 +418,7 @@ jobs: # Build for current matrix lane - script: | + set -euxo pipefail echo "Building for $(LINUX_TAG) / $(ARCHS)" cibuildwheel --platform linux # Collect wheels @@ -436,6 +437,9 @@ jobs: CIBW_MUSLLINUX_X86_64_IMAGE: "$(IMAGE_MUSLLINUX)" CIBW_MUSLLINUX_AARCH64_IMAGE: "$(IMAGE_MUSLLINUX)" + # More verbose cibuildwheel logs + CIBW_BUILD_VERBOSITY: "3" + # OS-side build deps inside the container CIBW_BEFORE_ALL_LINUX: > bash -lc ' @@ -458,40 +462,51 @@ jobs: cmake --version || true; ' - # Python-side deps + path fix + parallel compile + run your script (with DEBUG) + # Python deps + robust path + fail-fast + run your script (all logs to console) CIBW_BEFORE_BUILD: > bash -lc ' set -euxo pipefail; + echo "==== Context ===="; echo "CWD=$(pwd)"; ls -la; + echo "==== Active /opt/python entries ===="; ls -1 /opt/python || true; + echo "==== Bind python/pip ===="; PY=$(command -v python); PIP=$(command -v pip || echo ""); echo "PY=$PY"; echo "PIP=$PIP"; ln -sf "$PY" /usr/local/bin/python; if [ -n "$PIP" ]; then ln -sf "$PIP" /usr/local/bin/pip; fi; + echo "==== Python environment ===="; python -V; - python -c "import sys,sysconfig; print(sys.executable); print(sys.version); print(sysconfig.get_paths())"; + python -c "import sys,sysconfig; print(sys.executable); print(sys.version); print(sysconfig.get_platform()); print(sysconfig.get_paths())"; + echo "==== Installing Python build deps ===="; python -m pip install -U pip setuptools wheel pybind11; + echo "==== Repo layout ===="; - ls -la mssql_python || true; - ls -la mssql_python/pybind || true; - chmod +x mssql_python/pybind/build.sh || true; - echo "==== Parallelism ===="; + ls -la {project} || true; + ls -la {project}/mssql_python || true; + ls -la {project}/mssql_python/pybind || true; + + chmod +x {project}/mssql_python/pybind/build.sh || true; + N=$(nproc 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null || echo 4); export MAKEFLAGS=-j$N CMAKE_BUILD_PARALLEL_LEVEL=$N; echo "Parallel jobs: $N"; + echo "==== Run build.sh ===="; - test -f mssql_python/pybind/build.sh || { echo "build.sh not found"; exit 127; } - bash mssql_python/pybind/build.sh + test -f {project}/mssql_python/pybind/build.sh || { echo "build.sh not found"; exit 127; } + + cd {project} + bash -c "set -euxo pipefail; bash mssql_python/pybind/build.sh" ' - # (Optional) quick import check; remove if you want zero tests + # Optional: keep quick import smoke (remove if you want zero checks) CIBW_TEST_COMMAND: "python -c \"import mssql_python, mssql_python.ddbc_bindings; print('import ok')\"" # Extra env your native build can read @@ -513,4 +528,4 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' ArtifactName: 'mssql-python-ddbc-bindings' publishLocation: 'Container' - displayName: 'Publish .so files as artifacts' + displayName: 'Publish .so files as artifacts' \ No newline at end of file From ce5ae8353381636646287d044622b3b62a0c2b90 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 08:50:28 +0530 Subject: [PATCH 59/93] using old style docker images --- eng/pipelines/build-whl-pipeline.yml | 217 ++++++++++++++------------- 1 file changed, 109 insertions(+), 108 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index f53f3b704..1858a31a2 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -368,7 +368,7 @@ jobs: # displayName: 'Publish all wheels as artifacts' - job: BuildLinuxWheels - displayName: 'Build Linux wheels (manylinux + musllinux) [matrix]' + displayName: 'Build Linux wheels (manylinux/musllinux, x86_64/aarch64) — explicit Docker' pool: { vmImage: 'ubuntu-latest' } timeoutInMinutes: 120 @@ -376,143 +376,144 @@ jobs: matrix: manylinux_x86_64: LINUX_TAG: 'manylinux' - ARCHS: 'x86_64' - IMAGE_MANYLINUX: 'manylinux_2_28' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' manylinux_aarch64: LINUX_TAG: 'manylinux' - ARCHS: 'aarch64' - IMAGE_MANYLINUX: 'manylinux_2_28' + ARCH: 'aarch64' + DOCKER_PLATFORM: 'linux/arm64' + IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' musllinux_x86_64: LINUX_TAG: 'musllinux' - ARCHS: 'x86_64' - IMAGE_MUSLLINUX: 'musllinux_1_2' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' musllinux_aarch64: LINUX_TAG: 'musllinux' - ARCHS: 'aarch64' - IMAGE_MUSLLINUX: 'musllinux_1_2' + ARCH: 'aarch64' + DOCKER_PLATFORM: 'linux/arm64' + IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' steps: - checkout: self fetchDepth: 0 - # Allow aarch64 builds on x86_64 agents + # Enable QEMU so we can run aarch64 containers on the x86_64 agent - script: | sudo docker run --rm --privileged tonistiigi/binfmt --install all displayName: 'Enable QEMU (for aarch64)' - # Install cibuildwheel via pipx + # Prep artifact dirs - script: | - python3 -m pip install -U pip pipx - pipx ensurepath - pipx install cibuildwheel - displayName: 'Install cibuildwheel' - - # Prep output dirs - - script: | - rm -rf wheelhouse \ - $(Build.ArtifactStagingDirectory)/dist \ - $(Build.ArtifactStagingDirectory)/ddbc-bindings + rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings mkdir -p $(Build.ArtifactStagingDirectory)/dist - mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings - displayName: 'Prep output directories' + mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) + displayName: 'Prepare artifact directories' - # Build for current matrix lane + # Start a long-lived container for this lane + - script: | + docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ + --platform $(DOCKER_PLATFORM) \ + -v $(Build.SourcesDirectory):/workspace \ + -w /workspace \ + $(IMAGE) \ + tail -f /dev/null + displayName: 'Start $(LINUX_TAG) $(ARCH) container' + + # Install OS build deps inside the container - script: | set -euxo pipefail - echo "Building for $(LINUX_TAG) / $(ARCHS)" - cibuildwheel --platform linux - # Collect wheels - cp -v wheelhouse/*.whl $(Build.ArtifactStagingDirectory)/dist/ || true - # Collect compiled .so from your package dir - find mssql_python -maxdepth 2 -name "*.so" -exec cp -v {} $(Build.ArtifactStagingDirectory)/ddbc-bindings/ \; || true - displayName: 'cibuildwheel ($(LINUX_TAG) / $(ARCHS))' - env: - # Build Python 3.10–3.13 for this linux tag - CIBW_BUILD: "cp310-$(LINUX_TAG)* cp311-$(LINUX_TAG)* cp312-$(LINUX_TAG)* cp313-$(LINUX_TAG)*" - CIBW_ARCHS_LINUX: "$(ARCHS)" - - # Pin images - CIBW_MANYLINUX_X86_64_IMAGE: "$(IMAGE_MANYLINUX)" - CIBW_MANYLINUX_AARCH64_IMAGE: "$(IMAGE_MANYLINUX)" - CIBW_MUSLLINUX_X86_64_IMAGE: "$(IMAGE_MUSLLINUX)" - CIBW_MUSLLINUX_AARCH64_IMAGE: "$(IMAGE_MUSLLINUX)" - - # More verbose cibuildwheel logs - CIBW_BUILD_VERBOSITY: "3" - - # OS-side build deps inside the container - CIBW_BEFORE_ALL_LINUX: > - bash -lc ' + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then + docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' set -euxo pipefail; if command -v yum >/dev/null 2>&1; then yum -y update || true; - yum -y install unixODBC-devel cmake make gcc gcc-c++ ccache || true; + yum -y install unixODBC-devel cmake make gcc gcc-c++ || true; elif command -v dnf >/dev/null 2>&1; then dnf -y update || true; - dnf -y install unixODBC-devel cmake make gcc gcc-c++ ccache || true; - elif command -v apk >/dev/null 2>&1; then - apk update || true; - apk add --no-cache bash build-base cmake unixodbc-dev ccache || true; - else - echo "No known pkg manager found"; + dnf -y install unixODBC-devel cmake make gcc gcc-c++ || true; fi; - echo "==== System tool versions ===="; - uname -a || true; - gcc --version || true; - cmake --version || true; + gcc --version || true; cmake --version || true; ' - - # Python deps + robust path + fail-fast + run your script (all logs to console) - CIBW_BEFORE_BUILD: > - bash -lc ' + else + docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' set -euxo pipefail; - - echo "==== Context ===="; - echo "CWD=$(pwd)"; - ls -la; - - echo "==== Active /opt/python entries ===="; - ls -1 /opt/python || true; - - echo "==== Bind python/pip ===="; - PY=$(command -v python); - PIP=$(command -v pip || echo ""); - echo "PY=$PY"; echo "PIP=$PIP"; - ln -sf "$PY" /usr/local/bin/python; - if [ -n "$PIP" ]; then ln -sf "$PIP" /usr/local/bin/pip; fi; - - echo "==== Python environment ===="; - python -V; - python -c "import sys,sysconfig; print(sys.executable); print(sys.version); print(sysconfig.get_platform()); print(sysconfig.get_paths())"; - - echo "==== Installing Python build deps ===="; - python -m pip install -U pip setuptools wheel pybind11; - - echo "==== Repo layout ===="; - ls -la {project} || true; - ls -la {project}/mssql_python || true; - ls -la {project}/mssql_python/pybind || true; - - chmod +x {project}/mssql_python/pybind/build.sh || true; - - N=$(nproc 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null || echo 4); - export MAKEFLAGS=-j$N CMAKE_BUILD_PARALLEL_LEVEL=$N; - echo "Parallel jobs: $N"; - - echo "==== Run build.sh ===="; - test -f {project}/mssql_python/pybind/build.sh || { echo "build.sh not found"; exit 127; } - - cd {project} - bash -c "set -euxo pipefail; bash mssql_python/pybind/build.sh" + apk update || true; + apk add --no-cache bash build-base cmake unixodbc-dev || true; + gcc --version || true; cmake --version || true; ' + fi + displayName: 'Install system build dependencies' - # Optional: keep quick import smoke (remove if you want zero checks) - CIBW_TEST_COMMAND: "python -c \"import mssql_python, mssql_python.ddbc_bindings; print('import ok')\"" - - # Extra env your native build can read - CIBW_ENVIRONMENT_LINUX: "CMAKE_BUILD_TYPE=Release" + # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters + - script: | + set -euxo pipefail + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi + + # Ensure dist exists inside the container + docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' + + # Loop through CPython versions present in the image + for PYBIN in cp310 cp311 cp312 cp313; do + echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then + docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " + set -euxo pipefail; + PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; + test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present + ln -sf \$PY /usr/local/bin/python; + python -m pip install -U pip setuptools wheel pybind11; + echo 'python:' \$(python -V); which python; + # run your existing script from repo root + cd /workspace; + bash mssql_python/pybind/build.sh; + # build wheel + cd /workspace; + python setup.py bdist_wheel; + # repair/tag wheel for manylinux + for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done + " + else + docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " + set -euxo pipefail; + PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; + test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present + ln -sf \$PY /usr/local/bin/python; + python -m pip install -U pip setuptools wheel pybind11; + echo 'python:' \$(python -V); which python; + cd /workspace; + bash mssql_python/pybind/build.sh; + cd /workspace; + python setup.py bdist_wheel; + # repair/tag wheel for musllinux + for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done + " + fi + done + displayName: 'Run build.sh and build wheels for cp310–cp313' + + # Copy artifacts back to host + - script: | + set -euxo pipefail + # Wheels + docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || echo "No wheels to copy" + # .so files (from your package directory) + docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) 'ls -la /workspace/mssql_python || true; ls -la /workspace/mssql_python/pybind || true' + mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) + docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/mssql_python/. $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/ || echo "No package dir to copy" + # Keep only .so files in that folder (prune others) + find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -type f ! -name "*.so" -delete || true + displayName: 'Copy wheels and .so back to host' + + # Cleanup container + - script: | + docker stop build-$(LINUX_TAG)-$(ARCH) || true + docker rm build-$(LINUX_TAG)-$(ARCH) || true + displayName: 'Clean up container' + condition: always() - # Publish wheels + # Publish wheels (exact name you wanted) - task: PublishBuildArtifacts@1 condition: succeededOrFailed() inputs: @@ -521,7 +522,7 @@ jobs: publishLocation: 'Container' displayName: 'Publish wheels as artifacts' - # Publish .so files + # Publish compiled .so files (exact name you wanted) - task: PublishBuildArtifacts@1 condition: succeededOrFailed() inputs: From e6b2595434cf48ab6a823b9a12f89c0fdb7412bb Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 08:51:08 +0530 Subject: [PATCH 60/93] using old style docker images --- eng/pipelines/build-whl-pipeline.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 1858a31a2..096c54bb8 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -7,6 +7,11 @@ trigger: include: - main +pr: + branches: + include: + - main + # Schedule the pipeline to run on main branch daily at 07:00 AM IST schedules: - cron: "30 1 * * *" From bd6a6a3f0c3284138ddfdc51ac631e4db2ae0fd7 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 08:57:09 +0530 Subject: [PATCH 61/93] using old style docker images - fix path --- eng/pipelines/build-whl-pipeline.yml | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 096c54bb8..19f5f307c 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -470,13 +470,15 @@ jobs: ln -sf \$PY /usr/local/bin/python; python -m pip install -U pip setuptools wheel pybind11; echo 'python:' \$(python -V); which python; - # run your existing script from repo root - cd /workspace; - bash mssql_python/pybind/build.sh; - # build wheel + # 👉 run from the directory that has CMakeLists.txt + cd /workspace/mssql_python/pybind; + bash build.sh; + + # back to repo root to build the wheel cd /workspace; python setup.py bdist_wheel; - # repair/tag wheel for manylinux + + # repair/tag wheel for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done " else @@ -487,11 +489,15 @@ jobs: ln -sf \$PY /usr/local/bin/python; python -m pip install -U pip setuptools wheel pybind11; echo 'python:' \$(python -V); which python; - cd /workspace; - bash mssql_python/pybind/build.sh; + # 👉 run from the directory that has CMakeLists.txt + cd /workspace/mssql_python/pybind; + bash build.sh; + + # back to repo root to build the wheel cd /workspace; python setup.py bdist_wheel; - # repair/tag wheel for musllinux + + # repair/tag wheel for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done " fi From 0ef76791cd3219623627bc50c512dc54b3c24849 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 09:00:11 +0530 Subject: [PATCH 62/93] using old style docker images - remove pyproject toml --- pyproject.toml | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 04436796a..000000000 --- a/pyproject.toml +++ /dev/null @@ -1,22 +0,0 @@ -# pyproject.toml — minimal, keeps your setup.py in charge - -[build-system] -requires = [ - "setuptools>=64", - "wheel", - "pybind11>=2.12", # if your setup.py/build.sh expects pybind11 headers from pip -] -build-backend = "setuptools.build_meta" - -[tool.setuptools] -# Make sure non-.py assets get into the wheel (your .so and any bundled libs) -include-package-data = true - -[tool.setuptools.package-data] -# adjust if your .so lands elsewhere; this ensures the extension and any helper libs are included -"mssql_python" = ["*.so", "libs/**/*"] - -[tool.setuptools.packages.find] -# typical layout; tweak if your package root differs -where = ["."] -exclude = ["tests*", "docs*", "examples*"] From f5b9ff8e1da403e8e68a302bff2bcecebc4601cc Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 09:11:27 +0530 Subject: [PATCH 63/93] using old style docker images - add auditwheel deps --- eng/pipelines/build-whl-pipeline.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 19f5f307c..6916f07de 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -434,10 +434,10 @@ jobs: set -euxo pipefail; if command -v yum >/dev/null 2>&1; then yum -y update || true; - yum -y install unixODBC-devel cmake make gcc gcc-c++ || true; + yum -y install unixODBC-devel cmake make gcc gcc-c++ krb5-libs || true; elif command -v dnf >/dev/null 2>&1; then dnf -y update || true; - dnf -y install unixODBC-devel cmake make gcc gcc-c++ || true; + dnf -y install unixODBC-devel cmake make gcc gcc-c++ krb5-libs || true; fi; gcc --version || true; cmake --version || true; ' @@ -445,7 +445,7 @@ jobs: docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' set -euxo pipefail; apk update || true; - apk add --no-cache bash build-base cmake unixodbc-dev || true; + apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs || true; gcc --version || true; cmake --version || true; ' fi From 0fdd2127c6f9fb432adf2b3681d646a99f0a48ff Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 09:18:08 +0530 Subject: [PATCH 64/93] using old style docker images - fix ddbc bindings artifacts --- eng/pipelines/build-whl-pipeline.yml | 39 ++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 6916f07de..b654e86e2 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -507,14 +507,37 @@ jobs: # Copy artifacts back to host - script: | set -euxo pipefail - # Wheels - docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. $(Build.ArtifactStagingDirectory)/dist/ || echo "No wheels to copy" - # .so files (from your package directory) - docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) 'ls -la /workspace/mssql_python || true; ls -la /workspace/mssql_python/pybind || true' - mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) - docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/mssql_python/. $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/ || echo "No package dir to copy" - # Keep only .so files in that folder (prune others) - find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -type f ! -name "*.so" -delete || true + # ---- Wheels ---- + docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" + + # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- + # Prepare host dest + mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" + + # Prepare a temp out dir inside the container + docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' + set -euxo pipefail; + echo "Listing package dirs for sanity:"; + ls -la /workspace/mssql_python || true; + ls -la /workspace/mssql_python/pybind || true; + + OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; + rm -rf "$OUT"; mkdir -p "$OUT"; + + # Copy ONLY top-level .so files from mssql_python (no recursion) + find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true + + echo "Top-level .so collected in $OUT:"; + ls -la "$OUT" || true + ' + + # Copy those .so files from container to host + docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ + "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ + || echo "No top-level .so files to copy" + + # (Optional) prune non-.so just in case + find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true displayName: 'Copy wheels and .so back to host' # Cleanup container From 92ee7feac8ede2f6ee4bf7eb3553933b661d57ec Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 09:47:08 +0530 Subject: [PATCH 65/93] using old style docker images - instal correct sys deps --- eng/pipelines/build-whl-pipeline.yml | 38 ++++++++++++++++++---------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index b654e86e2..8777d00e3 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -430,23 +430,35 @@ jobs: - script: | set -euxo pipefail if [[ "$(LINUX_TAG)" == "manylinux" ]]; then + # manylinux (glibc; Alma/Rocky-based images usually have dnf; yum may be a compat shim) docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' - set -euxo pipefail; - if command -v yum >/dev/null 2>&1; then - yum -y update || true; - yum -y install unixODBC-devel cmake make gcc gcc-c++ krb5-libs || true; - elif command -v dnf >/dev/null 2>&1; then - dnf -y update || true; - dnf -y install unixODBC-devel cmake make gcc gcc-c++ krb5-libs || true; - fi; - gcc --version || true; cmake --version || true; + set -euxo pipefail + if command -v dnf >/dev/null 2>&1; then + dnf -y update || true + dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs ccache || true + elif command -v yum >/dev/null 2>&1; then + yum -y update || true + yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs ccache || true + else + echo "No dnf/yum found in manylinux image" >&2 + fi + echo "---- tool versions ----" + gcc --version || true + cmake --version || true + echo "---- kerberos libs present? ----" + ls -l /lib64/libgssapi_krb5.so* /usr/lib64/libgssapi_krb5.so* 2>/dev/null || true ' else + # musllinux (Alpine/musl) docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' - set -euxo pipefail; - apk update || true; - apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs || true; - gcc --version || true; cmake --version || true; + set -euxo pipefail + apk update || true + apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs ccache || true + echo "---- tool versions ----" + gcc --version || true + cmake --version || true + echo "---- kerberos libs present? ----" + ls -l /lib/libgssapi_krb5.so* /usr/lib/libgssapi_krb5.so* 2>/dev/null || true ' fi displayName: 'Install system build dependencies' From c7b34ed7656a958206562c8655a84d99b9b5998c Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 09:58:02 +0530 Subject: [PATCH 66/93] using old style docker images - more system dependencies for auditwhl --- eng/pipelines/build-whl-pipeline.yml | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 8777d00e3..40de7f943 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -426,37 +426,52 @@ jobs: tail -f /dev/null displayName: 'Start $(LINUX_TAG) $(ARCH) container' - # Install OS build deps inside the container + # Install system build dependencies + # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes + # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk + # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* + # - ccache is optional but speeds rebuilds inside the container - script: | set -euxo pipefail if [[ "$(LINUX_TAG)" == "manylinux" ]]; then - # manylinux (glibc; Alma/Rocky-based images usually have dnf; yum may be a compat shim) + # ===== manylinux (glibc) containers ===== docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' set -euxo pipefail + # Prefer dnf (Alma/Rocky base), fall back to yum if present if command -v dnf >/dev/null 2>&1; then dnf -y update || true - dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs ccache || true + # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache + dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true elif command -v yum >/dev/null 2>&1; then yum -y update || true - yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs ccache || true + yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true else echo "No dnf/yum found in manylinux image" >&2 fi + + # Quick visibility for logs echo "---- tool versions ----" gcc --version || true cmake --version || true + + # (Optional) sanity peek for Kerberos libs; auditwheel may vendor these later echo "---- kerberos libs present? ----" ls -l /lib64/libgssapi_krb5.so* /usr/lib64/libgssapi_krb5.so* 2>/dev/null || true ' else - # musllinux (Alpine/musl) + # ===== musllinux (Alpine/musl) containers ===== docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' set -euxo pipefail apk update || true - apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs ccache || true + # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache + apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true + + # Quick visibility for logs echo "---- tool versions ----" gcc --version || true cmake --version || true + + # (Optional) sanity peek for Kerberos libs; auditwheel may vendor these later echo "---- kerberos libs present? ----" ls -l /lib/libgssapi_krb5.so* /usr/lib/libgssapi_krb5.so* 2>/dev/null || true ' From 14b7f7b134b967c6808a015da240fffebfbca417 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 11:15:03 +0530 Subject: [PATCH 67/93] removed auditwheel and added tests on linux job --- eng/pipelines/build-whl-pipeline.yml | 167 ++++++++++++++++++++++++++- 1 file changed, 164 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 40de7f943..8933142c0 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -505,8 +505,9 @@ jobs: cd /workspace; python setup.py bdist_wheel; - # repair/tag wheel - for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done + # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification + # We're assuming that this will be provided by OS and not bundled in the wheel + # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done " else docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " @@ -590,4 +591,164 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' ArtifactName: 'mssql-python-ddbc-bindings' publishLocation: 'Container' - displayName: 'Publish .so files as artifacts' \ No newline at end of file + displayName: 'Publish .so files as artifacts' + +# Job to test the built wheels on different Linux distributions with SQL Server +- job: TestWheelsOnLinux + displayName: 'Test Wheels with SQL Server' + dependsOn: BuildLinuxWheels + condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded + pool: { vmImage: 'ubuntu-latest' } + timeoutInMinutes: 60 + + strategy: + matrix: + # x86_64 + debian12: + BASE_IMAGE: 'debian:12-slim' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + rhel_ubi9: + BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + alpine320: + BASE_IMAGE: 'alpine:3.20' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + # arm64 + debian12_arm64: + BASE_IMAGE: 'debian:12-slim' + ARCH: 'arm64' + DOCKER_PLATFORM: 'linux/arm64' + rhel_ubi9_arm64: + BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' + ARCH: 'arm64' + DOCKER_PLATFORM: 'linux/arm64' + alpine320_arm64: + BASE_IMAGE: 'alpine:3.20' + ARCH: 'arm64' + DOCKER_PLATFORM: 'linux/arm64' + + steps: + - checkout: none # We only need artifacts, not source + + - task: DownloadBuildArtifacts@0 + inputs: + buildType: 'current' + downloadType: 'single' + artifactName: 'mssql-python-wheels-dist' + downloadPath: '$(System.ArtifactsDirectory)' + displayName: 'Download wheel artifacts' + + # Verify we actually have wheels before proceeding + - script: | + set -euxo pipefail + WHEEL_DIR="$(System.ArtifactsDirectory)/mssql-python-wheels-dist" + if [ ! -d "$WHEEL_DIR" ] || [ -z "$(ls -A $WHEEL_DIR/*.whl 2>/dev/null)" ]; then + echo "ERROR: No wheel files found in $WHEEL_DIR" + echo "Contents of artifacts directory:" + find "$(System.ArtifactsDirectory)" -type f -name "*.whl" || echo "No .whl files found anywhere" + exit 1 + fi + echo "Found wheel files:" + ls -la "$WHEEL_DIR"/*.whl + displayName: 'Verify wheel artifacts exist' + + # Start SQL Server container for testing + - script: | + set -euxo pipefail + docker run -d --name sqlserver \ + --network bridge \ + -e ACCEPT_EULA=Y \ + -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ + -p 1433:1433 \ + mcr.microsoft.com/mssql/server:2022-latest + + # Wait for SQL Server to be ready + echo "Waiting for SQL Server to start..." + for i in {1..30}; do + if docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ + -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then + echo "SQL Server is ready!" + break + fi + echo "Attempt $i/30: SQL Server not ready yet..." + sleep 3 + done + + # Create test database + docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ + -S localhost -U SA -P "$(DB_PASSWORD)" -C \ + -Q "CREATE DATABASE TestDB" + displayName: 'Start SQL Server and create test database' + env: + DB_PASSWORD: $(DB_PASSWORD) + + # Test wheels on target OS + - script: | + set -euxo pipefail + + # Start test container + docker run -d --name test-$(ARCH) \ + --platform $(DOCKER_PLATFORM) \ + --network bridge \ + -v $(System.ArtifactsDirectory):/artifacts:ro \ + $(BASE_IMAGE) \ + tail -f /dev/null + + # Install Python and dependencies based on OS + if [[ "$(BASE_IMAGE)" == alpine* ]]; then + echo "Setting up Alpine Linux..." + docker exec test-$(ARCH) sh -c " + apk update && apk add --no-cache python3 py3-pip unixodbc-dev curl + python3 -m pip install --break-system-packages pytest + " + else + echo "Setting up Debian/Ubuntu..." + docker exec test-$(ARCH) bash -c " + export DEBIAN_FRONTEND=noninteractive + apt-get update + apt-get install -y python3 python3-pip unixodbc-dev curl + python3 -m pip install pytest + " + fi + + # Install the wheel (find the appropriate one for this architecture) + if [[ "$(BASE_IMAGE)" == alpine* ]]; then + SHELL_CMD="sh -c" + WHEEL_PATTERN="*musllinux*$(ARCH)*.whl" + else + SHELL_CMD="bash -c" + WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" + fi + + docker exec test-$(ARCH) $SHELL_CMD " + cd /artifacts/mssql-python-wheels-dist + ls -la *.whl + WHEEL=\$(ls $WHEEL_PATTERN | head -1) + if [ -z \"\$WHEEL\" ]; then + echo 'No suitable wheel found for $(BASE_IMAGE) $(ARCH)' + exit 1 + fi + echo \"Installing wheel: \$WHEEL\" + python3 -m pip install \"\$WHEEL\" + " + + # Run pytest (copy test files if needed) + docker exec test-$(ARCH) $SHELL_CMD " + python3 -c 'import mssql_python; print(\"Package imported successfully\")' + # If you have specific tests to run, add them here + # python3 -m pytest /path/to/tests + " + + displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + + # Cleanup + - script: | + docker stop test-$(ARCH) sqlserver || true + docker rm test-$(ARCH) sqlserver || true + displayName: 'Cleanup containers' + condition: always() \ No newline at end of file From da75fce626a3e42fe2b2cf8cde36a678ea819fb0 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 12:05:30 +0530 Subject: [PATCH 68/93] removed auditwheel properly --- eng/pipelines/build-whl-pipeline.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 8933142c0..d60f2dc48 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -453,10 +453,6 @@ jobs: echo "---- tool versions ----" gcc --version || true cmake --version || true - - # (Optional) sanity peek for Kerberos libs; auditwheel may vendor these later - echo "---- kerberos libs present? ----" - ls -l /lib64/libgssapi_krb5.so* /usr/lib64/libgssapi_krb5.so* 2>/dev/null || true ' else # ===== musllinux (Alpine/musl) containers ===== @@ -470,10 +466,6 @@ jobs: echo "---- tool versions ----" gcc --version || true cmake --version || true - - # (Optional) sanity peek for Kerberos libs; auditwheel may vendor these later - echo "---- kerberos libs present? ----" - ls -l /lib/libgssapi_krb5.so* /usr/lib/libgssapi_krb5.so* 2>/dev/null || true ' fi displayName: 'Install system build dependencies' @@ -526,7 +518,9 @@ jobs: python setup.py bdist_wheel; # repair/tag wheel - for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done + # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification + # We're assuming that this will be provided by OS and not bundled in the wheel + # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done " fi done From 6ca60725f9f330fbbd5c1559556870677c98cc8e Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 12:26:04 +0530 Subject: [PATCH 69/93] add venv for testing --- eng/pipelines/build-whl-pipeline.yml | 38 ++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index d60f2dc48..67c3fa72c 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -695,17 +695,33 @@ jobs: if [[ "$(BASE_IMAGE)" == alpine* ]]; then echo "Setting up Alpine Linux..." docker exec test-$(ARCH) sh -c " - apk update && apk add --no-cache python3 py3-pip unixodbc-dev curl - python3 -m pip install --break-system-packages pytest + apk update && apk add --no-cache python3 py3-pip py3-venv unixodbc-dev curl + python3 -m venv /venv + /venv/bin/pip install pytest " + PY_CMD="/venv/bin/python" + elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then + echo "Setting up RHEL-based system..." + docker exec test-$(ARCH) bash -c " + if command -v dnf >/dev/null; then + dnf install -y python3 python3-pip unixodbc-devel curl + elif command -v yum >/dev/null; then + yum install -y python3 python3-pip unixODBC-devel curl + fi + python3 -m venv /venv + /venv/bin/pip install pytest + " + PY_CMD="/venv/bin/python" else echo "Setting up Debian/Ubuntu..." docker exec test-$(ARCH) bash -c " export DEBIAN_FRONTEND=noninteractive apt-get update - apt-get install -y python3 python3-pip unixodbc-dev curl - python3 -m pip install pytest + apt-get install -y python3 python3-pip python3-venv python3-full unixodbc-dev curl + python3 -m venv /venv + /venv/bin/pip install pytest " + PY_CMD="/venv/bin/python" fi # Install the wheel (find the appropriate one for this architecture) @@ -719,21 +735,23 @@ jobs: docker exec test-$(ARCH) $SHELL_CMD " cd /artifacts/mssql-python-wheels-dist - ls -la *.whl - WHEEL=\$(ls $WHEEL_PATTERN | head -1) + echo 'Available wheels:' + ls -la *.whl || { echo 'No wheels found!'; exit 1; } + WHEEL=\$(ls $WHEEL_PATTERN 2>/dev/null | head -1) if [ -z \"\$WHEEL\" ]; then echo 'No suitable wheel found for $(BASE_IMAGE) $(ARCH)' + echo 'Looking for pattern: $WHEEL_PATTERN' exit 1 fi echo \"Installing wheel: \$WHEEL\" - python3 -m pip install \"\$WHEEL\" + $PY_CMD -m pip install \"\$WHEEL\" " - # Run pytest (copy test files if needed) + # Run pytest docker exec test-$(ARCH) $SHELL_CMD " - python3 -c 'import mssql_python; print(\"Package imported successfully\")' + $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' # If you have specific tests to run, add them here - # python3 -m pytest /path/to/tests + # $PY_CMD -m pytest /path/to/tests " displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' From 572477b195d471204d1ff722365e079ed8d24f20 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 12:54:01 +0530 Subject: [PATCH 70/93] fixed setup.py --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 84d86b339..4a042f44c 100644 --- a/setup.py +++ b/setup.py @@ -41,9 +41,9 @@ def get_platform_info(): is_musl = libc_name == '' or 'musl' in libc_name.lower() if target_arch == 'x86_64': - return 'x86_64', 'musllinux_1_1_x86_64' if is_musl else 'manylinux2014_x86_64' + return 'x86_64', 'musllinux_1_2_x86_64' if is_musl else 'manylinux_2_28_x86_64' elif target_arch in ['aarch64', 'arm64']: - return 'aarch64', 'musllinux_1_1_aarch64' if is_musl else 'manylinux2014_aarch64' + return 'aarch64', 'musllinux_1_2_aarch64' if is_musl else 'manylinux_2_28_aarch64' else: raise OSError(f"Unsupported architecture '{target_arch}' for Linux; expected 'x86_64' or 'aarch64'.") From 85e3b73777925aa78a8df0dbe5c41fecb30ac2ea Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 12:56:53 +0530 Subject: [PATCH 71/93] docker retry and deps --- eng/pipelines/build-whl-pipeline.yml | 42 +++++++++++++++++++++------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 67c3fa72c..40bf8a612 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -679,23 +679,45 @@ jobs: env: DB_PASSWORD: $(DB_PASSWORD) + # Test wheels on target OS # Test wheels on target OS - script: | set -euxo pipefail - # Start test container - docker run -d --name test-$(ARCH) \ - --platform $(DOCKER_PLATFORM) \ - --network bridge \ - -v $(System.ArtifactsDirectory):/artifacts:ro \ - $(BASE_IMAGE) \ - tail -f /dev/null + # Enable QEMU for ARM64 architectures + if [[ "$(ARCH)" == "arm64" ]] || [[ "$(ARCH)" == "aarch64" ]]; then + sudo docker run --rm --privileged tonistiigi/binfmt --install all + fi + + # Start test container with retry logic + for i in {1..3}; do + if docker run -d --name test-$(ARCH) \ + --platform $(DOCKER_PLATFORM) \ + --network bridge \ + -v $(System.ArtifactsDirectory):/artifacts:ro \ + $(BASE_IMAGE) \ + tail -f /dev/null; then + echo "Container started successfully on attempt $i" + break + else + echo "Failed to start container on attempt $i, retrying..." + docker rm test-$(ARCH) 2>/dev/null || true + sleep 5 + fi + done + + # Verify container is running + if ! docker ps | grep -q test-$(ARCH); then + echo "ERROR: Container test-$(ARCH) is not running" + docker logs test-$(ARCH) || true + exit 1 + fi # Install Python and dependencies based on OS if [[ "$(BASE_IMAGE)" == alpine* ]]; then echo "Setting up Alpine Linux..." docker exec test-$(ARCH) sh -c " - apk update && apk add --no-cache python3 py3-pip py3-venv unixodbc-dev curl + apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl python3 -m venv /venv /venv/bin/pip install pytest " @@ -704,9 +726,9 @@ jobs: echo "Setting up RHEL-based system..." docker exec test-$(ARCH) bash -c " if command -v dnf >/dev/null; then - dnf install -y python3 python3-pip unixodbc-devel curl + dnf install -y python3 python3-pip python3-venv unixodbc-devel curl elif command -v yum >/dev/null; then - yum install -y python3 python3-pip unixODBC-devel curl + yum install -y python3 python3-pip python3-venv unixODBC-devel curl fi python3 -m venv /venv /venv/bin/pip install pytest From 2e23abfb749f1d6916a5907aa9e900b8f1f96969 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 13:45:32 +0530 Subject: [PATCH 72/93] just testing --- eng/pipelines/build-whl-pipeline.yml | 423 +++++++++++++-------------- 1 file changed, 211 insertions(+), 212 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 40bf8a612..84f0b951b 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -372,226 +372,226 @@ jobs: # publishLocation: 'Container' # displayName: 'Publish all wheels as artifacts' -- job: BuildLinuxWheels - displayName: 'Build Linux wheels (manylinux/musllinux, x86_64/aarch64) — explicit Docker' - pool: { vmImage: 'ubuntu-latest' } - timeoutInMinutes: 120 +# - job: BuildLinuxWheels +# displayName: 'Build Linux wheels (manylinux/musllinux, x86_64/aarch64) — explicit Docker' +# pool: { vmImage: 'ubuntu-latest' } +# timeoutInMinutes: 120 - strategy: - matrix: - manylinux_x86_64: - LINUX_TAG: 'manylinux' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' - manylinux_aarch64: - LINUX_TAG: 'manylinux' - ARCH: 'aarch64' - DOCKER_PLATFORM: 'linux/arm64' - IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' - musllinux_x86_64: - LINUX_TAG: 'musllinux' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' - musllinux_aarch64: - LINUX_TAG: 'musllinux' - ARCH: 'aarch64' - DOCKER_PLATFORM: 'linux/arm64' - IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' +# strategy: +# matrix: +# manylinux_x86_64: +# LINUX_TAG: 'manylinux' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' +# manylinux_aarch64: +# LINUX_TAG: 'manylinux' +# ARCH: 'aarch64' +# DOCKER_PLATFORM: 'linux/arm64' +# IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' +# musllinux_x86_64: +# LINUX_TAG: 'musllinux' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' +# musllinux_aarch64: +# LINUX_TAG: 'musllinux' +# ARCH: 'aarch64' +# DOCKER_PLATFORM: 'linux/arm64' +# IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' - steps: - - checkout: self - fetchDepth: 0 +# steps: +# - checkout: self +# fetchDepth: 0 - # Enable QEMU so we can run aarch64 containers on the x86_64 agent - - script: | - sudo docker run --rm --privileged tonistiigi/binfmt --install all - displayName: 'Enable QEMU (for aarch64)' +# # Enable QEMU so we can run aarch64 containers on the x86_64 agent +# - script: | +# sudo docker run --rm --privileged tonistiigi/binfmt --install all +# displayName: 'Enable QEMU (for aarch64)' - # Prep artifact dirs - - script: | - rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings - mkdir -p $(Build.ArtifactStagingDirectory)/dist - mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) - displayName: 'Prepare artifact directories' +# # Prep artifact dirs +# - script: | +# rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings +# mkdir -p $(Build.ArtifactStagingDirectory)/dist +# mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) +# displayName: 'Prepare artifact directories' - # Start a long-lived container for this lane - - script: | - docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ - --platform $(DOCKER_PLATFORM) \ - -v $(Build.SourcesDirectory):/workspace \ - -w /workspace \ - $(IMAGE) \ - tail -f /dev/null - displayName: 'Start $(LINUX_TAG) $(ARCH) container' - - # Install system build dependencies - # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes - # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk - # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* - # - ccache is optional but speeds rebuilds inside the container - - script: | - set -euxo pipefail - if [[ "$(LINUX_TAG)" == "manylinux" ]]; then - # ===== manylinux (glibc) containers ===== - docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' - set -euxo pipefail - # Prefer dnf (Alma/Rocky base), fall back to yum if present - if command -v dnf >/dev/null 2>&1; then - dnf -y update || true - # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache - dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true - elif command -v yum >/dev/null 2>&1; then - yum -y update || true - yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true - else - echo "No dnf/yum found in manylinux image" >&2 - fi +# # Start a long-lived container for this lane +# - script: | +# docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ +# --platform $(DOCKER_PLATFORM) \ +# -v $(Build.SourcesDirectory):/workspace \ +# -w /workspace \ +# $(IMAGE) \ +# tail -f /dev/null +# displayName: 'Start $(LINUX_TAG) $(ARCH) container' + +# # Install system build dependencies +# # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes +# # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk +# # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* +# # - ccache is optional but speeds rebuilds inside the container +# - script: | +# set -euxo pipefail +# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then +# # ===== manylinux (glibc) containers ===== +# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' +# set -euxo pipefail +# # Prefer dnf (Alma/Rocky base), fall back to yum if present +# if command -v dnf >/dev/null 2>&1; then +# dnf -y update || true +# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache +# dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true +# elif command -v yum >/dev/null 2>&1; then +# yum -y update || true +# yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true +# else +# echo "No dnf/yum found in manylinux image" >&2 +# fi + +# # Quick visibility for logs +# echo "---- tool versions ----" +# gcc --version || true +# cmake --version || true +# ' +# else +# # ===== musllinux (Alpine/musl) containers ===== +# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' +# set -euxo pipefail +# apk update || true +# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache +# apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true + +# # Quick visibility for logs +# echo "---- tool versions ----" +# gcc --version || true +# cmake --version || true +# ' +# fi +# displayName: 'Install system build dependencies' + +# # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters +# - script: | +# set -euxo pipefail +# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi + +# # Ensure dist exists inside the container +# docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' + +# # Loop through CPython versions present in the image +# for PYBIN in cp310 cp311 cp312 cp313; do +# echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" +# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then +# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " +# set -euxo pipefail; +# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; +# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present +# ln -sf \$PY /usr/local/bin/python; +# python -m pip install -U pip setuptools wheel pybind11; +# echo 'python:' \$(python -V); which python; +# # 👉 run from the directory that has CMakeLists.txt +# cd /workspace/mssql_python/pybind; +# bash build.sh; + +# # back to repo root to build the wheel +# cd /workspace; +# python setup.py bdist_wheel; + +# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification +# # We're assuming that this will be provided by OS and not bundled in the wheel +# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done +# " +# else +# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " +# set -euxo pipefail; +# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; +# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present +# ln -sf \$PY /usr/local/bin/python; +# python -m pip install -U pip setuptools wheel pybind11; +# echo 'python:' \$(python -V); which python; +# # 👉 run from the directory that has CMakeLists.txt +# cd /workspace/mssql_python/pybind; +# bash build.sh; + +# # back to repo root to build the wheel +# cd /workspace; +# python setup.py bdist_wheel; + +# # repair/tag wheel +# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification +# # We're assuming that this will be provided by OS and not bundled in the wheel +# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done +# " +# fi +# done +# displayName: 'Run build.sh and build wheels for cp310–cp313' - # Quick visibility for logs - echo "---- tool versions ----" - gcc --version || true - cmake --version || true - ' - else - # ===== musllinux (Alpine/musl) containers ===== - docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' - set -euxo pipefail - apk update || true - # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache - apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true - - # Quick visibility for logs - echo "---- tool versions ----" - gcc --version || true - cmake --version || true - ' - fi - displayName: 'Install system build dependencies' +# # Copy artifacts back to host +# - script: | +# set -euxo pipefail +# # ---- Wheels ---- +# docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" - # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters - - script: | - set -euxo pipefail - if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi - - # Ensure dist exists inside the container - docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' - - # Loop through CPython versions present in the image - for PYBIN in cp310 cp311 cp312 cp313; do - echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" - if [[ "$(LINUX_TAG)" == "manylinux" ]]; then - docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " - set -euxo pipefail; - PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; - test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present - ln -sf \$PY /usr/local/bin/python; - python -m pip install -U pip setuptools wheel pybind11; - echo 'python:' \$(python -V); which python; - # 👉 run from the directory that has CMakeLists.txt - cd /workspace/mssql_python/pybind; - bash build.sh; - - # back to repo root to build the wheel - cd /workspace; - python setup.py bdist_wheel; - - # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification - # We're assuming that this will be provided by OS and not bundled in the wheel - # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done - " - else - docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " - set -euxo pipefail; - PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; - test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present - ln -sf \$PY /usr/local/bin/python; - python -m pip install -U pip setuptools wheel pybind11; - echo 'python:' \$(python -V); which python; - # 👉 run from the directory that has CMakeLists.txt - cd /workspace/mssql_python/pybind; - bash build.sh; - - # back to repo root to build the wheel - cd /workspace; - python setup.py bdist_wheel; - - # repair/tag wheel - # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification - # We're assuming that this will be provided by OS and not bundled in the wheel - # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done - " - fi - done - displayName: 'Run build.sh and build wheels for cp310–cp313' +# # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- +# # Prepare host dest +# mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" - # Copy artifacts back to host - - script: | - set -euxo pipefail - # ---- Wheels ---- - docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" +# # Prepare a temp out dir inside the container +# docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' +# set -euxo pipefail; +# echo "Listing package dirs for sanity:"; +# ls -la /workspace/mssql_python || true; +# ls -la /workspace/mssql_python/pybind || true; - # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- - # Prepare host dest - mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" +# OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; +# rm -rf "$OUT"; mkdir -p "$OUT"; - # Prepare a temp out dir inside the container - docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' - set -euxo pipefail; - echo "Listing package dirs for sanity:"; - ls -la /workspace/mssql_python || true; - ls -la /workspace/mssql_python/pybind || true; +# # Copy ONLY top-level .so files from mssql_python (no recursion) +# find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true - OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; - rm -rf "$OUT"; mkdir -p "$OUT"; +# echo "Top-level .so collected in $OUT:"; +# ls -la "$OUT" || true +# ' - # Copy ONLY top-level .so files from mssql_python (no recursion) - find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true +# # Copy those .so files from container to host +# docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ +# "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ +# || echo "No top-level .so files to copy" - echo "Top-level .so collected in $OUT:"; - ls -la "$OUT" || true - ' +# # (Optional) prune non-.so just in case +# find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true +# displayName: 'Copy wheels and .so back to host' - # Copy those .so files from container to host - docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ - "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ - || echo "No top-level .so files to copy" +# # Cleanup container +# - script: | +# docker stop build-$(LINUX_TAG)-$(ARCH) || true +# docker rm build-$(LINUX_TAG)-$(ARCH) || true +# displayName: 'Clean up container' +# condition: always() - # (Optional) prune non-.so just in case - find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true - displayName: 'Copy wheels and .so back to host' +# # Publish wheels (exact name you wanted) +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish wheels as artifacts' - # Cleanup container - - script: | - docker stop build-$(LINUX_TAG)-$(ARCH) || true - docker rm build-$(LINUX_TAG)-$(ARCH) || true - displayName: 'Clean up container' - condition: always() - - # Publish wheels (exact name you wanted) - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' - ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish wheels as artifacts' - - # Publish compiled .so files (exact name you wanted) - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish .so files as artifacts' +# # Publish compiled .so files (exact name you wanted) +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish .so files as artifacts' # Job to test the built wheels on different Linux distributions with SQL Server - job: TestWheelsOnLinux displayName: 'Test Wheels with SQL Server' - dependsOn: BuildLinuxWheels - condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded + # dependsOn: BuildLinuxWheels + # condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded pool: { vmImage: 'ubuntu-latest' } timeoutInMinutes: 60 @@ -629,11 +629,16 @@ jobs: - task: DownloadBuildArtifacts@0 inputs: - buildType: 'current' + buildType: 'specific' + project: '$(System.TeamProject)' + definition: '$(System.DefinitionId)' + specificBuildWithTriggering: true + buildVersionToDownload: 'specific' + buildId: '122714' downloadType: 'single' artifactName: 'mssql-python-wheels-dist' downloadPath: '$(System.ArtifactsDirectory)' - displayName: 'Download wheel artifacts' + displayName: 'Download wheel artifacts from specific build' # Verify we actually have wheels before proceeding - script: | @@ -679,7 +684,6 @@ jobs: env: DB_PASSWORD: $(DB_PASSWORD) - # Test wheels on target OS # Test wheels on target OS - script: | set -euxo pipefail @@ -755,18 +759,13 @@ jobs: WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" fi + # Let pip auto-select the best wheel for the current platform/Python docker exec test-$(ARCH) $SHELL_CMD " cd /artifacts/mssql-python-wheels-dist echo 'Available wheels:' - ls -la *.whl || { echo 'No wheels found!'; exit 1; } - WHEEL=\$(ls $WHEEL_PATTERN 2>/dev/null | head -1) - if [ -z \"\$WHEEL\" ]; then - echo 'No suitable wheel found for $(BASE_IMAGE) $(ARCH)' - echo 'Looking for pattern: $WHEEL_PATTERN' - exit 1 - fi - echo \"Installing wheel: \$WHEEL\" - $PY_CMD -m pip install \"\$WHEEL\" + ls -la *.whl + echo 'Installing package (letting pip auto-select):' + $PY_CMD -m pip install mssql-python --find-links . --no-index --no-deps " # Run pytest From 13805e58f52b2e04830c1380066cf2db04366ae9 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 13:49:37 +0530 Subject: [PATCH 73/93] fixing auto selection of whl in pip --- eng/pipelines/build-whl-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 84f0b951b..21059bf8e 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -765,7 +765,7 @@ jobs: echo 'Available wheels:' ls -la *.whl echo 'Installing package (letting pip auto-select):' - $PY_CMD -m pip install mssql-python --find-links . --no-index --no-deps + $PY_CMD -m pip install mssql_python --find-links . --no-index --no-deps " # Run pytest From b1372fa27da04e1e43df4dec397823b4de666101 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 13:56:44 +0530 Subject: [PATCH 74/93] added libltldl in alpine --- eng/pipelines/build-whl-pipeline.yml | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 21059bf8e..2e522ee33 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -721,7 +721,7 @@ jobs: if [[ "$(BASE_IMAGE)" == alpine* ]]; then echo "Setting up Alpine Linux..." docker exec test-$(ARCH) sh -c " - apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl + apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libltdl python3 -m venv /venv /venv/bin/pip install pytest " @@ -729,12 +729,24 @@ jobs: elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then echo "Setting up RHEL-based system..." docker exec test-$(ARCH) bash -c " + echo 'Installing Python 3.12 on UBI/RHEL...' if command -v dnf >/dev/null; then - dnf install -y python3 python3-pip python3-venv unixodbc-devel curl + # Install Python 3.12 specifically + dnf install -y python3.12 python3.12-pip python3.12-venv unixodbc-devel curl + python3.12 -m venv /venv + echo 'Successfully installed Python 3.12' elif command -v yum >/dev/null; then - yum install -y python3 python3-pip python3-venv unixODBC-devel curl + # Fallback to yum + yum install -y python3.12 python3.12-pip python3.12-venv unixODBC-devel curl + python3.12 -m venv /venv + echo 'Successfully installed Python 3.12' + else + echo 'ERROR: No package manager found' + exit 1 fi - python3 -m venv /venv + + # Verify Python version + /venv/bin/python --version /venv/bin/pip install pytest " PY_CMD="/venv/bin/python" From 8e8bfbf852ee89b4f742fdf0ae6d8d4c1d57723b Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 14:05:58 +0530 Subject: [PATCH 75/93] rhel setup fix --- eng/pipelines/build-whl-pipeline.yml | 35 +++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 2e522ee33..13909b027 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -729,19 +729,32 @@ jobs: elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then echo "Setting up RHEL-based system..." docker exec test-$(ARCH) bash -c " - echo 'Installing Python 3.12 on UBI/RHEL...' + echo 'Installing latest Python on UBI/RHEL...' if command -v dnf >/dev/null; then - # Install Python 3.12 specifically - dnf install -y python3.12 python3.12-pip python3.12-venv unixodbc-devel curl - python3.12 -m venv /venv - echo 'Successfully installed Python 3.12' - elif command -v yum >/dev/null; then - # Fallback to yum - yum install -y python3.12 python3.12-pip python3.12-venv unixODBC-devel curl - python3.12 -m venv /venv - echo 'Successfully installed Python 3.12' + # Enable EPEL repository for newer Python versions + dnf install -y epel-release + + # Check what Python versions are available + echo 'Available Python packages after EPEL:' + dnf list available | grep -E '^python3' | head -10 || true + + # Try to install Python 3.11 or 3.12, fallback to 3.10 + if dnf install -y python3.12 python3.12-pip python3.12-venv unixODBC-devel curl; then + python3.12 -m venv /venv + echo 'Successfully installed Python 3.12' + elif dnf install -y python3.11 python3.11-pip python3.11-venv unixODBC-devel curl; then + python3.11 -m venv /venv + echo 'Successfully installed Python 3.11' + elif dnf install -y python3.10 python3.10-pip python3.10-venv unixODBC-devel curl; then + python3.10 -m venv /venv + echo 'Successfully installed Python 3.10' + else + echo 'Falling back to default Python' + dnf install -y python3 python3-pip python3-venv unixODBC-devel curl + python3 -m venv /venv + fi else - echo 'ERROR: No package manager found' + echo 'ERROR: dnf not found' exit 1 fi From 1e4a9c9c8ff072f0b75f039aed39de357613c4e7 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 14:07:55 +0530 Subject: [PATCH 76/93] libltdl in alpine fix --- eng/pipelines/build-whl-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 13909b027..1bb75d1b8 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -721,7 +721,7 @@ jobs: if [[ "$(BASE_IMAGE)" == alpine* ]]; then echo "Setting up Alpine Linux..." docker exec test-$(ARCH) sh -c " - apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libltdl + apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl python3 -m venv /venv /venv/bin/pip install pytest " From 7dec649c75441dd0b71f739c97a61bc45396cdb5 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 14:56:00 +0530 Subject: [PATCH 77/93] alpine deps --- eng/pipelines/build-whl-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 1bb75d1b8..fd040ab07 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -721,7 +721,7 @@ jobs: if [[ "$(BASE_IMAGE)" == alpine* ]]; then echo "Setting up Alpine Linux..." docker exec test-$(ARCH) sh -c " - apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl + apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs krb5-dev python3 -m venv /venv /venv/bin/pip install pytest " From 14d4b45878647515c42bca425934f9dd6ac19d43 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 15:09:04 +0530 Subject: [PATCH 78/93] rhel repo epel removed --- eng/pipelines/build-whl-pipeline.yml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index fd040ab07..3b3bfcd31 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -731,9 +731,18 @@ jobs: docker exec test-$(ARCH) bash -c " echo 'Installing latest Python on UBI/RHEL...' if command -v dnf >/dev/null; then - # Enable EPEL repository for newer Python versions - dnf install -y epel-release - + # Enable correct UBI repos (names differ from Rocky/Alma) + dnf config-manager --enable ubi-9-baseos || true + dnf config-manager --enable ubi-9-appstream || true + dnf config-manager --enable ubi-9-codeready-builder || true + + # Clean & refresh metadata + dnf clean all + rm -rf /var/cache/dnf + dnf -y makecache + + # (Optional) prove Python versions are visible + dnf list --showduplicates python3.11 python3.12 || true # Check what Python versions are available echo 'Available Python packages after EPEL:' dnf list available | grep -E '^python3' | head -10 || true From 653292373e34858a83a12092ce5f98201d3c6f4b Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 15:15:42 +0530 Subject: [PATCH 79/93] rhel repo epel removed --- eng/pipelines/build-whl-pipeline.yml | 48 ++++++++++++---------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 3b3bfcd31..a0817e26c 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -729,47 +729,39 @@ jobs: elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then echo "Setting up RHEL-based system..." docker exec test-$(ARCH) bash -c " - echo 'Installing latest Python on UBI/RHEL...' + set -euo pipefail + echo 'Installing Python on UBI/RHEL...' if command -v dnf >/dev/null; then - # Enable correct UBI repos (names differ from Rocky/Alma) - dnf config-manager --enable ubi-9-baseos || true - dnf config-manager --enable ubi-9-appstream || true - dnf config-manager --enable ubi-9-codeready-builder || true - - # Clean & refresh metadata + # Refresh metadata (UBI repos are already configured in the image) dnf clean all rm -rf /var/cache/dnf dnf -y makecache - # (Optional) prove Python versions are visible + # (Optional) show availability dnf list --showduplicates python3.11 python3.12 || true - # Check what Python versions are available - echo 'Available Python packages after EPEL:' - dnf list available | grep -E '^python3' | head -10 || true - - # Try to install Python 3.11 or 3.12, fallback to 3.10 - if dnf install -y python3.12 python3.12-pip python3.12-venv unixODBC-devel curl; then - python3.12 -m venv /venv - echo 'Successfully installed Python 3.12' - elif dnf install -y python3.11 python3.11-pip python3.11-venv unixODBC-devel curl; then - python3.11 -m venv /venv - echo 'Successfully installed Python 3.11' - elif dnf install -y python3.10 python3.10-pip python3.10-venv unixODBC-devel curl; then - python3.10 -m venv /venv - echo 'Successfully installed Python 3.10' + + # Try 3.12 → 3.11 → default 3.9; venv module is built-in, no -venv RPM needed + if dnf -y install python3.12 python3.12-pip unixODBC-devel curl; then + PY=python3.12 + echo 'Installed Python 3.12' + elif dnf -y install python3.11 python3.11-pip unixODBC-devel curl; then + PY=python3.11 + echo 'Installed Python 3.11' else + dnf -y install python3 python3-pip unixODBC-devel curl + PY=python3 echo 'Falling back to default Python' - dnf install -y python3 python3-pip python3-venv unixODBC-devel curl - python3 -m venv /venv fi + + # Create venv and prep tooling + \$PY -m venv /venv + /venv/bin/python -m pip install -U 'pip>=25' pytest + /venv/bin/python --version + /venv/bin/pip --version else echo 'ERROR: dnf not found' exit 1 fi - - # Verify Python version - /venv/bin/python --version - /venv/bin/pip install pytest " PY_CMD="/venv/bin/python" else From a4d7a25f3c0ebb446904fc7fb5fbb68b0031b3a1 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 15:22:23 +0530 Subject: [PATCH 80/93] rhel remove curl --- eng/pipelines/build-whl-pipeline.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index a0817e26c..dcd2d1c7b 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -732,28 +732,25 @@ jobs: set -euo pipefail echo 'Installing Python on UBI/RHEL...' if command -v dnf >/dev/null; then - # Refresh metadata (UBI repos are already configured in the image) dnf clean all rm -rf /var/cache/dnf dnf -y makecache - # (Optional) show availability dnf list --showduplicates python3.11 python3.12 || true - # Try 3.12 → 3.11 → default 3.9; venv module is built-in, no -venv RPM needed - if dnf -y install python3.12 python3.12-pip unixODBC-devel curl; then + # NOTE: do NOT install 'curl' to avoid curl-minimal conflict + if dnf -y install python3.12 python3.12-pip unixODBC-devel; then PY=python3.12 echo 'Installed Python 3.12' - elif dnf -y install python3.11 python3.11-pip unixODBC-devel curl; then + elif dnf -y install python3.11 python3.11-pip unixODBC-devel; then PY=python3.11 echo 'Installed Python 3.11' else - dnf -y install python3 python3-pip unixODBC-devel curl + dnf -y install python3 python3-pip unixODBC-devel PY=python3 echo 'Falling back to default Python' fi - # Create venv and prep tooling \$PY -m venv /venv /venv/bin/python -m pip install -U 'pip>=25' pytest /venv/bin/python --version From 569fca99fb67ff89104f3d88bf99d1d0a24dc44a Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 15:36:20 +0530 Subject: [PATCH 81/93] added full pytests --- eng/pipelines/build-whl-pipeline.yml | 99 +++++++++++++++++++++++++--- 1 file changed, 89 insertions(+), 10 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index dcd2d1c7b..30d16a612 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -625,7 +625,7 @@ jobs: DOCKER_PLATFORM: 'linux/arm64' steps: - - checkout: none # We only need artifacts, not source + - checkout: self - task: DownloadBuildArtifacts@0 inputs: @@ -782,26 +782,105 @@ jobs: WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" fi - # Let pip auto-select the best wheel for the current platform/Python + # Install the appropriate wheel in isolated directory docker exec test-$(ARCH) $SHELL_CMD " - cd /artifacts/mssql-python-wheels-dist + # Create isolated directory for wheel testing + mkdir -p /test_whl + cd /test_whl + echo 'Available wheels:' - ls -la *.whl - echo 'Installing package (letting pip auto-select):' - $PY_CMD -m pip install mssql_python --find-links . --no-index --no-deps + ls -la /artifacts/mssql-python-wheels-dist/*.whl + echo 'Installing package (letting pip auto-select in isolated environment):' + $PY_CMD -m pip install mssql_python --find-links /artifacts/mssql-python-wheels-dist --no-index --no-deps + + # Verify package installation location + echo 'Installed package location:' + $PY_CMD -c 'import mssql_python; print(\"Package location:\", mssql_python.__file__)' + + # Test basic import + $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' " - # Run pytest + # Run pytest from source root to test installed wheel docker exec test-$(ARCH) $SHELL_CMD " - $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' - # If you have specific tests to run, add them here - # $PY_CMD -m pytest /path/to/tests + # Copy source code for pytest + mkdir -p /workspace + cd /workspace + + echo 'Running pytest with installed wheel...' + echo 'Python version:' + $PY_CMD --version + + # Verify we're importing the installed package, not local source + echo 'Package import verification:' + $PY_CMD -c 'import mssql_python; print(\"Testing installed package from:\", mssql_python.__file__)' + + # Install test dependencies + $PY_CMD -m pip install pytest || echo 'pytest installation failed' + + echo 'Starting pytest...' + # $PY_CMD -m pytest /workspace/tests/ -v --tb=short || echo 'Some tests failed - expected in containerized environment' + echo 'Pytest setup complete - tests can be run here' " displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' env: DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + # Run pytest with source code while testing installed wheel + - script: | + set -euxo pipefail + + # Copy source code to container for pytest + echo "Copying source code to container for pytest..." + docker cp $(Build.SourcesDirectory)/. test-$(ARCH):/workspace/ + + # Set shell command based on OS + if [[ "$(BASE_IMAGE)" == alpine* ]]; then + SHELL_CMD="sh -c" + else + SHELL_CMD="bash -c" + fi + + docker exec test-$(ARCH) $SHELL_CMD " + # Go to workspace root where source code is + cd /workspace + + echo 'Running pytest suite with installed wheel...' + echo 'Current directory:' \$(pwd) + echo 'Python version:' + $PY_CMD --version + + # Verify we're importing the installed wheel, not local source + echo 'Package import verification:' + $PY_CMD -c 'import mssql_python; print(\"Testing installed wheel from:\", mssql_python.__file__)' + + # Install test requirements + if [ -f requirements.txt ]; then + echo 'Installing test requirements...' + $PY_CMD -m pip install -r requirements.txt || echo 'Failed to install some requirements' + fi + + # Ensure pytest is available + $PY_CMD -m pip install pytest || echo 'pytest installation failed' + + # List available test files + echo 'Available test files:' + find tests/ -name 'test_*.py' 2>/dev/null || echo 'No test files found in tests/' + + # Run pytest + if [ -d tests/ ]; then + echo 'Starting pytest...' + $PY_CMD -m pytest -v || echo 'Some tests failed - this may be expected in containerized environment' + else + echo 'No tests directory found, skipping pytest' + fi + " + displayName: 'Run pytest suite on $(BASE_IMAGE) $(ARCH)' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + continueOnError: true # Don't fail pipeline if tests fail + # Cleanup - script: | docker stop test-$(ARCH) sqlserver || true From f9497d62cdc25f044b73bb4d9ce7539d7bf8c702 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 16:03:43 +0530 Subject: [PATCH 82/93] fixed pytests step --- eng/pipelines/build-whl-pipeline.yml | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 30d16a612..b340806d6 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -801,28 +801,6 @@ jobs: $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' " - # Run pytest from source root to test installed wheel - docker exec test-$(ARCH) $SHELL_CMD " - # Copy source code for pytest - mkdir -p /workspace - cd /workspace - - echo 'Running pytest with installed wheel...' - echo 'Python version:' - $PY_CMD --version - - # Verify we're importing the installed package, not local source - echo 'Package import verification:' - $PY_CMD -c 'import mssql_python; print(\"Testing installed package from:\", mssql_python.__file__)' - - # Install test dependencies - $PY_CMD -m pip install pytest || echo 'pytest installation failed' - - echo 'Starting pytest...' - # $PY_CMD -m pytest /workspace/tests/ -v --tb=short || echo 'Some tests failed - expected in containerized environment' - echo 'Pytest setup complete - tests can be run here' - " - displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' env: DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' @@ -835,11 +813,13 @@ jobs: echo "Copying source code to container for pytest..." docker cp $(Build.SourcesDirectory)/. test-$(ARCH):/workspace/ - # Set shell command based on OS + # Set shell command based on OS and define Python command if [[ "$(BASE_IMAGE)" == alpine* ]]; then SHELL_CMD="sh -c" + PY_CMD="/venv/bin/python" else SHELL_CMD="bash -c" + PY_CMD="/venv/bin/python" fi docker exec test-$(ARCH) $SHELL_CMD " From 456e2da10f0965ad620eb9e2357defd9feb807ce Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 16:10:10 +0530 Subject: [PATCH 83/93] uncommented everything - full pipeline run --- eng/pipelines/build-whl-pipeline.yml | 1127 +++++++++++++------------- 1 file changed, 561 insertions(+), 566 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index b340806d6..076140c22 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -22,576 +22,576 @@ schedules: always: true # Always run even if there are no changes jobs: -# - job: BuildWindowsWheels -# # Use the latest Windows image for building -# pool: -# vmImage: 'windows-latest' -# displayName: 'Build Windows -' -# # Strategy matrix to build all combinations -# strategy: -# matrix: -# # Python 3.10 (only x64) -# py310_x64: -# pythonVersion: '3.10' # Host Python version -# shortPyVer: '310' # Used in filenames like cp310 -# architecture: 'x64' # Host Python architecture -# targetArch: 'x64' # Target architecture to pass to build.bat - -# # Python 3.11 -# py311_x64: -# pythonVersion: '3.11' # Host Python version -# shortPyVer: '311' # Used in filenames like cp311 -# architecture: 'x64' # Host Python architecture -# targetArch: 'x64' # Target architecture to pass to build.bat -# py311_arm64: -# pythonVersion: '3.11' -# shortPyVer: '311' -# architecture: 'x64' # No arm64 Python, use x64 host -# targetArch: 'arm64' - -# # Python 3.12 -# py312_x64: -# pythonVersion: '3.12' -# shortPyVer: '312' -# architecture: 'x64' -# targetArch: 'x64' -# py312_arm64: -# pythonVersion: '3.12' -# shortPyVer: '312' -# architecture: 'x64' -# targetArch: 'arm64' - -# # Python 3.13 -# py313_x64: -# pythonVersion: '3.13' -# shortPyVer: '313' -# architecture: 'x64' -# targetArch: 'x64' -# py313_arm64: -# pythonVersion: '3.13' -# shortPyVer: '313' -# architecture: 'x64' -# targetArch: 'arm64' - -# steps: -# # Use correct Python version and architecture for the current job -# - task: UsePythonVersion@0 -# inputs: -# versionSpec: '$(pythonVersion)' -# architecture: '$(architecture)' -# addToPath: true -# displayName: 'Use Python $(pythonVersion) ($(architecture))' - -# # Install required packages: pip, CMake, pybind11 -# - script: | -# python -m pip install --upgrade pip -# pip install -r requirements.txt -# pip install cmake pybind11 -# displayName: 'Install dependencies' - -# # Start LocalDB instance -# - powershell: | -# sqllocaldb create MSSQLLocalDB -# sqllocaldb start MSSQLLocalDB -# displayName: 'Start LocalDB instance' - -# # Create database and user -# - powershell: | -# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" -# sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" -# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" -# sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" -# displayName: 'Setup database and user' -# env: -# DB_PASSWORD: $(DB_PASSWORD) - -# - task: DownloadPipelineArtifact@2 -# condition: eq(variables['targetArch'], 'arm64') -# inputs: -# buildType: 'specific' -# project: '$(System.TeamProject)' -# definition: 2162 -# buildVersionToDownload: 'latest' -# artifactName: 'mssql-python-arm64-libs' -# targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' -# displayName: 'Download ARM64 Python libs from latest successful run on branches' - -# # Build the PYD file by calling build.bat -# - script: | -# echo "Python Version: $(pythonVersion)" -# echo "Short Tag: $(shortPyVer)" -# echo "Architecture: Host=$(architecture), Target=$(targetArch)" - -# cd "$(Build.SourcesDirectory)\mssql_python\pybind" - -# REM Optional: override lib path if building for ARM64 since we cannot install arm64 python on x64 host -# if "$(targetArch)"=="arm64" ( -# echo Using arm64-specific Python library... -# set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 -# ) - -# REM Call build.bat to build the PYD file -# call build.bat $(targetArch) - -# REM Calling keep_single_arch.bat to remove ODBC libs of other architectures -# call keep_single_arch.bat $(targetArch) - -# cd ..\.. -# displayName: 'Build PYD for $(targetArch)' -# continueOnError: false - -# # Run pytests before packaging -# - powershell: | -# Write-Host "Running pytests to validate bindings" -# if ("$(targetArch)" -eq "arm64") { -# Write-Host "Skipping pytests on Windows ARM64" -# } else { -# python -m pytest -v -# } -# displayName: 'Run pytests' -# env: -# DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - -# # Copy the built .pyd file to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' -# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' -# TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' -# displayName: 'Place PYD file into artifacts directory' - -# # Copy the built .pdb files to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' -# Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdbs' -# TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' -# displayName: 'Place PDB file into artifacts directory' - -# # Build wheel package for the current architecture -# - script: | -# python -m pip install --upgrade pip -# pip install wheel setuptools -# set ARCHITECTURE=$(targetArch) -# python setup.py bdist_wheel -# displayName: 'Build wheel package for Python $(pythonVersion) ($(targetArch))' +- job: BuildWindowsWheels + # Use the latest Windows image for building + pool: + vmImage: 'windows-latest' + displayName: 'Build Windows -' + # Strategy matrix to build all combinations + strategy: + matrix: + # Python 3.10 (only x64) + py310_x64: + pythonVersion: '3.10' # Host Python version + shortPyVer: '310' # Used in filenames like cp310 + architecture: 'x64' # Host Python architecture + targetArch: 'x64' # Target architecture to pass to build.bat + + # Python 3.11 + py311_x64: + pythonVersion: '3.11' # Host Python version + shortPyVer: '311' # Used in filenames like cp311 + architecture: 'x64' # Host Python architecture + targetArch: 'x64' # Target architecture to pass to build.bat + py311_arm64: + pythonVersion: '3.11' + shortPyVer: '311' + architecture: 'x64' # No arm64 Python, use x64 host + targetArch: 'arm64' + + # Python 3.12 + py312_x64: + pythonVersion: '3.12' + shortPyVer: '312' + architecture: 'x64' + targetArch: 'x64' + py312_arm64: + pythonVersion: '3.12' + shortPyVer: '312' + architecture: 'x64' + targetArch: 'arm64' + + # Python 3.13 + py313_x64: + pythonVersion: '3.13' + shortPyVer: '313' + architecture: 'x64' + targetArch: 'x64' + py313_arm64: + pythonVersion: '3.13' + shortPyVer: '313' + architecture: 'x64' + targetArch: 'arm64' + + steps: + # Use correct Python version and architecture for the current job + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(pythonVersion)' + architecture: '$(architecture)' + addToPath: true + displayName: 'Use Python $(pythonVersion) ($(architecture))' + + # Install required packages: pip, CMake, pybind11 + - script: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install cmake pybind11 + displayName: 'Install dependencies' + + # Start LocalDB instance + - powershell: | + sqllocaldb create MSSQLLocalDB + sqllocaldb start MSSQLLocalDB + displayName: 'Start LocalDB instance' + + # Create database and user + - powershell: | + sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE TestDB" + sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE LOGIN testuser WITH PASSWORD = '$(DB_PASSWORD)'" + sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "CREATE USER testuser FOR LOGIN testuser" + sqlcmd -S "(localdb)\MSSQLLocalDB" -d TestDB -Q "ALTER ROLE db_owner ADD MEMBER testuser" + displayName: 'Setup database and user' + env: + DB_PASSWORD: $(DB_PASSWORD) + + - task: DownloadPipelineArtifact@2 + condition: eq(variables['targetArch'], 'arm64') + inputs: + buildType: 'specific' + project: '$(System.TeamProject)' + definition: 2162 + buildVersionToDownload: 'latest' + artifactName: 'mssql-python-arm64-libs' + targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' + displayName: 'Download ARM64 Python libs from latest successful run on branches' + + # Build the PYD file by calling build.bat + - script: | + echo "Python Version: $(pythonVersion)" + echo "Short Tag: $(shortPyVer)" + echo "Architecture: Host=$(architecture), Target=$(targetArch)" + + cd "$(Build.SourcesDirectory)\mssql_python\pybind" + + REM Optional: override lib path if building for ARM64 since we cannot install arm64 python on x64 host + if "$(targetArch)"=="arm64" ( + echo Using arm64-specific Python library... + set CUSTOM_PYTHON_LIB_DIR=$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64 + ) + + REM Call build.bat to build the PYD file + call build.bat $(targetArch) + + REM Calling keep_single_arch.bat to remove ODBC libs of other architectures + call keep_single_arch.bat $(targetArch) + + cd ..\.. + displayName: 'Build PYD for $(targetArch)' + continueOnError: false + + # Run pytests before packaging + - powershell: | + Write-Host "Running pytests to validate bindings" + if ("$(targetArch)" -eq "arm64") { + Write-Host "Skipping pytests on Windows ARM64" + } else { + python -m pytest -v + } + displayName: 'Run pytests' + env: + DB_CONNECTION_STRING: 'Server=(localdb)\MSSQLLocalDB;Database=TestDB;Uid=testuser;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + + # Copy the built .pyd file to staging folder for artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' + Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pyd' + TargetFolder: '$(Build.ArtifactStagingDirectory)\ddbc-bindings\windows' + displayName: 'Place PYD file into artifacts directory' + + # Copy the built .pdb files to staging folder for artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)\mssql_python\pybind\build\$(targetArch)\py$(shortPyVer)\Release' + Contents: 'ddbc_bindings.cp$(shortPyVer)-*.pdbs' + TargetFolder: '$(Build.ArtifactStagingDirectory)\all-pdbs' + displayName: 'Place PDB file into artifacts directory' + + # Build wheel package for the current architecture + - script: | + python -m pip install --upgrade pip + pip install wheel setuptools + set ARCHITECTURE=$(targetArch) + python setup.py bdist_wheel + displayName: 'Build wheel package for Python $(pythonVersion) ($(targetArch))' -# # Copy the wheel file to the artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)\dist' -# Contents: '*.whl' -# TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' -# displayName: 'Collect wheel package' - -# # Publish the collected .pyd file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish all PYDs as artifacts' - -# # Publish the python arm64 libraries as build artifacts for next builds if ARM64 -# # We publish them only for ARM64 builds since we cannot install arm64 Python on x64 host -# # This allows us to reuse the libraries in future ARM64 builds -# # Publishing will retain the libraries in the build artifacts -# - task: PublishBuildArtifacts@1 -# condition: eq(variables['targetArch'], 'arm64') -# inputs: -# PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' -# ArtifactName: 'mssql-python-arm64-libs' -# publishLocation: 'Container' -# displayName: 'Publish arm64 libs as artifacts' + # Copy the wheel file to the artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)\dist' + Contents: '*.whl' + TargetFolder: '$(Build.ArtifactStagingDirectory)\dist' + displayName: 'Collect wheel package' + + # Publish the collected .pyd file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)\ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + publishLocation: 'Container' + displayName: 'Publish all PYDs as artifacts' + + # Publish the python arm64 libraries as build artifacts for next builds if ARM64 + # We publish them only for ARM64 builds since we cannot install arm64 Python on x64 host + # This allows us to reuse the libraries in future ARM64 builds + # Publishing will retain the libraries in the build artifacts + - task: PublishBuildArtifacts@1 + condition: eq(variables['targetArch'], 'arm64') + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' + ArtifactName: 'mssql-python-arm64-libs' + publishLocation: 'Container' + displayName: 'Publish arm64 libs as artifacts' -# # Publish the collected wheel file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish all wheels as artifacts' - -# - job: BuildMacOSWheels -# # Use the latest macOS image for building -# pool: -# vmImage: 'macos-latest' -# # Display name for the job in Azure DevOps UI -# displayName: 'Build macOS - ' -# strategy: -# matrix: -# # Python 3.13 (universal2 for both arm64 and x86_64) -# py313_universal2: -# pythonVersion: '3.13' -# shortPyVer: '313' -# # Always use universal2 for macOS -# targetArch: 'universal2' + # Publish the collected wheel file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)\dist' + ArtifactName: 'mssql-python-wheels-dist' + publishLocation: 'Container' + displayName: 'Publish all wheels as artifacts' + +- job: BuildMacOSWheels + # Use the latest macOS image for building + pool: + vmImage: 'macos-latest' + # Display name for the job in Azure DevOps UI + displayName: 'Build macOS - ' + strategy: + matrix: + # Python 3.13 (universal2 for both arm64 and x86_64) + py313_universal2: + pythonVersion: '3.13' + shortPyVer: '313' + # Always use universal2 for macOS + targetArch: 'universal2' -# # Python 3.12 (universal2 for both arm64 and x86_64) -# py312_universal2: -# pythonVersion: '3.12' -# shortPyVer: '312' -# targetArch: 'universal2' - -# # Python 3.11 (universal2 for both arm64 and x86_64) -# py311_universal2: -# pythonVersion: '3.11' -# shortPyVer: '311' -# targetArch: 'universal2' + # Python 3.12 (universal2 for both arm64 and x86_64) + py312_universal2: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'universal2' + + # Python 3.11 (universal2 for both arm64 and x86_64) + py311_universal2: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'universal2' -# # Python 3.10 (universal2 for both arm64 and x86_64) -# py310_universal2: -# pythonVersion: '3.10' -# shortPyVer: '310' -# targetArch: 'universal2' - -# steps: -# # Use correct Python version and architecture for the current job -# - task: UsePythonVersion@0 -# inputs: -# versionSpec: '$(pythonVersion)' -# addToPath: true -# displayName: 'Use Python $(pythonVersion) (Universal2)' - -# # Install CMake on macOS -# - script: | -# brew update -# brew install cmake -# displayName: 'Install CMake' - -# # Install required packages: pip, CMake, pybind11 -# - script: | -# python -m pip install --upgrade pip -# pip install -r requirements.txt -# pip install cmake pybind11 -# displayName: 'Install dependencies' - -# # Build the .so file by calling build.sh -# - script: | -# echo "Python Version: $(pythonVersion)" -# echo "Short Tag: $(shortPyVer)" -# echo "Building Universal2 Binary" -# cd "$(Build.SourcesDirectory)/mssql_python/pybind" -# # Call build.sh to build the .so file -# ./build.sh -# displayName: 'Build .so file' -# continueOnError: false - -# # Copy the built .so file to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)/mssql_python' -# Contents: '*.so' -# TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' -# displayName: 'Place .so file into artifacts directory' - -# - script: | -# brew update -# brew install docker colima - -# # Try VZ first, fallback to QEMU if it fails -# # Use more conservative resource allocation for Azure DevOps runners -# colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ -# colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu - -# # Set a timeout to ensure Colima starts properly -# sleep 30 - -# # Optional: set Docker context (usually automatic) -# docker context use colima >/dev/null || true - -# # Confirm Docker is operational -# docker version -# docker ps -# displayName: 'Install and start Colima-based Docker' -# timeoutInMinutes: 15 - -# - script: | -# # Pull and run SQL Server container -# docker pull mcr.microsoft.com/mssql/server:2022-latest -# docker run \ -# --name sqlserver \ -# -e ACCEPT_EULA=Y \ -# -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ -# -p 1433:1433 \ -# -d mcr.microsoft.com/mssql/server:2022-latest - -# # Starting SQL Server container… -# for i in {1..30}; do -# docker exec sqlserver \ -# /opt/mssql-tools18/bin/sqlcmd \ -# -S localhost \ -# -U SA \ -# -P "$DB_PASSWORD" \ -# -C -Q "SELECT 1" && break -# sleep 2 -# done -# displayName: 'Pull & start SQL Server (Docker)' -# env: -# DB_PASSWORD: $(DB_PASSWORD) - -# # Run Pytest to ensure the bindings work correctly -# - script: | -# python -m pytest -v -# displayName: 'Run Pytest to validate bindings' -# env: -# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - -# # Build wheel package for universal2 -# - script: | -# python -m pip install --upgrade pip -# pip install wheel setuptools -# python setup.py bdist_wheel -# displayName: 'Build $(pythonVersion) universal2 whl' + # Python 3.10 (universal2 for both arm64 and x86_64) + py310_universal2: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'universal2' + + steps: + # Use correct Python version and architecture for the current job + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(pythonVersion)' + addToPath: true + displayName: 'Use Python $(pythonVersion) (Universal2)' + + # Install CMake on macOS + - script: | + brew update + brew install cmake + displayName: 'Install CMake' + + # Install required packages: pip, CMake, pybind11 + - script: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install cmake pybind11 + displayName: 'Install dependencies' + + # Build the .so file by calling build.sh + - script: | + echo "Python Version: $(pythonVersion)" + echo "Short Tag: $(shortPyVer)" + echo "Building Universal2 Binary" + cd "$(Build.SourcesDirectory)/mssql_python/pybind" + # Call build.sh to build the .so file + ./build.sh + displayName: 'Build .so file' + continueOnError: false + + # Copy the built .so file to staging folder for artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)/mssql_python' + Contents: '*.so' + TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' + displayName: 'Place .so file into artifacts directory' + + - script: | + brew update + brew install docker colima + + # Try VZ first, fallback to QEMU if it fails + # Use more conservative resource allocation for Azure DevOps runners + colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ + colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu + + # Set a timeout to ensure Colima starts properly + sleep 30 + + # Optional: set Docker context (usually automatic) + docker context use colima >/dev/null || true + + # Confirm Docker is operational + docker version + docker ps + displayName: 'Install and start Colima-based Docker' + timeoutInMinutes: 15 + + - script: | + # Pull and run SQL Server container + docker pull mcr.microsoft.com/mssql/server:2022-latest + docker run \ + --name sqlserver \ + -e ACCEPT_EULA=Y \ + -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ + -p 1433:1433 \ + -d mcr.microsoft.com/mssql/server:2022-latest + + # Starting SQL Server container… + for i in {1..30}; do + docker exec sqlserver \ + /opt/mssql-tools18/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P "$DB_PASSWORD" \ + -C -Q "SELECT 1" && break + sleep 2 + done + displayName: 'Pull & start SQL Server (Docker)' + env: + DB_PASSWORD: $(DB_PASSWORD) + + # Run Pytest to ensure the bindings work correctly + - script: | + python -m pytest -v + displayName: 'Run Pytest to validate bindings' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + + # Build wheel package for universal2 + - script: | + python -m pip install --upgrade pip + pip install wheel setuptools + python setup.py bdist_wheel + displayName: 'Build $(pythonVersion) universal2 whl' -# # Copy the wheel file to the artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)/dist' -# Contents: '*.whl' -# TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' -# displayName: 'Collect wheel package' + # Copy the wheel file to the artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)/dist' + Contents: '*.whl' + TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' + displayName: 'Collect wheel package' -# # Publish the collected .so file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish all .so files as artifacts' + # Publish the collected .so file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + publishLocation: 'Container' + displayName: 'Publish all .so files as artifacts' -# # Publish the collected wheel file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish all wheels as artifacts' - -# - job: BuildLinuxWheels -# displayName: 'Build Linux wheels (manylinux/musllinux, x86_64/aarch64) — explicit Docker' -# pool: { vmImage: 'ubuntu-latest' } -# timeoutInMinutes: 120 - -# strategy: -# matrix: -# manylinux_x86_64: -# LINUX_TAG: 'manylinux' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' -# manylinux_aarch64: -# LINUX_TAG: 'manylinux' -# ARCH: 'aarch64' -# DOCKER_PLATFORM: 'linux/arm64' -# IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' -# musllinux_x86_64: -# LINUX_TAG: 'musllinux' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' -# musllinux_aarch64: -# LINUX_TAG: 'musllinux' -# ARCH: 'aarch64' -# DOCKER_PLATFORM: 'linux/arm64' -# IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' - -# steps: -# - checkout: self -# fetchDepth: 0 - -# # Enable QEMU so we can run aarch64 containers on the x86_64 agent -# - script: | -# sudo docker run --rm --privileged tonistiigi/binfmt --install all -# displayName: 'Enable QEMU (for aarch64)' - -# # Prep artifact dirs -# - script: | -# rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings -# mkdir -p $(Build.ArtifactStagingDirectory)/dist -# mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) -# displayName: 'Prepare artifact directories' - -# # Start a long-lived container for this lane -# - script: | -# docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ -# --platform $(DOCKER_PLATFORM) \ -# -v $(Build.SourcesDirectory):/workspace \ -# -w /workspace \ -# $(IMAGE) \ -# tail -f /dev/null -# displayName: 'Start $(LINUX_TAG) $(ARCH) container' - -# # Install system build dependencies -# # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes -# # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk -# # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* -# # - ccache is optional but speeds rebuilds inside the container -# - script: | -# set -euxo pipefail -# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then -# # ===== manylinux (glibc) containers ===== -# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' -# set -euxo pipefail -# # Prefer dnf (Alma/Rocky base), fall back to yum if present -# if command -v dnf >/dev/null 2>&1; then -# dnf -y update || true -# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache -# dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true -# elif command -v yum >/dev/null 2>&1; then -# yum -y update || true -# yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true -# else -# echo "No dnf/yum found in manylinux image" >&2 -# fi - -# # Quick visibility for logs -# echo "---- tool versions ----" -# gcc --version || true -# cmake --version || true -# ' -# else -# # ===== musllinux (Alpine/musl) containers ===== -# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' -# set -euxo pipefail -# apk update || true -# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache -# apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true - -# # Quick visibility for logs -# echo "---- tool versions ----" -# gcc --version || true -# cmake --version || true -# ' -# fi -# displayName: 'Install system build dependencies' - -# # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters -# - script: | -# set -euxo pipefail -# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi - -# # Ensure dist exists inside the container -# docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' - -# # Loop through CPython versions present in the image -# for PYBIN in cp310 cp311 cp312 cp313; do -# echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" -# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then -# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " -# set -euxo pipefail; -# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; -# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present -# ln -sf \$PY /usr/local/bin/python; -# python -m pip install -U pip setuptools wheel pybind11; -# echo 'python:' \$(python -V); which python; -# # 👉 run from the directory that has CMakeLists.txt -# cd /workspace/mssql_python/pybind; -# bash build.sh; - -# # back to repo root to build the wheel -# cd /workspace; -# python setup.py bdist_wheel; - -# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification -# # We're assuming that this will be provided by OS and not bundled in the wheel -# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done -# " -# else -# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " -# set -euxo pipefail; -# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; -# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present -# ln -sf \$PY /usr/local/bin/python; -# python -m pip install -U pip setuptools wheel pybind11; -# echo 'python:' \$(python -V); which python; -# # 👉 run from the directory that has CMakeLists.txt -# cd /workspace/mssql_python/pybind; -# bash build.sh; - -# # back to repo root to build the wheel -# cd /workspace; -# python setup.py bdist_wheel; - -# # repair/tag wheel -# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification -# # We're assuming that this will be provided by OS and not bundled in the wheel -# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done -# " -# fi -# done -# displayName: 'Run build.sh and build wheels for cp310–cp313' - -# # Copy artifacts back to host -# - script: | -# set -euxo pipefail -# # ---- Wheels ---- -# docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" - -# # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- -# # Prepare host dest -# mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" - -# # Prepare a temp out dir inside the container -# docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' -# set -euxo pipefail; -# echo "Listing package dirs for sanity:"; -# ls -la /workspace/mssql_python || true; -# ls -la /workspace/mssql_python/pybind || true; - -# OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; -# rm -rf "$OUT"; mkdir -p "$OUT"; - -# # Copy ONLY top-level .so files from mssql_python (no recursion) -# find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true - -# echo "Top-level .so collected in $OUT:"; -# ls -la "$OUT" || true -# ' - -# # Copy those .so files from container to host -# docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ -# "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ -# || echo "No top-level .so files to copy" - -# # (Optional) prune non-.so just in case -# find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true -# displayName: 'Copy wheels and .so back to host' - -# # Cleanup container -# - script: | -# docker stop build-$(LINUX_TAG)-$(ARCH) || true -# docker rm build-$(LINUX_TAG)-$(ARCH) || true -# displayName: 'Clean up container' -# condition: always() - -# # Publish wheels (exact name you wanted) -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish wheels as artifacts' - -# # Publish compiled .so files (exact name you wanted) -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish .so files as artifacts' + # Publish the collected wheel file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' + ArtifactName: 'mssql-python-wheels-dist' + publishLocation: 'Container' + displayName: 'Publish all wheels as artifacts' + +- job: BuildLinuxWheels + displayName: 'Build Linux wheels (manylinux/musllinux, x86_64/aarch64) — explicit Docker' + pool: { vmImage: 'ubuntu-latest' } + timeoutInMinutes: 120 + + strategy: + matrix: + manylinux_x86_64: + LINUX_TAG: 'manylinux' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' + manylinux_aarch64: + LINUX_TAG: 'manylinux' + ARCH: 'aarch64' + DOCKER_PLATFORM: 'linux/arm64' + IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' + musllinux_x86_64: + LINUX_TAG: 'musllinux' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' + musllinux_aarch64: + LINUX_TAG: 'musllinux' + ARCH: 'aarch64' + DOCKER_PLATFORM: 'linux/arm64' + IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' + + steps: + - checkout: self + fetchDepth: 0 + + # Enable QEMU so we can run aarch64 containers on the x86_64 agent + - script: | + sudo docker run --rm --privileged tonistiigi/binfmt --install all + displayName: 'Enable QEMU (for aarch64)' + + # Prep artifact dirs + - script: | + rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings + mkdir -p $(Build.ArtifactStagingDirectory)/dist + mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) + displayName: 'Prepare artifact directories' + + # Start a long-lived container for this lane + - script: | + docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ + --platform $(DOCKER_PLATFORM) \ + -v $(Build.SourcesDirectory):/workspace \ + -w /workspace \ + $(IMAGE) \ + tail -f /dev/null + displayName: 'Start $(LINUX_TAG) $(ARCH) container' + + # Install system build dependencies + # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes + # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk + # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* + # - ccache is optional but speeds rebuilds inside the container + - script: | + set -euxo pipefail + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then + # ===== manylinux (glibc) containers ===== + docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' + set -euxo pipefail + # Prefer dnf (Alma/Rocky base), fall back to yum if present + if command -v dnf >/dev/null 2>&1; then + dnf -y update || true + # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache + dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true + elif command -v yum >/dev/null 2>&1; then + yum -y update || true + yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true + else + echo "No dnf/yum found in manylinux image" >&2 + fi + + # Quick visibility for logs + echo "---- tool versions ----" + gcc --version || true + cmake --version || true + ' + else + # ===== musllinux (Alpine/musl) containers ===== + docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' + set -euxo pipefail + apk update || true + # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache + apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true + + # Quick visibility for logs + echo "---- tool versions ----" + gcc --version || true + cmake --version || true + ' + fi + displayName: 'Install system build dependencies' + + # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters + - script: | + set -euxo pipefail + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi + + # Ensure dist exists inside the container + docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' + + # Loop through CPython versions present in the image + for PYBIN in cp310 cp311 cp312 cp313; do + echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then + docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " + set -euxo pipefail; + PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; + test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present + ln -sf \$PY /usr/local/bin/python; + python -m pip install -U pip setuptools wheel pybind11; + echo 'python:' \$(python -V); which python; + # 👉 run from the directory that has CMakeLists.txt + cd /workspace/mssql_python/pybind; + bash build.sh; + + # back to repo root to build the wheel + cd /workspace; + python setup.py bdist_wheel; + + # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification + # We're assuming that this will be provided by OS and not bundled in the wheel + # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done + " + else + docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " + set -euxo pipefail; + PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; + test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present + ln -sf \$PY /usr/local/bin/python; + python -m pip install -U pip setuptools wheel pybind11; + echo 'python:' \$(python -V); which python; + # 👉 run from the directory that has CMakeLists.txt + cd /workspace/mssql_python/pybind; + bash build.sh; + + # back to repo root to build the wheel + cd /workspace; + python setup.py bdist_wheel; + + # repair/tag wheel + # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification + # We're assuming that this will be provided by OS and not bundled in the wheel + # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done + " + fi + done + displayName: 'Run build.sh and build wheels for cp310–cp313' + + # Copy artifacts back to host + - script: | + set -euxo pipefail + # ---- Wheels ---- + docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" + + # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- + # Prepare host dest + mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" + + # Prepare a temp out dir inside the container + docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' + set -euxo pipefail; + echo "Listing package dirs for sanity:"; + ls -la /workspace/mssql_python || true; + ls -la /workspace/mssql_python/pybind || true; + + OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; + rm -rf "$OUT"; mkdir -p "$OUT"; + + # Copy ONLY top-level .so files from mssql_python (no recursion) + find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true + + echo "Top-level .so collected in $OUT:"; + ls -la "$OUT" || true + ' + + # Copy those .so files from container to host + docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ + "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ + || echo "No top-level .so files to copy" + + # (Optional) prune non-.so just in case + find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true + displayName: 'Copy wheels and .so back to host' + + # Cleanup container + - script: | + docker stop build-$(LINUX_TAG)-$(ARCH) || true + docker rm build-$(LINUX_TAG)-$(ARCH) || true + displayName: 'Clean up container' + condition: always() + + # Publish wheels (exact name you wanted) + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' + ArtifactName: 'mssql-python-wheels-dist' + publishLocation: 'Container' + displayName: 'Publish wheels as artifacts' + + # Publish compiled .so files (exact name you wanted) + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + publishLocation: 'Container' + displayName: 'Publish .so files as artifacts' # Job to test the built wheels on different Linux distributions with SQL Server - job: TestWheelsOnLinux displayName: 'Test Wheels with SQL Server' - # dependsOn: BuildLinuxWheels - # condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded + dependsOn: BuildLinuxWheels + condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded pool: { vmImage: 'ubuntu-latest' } timeoutInMinutes: 60 @@ -629,16 +629,11 @@ jobs: - task: DownloadBuildArtifacts@0 inputs: - buildType: 'specific' - project: '$(System.TeamProject)' - definition: '$(System.DefinitionId)' - specificBuildWithTriggering: true - buildVersionToDownload: 'specific' - buildId: '122714' + buildType: 'current' downloadType: 'single' artifactName: 'mssql-python-wheels-dist' downloadPath: '$(System.ArtifactsDirectory)' - displayName: 'Download wheel artifacts from specific build' + displayName: 'Download wheel artifacts from current build' # Verify we actually have wheels before proceeding - script: | From dc39d39534e728dc86686f3e10d04169536f1814 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 16:53:48 +0530 Subject: [PATCH 84/93] take arm python libs from specific build --- eng/pipelines/build-whl-pipeline.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 076140c22..fee13902b 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -111,10 +111,10 @@ jobs: buildType: 'specific' project: '$(System.TeamProject)' definition: 2162 - buildVersionToDownload: 'latest' + buildVersionToDownload: '122430' # Use specific build version for ARM64 libs artifactName: 'mssql-python-arm64-libs' targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - displayName: 'Download ARM64 Python libs from latest successful run on branches' + displayName: 'Download ARM64 Python libs from specific successful run on branches' # Build the PYD file by calling build.bat - script: | From 2d4155678816c6ff3570967910482a58f7bd81fb Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 17:13:25 +0530 Subject: [PATCH 85/93] finalize build pipeline for release --- eng/pipelines/build-whl-pipeline.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index fee13902b..1d8d041c5 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -111,10 +111,10 @@ jobs: buildType: 'specific' project: '$(System.TeamProject)' definition: 2162 - buildVersionToDownload: '122430' # Use specific build version for ARM64 libs + buildVersionToDownload: 'latest' artifactName: 'mssql-python-arm64-libs' targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - displayName: 'Download ARM64 Python libs from specific successful run on branches' + displayName: 'Download ARM64 Python libs from latest successful run on branches' # Build the PYD file by calling build.bat - script: | @@ -373,7 +373,7 @@ jobs: displayName: 'Publish all wheels as artifacts' - job: BuildLinuxWheels - displayName: 'Build Linux wheels (manylinux/musllinux, x86_64/aarch64) — explicit Docker' + displayName: 'Build Linux -' pool: { vmImage: 'ubuntu-latest' } timeoutInMinutes: 120 @@ -589,7 +589,7 @@ jobs: # Job to test the built wheels on different Linux distributions with SQL Server - job: TestWheelsOnLinux - displayName: 'Test Wheels with SQL Server' + displayName: 'Pytests on Linux -' dependsOn: BuildLinuxWheels condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded pool: { vmImage: 'ubuntu-latest' } @@ -716,7 +716,7 @@ jobs: if [[ "$(BASE_IMAGE)" == alpine* ]]; then echo "Setting up Alpine Linux..." docker exec test-$(ARCH) sh -c " - apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs krb5-dev + apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs python3 -m venv /venv /venv/bin/pip install pytest " From 571d3172753bb650c8098832a61e96aecd0a0a45 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 17:58:40 +0530 Subject: [PATCH 86/93] specific builds and commented everything except windows --- eng/pipelines/build-whl-pipeline.yml | 1256 +++++++++++++------------- 1 file changed, 628 insertions(+), 628 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 1d8d041c5..4d072820b 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -111,7 +111,7 @@ jobs: buildType: 'specific' project: '$(System.TeamProject)' definition: 2162 - buildVersionToDownload: 'latest' + buildVersionToDownload: '122430' artifactName: 'mssql-python-arm64-libs' targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' displayName: 'Download ARM64 Python libs from latest successful run on branches' @@ -214,651 +214,651 @@ jobs: publishLocation: 'Container' displayName: 'Publish all wheels as artifacts' -- job: BuildMacOSWheels - # Use the latest macOS image for building - pool: - vmImage: 'macos-latest' - # Display name for the job in Azure DevOps UI - displayName: 'Build macOS - ' - strategy: - matrix: - # Python 3.13 (universal2 for both arm64 and x86_64) - py313_universal2: - pythonVersion: '3.13' - shortPyVer: '313' - # Always use universal2 for macOS - targetArch: 'universal2' +# - job: BuildMacOSWheels +# # Use the latest macOS image for building +# pool: +# vmImage: 'macos-latest' +# # Display name for the job in Azure DevOps UI +# displayName: 'Build macOS - ' +# strategy: +# matrix: +# # Python 3.13 (universal2 for both arm64 and x86_64) +# py313_universal2: +# pythonVersion: '3.13' +# shortPyVer: '313' +# # Always use universal2 for macOS +# targetArch: 'universal2' - # Python 3.12 (universal2 for both arm64 and x86_64) - py312_universal2: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'universal2' - - # Python 3.11 (universal2 for both arm64 and x86_64) - py311_universal2: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'universal2' +# # Python 3.12 (universal2 for both arm64 and x86_64) +# py312_universal2: +# pythonVersion: '3.12' +# shortPyVer: '312' +# targetArch: 'universal2' + +# # Python 3.11 (universal2 for both arm64 and x86_64) +# py311_universal2: +# pythonVersion: '3.11' +# shortPyVer: '311' +# targetArch: 'universal2' - # Python 3.10 (universal2 for both arm64 and x86_64) - py310_universal2: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'universal2' - - steps: - # Use correct Python version and architecture for the current job - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(pythonVersion)' - addToPath: true - displayName: 'Use Python $(pythonVersion) (Universal2)' - - # Install CMake on macOS - - script: | - brew update - brew install cmake - displayName: 'Install CMake' - - # Install required packages: pip, CMake, pybind11 - - script: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install cmake pybind11 - displayName: 'Install dependencies' - - # Build the .so file by calling build.sh - - script: | - echo "Python Version: $(pythonVersion)" - echo "Short Tag: $(shortPyVer)" - echo "Building Universal2 Binary" - cd "$(Build.SourcesDirectory)/mssql_python/pybind" - # Call build.sh to build the .so file - ./build.sh - displayName: 'Build .so file' - continueOnError: false - - # Copy the built .so file to staging folder for artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)/mssql_python' - Contents: '*.so' - TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' - displayName: 'Place .so file into artifacts directory' - - - script: | - brew update - brew install docker colima - - # Try VZ first, fallback to QEMU if it fails - # Use more conservative resource allocation for Azure DevOps runners - colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ - colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu - - # Set a timeout to ensure Colima starts properly - sleep 30 - - # Optional: set Docker context (usually automatic) - docker context use colima >/dev/null || true - - # Confirm Docker is operational - docker version - docker ps - displayName: 'Install and start Colima-based Docker' - timeoutInMinutes: 15 - - - script: | - # Pull and run SQL Server container - docker pull mcr.microsoft.com/mssql/server:2022-latest - docker run \ - --name sqlserver \ - -e ACCEPT_EULA=Y \ - -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ - -p 1433:1433 \ - -d mcr.microsoft.com/mssql/server:2022-latest - - # Starting SQL Server container… - for i in {1..30}; do - docker exec sqlserver \ - /opt/mssql-tools18/bin/sqlcmd \ - -S localhost \ - -U SA \ - -P "$DB_PASSWORD" \ - -C -Q "SELECT 1" && break - sleep 2 - done - displayName: 'Pull & start SQL Server (Docker)' - env: - DB_PASSWORD: $(DB_PASSWORD) - - # Run Pytest to ensure the bindings work correctly - - script: | - python -m pytest -v - displayName: 'Run Pytest to validate bindings' - env: - DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - - # Build wheel package for universal2 - - script: | - python -m pip install --upgrade pip - pip install wheel setuptools - python setup.py bdist_wheel - displayName: 'Build $(pythonVersion) universal2 whl' +# # Python 3.10 (universal2 for both arm64 and x86_64) +# py310_universal2: +# pythonVersion: '3.10' +# shortPyVer: '310' +# targetArch: 'universal2' + +# steps: +# # Use correct Python version and architecture for the current job +# - task: UsePythonVersion@0 +# inputs: +# versionSpec: '$(pythonVersion)' +# addToPath: true +# displayName: 'Use Python $(pythonVersion) (Universal2)' + +# # Install CMake on macOS +# - script: | +# brew update +# brew install cmake +# displayName: 'Install CMake' + +# # Install required packages: pip, CMake, pybind11 +# - script: | +# python -m pip install --upgrade pip +# pip install -r requirements.txt +# pip install cmake pybind11 +# displayName: 'Install dependencies' + +# # Build the .so file by calling build.sh +# - script: | +# echo "Python Version: $(pythonVersion)" +# echo "Short Tag: $(shortPyVer)" +# echo "Building Universal2 Binary" +# cd "$(Build.SourcesDirectory)/mssql_python/pybind" +# # Call build.sh to build the .so file +# ./build.sh +# displayName: 'Build .so file' +# continueOnError: false + +# # Copy the built .so file to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)/mssql_python' +# Contents: '*.so' +# TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' +# displayName: 'Place .so file into artifacts directory' + +# - script: | +# brew update +# brew install docker colima + +# # Try VZ first, fallback to QEMU if it fails +# # Use more conservative resource allocation for Azure DevOps runners +# colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ +# colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu + +# # Set a timeout to ensure Colima starts properly +# sleep 30 + +# # Optional: set Docker context (usually automatic) +# docker context use colima >/dev/null || true + +# # Confirm Docker is operational +# docker version +# docker ps +# displayName: 'Install and start Colima-based Docker' +# timeoutInMinutes: 15 + +# - script: | +# # Pull and run SQL Server container +# docker pull mcr.microsoft.com/mssql/server:2022-latest +# docker run \ +# --name sqlserver \ +# -e ACCEPT_EULA=Y \ +# -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ +# -p 1433:1433 \ +# -d mcr.microsoft.com/mssql/server:2022-latest + +# # Starting SQL Server container… +# for i in {1..30}; do +# docker exec sqlserver \ +# /opt/mssql-tools18/bin/sqlcmd \ +# -S localhost \ +# -U SA \ +# -P "$DB_PASSWORD" \ +# -C -Q "SELECT 1" && break +# sleep 2 +# done +# displayName: 'Pull & start SQL Server (Docker)' +# env: +# DB_PASSWORD: $(DB_PASSWORD) + +# # Run Pytest to ensure the bindings work correctly +# - script: | +# python -m pytest -v +# displayName: 'Run Pytest to validate bindings' +# env: +# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + +# # Build wheel package for universal2 +# - script: | +# python -m pip install --upgrade pip +# pip install wheel setuptools +# python setup.py bdist_wheel +# displayName: 'Build $(pythonVersion) universal2 whl' - # Copy the wheel file to the artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)/dist' - Contents: '*.whl' - TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' - displayName: 'Collect wheel package' +# # Copy the wheel file to the artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)/dist' +# Contents: '*.whl' +# TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' +# displayName: 'Collect wheel package' - # Publish the collected .so file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish all .so files as artifacts' +# # Publish the collected .so file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish all .so files as artifacts' - # Publish the collected wheel file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' - ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish all wheels as artifacts' - -- job: BuildLinuxWheels - displayName: 'Build Linux -' - pool: { vmImage: 'ubuntu-latest' } - timeoutInMinutes: 120 - - strategy: - matrix: - manylinux_x86_64: - LINUX_TAG: 'manylinux' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' - manylinux_aarch64: - LINUX_TAG: 'manylinux' - ARCH: 'aarch64' - DOCKER_PLATFORM: 'linux/arm64' - IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' - musllinux_x86_64: - LINUX_TAG: 'musllinux' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' - musllinux_aarch64: - LINUX_TAG: 'musllinux' - ARCH: 'aarch64' - DOCKER_PLATFORM: 'linux/arm64' - IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' - - steps: - - checkout: self - fetchDepth: 0 - - # Enable QEMU so we can run aarch64 containers on the x86_64 agent - - script: | - sudo docker run --rm --privileged tonistiigi/binfmt --install all - displayName: 'Enable QEMU (for aarch64)' - - # Prep artifact dirs - - script: | - rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings - mkdir -p $(Build.ArtifactStagingDirectory)/dist - mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) - displayName: 'Prepare artifact directories' - - # Start a long-lived container for this lane - - script: | - docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ - --platform $(DOCKER_PLATFORM) \ - -v $(Build.SourcesDirectory):/workspace \ - -w /workspace \ - $(IMAGE) \ - tail -f /dev/null - displayName: 'Start $(LINUX_TAG) $(ARCH) container' - - # Install system build dependencies - # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes - # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk - # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* - # - ccache is optional but speeds rebuilds inside the container - - script: | - set -euxo pipefail - if [[ "$(LINUX_TAG)" == "manylinux" ]]; then - # ===== manylinux (glibc) containers ===== - docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' - set -euxo pipefail - # Prefer dnf (Alma/Rocky base), fall back to yum if present - if command -v dnf >/dev/null 2>&1; then - dnf -y update || true - # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache - dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true - elif command -v yum >/dev/null 2>&1; then - yum -y update || true - yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true - else - echo "No dnf/yum found in manylinux image" >&2 - fi - - # Quick visibility for logs - echo "---- tool versions ----" - gcc --version || true - cmake --version || true - ' - else - # ===== musllinux (Alpine/musl) containers ===== - docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' - set -euxo pipefail - apk update || true - # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache - apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true - - # Quick visibility for logs - echo "---- tool versions ----" - gcc --version || true - cmake --version || true - ' - fi - displayName: 'Install system build dependencies' - - # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters - - script: | - set -euxo pipefail - if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi - - # Ensure dist exists inside the container - docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' - - # Loop through CPython versions present in the image - for PYBIN in cp310 cp311 cp312 cp313; do - echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" - if [[ "$(LINUX_TAG)" == "manylinux" ]]; then - docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " - set -euxo pipefail; - PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; - test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present - ln -sf \$PY /usr/local/bin/python; - python -m pip install -U pip setuptools wheel pybind11; - echo 'python:' \$(python -V); which python; - # 👉 run from the directory that has CMakeLists.txt - cd /workspace/mssql_python/pybind; - bash build.sh; - - # back to repo root to build the wheel - cd /workspace; - python setup.py bdist_wheel; - - # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification - # We're assuming that this will be provided by OS and not bundled in the wheel - # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done - " - else - docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " - set -euxo pipefail; - PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; - test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present - ln -sf \$PY /usr/local/bin/python; - python -m pip install -U pip setuptools wheel pybind11; - echo 'python:' \$(python -V); which python; - # 👉 run from the directory that has CMakeLists.txt - cd /workspace/mssql_python/pybind; - bash build.sh; - - # back to repo root to build the wheel - cd /workspace; - python setup.py bdist_wheel; - - # repair/tag wheel - # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification - # We're assuming that this will be provided by OS and not bundled in the wheel - # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done - " - fi - done - displayName: 'Run build.sh and build wheels for cp310–cp313' - - # Copy artifacts back to host - - script: | - set -euxo pipefail - # ---- Wheels ---- - docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" - - # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- - # Prepare host dest - mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" - - # Prepare a temp out dir inside the container - docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' - set -euxo pipefail; - echo "Listing package dirs for sanity:"; - ls -la /workspace/mssql_python || true; - ls -la /workspace/mssql_python/pybind || true; - - OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; - rm -rf "$OUT"; mkdir -p "$OUT"; - - # Copy ONLY top-level .so files from mssql_python (no recursion) - find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true - - echo "Top-level .so collected in $OUT:"; - ls -la "$OUT" || true - ' - - # Copy those .so files from container to host - docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ - "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ - || echo "No top-level .so files to copy" - - # (Optional) prune non-.so just in case - find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true - displayName: 'Copy wheels and .so back to host' - - # Cleanup container - - script: | - docker stop build-$(LINUX_TAG)-$(ARCH) || true - docker rm build-$(LINUX_TAG)-$(ARCH) || true - displayName: 'Clean up container' - condition: always() - - # Publish wheels (exact name you wanted) - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' - ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish wheels as artifacts' - - # Publish compiled .so files (exact name you wanted) - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish .so files as artifacts' - -# Job to test the built wheels on different Linux distributions with SQL Server -- job: TestWheelsOnLinux - displayName: 'Pytests on Linux -' - dependsOn: BuildLinuxWheels - condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded - pool: { vmImage: 'ubuntu-latest' } - timeoutInMinutes: 60 - - strategy: - matrix: - # x86_64 - debian12: - BASE_IMAGE: 'debian:12-slim' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - rhel_ubi9: - BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - alpine320: - BASE_IMAGE: 'alpine:3.20' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - # arm64 - debian12_arm64: - BASE_IMAGE: 'debian:12-slim' - ARCH: 'arm64' - DOCKER_PLATFORM: 'linux/arm64' - rhel_ubi9_arm64: - BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' - ARCH: 'arm64' - DOCKER_PLATFORM: 'linux/arm64' - alpine320_arm64: - BASE_IMAGE: 'alpine:3.20' - ARCH: 'arm64' - DOCKER_PLATFORM: 'linux/arm64' - - steps: - - checkout: self - - - task: DownloadBuildArtifacts@0 - inputs: - buildType: 'current' - downloadType: 'single' - artifactName: 'mssql-python-wheels-dist' - downloadPath: '$(System.ArtifactsDirectory)' - displayName: 'Download wheel artifacts from current build' - - # Verify we actually have wheels before proceeding - - script: | - set -euxo pipefail - WHEEL_DIR="$(System.ArtifactsDirectory)/mssql-python-wheels-dist" - if [ ! -d "$WHEEL_DIR" ] || [ -z "$(ls -A $WHEEL_DIR/*.whl 2>/dev/null)" ]; then - echo "ERROR: No wheel files found in $WHEEL_DIR" - echo "Contents of artifacts directory:" - find "$(System.ArtifactsDirectory)" -type f -name "*.whl" || echo "No .whl files found anywhere" - exit 1 - fi - echo "Found wheel files:" - ls -la "$WHEEL_DIR"/*.whl - displayName: 'Verify wheel artifacts exist' - - # Start SQL Server container for testing - - script: | - set -euxo pipefail - docker run -d --name sqlserver \ - --network bridge \ - -e ACCEPT_EULA=Y \ - -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ - -p 1433:1433 \ - mcr.microsoft.com/mssql/server:2022-latest - - # Wait for SQL Server to be ready - echo "Waiting for SQL Server to start..." - for i in {1..30}; do - if docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ - -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then - echo "SQL Server is ready!" - break - fi - echo "Attempt $i/30: SQL Server not ready yet..." - sleep 3 - done - - # Create test database - docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ - -S localhost -U SA -P "$(DB_PASSWORD)" -C \ - -Q "CREATE DATABASE TestDB" - displayName: 'Start SQL Server and create test database' - env: - DB_PASSWORD: $(DB_PASSWORD) - - # Test wheels on target OS - - script: | - set -euxo pipefail +# # Publish the collected wheel file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish all wheels as artifacts' + +# - job: BuildLinuxWheels +# displayName: 'Build Linux -' +# pool: { vmImage: 'ubuntu-latest' } +# timeoutInMinutes: 120 + +# strategy: +# matrix: +# manylinux_x86_64: +# LINUX_TAG: 'manylinux' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' +# manylinux_aarch64: +# LINUX_TAG: 'manylinux' +# ARCH: 'aarch64' +# DOCKER_PLATFORM: 'linux/arm64' +# IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' +# musllinux_x86_64: +# LINUX_TAG: 'musllinux' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' +# musllinux_aarch64: +# LINUX_TAG: 'musllinux' +# ARCH: 'aarch64' +# DOCKER_PLATFORM: 'linux/arm64' +# IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' + +# steps: +# - checkout: self +# fetchDepth: 0 + +# # Enable QEMU so we can run aarch64 containers on the x86_64 agent +# - script: | +# sudo docker run --rm --privileged tonistiigi/binfmt --install all +# displayName: 'Enable QEMU (for aarch64)' + +# # Prep artifact dirs +# - script: | +# rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings +# mkdir -p $(Build.ArtifactStagingDirectory)/dist +# mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) +# displayName: 'Prepare artifact directories' + +# # Start a long-lived container for this lane +# - script: | +# docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ +# --platform $(DOCKER_PLATFORM) \ +# -v $(Build.SourcesDirectory):/workspace \ +# -w /workspace \ +# $(IMAGE) \ +# tail -f /dev/null +# displayName: 'Start $(LINUX_TAG) $(ARCH) container' + +# # Install system build dependencies +# # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes +# # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk +# # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* +# # - ccache is optional but speeds rebuilds inside the container +# - script: | +# set -euxo pipefail +# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then +# # ===== manylinux (glibc) containers ===== +# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' +# set -euxo pipefail +# # Prefer dnf (Alma/Rocky base), fall back to yum if present +# if command -v dnf >/dev/null 2>&1; then +# dnf -y update || true +# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache +# dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true +# elif command -v yum >/dev/null 2>&1; then +# yum -y update || true +# yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true +# else +# echo "No dnf/yum found in manylinux image" >&2 +# fi + +# # Quick visibility for logs +# echo "---- tool versions ----" +# gcc --version || true +# cmake --version || true +# ' +# else +# # ===== musllinux (Alpine/musl) containers ===== +# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' +# set -euxo pipefail +# apk update || true +# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache +# apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true + +# # Quick visibility for logs +# echo "---- tool versions ----" +# gcc --version || true +# cmake --version || true +# ' +# fi +# displayName: 'Install system build dependencies' + +# # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters +# - script: | +# set -euxo pipefail +# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi + +# # Ensure dist exists inside the container +# docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' + +# # Loop through CPython versions present in the image +# for PYBIN in cp310 cp311 cp312 cp313; do +# echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" +# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then +# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " +# set -euxo pipefail; +# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; +# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present +# ln -sf \$PY /usr/local/bin/python; +# python -m pip install -U pip setuptools wheel pybind11; +# echo 'python:' \$(python -V); which python; +# # 👉 run from the directory that has CMakeLists.txt +# cd /workspace/mssql_python/pybind; +# bash build.sh; + +# # back to repo root to build the wheel +# cd /workspace; +# python setup.py bdist_wheel; + +# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification +# # We're assuming that this will be provided by OS and not bundled in the wheel +# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done +# " +# else +# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " +# set -euxo pipefail; +# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; +# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present +# ln -sf \$PY /usr/local/bin/python; +# python -m pip install -U pip setuptools wheel pybind11; +# echo 'python:' \$(python -V); which python; +# # 👉 run from the directory that has CMakeLists.txt +# cd /workspace/mssql_python/pybind; +# bash build.sh; + +# # back to repo root to build the wheel +# cd /workspace; +# python setup.py bdist_wheel; + +# # repair/tag wheel +# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification +# # We're assuming that this will be provided by OS and not bundled in the wheel +# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done +# " +# fi +# done +# displayName: 'Run build.sh and build wheels for cp310–cp313' + +# # Copy artifacts back to host +# - script: | +# set -euxo pipefail +# # ---- Wheels ---- +# docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" + +# # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- +# # Prepare host dest +# mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" + +# # Prepare a temp out dir inside the container +# docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' +# set -euxo pipefail; +# echo "Listing package dirs for sanity:"; +# ls -la /workspace/mssql_python || true; +# ls -la /workspace/mssql_python/pybind || true; + +# OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; +# rm -rf "$OUT"; mkdir -p "$OUT"; + +# # Copy ONLY top-level .so files from mssql_python (no recursion) +# find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true + +# echo "Top-level .so collected in $OUT:"; +# ls -la "$OUT" || true +# ' + +# # Copy those .so files from container to host +# docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ +# "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ +# || echo "No top-level .so files to copy" + +# # (Optional) prune non-.so just in case +# find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true +# displayName: 'Copy wheels and .so back to host' + +# # Cleanup container +# - script: | +# docker stop build-$(LINUX_TAG)-$(ARCH) || true +# docker rm build-$(LINUX_TAG)-$(ARCH) || true +# displayName: 'Clean up container' +# condition: always() + +# # Publish wheels (exact name you wanted) +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish wheels as artifacts' + +# # Publish compiled .so files (exact name you wanted) +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish .so files as artifacts' + +# # Job to test the built wheels on different Linux distributions with SQL Server +# - job: TestWheelsOnLinux +# displayName: 'Pytests on Linux -' +# dependsOn: BuildLinuxWheels +# condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded +# pool: { vmImage: 'ubuntu-latest' } +# timeoutInMinutes: 60 + +# strategy: +# matrix: +# # x86_64 +# debian12: +# BASE_IMAGE: 'debian:12-slim' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# rhel_ubi9: +# BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# alpine320: +# BASE_IMAGE: 'alpine:3.20' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# # arm64 +# debian12_arm64: +# BASE_IMAGE: 'debian:12-slim' +# ARCH: 'arm64' +# DOCKER_PLATFORM: 'linux/arm64' +# rhel_ubi9_arm64: +# BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' +# ARCH: 'arm64' +# DOCKER_PLATFORM: 'linux/arm64' +# alpine320_arm64: +# BASE_IMAGE: 'alpine:3.20' +# ARCH: 'arm64' +# DOCKER_PLATFORM: 'linux/arm64' + +# steps: +# - checkout: self + +# - task: DownloadBuildArtifacts@0 +# inputs: +# buildType: 'current' +# downloadType: 'single' +# artifactName: 'mssql-python-wheels-dist' +# downloadPath: '$(System.ArtifactsDirectory)' +# displayName: 'Download wheel artifacts from current build' + +# # Verify we actually have wheels before proceeding +# - script: | +# set -euxo pipefail +# WHEEL_DIR="$(System.ArtifactsDirectory)/mssql-python-wheels-dist" +# if [ ! -d "$WHEEL_DIR" ] || [ -z "$(ls -A $WHEEL_DIR/*.whl 2>/dev/null)" ]; then +# echo "ERROR: No wheel files found in $WHEEL_DIR" +# echo "Contents of artifacts directory:" +# find "$(System.ArtifactsDirectory)" -type f -name "*.whl" || echo "No .whl files found anywhere" +# exit 1 +# fi +# echo "Found wheel files:" +# ls -la "$WHEEL_DIR"/*.whl +# displayName: 'Verify wheel artifacts exist' + +# # Start SQL Server container for testing +# - script: | +# set -euxo pipefail +# docker run -d --name sqlserver \ +# --network bridge \ +# -e ACCEPT_EULA=Y \ +# -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ +# -p 1433:1433 \ +# mcr.microsoft.com/mssql/server:2022-latest + +# # Wait for SQL Server to be ready +# echo "Waiting for SQL Server to start..." +# for i in {1..30}; do +# if docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ +# -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then +# echo "SQL Server is ready!" +# break +# fi +# echo "Attempt $i/30: SQL Server not ready yet..." +# sleep 3 +# done + +# # Create test database +# docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ +# -S localhost -U SA -P "$(DB_PASSWORD)" -C \ +# -Q "CREATE DATABASE TestDB" +# displayName: 'Start SQL Server and create test database' +# env: +# DB_PASSWORD: $(DB_PASSWORD) + +# # Test wheels on target OS +# - script: | +# set -euxo pipefail - # Enable QEMU for ARM64 architectures - if [[ "$(ARCH)" == "arm64" ]] || [[ "$(ARCH)" == "aarch64" ]]; then - sudo docker run --rm --privileged tonistiigi/binfmt --install all - fi +# # Enable QEMU for ARM64 architectures +# if [[ "$(ARCH)" == "arm64" ]] || [[ "$(ARCH)" == "aarch64" ]]; then +# sudo docker run --rm --privileged tonistiigi/binfmt --install all +# fi - # Start test container with retry logic - for i in {1..3}; do - if docker run -d --name test-$(ARCH) \ - --platform $(DOCKER_PLATFORM) \ - --network bridge \ - -v $(System.ArtifactsDirectory):/artifacts:ro \ - $(BASE_IMAGE) \ - tail -f /dev/null; then - echo "Container started successfully on attempt $i" - break - else - echo "Failed to start container on attempt $i, retrying..." - docker rm test-$(ARCH) 2>/dev/null || true - sleep 5 - fi - done - - # Verify container is running - if ! docker ps | grep -q test-$(ARCH); then - echo "ERROR: Container test-$(ARCH) is not running" - docker logs test-$(ARCH) || true - exit 1 - fi - - # Install Python and dependencies based on OS - if [[ "$(BASE_IMAGE)" == alpine* ]]; then - echo "Setting up Alpine Linux..." - docker exec test-$(ARCH) sh -c " - apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs - python3 -m venv /venv - /venv/bin/pip install pytest - " - PY_CMD="/venv/bin/python" - elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then - echo "Setting up RHEL-based system..." - docker exec test-$(ARCH) bash -c " - set -euo pipefail - echo 'Installing Python on UBI/RHEL...' - if command -v dnf >/dev/null; then - dnf clean all - rm -rf /var/cache/dnf - dnf -y makecache - - dnf list --showduplicates python3.11 python3.12 || true - - # NOTE: do NOT install 'curl' to avoid curl-minimal conflict - if dnf -y install python3.12 python3.12-pip unixODBC-devel; then - PY=python3.12 - echo 'Installed Python 3.12' - elif dnf -y install python3.11 python3.11-pip unixODBC-devel; then - PY=python3.11 - echo 'Installed Python 3.11' - else - dnf -y install python3 python3-pip unixODBC-devel - PY=python3 - echo 'Falling back to default Python' - fi - - \$PY -m venv /venv - /venv/bin/python -m pip install -U 'pip>=25' pytest - /venv/bin/python --version - /venv/bin/pip --version - else - echo 'ERROR: dnf not found' - exit 1 - fi - " - PY_CMD="/venv/bin/python" - else - echo "Setting up Debian/Ubuntu..." - docker exec test-$(ARCH) bash -c " - export DEBIAN_FRONTEND=noninteractive - apt-get update - apt-get install -y python3 python3-pip python3-venv python3-full unixodbc-dev curl - python3 -m venv /venv - /venv/bin/pip install pytest - " - PY_CMD="/venv/bin/python" - fi - - # Install the wheel (find the appropriate one for this architecture) - if [[ "$(BASE_IMAGE)" == alpine* ]]; then - SHELL_CMD="sh -c" - WHEEL_PATTERN="*musllinux*$(ARCH)*.whl" - else - SHELL_CMD="bash -c" - WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" - fi - - # Install the appropriate wheel in isolated directory - docker exec test-$(ARCH) $SHELL_CMD " - # Create isolated directory for wheel testing - mkdir -p /test_whl - cd /test_whl +# # Start test container with retry logic +# for i in {1..3}; do +# if docker run -d --name test-$(ARCH) \ +# --platform $(DOCKER_PLATFORM) \ +# --network bridge \ +# -v $(System.ArtifactsDirectory):/artifacts:ro \ +# $(BASE_IMAGE) \ +# tail -f /dev/null; then +# echo "Container started successfully on attempt $i" +# break +# else +# echo "Failed to start container on attempt $i, retrying..." +# docker rm test-$(ARCH) 2>/dev/null || true +# sleep 5 +# fi +# done + +# # Verify container is running +# if ! docker ps | grep -q test-$(ARCH); then +# echo "ERROR: Container test-$(ARCH) is not running" +# docker logs test-$(ARCH) || true +# exit 1 +# fi + +# # Install Python and dependencies based on OS +# if [[ "$(BASE_IMAGE)" == alpine* ]]; then +# echo "Setting up Alpine Linux..." +# docker exec test-$(ARCH) sh -c " +# apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs +# python3 -m venv /venv +# /venv/bin/pip install pytest +# " +# PY_CMD="/venv/bin/python" +# elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then +# echo "Setting up RHEL-based system..." +# docker exec test-$(ARCH) bash -c " +# set -euo pipefail +# echo 'Installing Python on UBI/RHEL...' +# if command -v dnf >/dev/null; then +# dnf clean all +# rm -rf /var/cache/dnf +# dnf -y makecache + +# dnf list --showduplicates python3.11 python3.12 || true + +# # NOTE: do NOT install 'curl' to avoid curl-minimal conflict +# if dnf -y install python3.12 python3.12-pip unixODBC-devel; then +# PY=python3.12 +# echo 'Installed Python 3.12' +# elif dnf -y install python3.11 python3.11-pip unixODBC-devel; then +# PY=python3.11 +# echo 'Installed Python 3.11' +# else +# dnf -y install python3 python3-pip unixODBC-devel +# PY=python3 +# echo 'Falling back to default Python' +# fi + +# \$PY -m venv /venv +# /venv/bin/python -m pip install -U 'pip>=25' pytest +# /venv/bin/python --version +# /venv/bin/pip --version +# else +# echo 'ERROR: dnf not found' +# exit 1 +# fi +# " +# PY_CMD="/venv/bin/python" +# else +# echo "Setting up Debian/Ubuntu..." +# docker exec test-$(ARCH) bash -c " +# export DEBIAN_FRONTEND=noninteractive +# apt-get update +# apt-get install -y python3 python3-pip python3-venv python3-full unixodbc-dev curl +# python3 -m venv /venv +# /venv/bin/pip install pytest +# " +# PY_CMD="/venv/bin/python" +# fi + +# # Install the wheel (find the appropriate one for this architecture) +# if [[ "$(BASE_IMAGE)" == alpine* ]]; then +# SHELL_CMD="sh -c" +# WHEEL_PATTERN="*musllinux*$(ARCH)*.whl" +# else +# SHELL_CMD="bash -c" +# WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" +# fi + +# # Install the appropriate wheel in isolated directory +# docker exec test-$(ARCH) $SHELL_CMD " +# # Create isolated directory for wheel testing +# mkdir -p /test_whl +# cd /test_whl - echo 'Available wheels:' - ls -la /artifacts/mssql-python-wheels-dist/*.whl - echo 'Installing package (letting pip auto-select in isolated environment):' - $PY_CMD -m pip install mssql_python --find-links /artifacts/mssql-python-wheels-dist --no-index --no-deps +# echo 'Available wheels:' +# ls -la /artifacts/mssql-python-wheels-dist/*.whl +# echo 'Installing package (letting pip auto-select in isolated environment):' +# $PY_CMD -m pip install mssql_python --find-links /artifacts/mssql-python-wheels-dist --no-index --no-deps - # Verify package installation location - echo 'Installed package location:' - $PY_CMD -c 'import mssql_python; print(\"Package location:\", mssql_python.__file__)' +# # Verify package installation location +# echo 'Installed package location:' +# $PY_CMD -c 'import mssql_python; print(\"Package location:\", mssql_python.__file__)' - # Test basic import - $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' - " +# # Test basic import +# $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' +# " - displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' - env: - DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' +# displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' +# env: +# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - # Run pytest with source code while testing installed wheel - - script: | - set -euxo pipefail +# # Run pytest with source code while testing installed wheel +# - script: | +# set -euxo pipefail - # Copy source code to container for pytest - echo "Copying source code to container for pytest..." - docker cp $(Build.SourcesDirectory)/. test-$(ARCH):/workspace/ +# # Copy source code to container for pytest +# echo "Copying source code to container for pytest..." +# docker cp $(Build.SourcesDirectory)/. test-$(ARCH):/workspace/ - # Set shell command based on OS and define Python command - if [[ "$(BASE_IMAGE)" == alpine* ]]; then - SHELL_CMD="sh -c" - PY_CMD="/venv/bin/python" - else - SHELL_CMD="bash -c" - PY_CMD="/venv/bin/python" - fi +# # Set shell command based on OS and define Python command +# if [[ "$(BASE_IMAGE)" == alpine* ]]; then +# SHELL_CMD="sh -c" +# PY_CMD="/venv/bin/python" +# else +# SHELL_CMD="bash -c" +# PY_CMD="/venv/bin/python" +# fi - docker exec test-$(ARCH) $SHELL_CMD " - # Go to workspace root where source code is - cd /workspace +# docker exec test-$(ARCH) $SHELL_CMD " +# # Go to workspace root where source code is +# cd /workspace - echo 'Running pytest suite with installed wheel...' - echo 'Current directory:' \$(pwd) - echo 'Python version:' - $PY_CMD --version +# echo 'Running pytest suite with installed wheel...' +# echo 'Current directory:' \$(pwd) +# echo 'Python version:' +# $PY_CMD --version - # Verify we're importing the installed wheel, not local source - echo 'Package import verification:' - $PY_CMD -c 'import mssql_python; print(\"Testing installed wheel from:\", mssql_python.__file__)' +# # Verify we're importing the installed wheel, not local source +# echo 'Package import verification:' +# $PY_CMD -c 'import mssql_python; print(\"Testing installed wheel from:\", mssql_python.__file__)' - # Install test requirements - if [ -f requirements.txt ]; then - echo 'Installing test requirements...' - $PY_CMD -m pip install -r requirements.txt || echo 'Failed to install some requirements' - fi +# # Install test requirements +# if [ -f requirements.txt ]; then +# echo 'Installing test requirements...' +# $PY_CMD -m pip install -r requirements.txt || echo 'Failed to install some requirements' +# fi - # Ensure pytest is available - $PY_CMD -m pip install pytest || echo 'pytest installation failed' +# # Ensure pytest is available +# $PY_CMD -m pip install pytest || echo 'pytest installation failed' - # List available test files - echo 'Available test files:' - find tests/ -name 'test_*.py' 2>/dev/null || echo 'No test files found in tests/' +# # List available test files +# echo 'Available test files:' +# find tests/ -name 'test_*.py' 2>/dev/null || echo 'No test files found in tests/' - # Run pytest - if [ -d tests/ ]; then - echo 'Starting pytest...' - $PY_CMD -m pytest -v || echo 'Some tests failed - this may be expected in containerized environment' - else - echo 'No tests directory found, skipping pytest' - fi - " - displayName: 'Run pytest suite on $(BASE_IMAGE) $(ARCH)' - env: - DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - continueOnError: true # Don't fail pipeline if tests fail - - # Cleanup - - script: | - docker stop test-$(ARCH) sqlserver || true - docker rm test-$(ARCH) sqlserver || true - displayName: 'Cleanup containers' - condition: always() \ No newline at end of file +# # Run pytest +# if [ -d tests/ ]; then +# echo 'Starting pytest...' +# $PY_CMD -m pytest -v || echo 'Some tests failed - this may be expected in containerized environment' +# else +# echo 'No tests directory found, skipping pytest' +# fi +# " +# displayName: 'Run pytest suite on $(BASE_IMAGE) $(ARCH)' +# env: +# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' +# continueOnError: true # Don't fail pipeline if tests fail + +# # Cleanup +# - script: | +# docker stop test-$(ARCH) sqlserver || true +# docker rm test-$(ARCH) sqlserver || true +# displayName: 'Cleanup containers' +# condition: always() From b5614b3df1a814de65b826476618586b782a0208 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 18:01:46 +0530 Subject: [PATCH 87/93] specific builds and commented everything except windows --- eng/pipelines/build-whl-pipeline.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 4d072820b..9e8bf5230 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -105,16 +105,18 @@ jobs: env: DB_PASSWORD: $(DB_PASSWORD) - - task: DownloadPipelineArtifact@2 + - task: DownloadBuildArtifacts@0 condition: eq(variables['targetArch'], 'arm64') inputs: buildType: 'specific' project: '$(System.TeamProject)' definition: 2162 - buildVersionToDownload: '122430' + specificBuildWithTriggering: true + buildVersionToDownload: 'specific' + buildId: '122714' artifactName: 'mssql-python-arm64-libs' targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - displayName: 'Download ARM64 Python libs from latest successful run on branches' + displayName: 'Download ARM64 Python libs from specific successful run on branches' # Build the PYD file by calling build.bat - script: | From 8045f47b2ad5ab735c11eec911bf33acf4b61517 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 18:06:13 +0530 Subject: [PATCH 88/93] specific builds and commented everything except windows --- eng/pipelines/build-whl-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 9e8bf5230..a5386eb64 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -113,7 +113,7 @@ jobs: definition: 2162 specificBuildWithTriggering: true buildVersionToDownload: 'specific' - buildId: '122714' + buildId: '122430' artifactName: 'mssql-python-arm64-libs' targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' displayName: 'Download ARM64 Python libs from specific successful run on branches' From 870650d1516ba71ff88f34b7151a9a269e9019cc Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 18:12:50 +0530 Subject: [PATCH 89/93] specific builds and commented everything except windows --- eng/pipelines/build-whl-pipeline.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index a5386eb64..e35831818 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -113,10 +113,10 @@ jobs: definition: 2162 specificBuildWithTriggering: true buildVersionToDownload: 'specific' - buildId: '122430' + buildId: '122714' artifactName: 'mssql-python-arm64-libs' - targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - displayName: 'Download ARM64 Python libs from specific successful run on branches' + downloadPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' + displayName: 'Download ARM64 Python libs from latest successful run on branches' # Build the PYD file by calling build.bat - script: | From 65abe665b0e31d371a0416241f1b9ac0506ff4ab Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 18:17:53 +0530 Subject: [PATCH 90/93] finalized pipeline for release --- eng/pipelines/build-whl-pipeline.yml | 1262 +++++++++++++------------- 1 file changed, 630 insertions(+), 632 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index e35831818..a7e2a87b8 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -105,17 +105,15 @@ jobs: env: DB_PASSWORD: $(DB_PASSWORD) - - task: DownloadBuildArtifacts@0 + - task: DownloadPipelineArtifact@2 condition: eq(variables['targetArch'], 'arm64') inputs: buildType: 'specific' project: '$(System.TeamProject)' definition: 2162 - specificBuildWithTriggering: true - buildVersionToDownload: 'specific' - buildId: '122714' + buildVersionToDownload: 'latest' artifactName: 'mssql-python-arm64-libs' - downloadPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' + targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' displayName: 'Download ARM64 Python libs from latest successful run on branches' # Build the PYD file by calling build.bat @@ -216,651 +214,651 @@ jobs: publishLocation: 'Container' displayName: 'Publish all wheels as artifacts' -# - job: BuildMacOSWheels -# # Use the latest macOS image for building -# pool: -# vmImage: 'macos-latest' -# # Display name for the job in Azure DevOps UI -# displayName: 'Build macOS - ' -# strategy: -# matrix: -# # Python 3.13 (universal2 for both arm64 and x86_64) -# py313_universal2: -# pythonVersion: '3.13' -# shortPyVer: '313' -# # Always use universal2 for macOS -# targetArch: 'universal2' +- job: BuildMacOSWheels + # Use the latest macOS image for building + pool: + vmImage: 'macos-latest' + # Display name for the job in Azure DevOps UI + displayName: 'Build macOS - ' + strategy: + matrix: + # Python 3.13 (universal2 for both arm64 and x86_64) + py313_universal2: + pythonVersion: '3.13' + shortPyVer: '313' + # Always use universal2 for macOS + targetArch: 'universal2' -# # Python 3.12 (universal2 for both arm64 and x86_64) -# py312_universal2: -# pythonVersion: '3.12' -# shortPyVer: '312' -# targetArch: 'universal2' - -# # Python 3.11 (universal2 for both arm64 and x86_64) -# py311_universal2: -# pythonVersion: '3.11' -# shortPyVer: '311' -# targetArch: 'universal2' + # Python 3.12 (universal2 for both arm64 and x86_64) + py312_universal2: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'universal2' + + # Python 3.11 (universal2 for both arm64 and x86_64) + py311_universal2: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'universal2' -# # Python 3.10 (universal2 for both arm64 and x86_64) -# py310_universal2: -# pythonVersion: '3.10' -# shortPyVer: '310' -# targetArch: 'universal2' - -# steps: -# # Use correct Python version and architecture for the current job -# - task: UsePythonVersion@0 -# inputs: -# versionSpec: '$(pythonVersion)' -# addToPath: true -# displayName: 'Use Python $(pythonVersion) (Universal2)' - -# # Install CMake on macOS -# - script: | -# brew update -# brew install cmake -# displayName: 'Install CMake' - -# # Install required packages: pip, CMake, pybind11 -# - script: | -# python -m pip install --upgrade pip -# pip install -r requirements.txt -# pip install cmake pybind11 -# displayName: 'Install dependencies' - -# # Build the .so file by calling build.sh -# - script: | -# echo "Python Version: $(pythonVersion)" -# echo "Short Tag: $(shortPyVer)" -# echo "Building Universal2 Binary" -# cd "$(Build.SourcesDirectory)/mssql_python/pybind" -# # Call build.sh to build the .so file -# ./build.sh -# displayName: 'Build .so file' -# continueOnError: false - -# # Copy the built .so file to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)/mssql_python' -# Contents: '*.so' -# TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' -# displayName: 'Place .so file into artifacts directory' - -# - script: | -# brew update -# brew install docker colima - -# # Try VZ first, fallback to QEMU if it fails -# # Use more conservative resource allocation for Azure DevOps runners -# colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ -# colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu - -# # Set a timeout to ensure Colima starts properly -# sleep 30 - -# # Optional: set Docker context (usually automatic) -# docker context use colima >/dev/null || true - -# # Confirm Docker is operational -# docker version -# docker ps -# displayName: 'Install and start Colima-based Docker' -# timeoutInMinutes: 15 - -# - script: | -# # Pull and run SQL Server container -# docker pull mcr.microsoft.com/mssql/server:2022-latest -# docker run \ -# --name sqlserver \ -# -e ACCEPT_EULA=Y \ -# -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ -# -p 1433:1433 \ -# -d mcr.microsoft.com/mssql/server:2022-latest - -# # Starting SQL Server container… -# for i in {1..30}; do -# docker exec sqlserver \ -# /opt/mssql-tools18/bin/sqlcmd \ -# -S localhost \ -# -U SA \ -# -P "$DB_PASSWORD" \ -# -C -Q "SELECT 1" && break -# sleep 2 -# done -# displayName: 'Pull & start SQL Server (Docker)' -# env: -# DB_PASSWORD: $(DB_PASSWORD) - -# # Run Pytest to ensure the bindings work correctly -# - script: | -# python -m pytest -v -# displayName: 'Run Pytest to validate bindings' -# env: -# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - -# # Build wheel package for universal2 -# - script: | -# python -m pip install --upgrade pip -# pip install wheel setuptools -# python setup.py bdist_wheel -# displayName: 'Build $(pythonVersion) universal2 whl' + # Python 3.10 (universal2 for both arm64 and x86_64) + py310_universal2: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'universal2' + + steps: + # Use correct Python version and architecture for the current job + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(pythonVersion)' + addToPath: true + displayName: 'Use Python $(pythonVersion) (Universal2)' + + # Install CMake on macOS + - script: | + brew update + brew install cmake + displayName: 'Install CMake' + + # Install required packages: pip, CMake, pybind11 + - script: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install cmake pybind11 + displayName: 'Install dependencies' + + # Build the .so file by calling build.sh + - script: | + echo "Python Version: $(pythonVersion)" + echo "Short Tag: $(shortPyVer)" + echo "Building Universal2 Binary" + cd "$(Build.SourcesDirectory)/mssql_python/pybind" + # Call build.sh to build the .so file + ./build.sh + displayName: 'Build .so file' + continueOnError: false + + # Copy the built .so file to staging folder for artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)/mssql_python' + Contents: '*.so' + TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' + displayName: 'Place .so file into artifacts directory' + + - script: | + brew update + brew install docker colima + + # Try VZ first, fallback to QEMU if it fails + # Use more conservative resource allocation for Azure DevOps runners + colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ + colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu + + # Set a timeout to ensure Colima starts properly + sleep 30 + + # Optional: set Docker context (usually automatic) + docker context use colima >/dev/null || true + + # Confirm Docker is operational + docker version + docker ps + displayName: 'Install and start Colima-based Docker' + timeoutInMinutes: 15 + + - script: | + # Pull and run SQL Server container + docker pull mcr.microsoft.com/mssql/server:2022-latest + docker run \ + --name sqlserver \ + -e ACCEPT_EULA=Y \ + -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ + -p 1433:1433 \ + -d mcr.microsoft.com/mssql/server:2022-latest + + # Starting SQL Server container… + for i in {1..30}; do + docker exec sqlserver \ + /opt/mssql-tools18/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P "$DB_PASSWORD" \ + -C -Q "SELECT 1" && break + sleep 2 + done + displayName: 'Pull & start SQL Server (Docker)' + env: + DB_PASSWORD: $(DB_PASSWORD) + + # Run Pytest to ensure the bindings work correctly + - script: | + python -m pytest -v + displayName: 'Run Pytest to validate bindings' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + + # Build wheel package for universal2 + - script: | + python -m pip install --upgrade pip + pip install wheel setuptools + python setup.py bdist_wheel + displayName: 'Build $(pythonVersion) universal2 whl' -# # Copy the wheel file to the artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)/dist' -# Contents: '*.whl' -# TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' -# displayName: 'Collect wheel package' + # Copy the wheel file to the artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)/dist' + Contents: '*.whl' + TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' + displayName: 'Collect wheel package' -# # Publish the collected .so file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish all .so files as artifacts' + # Publish the collected .so file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + publishLocation: 'Container' + displayName: 'Publish all .so files as artifacts' -# # Publish the collected wheel file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish all wheels as artifacts' - -# - job: BuildLinuxWheels -# displayName: 'Build Linux -' -# pool: { vmImage: 'ubuntu-latest' } -# timeoutInMinutes: 120 - -# strategy: -# matrix: -# manylinux_x86_64: -# LINUX_TAG: 'manylinux' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' -# manylinux_aarch64: -# LINUX_TAG: 'manylinux' -# ARCH: 'aarch64' -# DOCKER_PLATFORM: 'linux/arm64' -# IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' -# musllinux_x86_64: -# LINUX_TAG: 'musllinux' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' -# musllinux_aarch64: -# LINUX_TAG: 'musllinux' -# ARCH: 'aarch64' -# DOCKER_PLATFORM: 'linux/arm64' -# IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' - -# steps: -# - checkout: self -# fetchDepth: 0 - -# # Enable QEMU so we can run aarch64 containers on the x86_64 agent -# - script: | -# sudo docker run --rm --privileged tonistiigi/binfmt --install all -# displayName: 'Enable QEMU (for aarch64)' - -# # Prep artifact dirs -# - script: | -# rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings -# mkdir -p $(Build.ArtifactStagingDirectory)/dist -# mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) -# displayName: 'Prepare artifact directories' - -# # Start a long-lived container for this lane -# - script: | -# docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ -# --platform $(DOCKER_PLATFORM) \ -# -v $(Build.SourcesDirectory):/workspace \ -# -w /workspace \ -# $(IMAGE) \ -# tail -f /dev/null -# displayName: 'Start $(LINUX_TAG) $(ARCH) container' - -# # Install system build dependencies -# # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes -# # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk -# # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* -# # - ccache is optional but speeds rebuilds inside the container -# - script: | -# set -euxo pipefail -# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then -# # ===== manylinux (glibc) containers ===== -# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' -# set -euxo pipefail -# # Prefer dnf (Alma/Rocky base), fall back to yum if present -# if command -v dnf >/dev/null 2>&1; then -# dnf -y update || true -# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache -# dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true -# elif command -v yum >/dev/null 2>&1; then -# yum -y update || true -# yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true -# else -# echo "No dnf/yum found in manylinux image" >&2 -# fi - -# # Quick visibility for logs -# echo "---- tool versions ----" -# gcc --version || true -# cmake --version || true -# ' -# else -# # ===== musllinux (Alpine/musl) containers ===== -# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' -# set -euxo pipefail -# apk update || true -# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache -# apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true - -# # Quick visibility for logs -# echo "---- tool versions ----" -# gcc --version || true -# cmake --version || true -# ' -# fi -# displayName: 'Install system build dependencies' - -# # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters -# - script: | -# set -euxo pipefail -# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi - -# # Ensure dist exists inside the container -# docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' - -# # Loop through CPython versions present in the image -# for PYBIN in cp310 cp311 cp312 cp313; do -# echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" -# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then -# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " -# set -euxo pipefail; -# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; -# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present -# ln -sf \$PY /usr/local/bin/python; -# python -m pip install -U pip setuptools wheel pybind11; -# echo 'python:' \$(python -V); which python; -# # 👉 run from the directory that has CMakeLists.txt -# cd /workspace/mssql_python/pybind; -# bash build.sh; - -# # back to repo root to build the wheel -# cd /workspace; -# python setup.py bdist_wheel; - -# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification -# # We're assuming that this will be provided by OS and not bundled in the wheel -# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done -# " -# else -# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " -# set -euxo pipefail; -# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; -# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present -# ln -sf \$PY /usr/local/bin/python; -# python -m pip install -U pip setuptools wheel pybind11; -# echo 'python:' \$(python -V); which python; -# # 👉 run from the directory that has CMakeLists.txt -# cd /workspace/mssql_python/pybind; -# bash build.sh; - -# # back to repo root to build the wheel -# cd /workspace; -# python setup.py bdist_wheel; - -# # repair/tag wheel -# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification -# # We're assuming that this will be provided by OS and not bundled in the wheel -# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done -# " -# fi -# done -# displayName: 'Run build.sh and build wheels for cp310–cp313' - -# # Copy artifacts back to host -# - script: | -# set -euxo pipefail -# # ---- Wheels ---- -# docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" - -# # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- -# # Prepare host dest -# mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" - -# # Prepare a temp out dir inside the container -# docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' -# set -euxo pipefail; -# echo "Listing package dirs for sanity:"; -# ls -la /workspace/mssql_python || true; -# ls -la /workspace/mssql_python/pybind || true; - -# OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; -# rm -rf "$OUT"; mkdir -p "$OUT"; - -# # Copy ONLY top-level .so files from mssql_python (no recursion) -# find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true - -# echo "Top-level .so collected in $OUT:"; -# ls -la "$OUT" || true -# ' - -# # Copy those .so files from container to host -# docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ -# "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ -# || echo "No top-level .so files to copy" - -# # (Optional) prune non-.so just in case -# find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true -# displayName: 'Copy wheels and .so back to host' - -# # Cleanup container -# - script: | -# docker stop build-$(LINUX_TAG)-$(ARCH) || true -# docker rm build-$(LINUX_TAG)-$(ARCH) || true -# displayName: 'Clean up container' -# condition: always() - -# # Publish wheels (exact name you wanted) -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish wheels as artifacts' - -# # Publish compiled .so files (exact name you wanted) -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish .so files as artifacts' - -# # Job to test the built wheels on different Linux distributions with SQL Server -# - job: TestWheelsOnLinux -# displayName: 'Pytests on Linux -' -# dependsOn: BuildLinuxWheels -# condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded -# pool: { vmImage: 'ubuntu-latest' } -# timeoutInMinutes: 60 - -# strategy: -# matrix: -# # x86_64 -# debian12: -# BASE_IMAGE: 'debian:12-slim' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# rhel_ubi9: -# BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# alpine320: -# BASE_IMAGE: 'alpine:3.20' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# # arm64 -# debian12_arm64: -# BASE_IMAGE: 'debian:12-slim' -# ARCH: 'arm64' -# DOCKER_PLATFORM: 'linux/arm64' -# rhel_ubi9_arm64: -# BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' -# ARCH: 'arm64' -# DOCKER_PLATFORM: 'linux/arm64' -# alpine320_arm64: -# BASE_IMAGE: 'alpine:3.20' -# ARCH: 'arm64' -# DOCKER_PLATFORM: 'linux/arm64' - -# steps: -# - checkout: self - -# - task: DownloadBuildArtifacts@0 -# inputs: -# buildType: 'current' -# downloadType: 'single' -# artifactName: 'mssql-python-wheels-dist' -# downloadPath: '$(System.ArtifactsDirectory)' -# displayName: 'Download wheel artifacts from current build' - -# # Verify we actually have wheels before proceeding -# - script: | -# set -euxo pipefail -# WHEEL_DIR="$(System.ArtifactsDirectory)/mssql-python-wheels-dist" -# if [ ! -d "$WHEEL_DIR" ] || [ -z "$(ls -A $WHEEL_DIR/*.whl 2>/dev/null)" ]; then -# echo "ERROR: No wheel files found in $WHEEL_DIR" -# echo "Contents of artifacts directory:" -# find "$(System.ArtifactsDirectory)" -type f -name "*.whl" || echo "No .whl files found anywhere" -# exit 1 -# fi -# echo "Found wheel files:" -# ls -la "$WHEEL_DIR"/*.whl -# displayName: 'Verify wheel artifacts exist' - -# # Start SQL Server container for testing -# - script: | -# set -euxo pipefail -# docker run -d --name sqlserver \ -# --network bridge \ -# -e ACCEPT_EULA=Y \ -# -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ -# -p 1433:1433 \ -# mcr.microsoft.com/mssql/server:2022-latest - -# # Wait for SQL Server to be ready -# echo "Waiting for SQL Server to start..." -# for i in {1..30}; do -# if docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ -# -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then -# echo "SQL Server is ready!" -# break -# fi -# echo "Attempt $i/30: SQL Server not ready yet..." -# sleep 3 -# done - -# # Create test database -# docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ -# -S localhost -U SA -P "$(DB_PASSWORD)" -C \ -# -Q "CREATE DATABASE TestDB" -# displayName: 'Start SQL Server and create test database' -# env: -# DB_PASSWORD: $(DB_PASSWORD) - -# # Test wheels on target OS -# - script: | -# set -euxo pipefail + # Publish the collected wheel file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' + ArtifactName: 'mssql-python-wheels-dist' + publishLocation: 'Container' + displayName: 'Publish all wheels as artifacts' + +- job: BuildLinuxWheels + displayName: 'Build Linux -' + pool: { vmImage: 'ubuntu-latest' } + timeoutInMinutes: 120 + + strategy: + matrix: + manylinux_x86_64: + LINUX_TAG: 'manylinux' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' + manylinux_aarch64: + LINUX_TAG: 'manylinux' + ARCH: 'aarch64' + DOCKER_PLATFORM: 'linux/arm64' + IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' + musllinux_x86_64: + LINUX_TAG: 'musllinux' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' + musllinux_aarch64: + LINUX_TAG: 'musllinux' + ARCH: 'aarch64' + DOCKER_PLATFORM: 'linux/arm64' + IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' + + steps: + - checkout: self + fetchDepth: 0 + + # Enable QEMU so we can run aarch64 containers on the x86_64 agent + - script: | + sudo docker run --rm --privileged tonistiigi/binfmt --install all + displayName: 'Enable QEMU (for aarch64)' + + # Prep artifact dirs + - script: | + rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings + mkdir -p $(Build.ArtifactStagingDirectory)/dist + mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) + displayName: 'Prepare artifact directories' + + # Start a long-lived container for this lane + - script: | + docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ + --platform $(DOCKER_PLATFORM) \ + -v $(Build.SourcesDirectory):/workspace \ + -w /workspace \ + $(IMAGE) \ + tail -f /dev/null + displayName: 'Start $(LINUX_TAG) $(ARCH) container' + + # Install system build dependencies + # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes + # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk + # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* + # - ccache is optional but speeds rebuilds inside the container + - script: | + set -euxo pipefail + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then + # ===== manylinux (glibc) containers ===== + docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' + set -euxo pipefail + # Prefer dnf (Alma/Rocky base), fall back to yum if present + if command -v dnf >/dev/null 2>&1; then + dnf -y update || true + # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache + dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true + elif command -v yum >/dev/null 2>&1; then + yum -y update || true + yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true + else + echo "No dnf/yum found in manylinux image" >&2 + fi + + # Quick visibility for logs + echo "---- tool versions ----" + gcc --version || true + cmake --version || true + ' + else + # ===== musllinux (Alpine/musl) containers ===== + docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' + set -euxo pipefail + apk update || true + # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache + apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true + + # Quick visibility for logs + echo "---- tool versions ----" + gcc --version || true + cmake --version || true + ' + fi + displayName: 'Install system build dependencies' + + # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters + - script: | + set -euxo pipefail + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi + + # Ensure dist exists inside the container + docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' + + # Loop through CPython versions present in the image + for PYBIN in cp310 cp311 cp312 cp313; do + echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then + docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " + set -euxo pipefail; + PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; + test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present + ln -sf \$PY /usr/local/bin/python; + python -m pip install -U pip setuptools wheel pybind11; + echo 'python:' \$(python -V); which python; + # 👉 run from the directory that has CMakeLists.txt + cd /workspace/mssql_python/pybind; + bash build.sh; + + # back to repo root to build the wheel + cd /workspace; + python setup.py bdist_wheel; + + # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification + # We're assuming that this will be provided by OS and not bundled in the wheel + # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done + " + else + docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " + set -euxo pipefail; + PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; + test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present + ln -sf \$PY /usr/local/bin/python; + python -m pip install -U pip setuptools wheel pybind11; + echo 'python:' \$(python -V); which python; + # 👉 run from the directory that has CMakeLists.txt + cd /workspace/mssql_python/pybind; + bash build.sh; + + # back to repo root to build the wheel + cd /workspace; + python setup.py bdist_wheel; + + # repair/tag wheel + # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification + # We're assuming that this will be provided by OS and not bundled in the wheel + # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done + " + fi + done + displayName: 'Run build.sh and build wheels for cp310–cp313' + + # Copy artifacts back to host + - script: | + set -euxo pipefail + # ---- Wheels ---- + docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" + + # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- + # Prepare host dest + mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" + + # Prepare a temp out dir inside the container + docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' + set -euxo pipefail; + echo "Listing package dirs for sanity:"; + ls -la /workspace/mssql_python || true; + ls -la /workspace/mssql_python/pybind || true; + + OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; + rm -rf "$OUT"; mkdir -p "$OUT"; + + # Copy ONLY top-level .so files from mssql_python (no recursion) + find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true + + echo "Top-level .so collected in $OUT:"; + ls -la "$OUT" || true + ' + + # Copy those .so files from container to host + docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ + "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ + || echo "No top-level .so files to copy" + + # (Optional) prune non-.so just in case + find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true + displayName: 'Copy wheels and .so back to host' + + # Cleanup container + - script: | + docker stop build-$(LINUX_TAG)-$(ARCH) || true + docker rm build-$(LINUX_TAG)-$(ARCH) || true + displayName: 'Clean up container' + condition: always() + + # Publish wheels (exact name you wanted) + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' + ArtifactName: 'mssql-python-wheels-dist' + publishLocation: 'Container' + displayName: 'Publish wheels as artifacts' + + # Publish compiled .so files (exact name you wanted) + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + publishLocation: 'Container' + displayName: 'Publish .so files as artifacts' + +# Job to test the built wheels on different Linux distributions with SQL Server +- job: TestWheelsOnLinux + displayName: 'Pytests on Linux -' + dependsOn: BuildLinuxWheels + condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded + pool: { vmImage: 'ubuntu-latest' } + timeoutInMinutes: 60 + + strategy: + matrix: + # x86_64 + debian12: + BASE_IMAGE: 'debian:12-slim' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + rhel_ubi9: + BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + alpine320: + BASE_IMAGE: 'alpine:3.20' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + # arm64 + debian12_arm64: + BASE_IMAGE: 'debian:12-slim' + ARCH: 'arm64' + DOCKER_PLATFORM: 'linux/arm64' + rhel_ubi9_arm64: + BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' + ARCH: 'arm64' + DOCKER_PLATFORM: 'linux/arm64' + alpine320_arm64: + BASE_IMAGE: 'alpine:3.20' + ARCH: 'arm64' + DOCKER_PLATFORM: 'linux/arm64' + + steps: + - checkout: self + + - task: DownloadBuildArtifacts@0 + inputs: + buildType: 'current' + downloadType: 'single' + artifactName: 'mssql-python-wheels-dist' + downloadPath: '$(System.ArtifactsDirectory)' + displayName: 'Download wheel artifacts from current build' + + # Verify we actually have wheels before proceeding + - script: | + set -euxo pipefail + WHEEL_DIR="$(System.ArtifactsDirectory)/mssql-python-wheels-dist" + if [ ! -d "$WHEEL_DIR" ] || [ -z "$(ls -A $WHEEL_DIR/*.whl 2>/dev/null)" ]; then + echo "ERROR: No wheel files found in $WHEEL_DIR" + echo "Contents of artifacts directory:" + find "$(System.ArtifactsDirectory)" -type f -name "*.whl" || echo "No .whl files found anywhere" + exit 1 + fi + echo "Found wheel files:" + ls -la "$WHEEL_DIR"/*.whl + displayName: 'Verify wheel artifacts exist' + + # Start SQL Server container for testing + - script: | + set -euxo pipefail + docker run -d --name sqlserver \ + --network bridge \ + -e ACCEPT_EULA=Y \ + -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ + -p 1433:1433 \ + mcr.microsoft.com/mssql/server:2022-latest + + # Wait for SQL Server to be ready + echo "Waiting for SQL Server to start..." + for i in {1..30}; do + if docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ + -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then + echo "SQL Server is ready!" + break + fi + echo "Attempt $i/30: SQL Server not ready yet..." + sleep 3 + done + + # Create test database + docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ + -S localhost -U SA -P "$(DB_PASSWORD)" -C \ + -Q "CREATE DATABASE TestDB" + displayName: 'Start SQL Server and create test database' + env: + DB_PASSWORD: $(DB_PASSWORD) + + # Test wheels on target OS + - script: | + set -euxo pipefail -# # Enable QEMU for ARM64 architectures -# if [[ "$(ARCH)" == "arm64" ]] || [[ "$(ARCH)" == "aarch64" ]]; then -# sudo docker run --rm --privileged tonistiigi/binfmt --install all -# fi + # Enable QEMU for ARM64 architectures + if [[ "$(ARCH)" == "arm64" ]] || [[ "$(ARCH)" == "aarch64" ]]; then + sudo docker run --rm --privileged tonistiigi/binfmt --install all + fi -# # Start test container with retry logic -# for i in {1..3}; do -# if docker run -d --name test-$(ARCH) \ -# --platform $(DOCKER_PLATFORM) \ -# --network bridge \ -# -v $(System.ArtifactsDirectory):/artifacts:ro \ -# $(BASE_IMAGE) \ -# tail -f /dev/null; then -# echo "Container started successfully on attempt $i" -# break -# else -# echo "Failed to start container on attempt $i, retrying..." -# docker rm test-$(ARCH) 2>/dev/null || true -# sleep 5 -# fi -# done - -# # Verify container is running -# if ! docker ps | grep -q test-$(ARCH); then -# echo "ERROR: Container test-$(ARCH) is not running" -# docker logs test-$(ARCH) || true -# exit 1 -# fi - -# # Install Python and dependencies based on OS -# if [[ "$(BASE_IMAGE)" == alpine* ]]; then -# echo "Setting up Alpine Linux..." -# docker exec test-$(ARCH) sh -c " -# apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs -# python3 -m venv /venv -# /venv/bin/pip install pytest -# " -# PY_CMD="/venv/bin/python" -# elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then -# echo "Setting up RHEL-based system..." -# docker exec test-$(ARCH) bash -c " -# set -euo pipefail -# echo 'Installing Python on UBI/RHEL...' -# if command -v dnf >/dev/null; then -# dnf clean all -# rm -rf /var/cache/dnf -# dnf -y makecache - -# dnf list --showduplicates python3.11 python3.12 || true - -# # NOTE: do NOT install 'curl' to avoid curl-minimal conflict -# if dnf -y install python3.12 python3.12-pip unixODBC-devel; then -# PY=python3.12 -# echo 'Installed Python 3.12' -# elif dnf -y install python3.11 python3.11-pip unixODBC-devel; then -# PY=python3.11 -# echo 'Installed Python 3.11' -# else -# dnf -y install python3 python3-pip unixODBC-devel -# PY=python3 -# echo 'Falling back to default Python' -# fi - -# \$PY -m venv /venv -# /venv/bin/python -m pip install -U 'pip>=25' pytest -# /venv/bin/python --version -# /venv/bin/pip --version -# else -# echo 'ERROR: dnf not found' -# exit 1 -# fi -# " -# PY_CMD="/venv/bin/python" -# else -# echo "Setting up Debian/Ubuntu..." -# docker exec test-$(ARCH) bash -c " -# export DEBIAN_FRONTEND=noninteractive -# apt-get update -# apt-get install -y python3 python3-pip python3-venv python3-full unixodbc-dev curl -# python3 -m venv /venv -# /venv/bin/pip install pytest -# " -# PY_CMD="/venv/bin/python" -# fi - -# # Install the wheel (find the appropriate one for this architecture) -# if [[ "$(BASE_IMAGE)" == alpine* ]]; then -# SHELL_CMD="sh -c" -# WHEEL_PATTERN="*musllinux*$(ARCH)*.whl" -# else -# SHELL_CMD="bash -c" -# WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" -# fi - -# # Install the appropriate wheel in isolated directory -# docker exec test-$(ARCH) $SHELL_CMD " -# # Create isolated directory for wheel testing -# mkdir -p /test_whl -# cd /test_whl + # Start test container with retry logic + for i in {1..3}; do + if docker run -d --name test-$(ARCH) \ + --platform $(DOCKER_PLATFORM) \ + --network bridge \ + -v $(System.ArtifactsDirectory):/artifacts:ro \ + $(BASE_IMAGE) \ + tail -f /dev/null; then + echo "Container started successfully on attempt $i" + break + else + echo "Failed to start container on attempt $i, retrying..." + docker rm test-$(ARCH) 2>/dev/null || true + sleep 5 + fi + done + + # Verify container is running + if ! docker ps | grep -q test-$(ARCH); then + echo "ERROR: Container test-$(ARCH) is not running" + docker logs test-$(ARCH) || true + exit 1 + fi + + # Install Python and dependencies based on OS + if [[ "$(BASE_IMAGE)" == alpine* ]]; then + echo "Setting up Alpine Linux..." + docker exec test-$(ARCH) sh -c " + apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs + python3 -m venv /venv + /venv/bin/pip install pytest + " + PY_CMD="/venv/bin/python" + elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then + echo "Setting up RHEL-based system..." + docker exec test-$(ARCH) bash -c " + set -euo pipefail + echo 'Installing Python on UBI/RHEL...' + if command -v dnf >/dev/null; then + dnf clean all + rm -rf /var/cache/dnf + dnf -y makecache + + dnf list --showduplicates python3.11 python3.12 || true + + # NOTE: do NOT install 'curl' to avoid curl-minimal conflict + if dnf -y install python3.12 python3.12-pip unixODBC-devel; then + PY=python3.12 + echo 'Installed Python 3.12' + elif dnf -y install python3.11 python3.11-pip unixODBC-devel; then + PY=python3.11 + echo 'Installed Python 3.11' + else + dnf -y install python3 python3-pip unixODBC-devel + PY=python3 + echo 'Falling back to default Python' + fi + + \$PY -m venv /venv + /venv/bin/python -m pip install -U 'pip>=25' pytest + /venv/bin/python --version + /venv/bin/pip --version + else + echo 'ERROR: dnf not found' + exit 1 + fi + " + PY_CMD="/venv/bin/python" + else + echo "Setting up Debian/Ubuntu..." + docker exec test-$(ARCH) bash -c " + export DEBIAN_FRONTEND=noninteractive + apt-get update + apt-get install -y python3 python3-pip python3-venv python3-full unixodbc-dev curl + python3 -m venv /venv + /venv/bin/pip install pytest + " + PY_CMD="/venv/bin/python" + fi + + # Install the wheel (find the appropriate one for this architecture) + if [[ "$(BASE_IMAGE)" == alpine* ]]; then + SHELL_CMD="sh -c" + WHEEL_PATTERN="*musllinux*$(ARCH)*.whl" + else + SHELL_CMD="bash -c" + WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" + fi + + # Install the appropriate wheel in isolated directory + docker exec test-$(ARCH) $SHELL_CMD " + # Create isolated directory for wheel testing + mkdir -p /test_whl + cd /test_whl -# echo 'Available wheels:' -# ls -la /artifacts/mssql-python-wheels-dist/*.whl -# echo 'Installing package (letting pip auto-select in isolated environment):' -# $PY_CMD -m pip install mssql_python --find-links /artifacts/mssql-python-wheels-dist --no-index --no-deps + echo 'Available wheels:' + ls -la /artifacts/mssql-python-wheels-dist/*.whl + echo 'Installing package (letting pip auto-select in isolated environment):' + $PY_CMD -m pip install mssql_python --find-links /artifacts/mssql-python-wheels-dist --no-index --no-deps -# # Verify package installation location -# echo 'Installed package location:' -# $PY_CMD -c 'import mssql_python; print(\"Package location:\", mssql_python.__file__)' + # Verify package installation location + echo 'Installed package location:' + $PY_CMD -c 'import mssql_python; print(\"Package location:\", mssql_python.__file__)' -# # Test basic import -# $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' -# " + # Test basic import + $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' + " -# displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' -# env: -# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' -# # Run pytest with source code while testing installed wheel -# - script: | -# set -euxo pipefail + # Run pytest with source code while testing installed wheel + - script: | + set -euxo pipefail -# # Copy source code to container for pytest -# echo "Copying source code to container for pytest..." -# docker cp $(Build.SourcesDirectory)/. test-$(ARCH):/workspace/ + # Copy source code to container for pytest + echo "Copying source code to container for pytest..." + docker cp $(Build.SourcesDirectory)/. test-$(ARCH):/workspace/ -# # Set shell command based on OS and define Python command -# if [[ "$(BASE_IMAGE)" == alpine* ]]; then -# SHELL_CMD="sh -c" -# PY_CMD="/venv/bin/python" -# else -# SHELL_CMD="bash -c" -# PY_CMD="/venv/bin/python" -# fi + # Set shell command based on OS and define Python command + if [[ "$(BASE_IMAGE)" == alpine* ]]; then + SHELL_CMD="sh -c" + PY_CMD="/venv/bin/python" + else + SHELL_CMD="bash -c" + PY_CMD="/venv/bin/python" + fi -# docker exec test-$(ARCH) $SHELL_CMD " -# # Go to workspace root where source code is -# cd /workspace + docker exec test-$(ARCH) $SHELL_CMD " + # Go to workspace root where source code is + cd /workspace -# echo 'Running pytest suite with installed wheel...' -# echo 'Current directory:' \$(pwd) -# echo 'Python version:' -# $PY_CMD --version + echo 'Running pytest suite with installed wheel...' + echo 'Current directory:' \$(pwd) + echo 'Python version:' + $PY_CMD --version -# # Verify we're importing the installed wheel, not local source -# echo 'Package import verification:' -# $PY_CMD -c 'import mssql_python; print(\"Testing installed wheel from:\", mssql_python.__file__)' + # Verify we're importing the installed wheel, not local source + echo 'Package import verification:' + $PY_CMD -c 'import mssql_python; print(\"Testing installed wheel from:\", mssql_python.__file__)' -# # Install test requirements -# if [ -f requirements.txt ]; then -# echo 'Installing test requirements...' -# $PY_CMD -m pip install -r requirements.txt || echo 'Failed to install some requirements' -# fi + # Install test requirements + if [ -f requirements.txt ]; then + echo 'Installing test requirements...' + $PY_CMD -m pip install -r requirements.txt || echo 'Failed to install some requirements' + fi -# # Ensure pytest is available -# $PY_CMD -m pip install pytest || echo 'pytest installation failed' + # Ensure pytest is available + $PY_CMD -m pip install pytest || echo 'pytest installation failed' -# # List available test files -# echo 'Available test files:' -# find tests/ -name 'test_*.py' 2>/dev/null || echo 'No test files found in tests/' + # List available test files + echo 'Available test files:' + find tests/ -name 'test_*.py' 2>/dev/null || echo 'No test files found in tests/' -# # Run pytest -# if [ -d tests/ ]; then -# echo 'Starting pytest...' -# $PY_CMD -m pytest -v || echo 'Some tests failed - this may be expected in containerized environment' -# else -# echo 'No tests directory found, skipping pytest' -# fi -# " -# displayName: 'Run pytest suite on $(BASE_IMAGE) $(ARCH)' -# env: -# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' -# continueOnError: true # Don't fail pipeline if tests fail - -# # Cleanup -# - script: | -# docker stop test-$(ARCH) sqlserver || true -# docker rm test-$(ARCH) sqlserver || true -# displayName: 'Cleanup containers' -# condition: always() + # Run pytest + if [ -d tests/ ]; then + echo 'Starting pytest...' + $PY_CMD -m pytest -v || echo 'Some tests failed - this may be expected in containerized environment' + else + echo 'No tests directory found, skipping pytest' + fi + " + displayName: 'Run pytest suite on $(BASE_IMAGE) $(ARCH)' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + continueOnError: true # Don't fail pipeline if tests fail + + # Cleanup + - script: | + docker stop test-$(ARCH) sqlserver || true + docker rm test-$(ARCH) sqlserver || true + displayName: 'Cleanup containers' + condition: always() From 8f9d377107f98e299151c21aea74b13f92397b89 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 18:19:17 +0530 Subject: [PATCH 91/93] testing again with correct build ID --- eng/pipelines/build-whl-pipeline.yml | 1262 +++++++++++++------------- 1 file changed, 632 insertions(+), 630 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index a7e2a87b8..9db4dfac3 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -105,15 +105,17 @@ jobs: env: DB_PASSWORD: $(DB_PASSWORD) - - task: DownloadPipelineArtifact@2 + - task: DownloadBuildArtifacts@0 condition: eq(variables['targetArch'], 'arm64') inputs: buildType: 'specific' project: '$(System.TeamProject)' definition: 2162 - buildVersionToDownload: 'latest' + specificBuildWithTriggering: true + buildVersionToDownload: 'specific' + buildId: '122430' artifactName: 'mssql-python-arm64-libs' - targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' + downloadPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' displayName: 'Download ARM64 Python libs from latest successful run on branches' # Build the PYD file by calling build.bat @@ -214,651 +216,651 @@ jobs: publishLocation: 'Container' displayName: 'Publish all wheels as artifacts' -- job: BuildMacOSWheels - # Use the latest macOS image for building - pool: - vmImage: 'macos-latest' - # Display name for the job in Azure DevOps UI - displayName: 'Build macOS - ' - strategy: - matrix: - # Python 3.13 (universal2 for both arm64 and x86_64) - py313_universal2: - pythonVersion: '3.13' - shortPyVer: '313' - # Always use universal2 for macOS - targetArch: 'universal2' +# - job: BuildMacOSWheels +# # Use the latest macOS image for building +# pool: +# vmImage: 'macos-latest' +# # Display name for the job in Azure DevOps UI +# displayName: 'Build macOS - ' +# strategy: +# matrix: +# # Python 3.13 (universal2 for both arm64 and x86_64) +# py313_universal2: +# pythonVersion: '3.13' +# shortPyVer: '313' +# # Always use universal2 for macOS +# targetArch: 'universal2' - # Python 3.12 (universal2 for both arm64 and x86_64) - py312_universal2: - pythonVersion: '3.12' - shortPyVer: '312' - targetArch: 'universal2' - - # Python 3.11 (universal2 for both arm64 and x86_64) - py311_universal2: - pythonVersion: '3.11' - shortPyVer: '311' - targetArch: 'universal2' +# # Python 3.12 (universal2 for both arm64 and x86_64) +# py312_universal2: +# pythonVersion: '3.12' +# shortPyVer: '312' +# targetArch: 'universal2' + +# # Python 3.11 (universal2 for both arm64 and x86_64) +# py311_universal2: +# pythonVersion: '3.11' +# shortPyVer: '311' +# targetArch: 'universal2' - # Python 3.10 (universal2 for both arm64 and x86_64) - py310_universal2: - pythonVersion: '3.10' - shortPyVer: '310' - targetArch: 'universal2' - - steps: - # Use correct Python version and architecture for the current job - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(pythonVersion)' - addToPath: true - displayName: 'Use Python $(pythonVersion) (Universal2)' - - # Install CMake on macOS - - script: | - brew update - brew install cmake - displayName: 'Install CMake' - - # Install required packages: pip, CMake, pybind11 - - script: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install cmake pybind11 - displayName: 'Install dependencies' - - # Build the .so file by calling build.sh - - script: | - echo "Python Version: $(pythonVersion)" - echo "Short Tag: $(shortPyVer)" - echo "Building Universal2 Binary" - cd "$(Build.SourcesDirectory)/mssql_python/pybind" - # Call build.sh to build the .so file - ./build.sh - displayName: 'Build .so file' - continueOnError: false - - # Copy the built .so file to staging folder for artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)/mssql_python' - Contents: '*.so' - TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' - displayName: 'Place .so file into artifacts directory' - - - script: | - brew update - brew install docker colima - - # Try VZ first, fallback to QEMU if it fails - # Use more conservative resource allocation for Azure DevOps runners - colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ - colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu - - # Set a timeout to ensure Colima starts properly - sleep 30 - - # Optional: set Docker context (usually automatic) - docker context use colima >/dev/null || true - - # Confirm Docker is operational - docker version - docker ps - displayName: 'Install and start Colima-based Docker' - timeoutInMinutes: 15 - - - script: | - # Pull and run SQL Server container - docker pull mcr.microsoft.com/mssql/server:2022-latest - docker run \ - --name sqlserver \ - -e ACCEPT_EULA=Y \ - -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ - -p 1433:1433 \ - -d mcr.microsoft.com/mssql/server:2022-latest - - # Starting SQL Server container… - for i in {1..30}; do - docker exec sqlserver \ - /opt/mssql-tools18/bin/sqlcmd \ - -S localhost \ - -U SA \ - -P "$DB_PASSWORD" \ - -C -Q "SELECT 1" && break - sleep 2 - done - displayName: 'Pull & start SQL Server (Docker)' - env: - DB_PASSWORD: $(DB_PASSWORD) - - # Run Pytest to ensure the bindings work correctly - - script: | - python -m pytest -v - displayName: 'Run Pytest to validate bindings' - env: - DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - - # Build wheel package for universal2 - - script: | - python -m pip install --upgrade pip - pip install wheel setuptools - python setup.py bdist_wheel - displayName: 'Build $(pythonVersion) universal2 whl' +# # Python 3.10 (universal2 for both arm64 and x86_64) +# py310_universal2: +# pythonVersion: '3.10' +# shortPyVer: '310' +# targetArch: 'universal2' + +# steps: +# # Use correct Python version and architecture for the current job +# - task: UsePythonVersion@0 +# inputs: +# versionSpec: '$(pythonVersion)' +# addToPath: true +# displayName: 'Use Python $(pythonVersion) (Universal2)' + +# # Install CMake on macOS +# - script: | +# brew update +# brew install cmake +# displayName: 'Install CMake' + +# # Install required packages: pip, CMake, pybind11 +# - script: | +# python -m pip install --upgrade pip +# pip install -r requirements.txt +# pip install cmake pybind11 +# displayName: 'Install dependencies' + +# # Build the .so file by calling build.sh +# - script: | +# echo "Python Version: $(pythonVersion)" +# echo "Short Tag: $(shortPyVer)" +# echo "Building Universal2 Binary" +# cd "$(Build.SourcesDirectory)/mssql_python/pybind" +# # Call build.sh to build the .so file +# ./build.sh +# displayName: 'Build .so file' +# continueOnError: false + +# # Copy the built .so file to staging folder for artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)/mssql_python' +# Contents: '*.so' +# TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' +# displayName: 'Place .so file into artifacts directory' + +# - script: | +# brew update +# brew install docker colima + +# # Try VZ first, fallback to QEMU if it fails +# # Use more conservative resource allocation for Azure DevOps runners +# colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ +# colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu + +# # Set a timeout to ensure Colima starts properly +# sleep 30 + +# # Optional: set Docker context (usually automatic) +# docker context use colima >/dev/null || true + +# # Confirm Docker is operational +# docker version +# docker ps +# displayName: 'Install and start Colima-based Docker' +# timeoutInMinutes: 15 + +# - script: | +# # Pull and run SQL Server container +# docker pull mcr.microsoft.com/mssql/server:2022-latest +# docker run \ +# --name sqlserver \ +# -e ACCEPT_EULA=Y \ +# -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ +# -p 1433:1433 \ +# -d mcr.microsoft.com/mssql/server:2022-latest + +# # Starting SQL Server container… +# for i in {1..30}; do +# docker exec sqlserver \ +# /opt/mssql-tools18/bin/sqlcmd \ +# -S localhost \ +# -U SA \ +# -P "$DB_PASSWORD" \ +# -C -Q "SELECT 1" && break +# sleep 2 +# done +# displayName: 'Pull & start SQL Server (Docker)' +# env: +# DB_PASSWORD: $(DB_PASSWORD) + +# # Run Pytest to ensure the bindings work correctly +# - script: | +# python -m pytest -v +# displayName: 'Run Pytest to validate bindings' +# env: +# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + +# # Build wheel package for universal2 +# - script: | +# python -m pip install --upgrade pip +# pip install wheel setuptools +# python setup.py bdist_wheel +# displayName: 'Build $(pythonVersion) universal2 whl' - # Copy the wheel file to the artifacts - - task: CopyFiles@2 - inputs: - SourceFolder: '$(Build.SourcesDirectory)/dist' - Contents: '*.whl' - TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' - displayName: 'Collect wheel package' +# # Copy the wheel file to the artifacts +# - task: CopyFiles@2 +# inputs: +# SourceFolder: '$(Build.SourcesDirectory)/dist' +# Contents: '*.whl' +# TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' +# displayName: 'Collect wheel package' - # Publish the collected .so file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish all .so files as artifacts' +# # Publish the collected .so file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish all .so files as artifacts' - # Publish the collected wheel file(s) as build artifacts - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' - ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish all wheels as artifacts' - -- job: BuildLinuxWheels - displayName: 'Build Linux -' - pool: { vmImage: 'ubuntu-latest' } - timeoutInMinutes: 120 - - strategy: - matrix: - manylinux_x86_64: - LINUX_TAG: 'manylinux' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' - manylinux_aarch64: - LINUX_TAG: 'manylinux' - ARCH: 'aarch64' - DOCKER_PLATFORM: 'linux/arm64' - IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' - musllinux_x86_64: - LINUX_TAG: 'musllinux' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' - musllinux_aarch64: - LINUX_TAG: 'musllinux' - ARCH: 'aarch64' - DOCKER_PLATFORM: 'linux/arm64' - IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' - - steps: - - checkout: self - fetchDepth: 0 - - # Enable QEMU so we can run aarch64 containers on the x86_64 agent - - script: | - sudo docker run --rm --privileged tonistiigi/binfmt --install all - displayName: 'Enable QEMU (for aarch64)' - - # Prep artifact dirs - - script: | - rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings - mkdir -p $(Build.ArtifactStagingDirectory)/dist - mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) - displayName: 'Prepare artifact directories' - - # Start a long-lived container for this lane - - script: | - docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ - --platform $(DOCKER_PLATFORM) \ - -v $(Build.SourcesDirectory):/workspace \ - -w /workspace \ - $(IMAGE) \ - tail -f /dev/null - displayName: 'Start $(LINUX_TAG) $(ARCH) container' - - # Install system build dependencies - # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes - # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk - # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* - # - ccache is optional but speeds rebuilds inside the container - - script: | - set -euxo pipefail - if [[ "$(LINUX_TAG)" == "manylinux" ]]; then - # ===== manylinux (glibc) containers ===== - docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' - set -euxo pipefail - # Prefer dnf (Alma/Rocky base), fall back to yum if present - if command -v dnf >/dev/null 2>&1; then - dnf -y update || true - # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache - dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true - elif command -v yum >/dev/null 2>&1; then - yum -y update || true - yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true - else - echo "No dnf/yum found in manylinux image" >&2 - fi - - # Quick visibility for logs - echo "---- tool versions ----" - gcc --version || true - cmake --version || true - ' - else - # ===== musllinux (Alpine/musl) containers ===== - docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' - set -euxo pipefail - apk update || true - # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache - apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true - - # Quick visibility for logs - echo "---- tool versions ----" - gcc --version || true - cmake --version || true - ' - fi - displayName: 'Install system build dependencies' - - # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters - - script: | - set -euxo pipefail - if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi - - # Ensure dist exists inside the container - docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' - - # Loop through CPython versions present in the image - for PYBIN in cp310 cp311 cp312 cp313; do - echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" - if [[ "$(LINUX_TAG)" == "manylinux" ]]; then - docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " - set -euxo pipefail; - PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; - test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present - ln -sf \$PY /usr/local/bin/python; - python -m pip install -U pip setuptools wheel pybind11; - echo 'python:' \$(python -V); which python; - # 👉 run from the directory that has CMakeLists.txt - cd /workspace/mssql_python/pybind; - bash build.sh; - - # back to repo root to build the wheel - cd /workspace; - python setup.py bdist_wheel; - - # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification - # We're assuming that this will be provided by OS and not bundled in the wheel - # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done - " - else - docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " - set -euxo pipefail; - PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; - test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present - ln -sf \$PY /usr/local/bin/python; - python -m pip install -U pip setuptools wheel pybind11; - echo 'python:' \$(python -V); which python; - # 👉 run from the directory that has CMakeLists.txt - cd /workspace/mssql_python/pybind; - bash build.sh; - - # back to repo root to build the wheel - cd /workspace; - python setup.py bdist_wheel; - - # repair/tag wheel - # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification - # We're assuming that this will be provided by OS and not bundled in the wheel - # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done - " - fi - done - displayName: 'Run build.sh and build wheels for cp310–cp313' - - # Copy artifacts back to host - - script: | - set -euxo pipefail - # ---- Wheels ---- - docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" - - # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- - # Prepare host dest - mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" - - # Prepare a temp out dir inside the container - docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' - set -euxo pipefail; - echo "Listing package dirs for sanity:"; - ls -la /workspace/mssql_python || true; - ls -la /workspace/mssql_python/pybind || true; - - OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; - rm -rf "$OUT"; mkdir -p "$OUT"; - - # Copy ONLY top-level .so files from mssql_python (no recursion) - find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true - - echo "Top-level .so collected in $OUT:"; - ls -la "$OUT" || true - ' - - # Copy those .so files from container to host - docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ - "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ - || echo "No top-level .so files to copy" - - # (Optional) prune non-.so just in case - find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true - displayName: 'Copy wheels and .so back to host' - - # Cleanup container - - script: | - docker stop build-$(LINUX_TAG)-$(ARCH) || true - docker rm build-$(LINUX_TAG)-$(ARCH) || true - displayName: 'Clean up container' - condition: always() - - # Publish wheels (exact name you wanted) - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' - ArtifactName: 'mssql-python-wheels-dist' - publishLocation: 'Container' - displayName: 'Publish wheels as artifacts' - - # Publish compiled .so files (exact name you wanted) - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' - ArtifactName: 'mssql-python-ddbc-bindings' - publishLocation: 'Container' - displayName: 'Publish .so files as artifacts' - -# Job to test the built wheels on different Linux distributions with SQL Server -- job: TestWheelsOnLinux - displayName: 'Pytests on Linux -' - dependsOn: BuildLinuxWheels - condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded - pool: { vmImage: 'ubuntu-latest' } - timeoutInMinutes: 60 - - strategy: - matrix: - # x86_64 - debian12: - BASE_IMAGE: 'debian:12-slim' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - rhel_ubi9: - BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - alpine320: - BASE_IMAGE: 'alpine:3.20' - ARCH: 'x86_64' - DOCKER_PLATFORM: 'linux/amd64' - # arm64 - debian12_arm64: - BASE_IMAGE: 'debian:12-slim' - ARCH: 'arm64' - DOCKER_PLATFORM: 'linux/arm64' - rhel_ubi9_arm64: - BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' - ARCH: 'arm64' - DOCKER_PLATFORM: 'linux/arm64' - alpine320_arm64: - BASE_IMAGE: 'alpine:3.20' - ARCH: 'arm64' - DOCKER_PLATFORM: 'linux/arm64' - - steps: - - checkout: self - - - task: DownloadBuildArtifacts@0 - inputs: - buildType: 'current' - downloadType: 'single' - artifactName: 'mssql-python-wheels-dist' - downloadPath: '$(System.ArtifactsDirectory)' - displayName: 'Download wheel artifacts from current build' - - # Verify we actually have wheels before proceeding - - script: | - set -euxo pipefail - WHEEL_DIR="$(System.ArtifactsDirectory)/mssql-python-wheels-dist" - if [ ! -d "$WHEEL_DIR" ] || [ -z "$(ls -A $WHEEL_DIR/*.whl 2>/dev/null)" ]; then - echo "ERROR: No wheel files found in $WHEEL_DIR" - echo "Contents of artifacts directory:" - find "$(System.ArtifactsDirectory)" -type f -name "*.whl" || echo "No .whl files found anywhere" - exit 1 - fi - echo "Found wheel files:" - ls -la "$WHEEL_DIR"/*.whl - displayName: 'Verify wheel artifacts exist' - - # Start SQL Server container for testing - - script: | - set -euxo pipefail - docker run -d --name sqlserver \ - --network bridge \ - -e ACCEPT_EULA=Y \ - -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ - -p 1433:1433 \ - mcr.microsoft.com/mssql/server:2022-latest - - # Wait for SQL Server to be ready - echo "Waiting for SQL Server to start..." - for i in {1..30}; do - if docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ - -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then - echo "SQL Server is ready!" - break - fi - echo "Attempt $i/30: SQL Server not ready yet..." - sleep 3 - done - - # Create test database - docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ - -S localhost -U SA -P "$(DB_PASSWORD)" -C \ - -Q "CREATE DATABASE TestDB" - displayName: 'Start SQL Server and create test database' - env: - DB_PASSWORD: $(DB_PASSWORD) - - # Test wheels on target OS - - script: | - set -euxo pipefail +# # Publish the collected wheel file(s) as build artifacts +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish all wheels as artifacts' + +# - job: BuildLinuxWheels +# displayName: 'Build Linux -' +# pool: { vmImage: 'ubuntu-latest' } +# timeoutInMinutes: 120 + +# strategy: +# matrix: +# manylinux_x86_64: +# LINUX_TAG: 'manylinux' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' +# manylinux_aarch64: +# LINUX_TAG: 'manylinux' +# ARCH: 'aarch64' +# DOCKER_PLATFORM: 'linux/arm64' +# IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' +# musllinux_x86_64: +# LINUX_TAG: 'musllinux' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' +# musllinux_aarch64: +# LINUX_TAG: 'musllinux' +# ARCH: 'aarch64' +# DOCKER_PLATFORM: 'linux/arm64' +# IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' + +# steps: +# - checkout: self +# fetchDepth: 0 + +# # Enable QEMU so we can run aarch64 containers on the x86_64 agent +# - script: | +# sudo docker run --rm --privileged tonistiigi/binfmt --install all +# displayName: 'Enable QEMU (for aarch64)' + +# # Prep artifact dirs +# - script: | +# rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings +# mkdir -p $(Build.ArtifactStagingDirectory)/dist +# mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) +# displayName: 'Prepare artifact directories' + +# # Start a long-lived container for this lane +# - script: | +# docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ +# --platform $(DOCKER_PLATFORM) \ +# -v $(Build.SourcesDirectory):/workspace \ +# -w /workspace \ +# $(IMAGE) \ +# tail -f /dev/null +# displayName: 'Start $(LINUX_TAG) $(ARCH) container' + +# # Install system build dependencies +# # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes +# # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk +# # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* +# # - ccache is optional but speeds rebuilds inside the container +# - script: | +# set -euxo pipefail +# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then +# # ===== manylinux (glibc) containers ===== +# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' +# set -euxo pipefail +# # Prefer dnf (Alma/Rocky base), fall back to yum if present +# if command -v dnf >/dev/null 2>&1; then +# dnf -y update || true +# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache +# dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true +# elif command -v yum >/dev/null 2>&1; then +# yum -y update || true +# yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true +# else +# echo "No dnf/yum found in manylinux image" >&2 +# fi + +# # Quick visibility for logs +# echo "---- tool versions ----" +# gcc --version || true +# cmake --version || true +# ' +# else +# # ===== musllinux (Alpine/musl) containers ===== +# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' +# set -euxo pipefail +# apk update || true +# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache +# apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true + +# # Quick visibility for logs +# echo "---- tool versions ----" +# gcc --version || true +# cmake --version || true +# ' +# fi +# displayName: 'Install system build dependencies' + +# # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters +# - script: | +# set -euxo pipefail +# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi + +# # Ensure dist exists inside the container +# docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' + +# # Loop through CPython versions present in the image +# for PYBIN in cp310 cp311 cp312 cp313; do +# echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" +# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then +# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " +# set -euxo pipefail; +# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; +# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present +# ln -sf \$PY /usr/local/bin/python; +# python -m pip install -U pip setuptools wheel pybind11; +# echo 'python:' \$(python -V); which python; +# # 👉 run from the directory that has CMakeLists.txt +# cd /workspace/mssql_python/pybind; +# bash build.sh; + +# # back to repo root to build the wheel +# cd /workspace; +# python setup.py bdist_wheel; + +# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification +# # We're assuming that this will be provided by OS and not bundled in the wheel +# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done +# " +# else +# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " +# set -euxo pipefail; +# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; +# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present +# ln -sf \$PY /usr/local/bin/python; +# python -m pip install -U pip setuptools wheel pybind11; +# echo 'python:' \$(python -V); which python; +# # 👉 run from the directory that has CMakeLists.txt +# cd /workspace/mssql_python/pybind; +# bash build.sh; + +# # back to repo root to build the wheel +# cd /workspace; +# python setup.py bdist_wheel; + +# # repair/tag wheel +# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification +# # We're assuming that this will be provided by OS and not bundled in the wheel +# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done +# " +# fi +# done +# displayName: 'Run build.sh and build wheels for cp310–cp313' + +# # Copy artifacts back to host +# - script: | +# set -euxo pipefail +# # ---- Wheels ---- +# docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" + +# # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- +# # Prepare host dest +# mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" + +# # Prepare a temp out dir inside the container +# docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' +# set -euxo pipefail; +# echo "Listing package dirs for sanity:"; +# ls -la /workspace/mssql_python || true; +# ls -la /workspace/mssql_python/pybind || true; + +# OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; +# rm -rf "$OUT"; mkdir -p "$OUT"; + +# # Copy ONLY top-level .so files from mssql_python (no recursion) +# find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true + +# echo "Top-level .so collected in $OUT:"; +# ls -la "$OUT" || true +# ' + +# # Copy those .so files from container to host +# docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ +# "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ +# || echo "No top-level .so files to copy" + +# # (Optional) prune non-.so just in case +# find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true +# displayName: 'Copy wheels and .so back to host' + +# # Cleanup container +# - script: | +# docker stop build-$(LINUX_TAG)-$(ARCH) || true +# docker rm build-$(LINUX_TAG)-$(ARCH) || true +# displayName: 'Clean up container' +# condition: always() + +# # Publish wheels (exact name you wanted) +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' +# ArtifactName: 'mssql-python-wheels-dist' +# publishLocation: 'Container' +# displayName: 'Publish wheels as artifacts' + +# # Publish compiled .so files (exact name you wanted) +# - task: PublishBuildArtifacts@1 +# condition: succeededOrFailed() +# inputs: +# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' +# ArtifactName: 'mssql-python-ddbc-bindings' +# publishLocation: 'Container' +# displayName: 'Publish .so files as artifacts' + +# # Job to test the built wheels on different Linux distributions with SQL Server +# - job: TestWheelsOnLinux +# displayName: 'Pytests on Linux -' +# dependsOn: BuildLinuxWheels +# condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded +# pool: { vmImage: 'ubuntu-latest' } +# timeoutInMinutes: 60 + +# strategy: +# matrix: +# # x86_64 +# debian12: +# BASE_IMAGE: 'debian:12-slim' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# rhel_ubi9: +# BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# alpine320: +# BASE_IMAGE: 'alpine:3.20' +# ARCH: 'x86_64' +# DOCKER_PLATFORM: 'linux/amd64' +# # arm64 +# debian12_arm64: +# BASE_IMAGE: 'debian:12-slim' +# ARCH: 'arm64' +# DOCKER_PLATFORM: 'linux/arm64' +# rhel_ubi9_arm64: +# BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' +# ARCH: 'arm64' +# DOCKER_PLATFORM: 'linux/arm64' +# alpine320_arm64: +# BASE_IMAGE: 'alpine:3.20' +# ARCH: 'arm64' +# DOCKER_PLATFORM: 'linux/arm64' + +# steps: +# - checkout: self + +# - task: DownloadBuildArtifacts@0 +# inputs: +# buildType: 'current' +# downloadType: 'single' +# artifactName: 'mssql-python-wheels-dist' +# downloadPath: '$(System.ArtifactsDirectory)' +# displayName: 'Download wheel artifacts from current build' + +# # Verify we actually have wheels before proceeding +# - script: | +# set -euxo pipefail +# WHEEL_DIR="$(System.ArtifactsDirectory)/mssql-python-wheels-dist" +# if [ ! -d "$WHEEL_DIR" ] || [ -z "$(ls -A $WHEEL_DIR/*.whl 2>/dev/null)" ]; then +# echo "ERROR: No wheel files found in $WHEEL_DIR" +# echo "Contents of artifacts directory:" +# find "$(System.ArtifactsDirectory)" -type f -name "*.whl" || echo "No .whl files found anywhere" +# exit 1 +# fi +# echo "Found wheel files:" +# ls -la "$WHEEL_DIR"/*.whl +# displayName: 'Verify wheel artifacts exist' + +# # Start SQL Server container for testing +# - script: | +# set -euxo pipefail +# docker run -d --name sqlserver \ +# --network bridge \ +# -e ACCEPT_EULA=Y \ +# -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ +# -p 1433:1433 \ +# mcr.microsoft.com/mssql/server:2022-latest + +# # Wait for SQL Server to be ready +# echo "Waiting for SQL Server to start..." +# for i in {1..30}; do +# if docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ +# -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then +# echo "SQL Server is ready!" +# break +# fi +# echo "Attempt $i/30: SQL Server not ready yet..." +# sleep 3 +# done + +# # Create test database +# docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ +# -S localhost -U SA -P "$(DB_PASSWORD)" -C \ +# -Q "CREATE DATABASE TestDB" +# displayName: 'Start SQL Server and create test database' +# env: +# DB_PASSWORD: $(DB_PASSWORD) + +# # Test wheels on target OS +# - script: | +# set -euxo pipefail - # Enable QEMU for ARM64 architectures - if [[ "$(ARCH)" == "arm64" ]] || [[ "$(ARCH)" == "aarch64" ]]; then - sudo docker run --rm --privileged tonistiigi/binfmt --install all - fi +# # Enable QEMU for ARM64 architectures +# if [[ "$(ARCH)" == "arm64" ]] || [[ "$(ARCH)" == "aarch64" ]]; then +# sudo docker run --rm --privileged tonistiigi/binfmt --install all +# fi - # Start test container with retry logic - for i in {1..3}; do - if docker run -d --name test-$(ARCH) \ - --platform $(DOCKER_PLATFORM) \ - --network bridge \ - -v $(System.ArtifactsDirectory):/artifacts:ro \ - $(BASE_IMAGE) \ - tail -f /dev/null; then - echo "Container started successfully on attempt $i" - break - else - echo "Failed to start container on attempt $i, retrying..." - docker rm test-$(ARCH) 2>/dev/null || true - sleep 5 - fi - done - - # Verify container is running - if ! docker ps | grep -q test-$(ARCH); then - echo "ERROR: Container test-$(ARCH) is not running" - docker logs test-$(ARCH) || true - exit 1 - fi - - # Install Python and dependencies based on OS - if [[ "$(BASE_IMAGE)" == alpine* ]]; then - echo "Setting up Alpine Linux..." - docker exec test-$(ARCH) sh -c " - apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs - python3 -m venv /venv - /venv/bin/pip install pytest - " - PY_CMD="/venv/bin/python" - elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then - echo "Setting up RHEL-based system..." - docker exec test-$(ARCH) bash -c " - set -euo pipefail - echo 'Installing Python on UBI/RHEL...' - if command -v dnf >/dev/null; then - dnf clean all - rm -rf /var/cache/dnf - dnf -y makecache - - dnf list --showduplicates python3.11 python3.12 || true - - # NOTE: do NOT install 'curl' to avoid curl-minimal conflict - if dnf -y install python3.12 python3.12-pip unixODBC-devel; then - PY=python3.12 - echo 'Installed Python 3.12' - elif dnf -y install python3.11 python3.11-pip unixODBC-devel; then - PY=python3.11 - echo 'Installed Python 3.11' - else - dnf -y install python3 python3-pip unixODBC-devel - PY=python3 - echo 'Falling back to default Python' - fi - - \$PY -m venv /venv - /venv/bin/python -m pip install -U 'pip>=25' pytest - /venv/bin/python --version - /venv/bin/pip --version - else - echo 'ERROR: dnf not found' - exit 1 - fi - " - PY_CMD="/venv/bin/python" - else - echo "Setting up Debian/Ubuntu..." - docker exec test-$(ARCH) bash -c " - export DEBIAN_FRONTEND=noninteractive - apt-get update - apt-get install -y python3 python3-pip python3-venv python3-full unixodbc-dev curl - python3 -m venv /venv - /venv/bin/pip install pytest - " - PY_CMD="/venv/bin/python" - fi - - # Install the wheel (find the appropriate one for this architecture) - if [[ "$(BASE_IMAGE)" == alpine* ]]; then - SHELL_CMD="sh -c" - WHEEL_PATTERN="*musllinux*$(ARCH)*.whl" - else - SHELL_CMD="bash -c" - WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" - fi - - # Install the appropriate wheel in isolated directory - docker exec test-$(ARCH) $SHELL_CMD " - # Create isolated directory for wheel testing - mkdir -p /test_whl - cd /test_whl +# # Start test container with retry logic +# for i in {1..3}; do +# if docker run -d --name test-$(ARCH) \ +# --platform $(DOCKER_PLATFORM) \ +# --network bridge \ +# -v $(System.ArtifactsDirectory):/artifacts:ro \ +# $(BASE_IMAGE) \ +# tail -f /dev/null; then +# echo "Container started successfully on attempt $i" +# break +# else +# echo "Failed to start container on attempt $i, retrying..." +# docker rm test-$(ARCH) 2>/dev/null || true +# sleep 5 +# fi +# done + +# # Verify container is running +# if ! docker ps | grep -q test-$(ARCH); then +# echo "ERROR: Container test-$(ARCH) is not running" +# docker logs test-$(ARCH) || true +# exit 1 +# fi + +# # Install Python and dependencies based on OS +# if [[ "$(BASE_IMAGE)" == alpine* ]]; then +# echo "Setting up Alpine Linux..." +# docker exec test-$(ARCH) sh -c " +# apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs +# python3 -m venv /venv +# /venv/bin/pip install pytest +# " +# PY_CMD="/venv/bin/python" +# elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then +# echo "Setting up RHEL-based system..." +# docker exec test-$(ARCH) bash -c " +# set -euo pipefail +# echo 'Installing Python on UBI/RHEL...' +# if command -v dnf >/dev/null; then +# dnf clean all +# rm -rf /var/cache/dnf +# dnf -y makecache + +# dnf list --showduplicates python3.11 python3.12 || true + +# # NOTE: do NOT install 'curl' to avoid curl-minimal conflict +# if dnf -y install python3.12 python3.12-pip unixODBC-devel; then +# PY=python3.12 +# echo 'Installed Python 3.12' +# elif dnf -y install python3.11 python3.11-pip unixODBC-devel; then +# PY=python3.11 +# echo 'Installed Python 3.11' +# else +# dnf -y install python3 python3-pip unixODBC-devel +# PY=python3 +# echo 'Falling back to default Python' +# fi + +# \$PY -m venv /venv +# /venv/bin/python -m pip install -U 'pip>=25' pytest +# /venv/bin/python --version +# /venv/bin/pip --version +# else +# echo 'ERROR: dnf not found' +# exit 1 +# fi +# " +# PY_CMD="/venv/bin/python" +# else +# echo "Setting up Debian/Ubuntu..." +# docker exec test-$(ARCH) bash -c " +# export DEBIAN_FRONTEND=noninteractive +# apt-get update +# apt-get install -y python3 python3-pip python3-venv python3-full unixodbc-dev curl +# python3 -m venv /venv +# /venv/bin/pip install pytest +# " +# PY_CMD="/venv/bin/python" +# fi + +# # Install the wheel (find the appropriate one for this architecture) +# if [[ "$(BASE_IMAGE)" == alpine* ]]; then +# SHELL_CMD="sh -c" +# WHEEL_PATTERN="*musllinux*$(ARCH)*.whl" +# else +# SHELL_CMD="bash -c" +# WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" +# fi + +# # Install the appropriate wheel in isolated directory +# docker exec test-$(ARCH) $SHELL_CMD " +# # Create isolated directory for wheel testing +# mkdir -p /test_whl +# cd /test_whl - echo 'Available wheels:' - ls -la /artifacts/mssql-python-wheels-dist/*.whl - echo 'Installing package (letting pip auto-select in isolated environment):' - $PY_CMD -m pip install mssql_python --find-links /artifacts/mssql-python-wheels-dist --no-index --no-deps +# echo 'Available wheels:' +# ls -la /artifacts/mssql-python-wheels-dist/*.whl +# echo 'Installing package (letting pip auto-select in isolated environment):' +# $PY_CMD -m pip install mssql_python --find-links /artifacts/mssql-python-wheels-dist --no-index --no-deps - # Verify package installation location - echo 'Installed package location:' - $PY_CMD -c 'import mssql_python; print(\"Package location:\", mssql_python.__file__)' +# # Verify package installation location +# echo 'Installed package location:' +# $PY_CMD -c 'import mssql_python; print(\"Package location:\", mssql_python.__file__)' - # Test basic import - $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' - " +# # Test basic import +# $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' +# " - displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' - env: - DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' +# displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' +# env: +# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - # Run pytest with source code while testing installed wheel - - script: | - set -euxo pipefail +# # Run pytest with source code while testing installed wheel +# - script: | +# set -euxo pipefail - # Copy source code to container for pytest - echo "Copying source code to container for pytest..." - docker cp $(Build.SourcesDirectory)/. test-$(ARCH):/workspace/ +# # Copy source code to container for pytest +# echo "Copying source code to container for pytest..." +# docker cp $(Build.SourcesDirectory)/. test-$(ARCH):/workspace/ - # Set shell command based on OS and define Python command - if [[ "$(BASE_IMAGE)" == alpine* ]]; then - SHELL_CMD="sh -c" - PY_CMD="/venv/bin/python" - else - SHELL_CMD="bash -c" - PY_CMD="/venv/bin/python" - fi +# # Set shell command based on OS and define Python command +# if [[ "$(BASE_IMAGE)" == alpine* ]]; then +# SHELL_CMD="sh -c" +# PY_CMD="/venv/bin/python" +# else +# SHELL_CMD="bash -c" +# PY_CMD="/venv/bin/python" +# fi - docker exec test-$(ARCH) $SHELL_CMD " - # Go to workspace root where source code is - cd /workspace +# docker exec test-$(ARCH) $SHELL_CMD " +# # Go to workspace root where source code is +# cd /workspace - echo 'Running pytest suite with installed wheel...' - echo 'Current directory:' \$(pwd) - echo 'Python version:' - $PY_CMD --version +# echo 'Running pytest suite with installed wheel...' +# echo 'Current directory:' \$(pwd) +# echo 'Python version:' +# $PY_CMD --version - # Verify we're importing the installed wheel, not local source - echo 'Package import verification:' - $PY_CMD -c 'import mssql_python; print(\"Testing installed wheel from:\", mssql_python.__file__)' +# # Verify we're importing the installed wheel, not local source +# echo 'Package import verification:' +# $PY_CMD -c 'import mssql_python; print(\"Testing installed wheel from:\", mssql_python.__file__)' - # Install test requirements - if [ -f requirements.txt ]; then - echo 'Installing test requirements...' - $PY_CMD -m pip install -r requirements.txt || echo 'Failed to install some requirements' - fi +# # Install test requirements +# if [ -f requirements.txt ]; then +# echo 'Installing test requirements...' +# $PY_CMD -m pip install -r requirements.txt || echo 'Failed to install some requirements' +# fi - # Ensure pytest is available - $PY_CMD -m pip install pytest || echo 'pytest installation failed' +# # Ensure pytest is available +# $PY_CMD -m pip install pytest || echo 'pytest installation failed' - # List available test files - echo 'Available test files:' - find tests/ -name 'test_*.py' 2>/dev/null || echo 'No test files found in tests/' +# # List available test files +# echo 'Available test files:' +# find tests/ -name 'test_*.py' 2>/dev/null || echo 'No test files found in tests/' - # Run pytest - if [ -d tests/ ]; then - echo 'Starting pytest...' - $PY_CMD -m pytest -v || echo 'Some tests failed - this may be expected in containerized environment' - else - echo 'No tests directory found, skipping pytest' - fi - " - displayName: 'Run pytest suite on $(BASE_IMAGE) $(ARCH)' - env: - DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - continueOnError: true # Don't fail pipeline if tests fail - - # Cleanup - - script: | - docker stop test-$(ARCH) sqlserver || true - docker rm test-$(ARCH) sqlserver || true - displayName: 'Cleanup containers' - condition: always() +# # Run pytest +# if [ -d tests/ ]; then +# echo 'Starting pytest...' +# $PY_CMD -m pytest -v || echo 'Some tests failed - this may be expected in containerized environment' +# else +# echo 'No tests directory found, skipping pytest' +# fi +# " +# displayName: 'Run pytest suite on $(BASE_IMAGE) $(ARCH)' +# env: +# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' +# continueOnError: true # Don't fail pipeline if tests fail + +# # Cleanup +# - script: | +# docker stop test-$(ARCH) sqlserver || true +# docker rm test-$(ARCH) sqlserver || true +# displayName: 'Cleanup containers' +# condition: always() From 8bdf0ec8da54e6c0cd623d98fca139c10da8a1ab Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 18:27:25 +0530 Subject: [PATCH 92/93] testing again with temp py libs --- eng/pipelines/build-whl-pipeline.yml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 9db4dfac3..26f421761 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -115,8 +115,21 @@ jobs: buildVersionToDownload: 'specific' buildId: '122430' artifactName: 'mssql-python-arm64-libs' - downloadPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' - displayName: 'Download ARM64 Python libs from latest successful run on branches' + downloadPath: '$(Build.SourcesDirectory)\temp-arm64' # Download to temp location + displayName: 'Download ARM64 Python libs' + + - script: | + echo "Setting up ARM64 Python library structure..." + mkdir "$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64" 2>nul || echo "Directory exists" + copy "$(Build.SourcesDirectory)\temp-arm64\mssql-python-arm64-libs\*" "$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64\" + + echo "ARM64 Python libraries setup complete:" + dir "$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64" + + echo "Cleaning up temp directory..." + rmdir /s /q "$(Build.SourcesDirectory)\temp-arm64" + displayName: 'Setup ARM64 Python library structure' + condition: eq(variables['targetArch'], 'arm64') # Build the PYD file by calling build.bat - script: | From aeeca2675a83189501068089954875d8df60e8f7 Mon Sep 17 00:00:00 2001 From: Gaurav Sharma Date: Tue, 12 Aug 2025 18:34:02 +0530 Subject: [PATCH 93/93] finalized pipeline for release --- eng/pipelines/build-whl-pipeline.yml | 1277 +++++++++++++------------- 1 file changed, 631 insertions(+), 646 deletions(-) diff --git a/eng/pipelines/build-whl-pipeline.yml b/eng/pipelines/build-whl-pipeline.yml index 26f421761..a7e2a87b8 100644 --- a/eng/pipelines/build-whl-pipeline.yml +++ b/eng/pipelines/build-whl-pipeline.yml @@ -105,31 +105,16 @@ jobs: env: DB_PASSWORD: $(DB_PASSWORD) - - task: DownloadBuildArtifacts@0 + - task: DownloadPipelineArtifact@2 condition: eq(variables['targetArch'], 'arm64') inputs: buildType: 'specific' project: '$(System.TeamProject)' definition: 2162 - specificBuildWithTriggering: true - buildVersionToDownload: 'specific' - buildId: '122430' + buildVersionToDownload: 'latest' artifactName: 'mssql-python-arm64-libs' - downloadPath: '$(Build.SourcesDirectory)\temp-arm64' # Download to temp location - displayName: 'Download ARM64 Python libs' - - - script: | - echo "Setting up ARM64 Python library structure..." - mkdir "$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64" 2>nul || echo "Directory exists" - copy "$(Build.SourcesDirectory)\temp-arm64\mssql-python-arm64-libs\*" "$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64\" - - echo "ARM64 Python libraries setup complete:" - dir "$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64" - - echo "Cleaning up temp directory..." - rmdir /s /q "$(Build.SourcesDirectory)\temp-arm64" - displayName: 'Setup ARM64 Python library structure' - condition: eq(variables['targetArch'], 'arm64') + targetPath: '$(Build.SourcesDirectory)\mssql_python\pybind\python_libs\arm64' + displayName: 'Download ARM64 Python libs from latest successful run on branches' # Build the PYD file by calling build.bat - script: | @@ -229,651 +214,651 @@ jobs: publishLocation: 'Container' displayName: 'Publish all wheels as artifacts' -# - job: BuildMacOSWheels -# # Use the latest macOS image for building -# pool: -# vmImage: 'macos-latest' -# # Display name for the job in Azure DevOps UI -# displayName: 'Build macOS - ' -# strategy: -# matrix: -# # Python 3.13 (universal2 for both arm64 and x86_64) -# py313_universal2: -# pythonVersion: '3.13' -# shortPyVer: '313' -# # Always use universal2 for macOS -# targetArch: 'universal2' +- job: BuildMacOSWheels + # Use the latest macOS image for building + pool: + vmImage: 'macos-latest' + # Display name for the job in Azure DevOps UI + displayName: 'Build macOS - ' + strategy: + matrix: + # Python 3.13 (universal2 for both arm64 and x86_64) + py313_universal2: + pythonVersion: '3.13' + shortPyVer: '313' + # Always use universal2 for macOS + targetArch: 'universal2' -# # Python 3.12 (universal2 for both arm64 and x86_64) -# py312_universal2: -# pythonVersion: '3.12' -# shortPyVer: '312' -# targetArch: 'universal2' - -# # Python 3.11 (universal2 for both arm64 and x86_64) -# py311_universal2: -# pythonVersion: '3.11' -# shortPyVer: '311' -# targetArch: 'universal2' + # Python 3.12 (universal2 for both arm64 and x86_64) + py312_universal2: + pythonVersion: '3.12' + shortPyVer: '312' + targetArch: 'universal2' + + # Python 3.11 (universal2 for both arm64 and x86_64) + py311_universal2: + pythonVersion: '3.11' + shortPyVer: '311' + targetArch: 'universal2' -# # Python 3.10 (universal2 for both arm64 and x86_64) -# py310_universal2: -# pythonVersion: '3.10' -# shortPyVer: '310' -# targetArch: 'universal2' - -# steps: -# # Use correct Python version and architecture for the current job -# - task: UsePythonVersion@0 -# inputs: -# versionSpec: '$(pythonVersion)' -# addToPath: true -# displayName: 'Use Python $(pythonVersion) (Universal2)' - -# # Install CMake on macOS -# - script: | -# brew update -# brew install cmake -# displayName: 'Install CMake' - -# # Install required packages: pip, CMake, pybind11 -# - script: | -# python -m pip install --upgrade pip -# pip install -r requirements.txt -# pip install cmake pybind11 -# displayName: 'Install dependencies' - -# # Build the .so file by calling build.sh -# - script: | -# echo "Python Version: $(pythonVersion)" -# echo "Short Tag: $(shortPyVer)" -# echo "Building Universal2 Binary" -# cd "$(Build.SourcesDirectory)/mssql_python/pybind" -# # Call build.sh to build the .so file -# ./build.sh -# displayName: 'Build .so file' -# continueOnError: false - -# # Copy the built .so file to staging folder for artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)/mssql_python' -# Contents: '*.so' -# TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' -# displayName: 'Place .so file into artifacts directory' - -# - script: | -# brew update -# brew install docker colima - -# # Try VZ first, fallback to QEMU if it fails -# # Use more conservative resource allocation for Azure DevOps runners -# colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ -# colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu - -# # Set a timeout to ensure Colima starts properly -# sleep 30 - -# # Optional: set Docker context (usually automatic) -# docker context use colima >/dev/null || true - -# # Confirm Docker is operational -# docker version -# docker ps -# displayName: 'Install and start Colima-based Docker' -# timeoutInMinutes: 15 - -# - script: | -# # Pull and run SQL Server container -# docker pull mcr.microsoft.com/mssql/server:2022-latest -# docker run \ -# --name sqlserver \ -# -e ACCEPT_EULA=Y \ -# -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ -# -p 1433:1433 \ -# -d mcr.microsoft.com/mssql/server:2022-latest - -# # Starting SQL Server container… -# for i in {1..30}; do -# docker exec sqlserver \ -# /opt/mssql-tools18/bin/sqlcmd \ -# -S localhost \ -# -U SA \ -# -P "$DB_PASSWORD" \ -# -C -Q "SELECT 1" && break -# sleep 2 -# done -# displayName: 'Pull & start SQL Server (Docker)' -# env: -# DB_PASSWORD: $(DB_PASSWORD) - -# # Run Pytest to ensure the bindings work correctly -# - script: | -# python -m pytest -v -# displayName: 'Run Pytest to validate bindings' -# env: -# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' - -# # Build wheel package for universal2 -# - script: | -# python -m pip install --upgrade pip -# pip install wheel setuptools -# python setup.py bdist_wheel -# displayName: 'Build $(pythonVersion) universal2 whl' + # Python 3.10 (universal2 for both arm64 and x86_64) + py310_universal2: + pythonVersion: '3.10' + shortPyVer: '310' + targetArch: 'universal2' + + steps: + # Use correct Python version and architecture for the current job + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(pythonVersion)' + addToPath: true + displayName: 'Use Python $(pythonVersion) (Universal2)' + + # Install CMake on macOS + - script: | + brew update + brew install cmake + displayName: 'Install CMake' + + # Install required packages: pip, CMake, pybind11 + - script: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install cmake pybind11 + displayName: 'Install dependencies' + + # Build the .so file by calling build.sh + - script: | + echo "Python Version: $(pythonVersion)" + echo "Short Tag: $(shortPyVer)" + echo "Building Universal2 Binary" + cd "$(Build.SourcesDirectory)/mssql_python/pybind" + # Call build.sh to build the .so file + ./build.sh + displayName: 'Build .so file' + continueOnError: false + + # Copy the built .so file to staging folder for artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)/mssql_python' + Contents: '*.so' + TargetFolder: '$(Build.ArtifactStagingDirectory)/ddbc-bindings/macOS' + displayName: 'Place .so file into artifacts directory' + + - script: | + brew update + brew install docker colima + + # Try VZ first, fallback to QEMU if it fails + # Use more conservative resource allocation for Azure DevOps runners + colima start --cpu 3 --memory 10 --disk 30 --vm-type=vz || \ + colima start --cpu 3 --memory 10 --disk 30 --vm-type=qemu + + # Set a timeout to ensure Colima starts properly + sleep 30 + + # Optional: set Docker context (usually automatic) + docker context use colima >/dev/null || true + + # Confirm Docker is operational + docker version + docker ps + displayName: 'Install and start Colima-based Docker' + timeoutInMinutes: 15 + + - script: | + # Pull and run SQL Server container + docker pull mcr.microsoft.com/mssql/server:2022-latest + docker run \ + --name sqlserver \ + -e ACCEPT_EULA=Y \ + -e MSSQL_SA_PASSWORD="${DB_PASSWORD}" \ + -p 1433:1433 \ + -d mcr.microsoft.com/mssql/server:2022-latest + + # Starting SQL Server container… + for i in {1..30}; do + docker exec sqlserver \ + /opt/mssql-tools18/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P "$DB_PASSWORD" \ + -C -Q "SELECT 1" && break + sleep 2 + done + displayName: 'Pull & start SQL Server (Docker)' + env: + DB_PASSWORD: $(DB_PASSWORD) + + # Run Pytest to ensure the bindings work correctly + - script: | + python -m pytest -v + displayName: 'Run Pytest to validate bindings' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=master;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + + # Build wheel package for universal2 + - script: | + python -m pip install --upgrade pip + pip install wheel setuptools + python setup.py bdist_wheel + displayName: 'Build $(pythonVersion) universal2 whl' -# # Copy the wheel file to the artifacts -# - task: CopyFiles@2 -# inputs: -# SourceFolder: '$(Build.SourcesDirectory)/dist' -# Contents: '*.whl' -# TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' -# displayName: 'Collect wheel package' + # Copy the wheel file to the artifacts + - task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.SourcesDirectory)/dist' + Contents: '*.whl' + TargetFolder: '$(Build.ArtifactStagingDirectory)/dist' + displayName: 'Collect wheel package' -# # Publish the collected .so file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish all .so files as artifacts' + # Publish the collected .so file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + publishLocation: 'Container' + displayName: 'Publish all .so files as artifacts' -# # Publish the collected wheel file(s) as build artifacts -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish all wheels as artifacts' - -# - job: BuildLinuxWheels -# displayName: 'Build Linux -' -# pool: { vmImage: 'ubuntu-latest' } -# timeoutInMinutes: 120 - -# strategy: -# matrix: -# manylinux_x86_64: -# LINUX_TAG: 'manylinux' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' -# manylinux_aarch64: -# LINUX_TAG: 'manylinux' -# ARCH: 'aarch64' -# DOCKER_PLATFORM: 'linux/arm64' -# IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' -# musllinux_x86_64: -# LINUX_TAG: 'musllinux' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' -# musllinux_aarch64: -# LINUX_TAG: 'musllinux' -# ARCH: 'aarch64' -# DOCKER_PLATFORM: 'linux/arm64' -# IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' - -# steps: -# - checkout: self -# fetchDepth: 0 - -# # Enable QEMU so we can run aarch64 containers on the x86_64 agent -# - script: | -# sudo docker run --rm --privileged tonistiigi/binfmt --install all -# displayName: 'Enable QEMU (for aarch64)' - -# # Prep artifact dirs -# - script: | -# rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings -# mkdir -p $(Build.ArtifactStagingDirectory)/dist -# mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) -# displayName: 'Prepare artifact directories' - -# # Start a long-lived container for this lane -# - script: | -# docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ -# --platform $(DOCKER_PLATFORM) \ -# -v $(Build.SourcesDirectory):/workspace \ -# -w /workspace \ -# $(IMAGE) \ -# tail -f /dev/null -# displayName: 'Start $(LINUX_TAG) $(ARCH) container' - -# # Install system build dependencies -# # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes -# # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk -# # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* -# # - ccache is optional but speeds rebuilds inside the container -# - script: | -# set -euxo pipefail -# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then -# # ===== manylinux (glibc) containers ===== -# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' -# set -euxo pipefail -# # Prefer dnf (Alma/Rocky base), fall back to yum if present -# if command -v dnf >/dev/null 2>&1; then -# dnf -y update || true -# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache -# dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true -# elif command -v yum >/dev/null 2>&1; then -# yum -y update || true -# yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true -# else -# echo "No dnf/yum found in manylinux image" >&2 -# fi - -# # Quick visibility for logs -# echo "---- tool versions ----" -# gcc --version || true -# cmake --version || true -# ' -# else -# # ===== musllinux (Alpine/musl) containers ===== -# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' -# set -euxo pipefail -# apk update || true -# # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache -# apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true - -# # Quick visibility for logs -# echo "---- tool versions ----" -# gcc --version || true -# cmake --version || true -# ' -# fi -# displayName: 'Install system build dependencies' - -# # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters -# - script: | -# set -euxo pipefail -# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi - -# # Ensure dist exists inside the container -# docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' - -# # Loop through CPython versions present in the image -# for PYBIN in cp310 cp311 cp312 cp313; do -# echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" -# if [[ "$(LINUX_TAG)" == "manylinux" ]]; then -# docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " -# set -euxo pipefail; -# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; -# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present -# ln -sf \$PY /usr/local/bin/python; -# python -m pip install -U pip setuptools wheel pybind11; -# echo 'python:' \$(python -V); which python; -# # 👉 run from the directory that has CMakeLists.txt -# cd /workspace/mssql_python/pybind; -# bash build.sh; - -# # back to repo root to build the wheel -# cd /workspace; -# python setup.py bdist_wheel; - -# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification -# # We're assuming that this will be provided by OS and not bundled in the wheel -# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done -# " -# else -# docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " -# set -euxo pipefail; -# PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; -# test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present -# ln -sf \$PY /usr/local/bin/python; -# python -m pip install -U pip setuptools wheel pybind11; -# echo 'python:' \$(python -V); which python; -# # 👉 run from the directory that has CMakeLists.txt -# cd /workspace/mssql_python/pybind; -# bash build.sh; - -# # back to repo root to build the wheel -# cd /workspace; -# python setup.py bdist_wheel; - -# # repair/tag wheel -# # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification -# # We're assuming that this will be provided by OS and not bundled in the wheel -# # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done -# " -# fi -# done -# displayName: 'Run build.sh and build wheels for cp310–cp313' - -# # Copy artifacts back to host -# - script: | -# set -euxo pipefail -# # ---- Wheels ---- -# docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" - -# # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- -# # Prepare host dest -# mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" - -# # Prepare a temp out dir inside the container -# docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' -# set -euxo pipefail; -# echo "Listing package dirs for sanity:"; -# ls -la /workspace/mssql_python || true; -# ls -la /workspace/mssql_python/pybind || true; - -# OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; -# rm -rf "$OUT"; mkdir -p "$OUT"; - -# # Copy ONLY top-level .so files from mssql_python (no recursion) -# find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true - -# echo "Top-level .so collected in $OUT:"; -# ls -la "$OUT" || true -# ' - -# # Copy those .so files from container to host -# docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ -# "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ -# || echo "No top-level .so files to copy" - -# # (Optional) prune non-.so just in case -# find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true -# displayName: 'Copy wheels and .so back to host' - -# # Cleanup container -# - script: | -# docker stop build-$(LINUX_TAG)-$(ARCH) || true -# docker rm build-$(LINUX_TAG)-$(ARCH) || true -# displayName: 'Clean up container' -# condition: always() - -# # Publish wheels (exact name you wanted) -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' -# ArtifactName: 'mssql-python-wheels-dist' -# publishLocation: 'Container' -# displayName: 'Publish wheels as artifacts' - -# # Publish compiled .so files (exact name you wanted) -# - task: PublishBuildArtifacts@1 -# condition: succeededOrFailed() -# inputs: -# PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' -# ArtifactName: 'mssql-python-ddbc-bindings' -# publishLocation: 'Container' -# displayName: 'Publish .so files as artifacts' - -# # Job to test the built wheels on different Linux distributions with SQL Server -# - job: TestWheelsOnLinux -# displayName: 'Pytests on Linux -' -# dependsOn: BuildLinuxWheels -# condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded -# pool: { vmImage: 'ubuntu-latest' } -# timeoutInMinutes: 60 - -# strategy: -# matrix: -# # x86_64 -# debian12: -# BASE_IMAGE: 'debian:12-slim' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# rhel_ubi9: -# BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# alpine320: -# BASE_IMAGE: 'alpine:3.20' -# ARCH: 'x86_64' -# DOCKER_PLATFORM: 'linux/amd64' -# # arm64 -# debian12_arm64: -# BASE_IMAGE: 'debian:12-slim' -# ARCH: 'arm64' -# DOCKER_PLATFORM: 'linux/arm64' -# rhel_ubi9_arm64: -# BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' -# ARCH: 'arm64' -# DOCKER_PLATFORM: 'linux/arm64' -# alpine320_arm64: -# BASE_IMAGE: 'alpine:3.20' -# ARCH: 'arm64' -# DOCKER_PLATFORM: 'linux/arm64' - -# steps: -# - checkout: self - -# - task: DownloadBuildArtifacts@0 -# inputs: -# buildType: 'current' -# downloadType: 'single' -# artifactName: 'mssql-python-wheels-dist' -# downloadPath: '$(System.ArtifactsDirectory)' -# displayName: 'Download wheel artifacts from current build' - -# # Verify we actually have wheels before proceeding -# - script: | -# set -euxo pipefail -# WHEEL_DIR="$(System.ArtifactsDirectory)/mssql-python-wheels-dist" -# if [ ! -d "$WHEEL_DIR" ] || [ -z "$(ls -A $WHEEL_DIR/*.whl 2>/dev/null)" ]; then -# echo "ERROR: No wheel files found in $WHEEL_DIR" -# echo "Contents of artifacts directory:" -# find "$(System.ArtifactsDirectory)" -type f -name "*.whl" || echo "No .whl files found anywhere" -# exit 1 -# fi -# echo "Found wheel files:" -# ls -la "$WHEEL_DIR"/*.whl -# displayName: 'Verify wheel artifacts exist' - -# # Start SQL Server container for testing -# - script: | -# set -euxo pipefail -# docker run -d --name sqlserver \ -# --network bridge \ -# -e ACCEPT_EULA=Y \ -# -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ -# -p 1433:1433 \ -# mcr.microsoft.com/mssql/server:2022-latest - -# # Wait for SQL Server to be ready -# echo "Waiting for SQL Server to start..." -# for i in {1..30}; do -# if docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ -# -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then -# echo "SQL Server is ready!" -# break -# fi -# echo "Attempt $i/30: SQL Server not ready yet..." -# sleep 3 -# done - -# # Create test database -# docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ -# -S localhost -U SA -P "$(DB_PASSWORD)" -C \ -# -Q "CREATE DATABASE TestDB" -# displayName: 'Start SQL Server and create test database' -# env: -# DB_PASSWORD: $(DB_PASSWORD) - -# # Test wheels on target OS -# - script: | -# set -euxo pipefail + # Publish the collected wheel file(s) as build artifacts + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' + ArtifactName: 'mssql-python-wheels-dist' + publishLocation: 'Container' + displayName: 'Publish all wheels as artifacts' + +- job: BuildLinuxWheels + displayName: 'Build Linux -' + pool: { vmImage: 'ubuntu-latest' } + timeoutInMinutes: 120 + + strategy: + matrix: + manylinux_x86_64: + LINUX_TAG: 'manylinux' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + IMAGE: 'quay.io/pypa/manylinux_2_28_x86_64' + manylinux_aarch64: + LINUX_TAG: 'manylinux' + ARCH: 'aarch64' + DOCKER_PLATFORM: 'linux/arm64' + IMAGE: 'quay.io/pypa/manylinux_2_28_aarch64' + musllinux_x86_64: + LINUX_TAG: 'musllinux' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + IMAGE: 'quay.io/pypa/musllinux_1_2_x86_64' + musllinux_aarch64: + LINUX_TAG: 'musllinux' + ARCH: 'aarch64' + DOCKER_PLATFORM: 'linux/arm64' + IMAGE: 'quay.io/pypa/musllinux_1_2_aarch64' + + steps: + - checkout: self + fetchDepth: 0 + + # Enable QEMU so we can run aarch64 containers on the x86_64 agent + - script: | + sudo docker run --rm --privileged tonistiigi/binfmt --install all + displayName: 'Enable QEMU (for aarch64)' + + # Prep artifact dirs + - script: | + rm -rf $(Build.ArtifactStagingDirectory)/dist $(Build.ArtifactStagingDirectory)/ddbc-bindings + mkdir -p $(Build.ArtifactStagingDirectory)/dist + mkdir -p $(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH) + displayName: 'Prepare artifact directories' + + # Start a long-lived container for this lane + - script: | + docker run -d --name build-$(LINUX_TAG)-$(ARCH) \ + --platform $(DOCKER_PLATFORM) \ + -v $(Build.SourcesDirectory):/workspace \ + -w /workspace \ + $(IMAGE) \ + tail -f /dev/null + displayName: 'Start $(LINUX_TAG) $(ARCH) container' + + # Install system build dependencies + # - Installs compiler toolchain, CMake, unixODBC headers, and Kerberos/keyutils runtimes + # - manylinux (glibc) uses dnf/yum; musllinux (Alpine/musl) uses apk + # - Kerberos/keyutils are needed because msodbcsql pulls in libgssapi_krb5.so.* and libkeyutils*.so.* + # - ccache is optional but speeds rebuilds inside the container + - script: | + set -euxo pipefail + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then + # ===== manylinux (glibc) containers ===== + docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc ' + set -euxo pipefail + # Prefer dnf (Alma/Rocky base), fall back to yum if present + if command -v dnf >/dev/null 2>&1; then + dnf -y update || true + # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache + dnf -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true + elif command -v yum >/dev/null 2>&1; then + yum -y update || true + yum -y install gcc gcc-c++ make cmake unixODBC-devel krb5-libs keyutils-libs ccache || true + else + echo "No dnf/yum found in manylinux image" >&2 + fi + + # Quick visibility for logs + echo "---- tool versions ----" + gcc --version || true + cmake --version || true + ' + else + # ===== musllinux (Alpine/musl) containers ===== + docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc ' + set -euxo pipefail + apk update || true + # Toolchain + CMake + unixODBC headers + Kerberos + keyutils + ccache + apk add --no-cache bash build-base cmake unixodbc-dev krb5-libs keyutils-libs ccache || true + + # Quick visibility for logs + echo "---- tool versions ----" + gcc --version || true + cmake --version || true + ' + fi + displayName: 'Install system build dependencies' + + # Build wheels for cp310..cp313 using the prebuilt /opt/python interpreters + - script: | + set -euxo pipefail + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then SHELL_EXE=bash; else SHELL_EXE=sh; fi + + # Ensure dist exists inside the container + docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' + + # Loop through CPython versions present in the image + for PYBIN in cp310 cp311 cp312 cp313; do + echo "=== Building for $PYBIN on $(LINUX_TAG)/$(ARCH) ===" + if [[ "$(LINUX_TAG)" == "manylinux" ]]; then + docker exec build-$(LINUX_TAG)-$(ARCH) bash -lc " + set -euxo pipefail; + PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; + test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present + ln -sf \$PY /usr/local/bin/python; + python -m pip install -U pip setuptools wheel pybind11; + echo 'python:' \$(python -V); which python; + # 👉 run from the directory that has CMakeLists.txt + cd /workspace/mssql_python/pybind; + bash build.sh; + + # back to repo root to build the wheel + cd /workspace; + python setup.py bdist_wheel; + + # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification + # We're assuming that this will be provided by OS and not bundled in the wheel + # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done + " + else + docker exec build-$(LINUX_TAG)-$(ARCH) sh -lc " + set -euxo pipefail; + PY=/opt/python/${PYBIN}-${PYBIN}/bin/python; + test -x \$PY || { echo 'Python \$PY missing'; exit 0; } # skip if not present + ln -sf \$PY /usr/local/bin/python; + python -m pip install -U pip setuptools wheel pybind11; + echo 'python:' \$(python -V); which python; + # 👉 run from the directory that has CMakeLists.txt + cd /workspace/mssql_python/pybind; + bash build.sh; + + # back to repo root to build the wheel + cd /workspace; + python setup.py bdist_wheel; + + # repair/tag wheel + # TODO: repair/tag wheel, removing this since auditwheel is trying to find/link libraries which we're not packaging, e.g. libk5crypto, libkeyutils etc. - since it uses ldd for cross-verification + # We're assuming that this will be provided by OS and not bundled in the wheel + # for W in /workspace/dist/*.whl; do auditwheel repair -w /workspace/dist \"\$W\" || true; done + " + fi + done + displayName: 'Run build.sh and build wheels for cp310–cp313' + + # Copy artifacts back to host + - script: | + set -euxo pipefail + # ---- Wheels ---- + docker cp build-$(LINUX_TAG)-$(ARCH):/workspace/dist/. "$(Build.ArtifactStagingDirectory)/dist/" || echo "No wheels to copy" + + # ---- .so files: only top-level under mssql_python (exclude subdirs like pybind) ---- + # Prepare host dest + mkdir -p "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" + + # Prepare a temp out dir inside the container + docker exec build-$(LINUX_TAG)-$(ARCH) $([[ "$(LINUX_TAG)" == "manylinux" ]] && echo bash -lc || echo sh -lc) ' + set -euxo pipefail; + echo "Listing package dirs for sanity:"; + ls -la /workspace/mssql_python || true; + ls -la /workspace/mssql_python/pybind || true; + + OUT="/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)"; + rm -rf "$OUT"; mkdir -p "$OUT"; + + # Copy ONLY top-level .so files from mssql_python (no recursion) + find /workspace/mssql_python -maxdepth 1 -type f -name "*.so" -exec cp -v {} "$OUT"/ \; || true + + echo "Top-level .so collected in $OUT:"; + ls -la "$OUT" || true + ' + + # Copy those .so files from container to host + docker cp "build-$(LINUX_TAG)-$(ARCH):/tmp/ddbc-out-$(LINUX_TAG)-$(ARCH)/." \ + "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)/" \ + || echo "No top-level .so files to copy" + + # (Optional) prune non-.so just in case + find "$(Build.ArtifactStagingDirectory)/ddbc-bindings/$(LINUX_TAG)-$(ARCH)" -maxdepth 1 -type f ! -name "*.so" -delete || true + displayName: 'Copy wheels and .so back to host' + + # Cleanup container + - script: | + docker stop build-$(LINUX_TAG)-$(ARCH) || true + docker rm build-$(LINUX_TAG)-$(ARCH) || true + displayName: 'Clean up container' + condition: always() + + # Publish wheels (exact name you wanted) + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/dist' + ArtifactName: 'mssql-python-wheels-dist' + publishLocation: 'Container' + displayName: 'Publish wheels as artifacts' + + # Publish compiled .so files (exact name you wanted) + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/ddbc-bindings' + ArtifactName: 'mssql-python-ddbc-bindings' + publishLocation: 'Container' + displayName: 'Publish .so files as artifacts' + +# Job to test the built wheels on different Linux distributions with SQL Server +- job: TestWheelsOnLinux + displayName: 'Pytests on Linux -' + dependsOn: BuildLinuxWheels + condition: succeeded('BuildLinuxWheels') # Only run if BuildLinuxWheels succeeded + pool: { vmImage: 'ubuntu-latest' } + timeoutInMinutes: 60 + + strategy: + matrix: + # x86_64 + debian12: + BASE_IMAGE: 'debian:12-slim' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + rhel_ubi9: + BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + alpine320: + BASE_IMAGE: 'alpine:3.20' + ARCH: 'x86_64' + DOCKER_PLATFORM: 'linux/amd64' + # arm64 + debian12_arm64: + BASE_IMAGE: 'debian:12-slim' + ARCH: 'arm64' + DOCKER_PLATFORM: 'linux/arm64' + rhel_ubi9_arm64: + BASE_IMAGE: 'registry.access.redhat.com/ubi9/ubi:latest' + ARCH: 'arm64' + DOCKER_PLATFORM: 'linux/arm64' + alpine320_arm64: + BASE_IMAGE: 'alpine:3.20' + ARCH: 'arm64' + DOCKER_PLATFORM: 'linux/arm64' + + steps: + - checkout: self + + - task: DownloadBuildArtifacts@0 + inputs: + buildType: 'current' + downloadType: 'single' + artifactName: 'mssql-python-wheels-dist' + downloadPath: '$(System.ArtifactsDirectory)' + displayName: 'Download wheel artifacts from current build' + + # Verify we actually have wheels before proceeding + - script: | + set -euxo pipefail + WHEEL_DIR="$(System.ArtifactsDirectory)/mssql-python-wheels-dist" + if [ ! -d "$WHEEL_DIR" ] || [ -z "$(ls -A $WHEEL_DIR/*.whl 2>/dev/null)" ]; then + echo "ERROR: No wheel files found in $WHEEL_DIR" + echo "Contents of artifacts directory:" + find "$(System.ArtifactsDirectory)" -type f -name "*.whl" || echo "No .whl files found anywhere" + exit 1 + fi + echo "Found wheel files:" + ls -la "$WHEEL_DIR"/*.whl + displayName: 'Verify wheel artifacts exist' + + # Start SQL Server container for testing + - script: | + set -euxo pipefail + docker run -d --name sqlserver \ + --network bridge \ + -e ACCEPT_EULA=Y \ + -e MSSQL_SA_PASSWORD="$(DB_PASSWORD)" \ + -p 1433:1433 \ + mcr.microsoft.com/mssql/server:2022-latest + + # Wait for SQL Server to be ready + echo "Waiting for SQL Server to start..." + for i in {1..30}; do + if docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ + -S localhost -U SA -P "$(DB_PASSWORD)" -C -Q "SELECT 1" >/dev/null 2>&1; then + echo "SQL Server is ready!" + break + fi + echo "Attempt $i/30: SQL Server not ready yet..." + sleep 3 + done + + # Create test database + docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \ + -S localhost -U SA -P "$(DB_PASSWORD)" -C \ + -Q "CREATE DATABASE TestDB" + displayName: 'Start SQL Server and create test database' + env: + DB_PASSWORD: $(DB_PASSWORD) + + # Test wheels on target OS + - script: | + set -euxo pipefail -# # Enable QEMU for ARM64 architectures -# if [[ "$(ARCH)" == "arm64" ]] || [[ "$(ARCH)" == "aarch64" ]]; then -# sudo docker run --rm --privileged tonistiigi/binfmt --install all -# fi + # Enable QEMU for ARM64 architectures + if [[ "$(ARCH)" == "arm64" ]] || [[ "$(ARCH)" == "aarch64" ]]; then + sudo docker run --rm --privileged tonistiigi/binfmt --install all + fi -# # Start test container with retry logic -# for i in {1..3}; do -# if docker run -d --name test-$(ARCH) \ -# --platform $(DOCKER_PLATFORM) \ -# --network bridge \ -# -v $(System.ArtifactsDirectory):/artifacts:ro \ -# $(BASE_IMAGE) \ -# tail -f /dev/null; then -# echo "Container started successfully on attempt $i" -# break -# else -# echo "Failed to start container on attempt $i, retrying..." -# docker rm test-$(ARCH) 2>/dev/null || true -# sleep 5 -# fi -# done - -# # Verify container is running -# if ! docker ps | grep -q test-$(ARCH); then -# echo "ERROR: Container test-$(ARCH) is not running" -# docker logs test-$(ARCH) || true -# exit 1 -# fi - -# # Install Python and dependencies based on OS -# if [[ "$(BASE_IMAGE)" == alpine* ]]; then -# echo "Setting up Alpine Linux..." -# docker exec test-$(ARCH) sh -c " -# apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs -# python3 -m venv /venv -# /venv/bin/pip install pytest -# " -# PY_CMD="/venv/bin/python" -# elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then -# echo "Setting up RHEL-based system..." -# docker exec test-$(ARCH) bash -c " -# set -euo pipefail -# echo 'Installing Python on UBI/RHEL...' -# if command -v dnf >/dev/null; then -# dnf clean all -# rm -rf /var/cache/dnf -# dnf -y makecache - -# dnf list --showduplicates python3.11 python3.12 || true - -# # NOTE: do NOT install 'curl' to avoid curl-minimal conflict -# if dnf -y install python3.12 python3.12-pip unixODBC-devel; then -# PY=python3.12 -# echo 'Installed Python 3.12' -# elif dnf -y install python3.11 python3.11-pip unixODBC-devel; then -# PY=python3.11 -# echo 'Installed Python 3.11' -# else -# dnf -y install python3 python3-pip unixODBC-devel -# PY=python3 -# echo 'Falling back to default Python' -# fi - -# \$PY -m venv /venv -# /venv/bin/python -m pip install -U 'pip>=25' pytest -# /venv/bin/python --version -# /venv/bin/pip --version -# else -# echo 'ERROR: dnf not found' -# exit 1 -# fi -# " -# PY_CMD="/venv/bin/python" -# else -# echo "Setting up Debian/Ubuntu..." -# docker exec test-$(ARCH) bash -c " -# export DEBIAN_FRONTEND=noninteractive -# apt-get update -# apt-get install -y python3 python3-pip python3-venv python3-full unixodbc-dev curl -# python3 -m venv /venv -# /venv/bin/pip install pytest -# " -# PY_CMD="/venv/bin/python" -# fi - -# # Install the wheel (find the appropriate one for this architecture) -# if [[ "$(BASE_IMAGE)" == alpine* ]]; then -# SHELL_CMD="sh -c" -# WHEEL_PATTERN="*musllinux*$(ARCH)*.whl" -# else -# SHELL_CMD="bash -c" -# WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" -# fi - -# # Install the appropriate wheel in isolated directory -# docker exec test-$(ARCH) $SHELL_CMD " -# # Create isolated directory for wheel testing -# mkdir -p /test_whl -# cd /test_whl + # Start test container with retry logic + for i in {1..3}; do + if docker run -d --name test-$(ARCH) \ + --platform $(DOCKER_PLATFORM) \ + --network bridge \ + -v $(System.ArtifactsDirectory):/artifacts:ro \ + $(BASE_IMAGE) \ + tail -f /dev/null; then + echo "Container started successfully on attempt $i" + break + else + echo "Failed to start container on attempt $i, retrying..." + docker rm test-$(ARCH) 2>/dev/null || true + sleep 5 + fi + done + + # Verify container is running + if ! docker ps | grep -q test-$(ARCH); then + echo "ERROR: Container test-$(ARCH) is not running" + docker logs test-$(ARCH) || true + exit 1 + fi + + # Install Python and dependencies based on OS + if [[ "$(BASE_IMAGE)" == alpine* ]]; then + echo "Setting up Alpine Linux..." + docker exec test-$(ARCH) sh -c " + apk update && apk add --no-cache python3 py3-pip python3-dev unixodbc-dev curl libtool libltdl krb5-libs + python3 -m venv /venv + /venv/bin/pip install pytest + " + PY_CMD="/venv/bin/python" + elif [[ "$(BASE_IMAGE)" == *ubi* ]] || [[ "$(BASE_IMAGE)" == *rocky* ]] || [[ "$(BASE_IMAGE)" == *alma* ]]; then + echo "Setting up RHEL-based system..." + docker exec test-$(ARCH) bash -c " + set -euo pipefail + echo 'Installing Python on UBI/RHEL...' + if command -v dnf >/dev/null; then + dnf clean all + rm -rf /var/cache/dnf + dnf -y makecache + + dnf list --showduplicates python3.11 python3.12 || true + + # NOTE: do NOT install 'curl' to avoid curl-minimal conflict + if dnf -y install python3.12 python3.12-pip unixODBC-devel; then + PY=python3.12 + echo 'Installed Python 3.12' + elif dnf -y install python3.11 python3.11-pip unixODBC-devel; then + PY=python3.11 + echo 'Installed Python 3.11' + else + dnf -y install python3 python3-pip unixODBC-devel + PY=python3 + echo 'Falling back to default Python' + fi + + \$PY -m venv /venv + /venv/bin/python -m pip install -U 'pip>=25' pytest + /venv/bin/python --version + /venv/bin/pip --version + else + echo 'ERROR: dnf not found' + exit 1 + fi + " + PY_CMD="/venv/bin/python" + else + echo "Setting up Debian/Ubuntu..." + docker exec test-$(ARCH) bash -c " + export DEBIAN_FRONTEND=noninteractive + apt-get update + apt-get install -y python3 python3-pip python3-venv python3-full unixodbc-dev curl + python3 -m venv /venv + /venv/bin/pip install pytest + " + PY_CMD="/venv/bin/python" + fi + + # Install the wheel (find the appropriate one for this architecture) + if [[ "$(BASE_IMAGE)" == alpine* ]]; then + SHELL_CMD="sh -c" + WHEEL_PATTERN="*musllinux*$(ARCH)*.whl" + else + SHELL_CMD="bash -c" + WHEEL_PATTERN="*manylinux*$(ARCH)*.whl" + fi + + # Install the appropriate wheel in isolated directory + docker exec test-$(ARCH) $SHELL_CMD " + # Create isolated directory for wheel testing + mkdir -p /test_whl + cd /test_whl -# echo 'Available wheels:' -# ls -la /artifacts/mssql-python-wheels-dist/*.whl -# echo 'Installing package (letting pip auto-select in isolated environment):' -# $PY_CMD -m pip install mssql_python --find-links /artifacts/mssql-python-wheels-dist --no-index --no-deps + echo 'Available wheels:' + ls -la /artifacts/mssql-python-wheels-dist/*.whl + echo 'Installing package (letting pip auto-select in isolated environment):' + $PY_CMD -m pip install mssql_python --find-links /artifacts/mssql-python-wheels-dist --no-index --no-deps -# # Verify package installation location -# echo 'Installed package location:' -# $PY_CMD -c 'import mssql_python; print(\"Package location:\", mssql_python.__file__)' + # Verify package installation location + echo 'Installed package location:' + $PY_CMD -c 'import mssql_python; print(\"Package location:\", mssql_python.__file__)' -# # Test basic import -# $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' -# " + # Test basic import + $PY_CMD -c 'import mssql_python; print(\"Package imported successfully\")' + " -# displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' -# env: -# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + displayName: 'Test wheel installation and basic functionality on $(BASE_IMAGE)' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' -# # Run pytest with source code while testing installed wheel -# - script: | -# set -euxo pipefail + # Run pytest with source code while testing installed wheel + - script: | + set -euxo pipefail -# # Copy source code to container for pytest -# echo "Copying source code to container for pytest..." -# docker cp $(Build.SourcesDirectory)/. test-$(ARCH):/workspace/ + # Copy source code to container for pytest + echo "Copying source code to container for pytest..." + docker cp $(Build.SourcesDirectory)/. test-$(ARCH):/workspace/ -# # Set shell command based on OS and define Python command -# if [[ "$(BASE_IMAGE)" == alpine* ]]; then -# SHELL_CMD="sh -c" -# PY_CMD="/venv/bin/python" -# else -# SHELL_CMD="bash -c" -# PY_CMD="/venv/bin/python" -# fi + # Set shell command based on OS and define Python command + if [[ "$(BASE_IMAGE)" == alpine* ]]; then + SHELL_CMD="sh -c" + PY_CMD="/venv/bin/python" + else + SHELL_CMD="bash -c" + PY_CMD="/venv/bin/python" + fi -# docker exec test-$(ARCH) $SHELL_CMD " -# # Go to workspace root where source code is -# cd /workspace + docker exec test-$(ARCH) $SHELL_CMD " + # Go to workspace root where source code is + cd /workspace -# echo 'Running pytest suite with installed wheel...' -# echo 'Current directory:' \$(pwd) -# echo 'Python version:' -# $PY_CMD --version + echo 'Running pytest suite with installed wheel...' + echo 'Current directory:' \$(pwd) + echo 'Python version:' + $PY_CMD --version -# # Verify we're importing the installed wheel, not local source -# echo 'Package import verification:' -# $PY_CMD -c 'import mssql_python; print(\"Testing installed wheel from:\", mssql_python.__file__)' + # Verify we're importing the installed wheel, not local source + echo 'Package import verification:' + $PY_CMD -c 'import mssql_python; print(\"Testing installed wheel from:\", mssql_python.__file__)' -# # Install test requirements -# if [ -f requirements.txt ]; then -# echo 'Installing test requirements...' -# $PY_CMD -m pip install -r requirements.txt || echo 'Failed to install some requirements' -# fi + # Install test requirements + if [ -f requirements.txt ]; then + echo 'Installing test requirements...' + $PY_CMD -m pip install -r requirements.txt || echo 'Failed to install some requirements' + fi -# # Ensure pytest is available -# $PY_CMD -m pip install pytest || echo 'pytest installation failed' + # Ensure pytest is available + $PY_CMD -m pip install pytest || echo 'pytest installation failed' -# # List available test files -# echo 'Available test files:' -# find tests/ -name 'test_*.py' 2>/dev/null || echo 'No test files found in tests/' + # List available test files + echo 'Available test files:' + find tests/ -name 'test_*.py' 2>/dev/null || echo 'No test files found in tests/' -# # Run pytest -# if [ -d tests/ ]; then -# echo 'Starting pytest...' -# $PY_CMD -m pytest -v || echo 'Some tests failed - this may be expected in containerized environment' -# else -# echo 'No tests directory found, skipping pytest' -# fi -# " -# displayName: 'Run pytest suite on $(BASE_IMAGE) $(ARCH)' -# env: -# DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' -# continueOnError: true # Don't fail pipeline if tests fail - -# # Cleanup -# - script: | -# docker stop test-$(ARCH) sqlserver || true -# docker rm test-$(ARCH) sqlserver || true -# displayName: 'Cleanup containers' -# condition: always() + # Run pytest + if [ -d tests/ ]; then + echo 'Starting pytest...' + $PY_CMD -m pytest -v || echo 'Some tests failed - this may be expected in containerized environment' + else + echo 'No tests directory found, skipping pytest' + fi + " + displayName: 'Run pytest suite on $(BASE_IMAGE) $(ARCH)' + env: + DB_CONNECTION_STRING: 'Driver=ODBC Driver 18 for SQL Server;Server=localhost;Database=TestDB;Uid=SA;Pwd=$(DB_PASSWORD);TrustServerCertificate=yes' + continueOnError: true # Don't fail pipeline if tests fail + + # Cleanup + - script: | + docker stop test-$(ARCH) sqlserver || true + docker rm test-$(ARCH) sqlserver || true + displayName: 'Cleanup containers' + condition: always()

yF)`gjndG*`hGB3^sCLnryDcI&YJ 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 kQ{?>QfAKDLkiM427O!Uvg6QwOg1|z2gSnE? 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