@@ -355,3 +355,67 @@ def docfx(session):
355355 os .path .join ("docs" , "" ),
356356 os .path .join ("docs" , "_build" , "html" , "" ),
357357 )
358+
359+
360+ @nox .session (python = SYSTEM_TEST_PYTHON_VERSIONS )
361+ def prerelease_deps (session ):
362+ """Run all tests with prerelease versions of dependencies installed."""
363+
364+ prerel_deps = [
365+ "protobuf" ,
366+ "googleapis-common-protos" ,
367+ "google-auth" ,
368+ "grpcio" ,
369+ "grpcio-status" ,
370+ "google-api-core" ,
371+ "proto-plus" ,
372+ # dependencies of google-auth
373+ "cryptography" ,
374+ "pyasn1" ,
375+ ]
376+
377+ for dep in prerel_deps :
378+ session .install ("--pre" , "--no-deps" , "--upgrade" , dep )
379+
380+ # Remaining dependencies
381+ other_deps = ["requests" ]
382+ session .install (* other_deps )
383+
384+ session .install (* UNIT_TEST_STANDARD_DEPENDENCIES )
385+ session .install (* SYSTEM_TEST_STANDARD_DEPENDENCIES )
386+
387+ # Because we test minimum dependency versions on the minimum Python
388+ # version, the first version we test with in the unit tests sessions has a
389+ # constraints file containing all dependencies and extras.
390+ with open (
391+ CURRENT_DIRECTORY
392+ / "testing"
393+ / f"constraints-{ UNIT_TEST_PYTHON_VERSIONS [0 ]} .txt" ,
394+ encoding = "utf-8" ,
395+ ) as constraints_file :
396+ constraints_text = constraints_file .read ()
397+
398+ # Ignore leading whitespace and comment lines.
399+ deps = [
400+ match .group (1 )
401+ for match in re .finditer (
402+ r"^\s*(\S+)(?===\S+)" , constraints_text , flags = re .MULTILINE
403+ )
404+ ]
405+
406+ # Don't overwrite prerelease packages.
407+ deps = [dep for dep in deps if dep not in prerel_deps ]
408+ # We use --no-deps to ensure that pre-release versions aren't overwritten
409+ # by the version ranges in setup.py.
410+ session .install (* deps )
411+ session .install ("--no-deps" , "-e" , ".[all]" )
412+
413+ # Print out prerelease package versions
414+ session .run (
415+ "python" , "-c" , "import google.protobuf; print(google.protobuf.__version__)"
416+ )
417+ session .run ("python" , "-c" , "import grpc; print(grpc.__version__)" )
418+
419+ session .run ("py.test" , "tests/unit" )
420+ session .run ("py.test" , "tests/system" )
421+ session .run ("py.test" , "samples/snippets" )
0 commit comments