diff --git a/.github/workflows/generated_pr_matrix.json b/.github/workflows/generated_pr_matrix.json index d2a10535fb..93c625af2a 100644 --- a/.github/workflows/generated_pr_matrix.json +++ b/.github/workflows/generated_pr_matrix.json @@ -1,4 +1,22 @@ [ + { + "os_image_name": "macos-latest", + "os_download_name": "macosx_x86_64", + "python-version": "3.12", + "cloud-provider": "aws" + }, + { + "os_image_name": "macos-latest", + "os_download_name": "macosx_x86_64", + "python-version": "3.13", + "cloud-provider": "aws" + }, + { + "os_image_name": "macos-latest", + "os_download_name": "macosx_x86_64", + "python-version": "3.14", + "cloud-provider": "aws" + }, { "os_image_name": "ubuntu-latest", "os_download_name": "manylinux_x86_64", @@ -8,31 +26,37 @@ { "os_image_name": "ubuntu-latest", "os_download_name": "manylinux_x86_64", - "python-version": "3.14", + "python-version": "3.10", "cloud-provider": "aws" }, { - "os_image_name": "macos-latest", - "os_download_name": "macosx_x86_64", - "python-version": "3.9", - "cloud-provider": "azure" + "os_image_name": "ubuntu-latest", + "os_download_name": "manylinux_x86_64", + "python-version": "3.11", + "cloud-provider": "aws" }, { - "os_image_name": "macos-latest", - "os_download_name": "macosx_x86_64", - "python-version": "3.14", - "cloud-provider": "azure" + "os_image_name": "ubuntu-latest", + "os_download_name": "manylinux_x86_64", + "python-version": "3.12", + "cloud-provider": "aws" }, { "os_image_name": "windows-latest", "os_download_name": "win_amd64", "python-version": "3.9", - "cloud-provider": "gcp" + "cloud-provider": "aws" }, { "os_image_name": "windows-latest", "os_download_name": "win_amd64", - "python-version": "3.14", - "cloud-provider": "gcp" + "python-version": "3.12", + "cloud-provider": "aws" + }, + { + "os_image_name": "windows-latest", + "os_download_name": "win_amd64", + "python-version": "3.13", + "cloud-provider": "aws" } ] \ No newline at end of file diff --git a/ci/generate_full_matrix.py b/ci/generate_full_matrix.py index 2ba3c952b4..e9eb0f8210 100755 --- a/ci/generate_full_matrix.py +++ b/ci/generate_full_matrix.py @@ -128,13 +128,16 @@ def generate_matrix(pr_only: bool = False): matrix = [] if pr_only: - csp_to_test = list(CSP) - for system in OperatingSystem: - os_config = system.value - csp_name = csp_to_test.pop(0).value if csp_to_test else CSP.AWS.value - for py_version in Python: - if py_version.value.test_on_pr: - _add_to_matrix(matrix, os_config, csp_name, py_version.value) + pr_jobs = [ + (OperatingSystem.MACOS, ["3.12", "3.13", "3.14"]), + (OperatingSystem.UBUNTU, ["3.9", "3.10", "3.11", "3.12"]), + (OperatingSystem.WINDOWS, ["3.9", "3.12", "3.13"]), + ] + py_by_ver = {p.value.version: p.value for p in Python} + for os_enum, versions in pr_jobs: + for ver in versions: + if ver in py_by_ver: + _add_to_matrix(matrix, os_enum.value, CSP.AWS.value, py_by_ver[ver]) else: operating_systems = [os_enum.value for os_enum in OperatingSystem] python_versions = [py_enum.value for py_enum in Python] diff --git a/tox.ini b/tox.ini index b65e022fc6..3fd53335a0 100644 --- a/tox.ini +++ b/tox.ini @@ -31,7 +31,7 @@ extras = package = wheel setenv = COVERAGE_FILE = {env:COVERAGE_FILE:{toxworkdir}/.coverage.{envname}} - ci: SNOWFLAKE_PYTEST_OPTS = -vvv + ci: SNOWFLAKE_PYTEST_OPTS = # Set test type, either notset, unit, integ, or both unit-integ: SNOWFLAKE_TEST_TYPE = (unit or integ) !unit-!integ: SNOWFLAKE_TEST_TYPE = (unit or integ) @@ -40,7 +40,7 @@ setenv = unit: SNOWFLAKE_TEST_TYPE = unit integ: SNOWFLAKE_TEST_TYPE = integ single: SNOWFLAKE_TEST_TYPE = single - parallel: SNOWFLAKE_PYTEST_OPTS = {env:SNOWFLAKE_PYTEST_OPTS:} -n auto + parallel: SNOWFLAKE_PYTEST_OPTS = {env:SNOWFLAKE_PYTEST_OPTS:} -n auto --dist worksteal # Add common parts into pytest command SNOWFLAKE_PYTEST_COV_LOCATION = {env:JUNIT_REPORT_DIR:{toxworkdir}}/junit.{envname}-{env:cloud_provider:dev}.xml SNOWFLAKE_PYTEST_COV_CMD = --cov snowflake.connector --junitxml {env:SNOWFLAKE_PYTEST_COV_LOCATION} --cov-report= @@ -94,12 +94,12 @@ deps = skip_install = True setenv = {[testenv]setenv} - SNOWFLAKE_PYTEST_OPTS = {env:SNOWFLAKE_PYTEST_OPTS:} -n auto + SNOWFLAKE_PYTEST_OPTS = {env:SNOWFLAKE_PYTEST_OPTS:} -n auto --dist worksteal passenv = {[testenv]passenv} commands = # Unit and pandas tests are already skipped for the old driver (see test/conftest.py). Avoid walking those # directories entirely to avoid loading any potentially incompatible subdirectories' own conftest.py files. - {env:SNOWFLAKE_PYTEST_CMD_IGNORE_AIO} --ignore=test/unit --ignore=test/pandas -m "not skipolddriver" -vvv {posargs:} test + {env:SNOWFLAKE_PYTEST_CMD_IGNORE_AIO} --ignore=test/unit --ignore=test/pandas -m "not skipolddriver" {posargs:} test [testenv:noarrowextension] basepython = python3.9 @@ -119,8 +119,8 @@ extras= pandas secure-local-storage commands = - {env:SNOWFLAKE_PYTEST_CMD} -n auto -m "aio and unit and not sso and not pandas and not lambda" -vvv {posargs:} test - {env:SNOWFLAKE_PYTEST_CMD} -n auto -m "aio and unit and not sso and not pandas and not lambda" -vvv {posargs:} test + {env:SNOWFLAKE_PYTEST_CMD} -n auto --dist worksteal -m "aio and unit and not sso and not pandas and not lambda" {posargs:} test + {env:SNOWFLAKE_PYTEST_CMD} -n auto --dist worksteal -m "aio and unit and not sso and not pandas and not lambda" {posargs:} test [testenv:aio-unsupported-python] description = Run aio connector on unsupported python versions @@ -185,8 +185,9 @@ depends = py39, py310, py311, py312, py313, py314 [pytest] log_level = info -addopts = -ra --strict-markers +addopts = -ra --strict-markers -vvv junit_family = xunit2 +timeout = 1200 filterwarnings = error::UserWarning:cryptography.* error::cryptography.utils.CryptographyDeprecationWarning