diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index c24b4e6a..0ab3d142 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -13,9 +13,9 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Python 3.14 - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.14" cache: "pip" @@ -36,9 +36,9 @@ jobs: python-version: ["3.9", "3.13", "3.14"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} cache: "pip" diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 0a493ccd..1fd3e112 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.x' cache: 'pip' diff --git a/.github/workflows/sphinx-docs.yml b/.github/workflows/sphinx-docs.yml index 06909c84..2018279e 100644 --- a/.github/workflows/sphinx-docs.yml +++ b/.github/workflows/sphinx-docs.yml @@ -11,11 +11,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: persist-credentials: false - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.13" cache: "pip" diff --git a/pyproject.toml b/pyproject.toml index 35edcc5e..5c9fbda0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,7 @@ dataretrieval = ["py.typed"] test = [ "pytest > 5.0.0", "pytest-cov[all]", + "pytest-rerunfailures", "coverage", "requests-mock", "ruff", diff --git a/tests/waterdata_test.py b/tests/waterdata_test.py index e2ba4da8..7a1a919a 100644 --- a/tests/waterdata_test.py +++ b/tests/waterdata_test.py @@ -33,6 +33,26 @@ _normalize_str_iterable, ) +# Most tests in this module call the live USGS Water Data API. After +# PR #273, transient upstream errors (5xx / 429 / connection drops) +# propagate instead of silently truncating, which makes CI susceptible +# to flaking on a brief upstream blip. Auto-retry such failures, but +# only for the narrow set of transient-error trace patterns below — +# library bugs raising other exception types still fail on the first +# try. The marker is attached to every test in the module, but the +# patterns match only traces produced by real network round-trips +# (``_raise_for_non_200`` output, ``requests`` exceptions), so tests +# using ``requests_mock`` or ``mock.patch`` are no-ops for the rerun. +pytestmark = pytest.mark.flaky( + reruns=2, + reruns_delay=5, + only_rerun=[ + r"RuntimeError:\s*(?:429|5\d\d):", # _raise_for_non_200 output + r"ConnectionError", + r"ReadTimeout|ConnectTimeout|Timeout", + ], +) + def mock_request(requests_mock, request_url, file_path): """Mock request code"""