summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Hatfield-Dodds <zac.hatfield.dodds@gmail.com>2023-05-21 11:52:29 (GMT)
committerGitHub <noreply@github.com>2023-05-21 11:52:29 (GMT)
commit014dd301b5a075a73430eb4e583e851f49d03e29 (patch)
treed6cc594a08f1847697f933f547e4ef8a319585b1
parentbe0c106789322273f1f76d232c768c09880a14bd (diff)
downloadcpython-014dd301b5a075a73430eb4e583e851f49d03e29.zip
cpython-014dd301b5a075a73430eb4e583e851f49d03e29.tar.gz
cpython-014dd301b5a075a73430eb4e583e851f49d03e29.tar.bz2
gh-86275: improve Hypothesis configuration for CI and local runs (#104468)
-rw-r--r--.github/workflows/build.yml13
-rw-r--r--Lib/test/support/hypothesis_helper.py31
2 files changed, 44 insertions, 0 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 69b78e5..41abddf 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@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:
diff --git a/Lib/test/support/hypothesis_helper.py b/Lib/test/support/hypothesis_helper.py
index 76bd249..da16eb5 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")