Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
495c252
chore(python): Add support for Python 3.14
chalmerlowe Oct 29, 2025
86f6396
fix(ci): Update noxfile for 3.14 and remove unneeded owlbot replace
chalmerlowe Oct 29, 2025
a5c2db3
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Oct 29, 2025
aa4f080
feat(ci): Add GitHub Actions unit test workflow
chalmerlowe Oct 29, 2025
5c8e4ad
Apply suggestion from @chalmerlowe
chalmerlowe Oct 29, 2025
b065877
revert(ci): Remove unused GitHub Actions unittest workflow
chalmerlowe Oct 29, 2025
4003d10
docs(contributing): Update supported Python versions and nox commands
chalmerlowe Oct 29, 2025
174ff3c
chore(ci): Update owlbot excludes for Kokoro files
chalmerlowe Oct 29, 2025
7204b6e
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Oct 29, 2025
3a5da1a
fix(ci): Restore original owlbot excludes for Kokoro files
chalmerlowe Oct 29, 2025
4f6e646
adds pip freeze command to help with troubleshooting
chalmerlowe Nov 5, 2025
6ba50c7
resolve merge conflict in librarian
chalmerlowe Dec 16, 2025
140736b
chore(python): Add support for Python 3.14
chalmerlowe Dec 16, 2025
507aa77
chore: removes unneeded system test configs, adds new configs, modifi…
chalmerlowe Dec 16, 2025
4e33e90
updates to CONTRIBUTING
chalmerlowe Dec 16, 2025
08e72da
updates to CONTRIBUTING python versions
chalmerlowe Dec 16, 2025
e9cee3b
updates flake8 version to a more modern version due to previously fai…
chalmerlowe Dec 16, 2025
cb05791
Merge branch 'main' into feat/add-python-3.14
parthea Dec 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/sync-repo-settings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ branchProtectionRules:
requiredStatusCheckContexts:
- 'Kokoro'
- 'cla/google'
- 'Kokoro system-3.12'
- 'Kokoro system-3.14'
- 'OwlBot Post Processor'
- pattern: python2
requiresCodeOwnerReviews: true
Expand Down
7 changes: 7 additions & 0 deletions .kokoro/presubmit/prerelease-deps.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Format: //devtools/kokoro/config/proto/build.proto

# Only run this nox session.
env_vars: {
key: "NOX_SESSION"
value: "prerelease_deps"
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Only run this nox session.
env_vars: {
key: "NOX_SESSION"
value: "system-3.12"
value: "system-3.14"
}

# Credentials needed to test universe domain.
Expand Down
7 changes: 7 additions & 0 deletions .kokoro/presubmit/system-3.9.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Format: //devtools/kokoro/config/proto/build.proto

# Only run this nox session.
env_vars: {
key: "NOX_SESSION"
value: "system-3.9"
}
7 changes: 4 additions & 3 deletions .librarian/generator-input/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@
BLACK_VERSION = "black==23.7.0"
BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"]

DEFAULT_PYTHON_VERSION = "3.12"
SYSTEM_TEST_PYTHON_VERSIONS = ["3.12"]
UNIT_TEST_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
DEFAULT_PYTHON_VERSION = "3.14"
SYSTEM_TEST_PYTHON_VERSIONS = ["3.9", "3.14"]
UNIT_TEST_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
CONFORMANCE_TEST_PYTHON_VERSIONS = ["3.12"]

CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
Expand All @@ -51,6 +51,7 @@
"unit-3.11",
"unit-3.12",
"unit-3.13",
"unit-3.14",
# cover must be last to avoid error `No data to report`
"cover",
]
Expand Down
1 change: 1 addition & 0 deletions .librarian/generator-input/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Operating System :: OS Independent",
"Topic :: Internet",
],
Expand Down
36 changes: 17 additions & 19 deletions CONTRIBUTING.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ In order to add a feature:
documentation.

- The feature must work fully on the following CPython versions:
3.7, 3.8, 3.9, 3.10, 3.11, 3.12 and 3.13 on both UNIX and Windows.
3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 and 3.14 on both UNIX and Windows.

