From c19196b3eb875214f5d9afca9a25c55507eb1f86 Mon Sep 17 00:00:00 2001
From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com>
Date: Sun, 12 Jun 2022 10:39:08 -0400
Subject: [PATCH] chore: add prerelease nox session (#204)

Source-Link: https://github.com/googleapis/synthtool/commit/050953d60f71b4ed4be563e032f03c192c50332f
Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:65e656411895bff71cffcae97246966460160028f253c2e45b7a25d805a5b142

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
---
 .../.github/.OwlBot.lock.yaml                 |  4 +-
 .../.kokoro/continuous/prerelease-deps.cfg    |  7 ++
 .../.kokoro/presubmit/prerelease-deps.cfg     |  7 ++
 packages/google-cloud-iam/noxfile.py          | 64 +++++++++++++++++++
 4 files changed, 80 insertions(+), 2 deletions(-)
 create mode 100644 packages/google-cloud-iam/.kokoro/continuous/prerelease-deps.cfg
 create mode 100644 packages/google-cloud-iam/.kokoro/presubmit/prerelease-deps.cfg

diff --git a/packages/google-cloud-iam/.github/.OwlBot.lock.yaml b/packages/google-cloud-iam/.github/.OwlBot.lock.yaml
index 757c9dca75ad..2185b591844c 100644
--- a/packages/google-cloud-iam/.github/.OwlBot.lock.yaml
+++ b/packages/google-cloud-iam/.github/.OwlBot.lock.yaml
@@ -13,5 +13,5 @@
 # limitations under the License.
 docker:
   image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest
-  digest: sha256:81ed5ecdfc7cac5b699ba4537376f3563f6f04122c4ec9e735d3b3dc1d43dd32
-# created: 2022-05-05T22:08:23.383410683Z
+  digest: sha256:65e656411895bff71cffcae97246966460160028f253c2e45b7a25d805a5b142
+# created: 2022-06-12T13:11:45.905884945Z
diff --git a/packages/google-cloud-iam/.kokoro/continuous/prerelease-deps.cfg b/packages/google-cloud-iam/.kokoro/continuous/prerelease-deps.cfg
new file mode 100644
index 000000000000..3595fb43f5c0
--- /dev/null
+++ b/packages/google-cloud-iam/.kokoro/continuous/prerelease-deps.cfg
@@ -0,0 +1,7 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+# Only run this nox session.
+env_vars: {
+    key: "NOX_SESSION"
+    value: "prerelease_deps"
+}
diff --git a/packages/google-cloud-iam/.kokoro/presubmit/prerelease-deps.cfg b/packages/google-cloud-iam/.kokoro/presubmit/prerelease-deps.cfg
new file mode 100644
index 000000000000..3595fb43f5c0
--- /dev/null
+++ b/packages/google-cloud-iam/.kokoro/presubmit/prerelease-deps.cfg
@@ -0,0 +1,7 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+# Only run this nox session.
+env_vars: {
+    key: "NOX_SESSION"
+    value: "prerelease_deps"
+}
diff --git a/packages/google-cloud-iam/noxfile.py b/packages/google-cloud-iam/noxfile.py
index 7c1742d2cc93..b99ccd3f35f8 100644
--- a/packages/google-cloud-iam/noxfile.py
+++ b/packages/google-cloud-iam/noxfile.py
@@ -325,3 +325,67 @@ def docfx(session):
         os.path.join("docs", ""),
         os.path.join("docs", "_build", "html", ""),
     )
+
+
+@nox.session(python=SYSTEM_TEST_PYTHON_VERSIONS)
+def prerelease_deps(session):
+    """Run all tests with prerelease versions of dependencies installed."""
+
+    prerel_deps = [
+        "protobuf",
+        "googleapis-common-protos",
+        "google-auth",
+        "grpcio",
+        "grpcio-status",
+        "google-api-core",
+        "proto-plus",
+        # dependencies of google-auth
+        "cryptography",
+        "pyasn1",
+    ]
+
+    for dep in prerel_deps:
+        session.install("--pre", "--no-deps", "--upgrade", dep)
+
+    # Remaining dependencies
+    other_deps = ["requests"]
+    session.install(*other_deps)
+
+    session.install(*UNIT_TEST_STANDARD_DEPENDENCIES)
+    session.install(*SYSTEM_TEST_STANDARD_DEPENDENCIES)
+
+    # Because we test minimum dependency versions on the minimum Python
+    # version, the first version we test with in the unit tests sessions has a
+    # constraints file containing all dependencies and extras.
+    with open(
+        CURRENT_DIRECTORY
+        / "testing"
+        / f"constraints-{UNIT_TEST_PYTHON_VERSIONS[0]}.txt",
+        encoding="utf-8",
+    ) as constraints_file:
+        constraints_text = constraints_file.read()
+
+    # Ignore leading whitespace and comment lines.
+    deps = [
+        match.group(1)
+        for match in re.finditer(
+            r"^\s*(\S+)(?===\S+)", constraints_text, flags=re.MULTILINE
+        )
+    ]
+
+    # Don't overwrite prerelease packages.
+    deps = [dep for dep in deps if dep not in prerel_deps]
+    # We use --no-deps to ensure that pre-release versions aren't overwritten
+    # by the version ranges in setup.py.
+    session.install(*deps)
+    session.install("--no-deps", "-e", ".[all]")
+
+    # Print out prerelease package versions
+    session.run(
+        "python", "-c", "import google.protobuf; print(google.protobuf.__version__)"
+    )
+    session.run("python", "-c", "import grpc; print(grpc.__version__)")
+
+    session.run("py.test", "tests/unit")
+    session.run("py.test", "tests/system")
+    session.run("py.test", "samples/snippets")