[Python-checkins] gh-86275: improve Hypothesis configuration for CI and local runs (#104468)

hugovk webhook-mailer at python.org
Sun May 21 07:52:35 EDT 2023


https://github.com/python/cpython/commit/014dd301b5a075a73430eb4e583e851f49d03e29
commit: 014dd301b5a075a73430eb4e583e851f49d03e29
branch: main
author: Zac Hatfield-Dodds <zac.hatfield.dodds at gmail.com>
committer: hugovk <hugovk at users.noreply.github.com>
date: 2023-05-21T05:52:29-06:00
summary:

gh-86275: improve Hypothesis configuration for CI and local runs (#104468)

files:
M .github/workflows/build.yml
M Lib/test/support/hypothesis_helper.py

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 69b78e5567ad..41abddffa5d6 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -368,6 +368,14 @@ jobs:
         echo "HYPOVENV=${VENV_LOC}" >> $GITHUB_ENV
         echo "VENV_PYTHON=${VENV_PYTHON}" >> $GITHUB_ENV
         ./python -m venv $VENV_LOC && $VENV_PYTHON -m pip install -U hypothesis
+    - name: 'Restore Hypothesis database'
+      id: cache-hypothesis-database
+      uses: actions/cache at v3
+      with:
+        path: ./hypothesis
+        key: hypothesis-database-${{ github.head_ref || github.run_id }}
+        restore-keys: |
+          - hypothesis-database-
     - name: "Run tests"
       working-directory: ${{ env.CPYTHON_BUILDDIR }}
       run: |
@@ -388,6 +396,11 @@ jobs:
           -x test_subprocess \
           -x test_signal \
           -x test_sysconfig
+    - uses: actions/upload-artifact at v3
+      if: always()
+      with:
+        name: hypothesis-example-db
+        path: .hypothesis/examples/
 
 
   build_asan:
diff --git a/Lib/test/support/hypothesis_helper.py b/Lib/test/support/hypothesis_helper.py
index 76bd2490fe6e..da16eb50c259 100644
--- a/Lib/test/support/hypothesis_helper.py
+++ b/Lib/test/support/hypothesis_helper.py
@@ -1,4 +1,35 @@
+import os
+
 try:
     import hypothesis
 except ImportError:
     from . import _hypothesis_stubs as hypothesis
+else:
+    # When using the real Hypothesis, we'll configure it to ignore occasional
+    # slow tests (avoiding flakiness from random VM slowness in CI).
+    hypothesis.settings.register_profile(
+        "slow-is-ok",
+        deadline=None,
+        suppress_health_check=[hypothesis.HealthCheck.too_slow],
+    )
+    hypothesis.settings.load_profile("slow-is-ok")
+
+    # For local development, we'll write to the default on-local-disk database
+    # of failing examples, and also use a pull-through cache to automatically
+    # replay any failing examples discovered in CI.  For details on how this
+    # works, see https://hypothesis.readthedocs.io/en/latest/database.html
+    if "CI" not in os.environ:
+        from hypothesis.database import (
+            GitHubArtifactDatabase,
+            MultiplexedDatabase,
+            ReadOnlyDatabase,
+        )
+
+        hypothesis.settings.register_profile(
+            "cpython-local-dev",
+            database=MultiplexedDatabase(
+                hypothesis.settings.default.database,
+                ReadOnlyDatabase(GitHubArtifactDatabase("python", "cpython")),
+            ),
+        )
+        hypothesis.settings.load_profile("cpython-local-dev")



More information about the Python-checkins mailing list