- The feature must not add unnecessary dependencies (where
"unnecessary" is of course subjective, but new dependencies should
Expand Down Expand Up @@ -69,8 +69,7 @@ We use `nox <https://nox.readthedocs.io/en/latest/>`__ to instrument our tests.

- To test your changes, run unit tests with ``nox``::

$ nox -s unit-2.7
$ nox -s unit-3.7
$ nox -s unit-3.9
$ ...

.. note::
Expand Down Expand Up @@ -133,14 +132,11 @@ Running System Tests

- To run system tests, you can execute::

$ nox -s system-3.8
$ nox -s system-2.7
$ nox -s system-3.14

.. note::

System tests are only configured to run under Python 2.7 and
Python 3.8. For expediency, we do not run them in older versions
of Python 3.
System tests are configured to run under Python 3.14 in ``noxfile.py``.

This alone will not run the tests. You'll need to change some local
auth settings and change some configuration in your project to
Expand Down Expand Up @@ -202,25 +198,27 @@ Supported Python Versions

We support:

- `Python 3.5`_
- `Python 3.6`_
- `Python 3.7`_
- `Python 3.8`_
- `Python 3.9`_
- `Python 3.10`_
- `Python 3.11`_
- `Python 3.12`_
- `Python 3.13`_
- `Python 3.14`_

.. _Python 3.5: https://docs.python.org/3.5/
.. _Python 3.6: https://docs.python.org/3.6/
.. _Python 3.7: https://docs.python.org/3.7/
.. _Python 3.8: https://docs.python.org/3.8/

.. _Python 3.9: https://docs.python.org/3.9/
.. _Python 3.10: https://docs.python.org/3.10/
.. _Python 3.11: https://docs.python.org/3.11/
.. _Python 3.12: https://docs.python.org/3.12/
.. _Python 3.13: https://docs.python.org/3.13/
.. _Python 3.14: https://docs.python.org/3.14/

Supported versions can be found in our ``noxfile.py`` `config`_.

.. _config: https://github.com/googleapis/python-storage/blob/main/noxfile.py

Python 2.7 support is deprecated. All code changes should maintain Python 2.7 compatibility until January 1, 2020.

We also explicitly decided to support Python 3 beginning with version
3.5. Reasons for this include:
We also explicitly decided to support Python 3 beginning with version 3.9. Reasons for this include:

- Encouraging use of newest versions of Python 3
- Taking the lead of `prominent`_ open-source `projects`_
Expand Down
18 changes: 14 additions & 4 deletions noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,16 @@
BLACK_VERSION = "black==23.7.0"
BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"]

DEFAULT_PYTHON_VERSION = "3.12"
SYSTEM_TEST_PYTHON_VERSIONS = ["3.12"]
UNIT_TEST_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
DEFAULT_PYTHON_VERSION = "3.14"
SYSTEM_TEST_PYTHON_VERSIONS = ["3.9", "3.14"]
UNIT_TEST_PYTHON_VERSIONS = [
"3.9",
"3.10",
"3.11",
"3.12",
"3.13",
"3.14",
]
CONFORMANCE_TEST_PYTHON_VERSIONS = ["3.12"]

CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
Expand All @@ -51,6 +58,7 @@
"unit-3.11",
"unit-3.12",
"unit-3.13",
"unit-3.14",
# cover must be last to avoid error `No data to report`
"cover",
]
Expand All @@ -65,7 +73,7 @@ def lint(session):
"""
# Pin flake8 to 6.0.0
# See https://github.com/googleapis/python-storage/issues/1102
session.install("flake8==6.0.0", BLACK_VERSION)
session.install("flake8", BLACK_VERSION)
session.run(
"black",
"--check",
Expand Down Expand Up @@ -118,6 +126,8 @@ def default(session, install_extras=True):

session.install("-e", ".", "-c", constraints_path)

session.run("python", "-m", "pip", "freeze")

# This dependency is included in setup.py for backwards compatibility only
# and the client library is expected to pass all tests without it. See
# setup.py and README for details.
Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Operating System :: OS Independent",
"Topic :: Internet",
],
Expand Down
2 changes: 1 addition & 1 deletion testing/constraints-3.14.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
# Then this file should have google-cloud-foo>=1
google-api-core>=2
google-auth>=2
grpcio>=1
grpcio>=1.75.1
proto-plus>=1
protobuf>=6
grpc-google-iam-v1>=0