diff --git a/.github/workflows/gapic-generator-tests.yml b/.github/workflows/gapic-generator-tests.yml index 6379fa492d41..e5029174f61d 100644 --- a/.github/workflows/gapic-generator-tests.yml +++ b/.github/workflows/gapic-generator-tests.yml @@ -19,10 +19,6 @@ env: PRERELEASE_PYTHON: 3.15 ALL_PYTHON: "['3.10', '3.11', '3.12', '3.13', '3.14', '3.15']" TRIMMED_PYTHON: "['3.10', '3.14', '3.15']" - # Workaround: Allows libcst to compile on Python 3.15+ while PyO3 catches up - # Can be removed once libcst releases a version with native Python 3.15 wheels - # Follow https://github.com/Instagram/LibCST/issues/1445 for updates. - PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1" jobs: # Check if the gapic-generator was changed. If so, execute specialized tests diff --git a/.github/workflows/import-profiler.yml b/.github/workflows/import-profiler.yml index 33bf120a0e05..c527c1b43fe1 100644 --- a/.github/workflows/import-profiler.yml +++ b/.github/workflows/import-profiler.yml @@ -89,8 +89,6 @@ jobs: TARGET_BRANCH: ${{ github.base_ref || github.event.merge_group.base_ref }} TEST_TYPE: import_profile PY_VERSION: "3.15" - # Workaround: Allows libcst to compile on Python 3.15+ while PyO3 catches up - PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1" PACKAGE_LIST: ${{ matrix.package_shard.packages }} run: | ci/run_conditional_tests.sh diff --git a/.github/workflows/prerelease-deps.yml b/.github/workflows/prerelease-deps.yml index ba816dddbb25..a7098fbce4c2 100644 --- a/.github/workflows/prerelease-deps.yml +++ b/.github/workflows/prerelease-deps.yml @@ -36,8 +36,6 @@ env: PACKAGE_DIRS: packages NOX_DEFAULT_VENV_BACKEND: "virtualenv" UV_PRERELEASE: "allow" - # Workaround: Allows libcst/Rust extensions to compile on Python 3.15+ while PyO3 catches up - PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1" jobs: prerelease: @@ -178,7 +176,11 @@ jobs: } >> "$GITHUB_OUTPUT" - name: Create issue on failure - if: ${{ steps.run-tests.outcome == 'failure' && github.repository == 'googleapis/google-cloud-python' }} + # Only file an issue from the nightly schedule or a manual dispatch, never from a + # pull request. PRs that touch `ci/**` or this workflow trigger the check for + # validation purposes only; filing a `priority: p1` issue from them would duplicate + # the nightly report. The job summary written above still surfaces PR failures. + if: ${{ steps.run-tests.outcome == 'failure' && github.event_name != 'pull_request' && github.repository == 'googleapis/google-cloud-python' }} uses: googleapis/librarian/.github/actions/create-issue-on-failure@bb2ee61752bd0f5387195b54c509e4d01a52b41d with: title: "prerelease_deps check failed" diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 68ccc4969d7f..507aff5300b8 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -133,31 +133,6 @@ jobs: - name: Install nox and nox-uv run: | uv pip install --system nox nox-uv - # Caches local wheels for Python 3.15+ to avoid repeatedly downloading or building heavy libraries. - # Follow https://github.com/grpc/grpc/issues/41010 for updates. - - name: Cache Built Python 3.15 Wheels - if: matrix.python == '3.15' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 - with: - path: .uv-wheel-cache - key: ${{ runner.os }}-uv-wheels-3.15-${{ hashFiles('packages/**/testing/constraints*.txt') }} - restore-keys: | - ${{ runner.os }}-uv-wheels-3.15- - # TODO: Remove this step once official Python 3.15 wheels for grpcio are published to PyPI. - # See https://github.com/grpc/grpc/issues/41010#issuecomment-4848264910 for details. - - name: Install grpcio wheel for Python 3.15 - if: matrix.python == '3.15' - run: | - mkdir -p .uv-wheel-cache - WHEEL_FILE=".uv-wheel-cache/grpcio-1.83.0.dev0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl" - if [ ! -f "$WHEEL_FILE" ]; then - curl -L "https://packages.grpc.io/archive/2026/06/5ccdab32010f762634e1082d19be53cf60458456-b37e49c7-5e62-4cbe-870a-c599bb907b04/python/grpcio/grpcio-1.83.0.dev0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl" -o "$WHEEL_FILE" - fi - echo "d7706633cd5d97a8b8d3c6ed36c5940722a9b5cbb47f0d10bc433ee27af36ff0 $WHEEL_FILE" | sha256sum -c - uv pip install --system "$WHEEL_FILE" - echo "UV_FIND_LINKS=${{ github.workspace }}/.uv-wheel-cache" >> $GITHUB_ENV - echo "UV_CACHE_DIR=${{ github.workspace }}/.uv-wheel-cache" >> $GITHUB_ENV - echo "UV_PRERELEASE=allow" >> $GITHUB_ENV - name: Run unit tests for ${{ matrix.package_shard.description }} env: BUILD_TYPE: presubmit diff --git a/.librarian/generator-input/client-post-processing/bigtable-integration.yaml b/.librarian/generator-input/client-post-processing/bigtable-integration.yaml index 16fdf18b574f..2ff18605f256 100644 --- a/.librarian/generator-input/client-post-processing/bigtable-integration.yaml +++ b/.librarian/generator-input/client-post-processing/bigtable-integration.yaml @@ -609,11 +609,6 @@ replacements: def unit(session, protobuf_implementation): # Install all test dependencies, then install this package in-place. - # TODO(https://github.com/googleapis/google-cloud-python/issues/17741): - # Remove once `google-crc32c` wheels are published for 3.15 - if session.python == "3.15": - session.skip("Skipping 3.15 until wheels are available for google-crc32c.") - constraints_path = str( CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" ) diff --git a/packages/django-google-spanner/setup.py b/packages/django-google-spanner/setup.py index 228cfd22bee5..e5c88ef94c02 100644 --- a/packages/django-google-spanner/setup.py +++ b/packages/django-google-spanner/setup.py @@ -71,6 +71,7 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Topic :: Utilities", "Framework :: Django", "Framework :: Django :: 5.2", diff --git a/packages/google-api-core/pyproject.toml b/packages/google-api-core/pyproject.toml index 9bff8ce994cb..b281b6b5d66e 100644 --- a/packages/google-api-core/pyproject.toml +++ b/packages/google-api-core/pyproject.toml @@ -39,6 +39,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Operating System :: OS Independent", "Topic :: Internet", ] diff --git a/packages/google-auth-httplib2/setup.py b/packages/google-auth-httplib2/setup.py index c74a0f2f8012..ffda4ad44be7 100644 --- a/packages/google-auth-httplib2/setup.py +++ b/packages/google-auth-httplib2/setup.py @@ -47,6 +47,7 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", diff --git a/packages/google-auth-oauthlib/setup.py b/packages/google-auth-oauthlib/setup.py index 11b9fba61512..a619e210f086 100644 --- a/packages/google-auth-oauthlib/setup.py +++ b/packages/google-auth-oauthlib/setup.py @@ -64,6 +64,7 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", diff --git a/packages/google-auth/setup.py b/packages/google-auth/setup.py index 8807e7eb342b..64379d666a59 100644 --- a/packages/google-auth/setup.py +++ b/packages/google-auth/setup.py @@ -121,6 +121,7 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", diff --git a/packages/google-cloud-bigtable/noxfile.py b/packages/google-cloud-bigtable/noxfile.py index fb5a3cab9c4b..07d5f5bc4c15 100644 --- a/packages/google-cloud-bigtable/noxfile.py +++ b/packages/google-cloud-bigtable/noxfile.py @@ -249,11 +249,6 @@ def install_unittest_dependencies(session, *constraints): def unit(session, protobuf_implementation): # Install all test dependencies, then install this package in-place. - # TODO(https://github.com/googleapis/google-cloud-python/issues/17741): - # Remove once `google-crc32c` wheels are published for 3.15 - if session.python == "3.15": - session.skip("Skipping 3.15 until wheels are available for google-crc32c.") - constraints_path = str( CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" ) diff --git a/packages/google-cloud-core/setup.py b/packages/google-cloud-core/setup.py index 4d28bc82c212..5b85859683d3 100644 --- a/packages/google-cloud-core/setup.py +++ b/packages/google-cloud-core/setup.py @@ -80,6 +80,7 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Operating System :: OS Independent", "Topic :: Internet", ], diff --git a/packages/google-cloud-dns/setup.py b/packages/google-cloud-dns/setup.py index 21f64e31a38d..254ce81fb844 100644 --- a/packages/google-cloud-dns/setup.py +++ b/packages/google-cloud-dns/setup.py @@ -81,6 +81,7 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Operating System :: OS Independent", "Topic :: Internet", ], diff --git a/packages/google-cloud-documentai-toolbox/setup.py b/packages/google-cloud-documentai-toolbox/setup.py index 8765caa5b94a..5842ac56fbcf 100644 --- a/packages/google-cloud-documentai-toolbox/setup.py +++ b/packages/google-cloud-documentai-toolbox/setup.py @@ -58,7 +58,8 @@ "pandas[performance,gcp]>=2.0.0, <3.0.0; python_version < '3.15'", # pandas[performance] requires numba which does not have 3.15 support yet "pandas[gcp]>=2.0.0, <3.0.0;python_version>='3.15'", - "pyarrow>=15.0.0, <23.0.0", + # pyarrow is transitive dependency; not accessed by the library directly + "pyarrow>=15.0.0", "tabulate>=0.9.0, <1.0.0", "proto-plus>=1.26.1, <2.0.0", "grpc-google-iam-v1>=0.14.2, <1.0.0", diff --git a/packages/google-cloud-ndb/setup.py b/packages/google-cloud-ndb/setup.py index 4f886d22596b..cb442195107c 100644 --- a/packages/google-cloud-ndb/setup.py +++ b/packages/google-cloud-ndb/setup.py @@ -73,6 +73,7 @@ def main(): "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Operating System :: OS Independent", "Topic :: Internet", ], diff --git a/packages/google-cloud-runtimeconfig/setup.py b/packages/google-cloud-runtimeconfig/setup.py index 8fb17e8cd5a0..b46ef501aae0 100644 --- a/packages/google-cloud-runtimeconfig/setup.py +++ b/packages/google-cloud-runtimeconfig/setup.py @@ -78,6 +78,7 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Operating System :: OS Independent", "Topic :: Internet", ], diff --git a/packages/google-cloud-spanner-dbapi-driver/setup.py b/packages/google-cloud-spanner-dbapi-driver/setup.py index cfc0b06a229b..1761fca917ba 100644 --- a/packages/google-cloud-spanner-dbapi-driver/setup.py +++ b/packages/google-cloud-spanner-dbapi-driver/setup.py @@ -70,6 +70,7 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Operating System :: OS Independent", "Topic :: Database", ], diff --git a/packages/google-cloud-testutils/setup.py b/packages/google-cloud-testutils/setup.py index c11ccac6c4f2..0512da2d4a9a 100644 --- a/packages/google-cloud-testutils/setup.py +++ b/packages/google-cloud-testutils/setup.py @@ -71,6 +71,7 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Topic :: Internet", "Topic :: Software Development :: Libraries :: Python Modules", ], diff --git a/packages/google-resumable-media/setup.py b/packages/google-resumable-media/setup.py index a4b25e5b90e1..d7a21f741401 100644 --- a/packages/google-resumable-media/setup.py +++ b/packages/google-resumable-media/setup.py @@ -63,6 +63,7 @@ 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', 'Programming Language :: Python :: 3.14', + 'Programming Language :: Python :: 3.15', 'Topic :: Internet', ], ) diff --git a/packages/proto-plus/pyproject.toml b/packages/proto-plus/pyproject.toml index 4f0c30439ba1..553962d09191 100644 --- a/packages/proto-plus/pyproject.toml +++ b/packages/proto-plus/pyproject.toml @@ -34,6 +34,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Operating System :: OS Independent", "Topic :: Software Development :: Code Generators", "Topic :: Software Development :: Libraries :: Python Modules",