@@ -328,3 +328,67 @@ def docfx(session):
328328 os .path .join ("docs" , "" ),
329329 os .path .join ("docs" , "_build" , "html" , "" ),
330330 )
331+
332+
333+ @nox .session (python = SYSTEM_TEST_PYTHON_VERSIONS )
334+ def prerelease_deps (session ):
335+ """Run all tests with prerelease versions of dependencies installed."""
336+
337+ prerel_deps = [
338+ "protobuf" ,
339+ "googleapis-common-protos" ,
340+ "google-auth" ,
341+ "grpcio" ,
342+ "grpcio-status" ,
343+ "google-api-core" ,
344+ "proto-plus" ,
345+ # dependencies of google-auth
346+ "cryptography" ,
347+ "pyasn1" ,
348+ ]
349+
350+ for dep in prerel_deps :
351+ session .install ("--pre" , "--no-deps" , "--upgrade" , dep )
352+
353+ # Remaining dependencies
354+ other_deps = ["requests" ]
355+ session .install (* other_deps )
356+
357+ session .install (* UNIT_TEST_STANDARD_DEPENDENCIES )
358+ session .install (* SYSTEM_TEST_STANDARD_DEPENDENCIES )
359+
360+ # Because we test minimum dependency versions on the minimum Python
361+ # version, the first version we test with in the unit tests sessions has a
362+ # constraints file containing all dependencies and extras.
363+ with open (
364+ CURRENT_DIRECTORY
365+ / "testing"
366+ / f"constraints-{ UNIT_TEST_PYTHON_VERSIONS [0 ]} .txt" ,
367+ encoding = "utf-8" ,
368+ ) as constraints_file :
369+ constraints_text = constraints_file .read ()
370+
371+ # Ignore leading whitespace and comment lines.
372+ deps = [
373+ match .group (1 )
374+ for match in re .finditer (
375+ r"^\s*(\S+)(?===\S+)" , constraints_text , flags = re .MULTILINE
376+ )
377+ ]
378+
379+ # Don't overwrite prerelease packages.
380+ deps = [dep for dep in deps if dep not in prerel_deps ]
381+ # We use --no-deps to ensure that pre-release versions aren't overwritten
382+ # by the version ranges in setup.py.
383+ session .install (* deps )
384+ session .install ("--no-deps" , "-e" , ".[all]" )
385+
386+ # Print out prerelease package versions
387+ session .run (
388+ "python" , "-c" , "import google.protobuf; print(google.protobuf.__version__)"
389+ )
390+ session .run ("python" , "-c" , "import grpc; print(grpc.__version__)" )
391+
392+ session .run ("py.test" , "tests/unit" )
393+ session .run ("py.test" , "tests/system" )
394+ session .run ("py.test" , "samples/snippets" )
0 commit comments