diff options
author | Zac Hatfield-Dodds <zac.hatfield.dodds@gmail.com> | 2023-05-21 11:52:29 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-21 11:52:29 (GMT) |
commit | 014dd301b5a075a73430eb4e583e851f49d03e29 (patch) | |
tree | d6cc594a08f1847697f933f547e4ef8a319585b1 | |
parent | be0c106789322273f1f76d232c768c09880a14bd (diff) | |
download | cpython-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.yml | 13 | ||||
-rw-r--r-- | Lib/test/support/hypothesis_helper.py | 31 |
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") |