]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-86275: improve Hypothesis configuration for CI and local runs (#104468)
authorZac Hatfield-Dodds <zac.hatfield.dodds@gmail.com>
Sun, 21 May 2023 11:52:29 +0000 (12:52 +0100)
committerGitHub <noreply@github.com>
Sun, 21 May 2023 11:52:29 +0000 (05:52 -0600)
.github/workflows/build.yml
Lib/test/support/hypothesis_helper.py

index 69b78e5567adb16ed5f2e33ec3a4358da2eeef34..41abddffa5d648be43f6f0953cee99fe40ef709a 100644 (file)
@@ -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@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@v3
+      if: always()
+      with:
+        name: hypothesis-example-db
+        path: .hypothesis/examples/
 
 
   build_asan:
index 76bd2490fe6e3d445d8b23d4b525648369f7c205..da16eb50c259583670a40b5fbb80a5a5076b4d2a 100644 (file)
@@ -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")