From 8da13336dfa60c2b4412097bc5e58488aebbb66c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 31 May 2026 19:28:07 +0200 Subject: [PATCH 1/2] chore(deps): bump the actions group across 1 directory with 8 updates (#176) Bumps the actions group with 8 updates in the / directory: | Package | From | To | | --- | --- | --- | | [prefix-dev/setup-pixi](https://github.com/prefix-dev/setup-pixi) | `0.9.5` | `0.9.6` | | [codecov/codecov-action](https://github.com/codecov/codecov-action) | `6.0.0` | `6.0.1` | | [github/issue-metrics](https://github.com/github/issue-metrics) | `4.2.2` | `4.2.7` | | [j178/prek-action](https://github.com/j178/prek-action) | `2.0.3` | `2.0.4` | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `7.0.0` | `7.0.1` | | [actions/download-artifact](https://github.com/actions/download-artifact) | `7.0.0` | `8.0.1` | | [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) | `1.13.0` | `1.14.0` | | [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) | `0.5.3` | `0.5.6` | Updates `prefix-dev/setup-pixi` from 0.9.5 to 0.9.6 - [Release notes](https://github.com/prefix-dev/setup-pixi/releases) - [Commits](https://github.com/prefix-dev/setup-pixi/compare/1b2de7f3351f171c8b4dfeb558c639cb58ed4ec0...5185adfbffb4bd703da3010310260805d89ebb11) Updates `codecov/codecov-action` from 6.0.0 to 6.0.1 - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/57e3a136b779b570ffcdbf80b3bdc90e7fab3de2...e79a6962e0d4c0c17b229090214935d2e33f8354) Updates `github/issue-metrics` from 4.2.2 to 4.2.7 - [Release notes](https://github.com/github/issue-metrics/releases) - [Commits](https://github.com/github/issue-metrics/compare/c9e9838147fd355dace335ba787f01b6641a400a...1e38d5e62363e14db8019ed7d106b9855bdba6cc) Updates `j178/prek-action` from 2.0.3 to 2.0.4 - [Release notes](https://github.com/j178/prek-action/releases) - [Commits](https://github.com/j178/prek-action/compare/6ad80277337ad479fe43bd70701c3f7f8aa74db3...bdca6f102f98e2b4c7029491a53dfd366469e33d) Updates `actions/upload-artifact` from 7.0.0 to 7.0.1 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v7...043fb46d1a93c77aae656e7c1c64a875d1fc6a0a) Updates `actions/download-artifact` from 7.0.0 to 8.0.1 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v7...3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c) Updates `pypa/gh-action-pypi-publish` from 1.13.0 to 1.14.0 - [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases) - [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.13.0...cef221092ed1bacb1cc03d23a2d87d1d172e277b) Updates `zizmorcore/zizmor-action` from 0.5.3 to 0.5.6 - [Release notes](https://github.com/zizmorcore/zizmor-action/releases) - [Commits](https://github.com/zizmorcore/zizmor-action/compare/b1d7e1fb5de872772f31590499237e7cce841e8e...5f14fd08f7cf1cb1609c1e344975f152c7ee938d) --- updated-dependencies: - dependency-name: prefix-dev/setup-pixi dependency-version: 0.9.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions - dependency-name: codecov/codecov-action dependency-version: 6.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions - dependency-name: github/issue-metrics dependency-version: 4.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions - dependency-name: j178/prek-action dependency-version: 2.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions - dependency-name: actions/upload-artifact dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions - dependency-name: actions/download-artifact dependency-version: 8.0.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: pypa/gh-action-pypi-publish dependency-version: 1.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions - dependency-name: zizmorcore/zizmor-action dependency-version: 0.5.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/downstream.yml | 2 +- .github/workflows/gpu_test.yml | 2 +- .github/workflows/hypothesis.yaml | 2 +- .github/workflows/issue-metrics.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/test.yml | 4 ++-- .github/workflows/zarr-metadata-release.yml | 12 ++++++------ .github/workflows/zizmor.yml | 2 +- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/downstream.yml b/.github/workflows/downstream.yml index 74026233c4..3eb6898895 100644 --- a/.github/workflows/downstream.yml +++ b/.github/workflows/downstream.yml @@ -34,7 +34,7 @@ jobs: persist-credentials: false - name: Set up pixi - uses: prefix-dev/setup-pixi@1b2de7f3351f171c8b4dfeb558c639cb58ed4ec0 # v0.9.5 + uses: prefix-dev/setup-pixi@5185adfbffb4bd703da3010310260805d89ebb11 # v0.9.6 with: manifest-path: xarray/pixi.toml diff --git a/.github/workflows/gpu_test.yml b/.github/workflows/gpu_test.yml index 403441b306..333769cb9e 100644 --- a/.github/workflows/gpu_test.yml +++ b/.github/workflows/gpu_test.yml @@ -76,7 +76,7 @@ jobs: hatch env run --env "$HATCH_ENV" run-coverage - name: Upload coverage - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 + uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1 with: token: ${{ secrets.CODECOV_TOKEN }} flags: gpu diff --git a/.github/workflows/hypothesis.yaml b/.github/workflows/hypothesis.yaml index 4f9467be7d..a456b2aa0a 100644 --- a/.github/workflows/hypothesis.yaml +++ b/.github/workflows/hypothesis.yaml @@ -93,7 +93,7 @@ jobs: key: cache-hypothesis-${{ runner.os }}-${{ github.run_id }} - name: Upload coverage - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 + uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1 with: token: ${{ secrets.CODECOV_TOKEN }} flags: tests diff --git a/.github/workflows/issue-metrics.yml b/.github/workflows/issue-metrics.yml index 14fba5b9ec..510849ef3e 100644 --- a/.github/workflows/issue-metrics.yml +++ b/.github/workflows/issue-metrics.yml @@ -33,7 +33,7 @@ jobs: echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV" - name: Run issue-metrics tool - uses: github/issue-metrics@c9e9838147fd355dace335ba787f01b6641a400a # v4.2.2 + uses: github/issue-metrics@1e38d5e62363e14db8019ed7d106b9855bdba6cc # v4.2.7 env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} SEARCH_QUERY: 'repo:zarr-developers/zarr-python is:issue created:${{ env.last_month }} -reason:"not planned"' diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 768e660ec2..fec211b4dd 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -30,4 +30,4 @@ jobs: uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: enable-cache: true - - uses: j178/prek-action@6ad80277337ad479fe43bd70701c3f7f8aa74db3 # v2.0.3 + - uses: j178/prek-action@bdca6f102f98e2b4c7029491a53dfd366469e33d # v2.0.4 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 03143d3e5b..62e571856b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -78,7 +78,7 @@ jobs: hatch env run --env "$HATCH_ENV" run-coverage - name: Upload coverage if: ${{ matrix.dependency-set == 'optional' && matrix.os == 'ubuntu-latest' }} - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 + uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1 with: token: ${{ secrets.CODECOV_TOKEN }} flags: tests @@ -125,7 +125,7 @@ jobs: run: | hatch env run --env "$HATCH_ENV" run-coverage - name: Upload coverage - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 + uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1 with: token: ${{ secrets.CODECOV_TOKEN }} flags: tests diff --git a/.github/workflows/zarr-metadata-release.yml b/.github/workflows/zarr-metadata-release.yml index 809d502f16..9639fcfdd3 100644 --- a/.github/workflows/zarr-metadata-release.yml +++ b/.github/workflows/zarr-metadata-release.yml @@ -35,7 +35,7 @@ jobs: - name: Build run: hatch build - - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: zarr-metadata-dist path: packages/zarr-metadata/dist @@ -45,7 +45,7 @@ jobs: needs: [build] runs-on: ubuntu-latest steps: - - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: zarr-metadata-dist path: dist @@ -76,7 +76,7 @@ jobs: id-token: write # required for OIDC trusted publishing attestations: write # required for artifact attestations steps: - - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: zarr-metadata-dist path: dist @@ -87,7 +87,7 @@ jobs: subject-path: dist/* - name: Publish package to PyPI - uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 upload_testpypi: name: Upload to TestPyPI @@ -101,7 +101,7 @@ jobs: id-token: write attestations: write steps: - - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: zarr-metadata-dist path: dist @@ -112,6 +112,6 @@ jobs: subject-path: dist/* - name: Publish package to TestPyPI - uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 with: repository-url: https://test.pypi.org/legacy/ diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index da19f22421..7ac4fe5d0e 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -32,4 +32,4 @@ jobs: persist-credentials: false - name: Run zizmor - uses: zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3 + uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6 From 372f9cbdd03d1f39af6e0597ff4ff4a459c103be Mon Sep 17 00:00:00 2001 From: Davis Vann Bennett Date: Tue, 16 Jun 2026 10:34:49 +0200 Subject: [PATCH 2/2] chore(deps): pin dev tooling for reproducible CI The hatch test envs and bare `uv run` resolve [dependency-groups] fresh from PyPI and ignore uv.lock, so an unrelated upstream tooling release can break CI without any change on our side (e.g. the pytest 9.1.0 `duplicate parametrization` regression, pytest-dev/pytest#14591). Pin dev *tooling* (pytest & plugins, coverage, hypothesis, mypy, ruff, mkdocs*, towncrier, moto, ...) to exact versions. Leave runtime/ integration deps (fsspec, obstore, s3fs, botocore, numcodecs, universal-pathlib) floating so the `optional` test matrix keeps exercising their latest releases; the `min_deps`/`upstream` envs cover the floor and bleeding edge. Also: - Add a focused `release` dependency group as the single source of truth for the towncrier pin; `docs` includes it. prepare_release.yml now runs `uv run --only-group release towncrier build` instead of an unpinned `pip install towncrier`. - Add a `uv` dependabot ecosystem so the pins and uv.lock get weekly update PRs instead of silently rotting. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/dependabot.yml | 13 +++ .github/workflows/prepare_release.yml | 11 +-- pyproject.toml | 68 +++++++------ uv.lock | 136 +++++++++++++------------- 4 files changed, 127 insertions(+), 101 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c6ab07e397..87e80ce7e5 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,6 +12,19 @@ updates: - "*" cooldown: default-days: 7 + # Keep the pinned dev tooling in pyproject.toml's [dependency-groups] and the + # uv.lock current. Without this the exact pins (e.g. pytest) would never be + # bumped automatically and would silently rot. + - package-ecosystem: "uv" + directory: "/" + schedule: + interval: "weekly" + groups: + python-dependencies: + patterns: + - "*" + cooldown: + default-days: 7 - package-ecosystem: "github-actions" directory: "/" target-branch: "support/v2" diff --git a/.github/workflows/prepare_release.yml b/.github/workflows/prepare_release.yml index 57ae10ff0d..b0f1000529 100644 --- a/.github/workflows/prepare_release.yml +++ b/.github/workflows/prepare_release.yml @@ -42,15 +42,12 @@ jobs: fetch-depth: 0 persist-credentials: false - - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 - with: - python-version: '3.12' - - - name: Install towncrier - run: pip install towncrier + - uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0 - name: Build changelog - run: towncrier build --version "$VERSION" --yes + # Use the pinned towncrier from the `release` dependency group (single + # source of truth) rather than an unpinned standalone install. + run: uv run --only-group release towncrier build --version "$VERSION" --yes env: VERSION: ${{ inputs.version }} diff --git a/pyproject.toml b/pyproject.toml index 9f6005f981..08e49e8255 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -83,20 +83,29 @@ Discussions = "https://github.com/zarr-developers/zarr-python/discussions" documentation = "https://zarr.readthedocs.io/" homepage = "https://github.com/zarr-developers/zarr-python" +# Dev *tooling* is pinned to exact versions for reproducible CI: the hatch envs +# (see `tool.hatch.envs.*`) and bare `uv run` resolve these groups fresh from +# PyPI and do NOT consult uv.lock, so an unrelated tooling release can break CI +# without any change on our side (e.g. the pytest 9.1.0 `duplicate +# parametrization` regression). Runtime/integration deps (fsspec, obstore, s3fs, +# botocore, numcodecs, universal-pathlib) are intentionally left floating so the +# `optional` test matrix keeps exercising their latest releases; their floor and +# bleeding edge are covered by the `min_deps` and `upstream` hatch envs. Bump the +# pins deliberately, e.g. via dependabot or `uv lock --upgrade`. [dependency-groups] test = [ - "coverage>=7.10", - "pytest", - "pytest-asyncio", - "pytest-cov", - "pytest-accept", - "numpydoc", - "hypothesis", - "pytest-xdist", - "pytest-benchmark", - "pytest-codspeed", - "tomlkit", - "uv", + "coverage==7.14.0", + "pytest==9.0.3", + "pytest-asyncio==1.3.0", + "pytest-cov==7.1.0", + "pytest-accept==0.2.3", + "numpydoc==1.10.0", + "hypothesis==6.152.7", + "pytest-xdist==3.8.0", + "pytest-benchmark==5.2.3", + "pytest-codspeed==5.0.1", + "tomlkit==0.15.0", + "uv==0.11.15", ] remote-tests = [ {include-group = "test"}, @@ -104,35 +113,38 @@ remote-tests = [ "obstore>=0.5.1", "botocore", "s3fs>=2023.10.0", - "moto[s3,server]", - "requests", + "moto[s3,server]==5.2.1", + "requests==2.34.1", +] +release = [ + "towncrier==25.8.0", ] docs = [ # Doc building - "mkdocs-material[imaging]>=9.6.14", - "mkdocs>=1.6.1,<2", - "mkdocstrings>=0.29.1", - "mkdocstrings-python>=1.16.10", - "mike>=2.1.3", - "mkdocs-jupyter>=0.25.1", - "mkdocs-redirects>=1.2.0", - "markdown-exec[ansi]", - "griffe-inherited-docstrings", - "ruff", + "mkdocs-material[imaging]==9.7.6", + "mkdocs==1.6.1", + "mkdocstrings==1.0.4", + "mkdocstrings-python==2.0.3", + "mike==2.2.0", + "mkdocs-jupyter==0.26.3", + "mkdocs-redirects==1.2.3", + "markdown-exec[ansi]==1.12.1", + "griffe-inherited-docstrings==1.1.3", + "ruff==0.15.12", # Changelog generation - "towncrier", + {include-group = "release"}, # Optional dependencies to run examples "numcodecs[msgpack]", "s3fs>=2023.10.0", - "astroid<4", - "pytest", + "astroid==3.3.11", + "pytest==9.0.3", ] dev = [ {include-group = "test"}, {include-group = "remote-tests"}, {include-group = "docs"}, "universal-pathlib", - "mypy", + "mypy==2.1.0", ] [tool.coverage.report] diff --git a/uv.lock b/uv.lock index 39eebfb270..e4ab5681ac 100644 --- a/uv.lock +++ b/uv.lock @@ -4023,6 +4023,9 @@ docs = [ { name = "s3fs" }, { name = "towncrier" }, ] +release = [ + { name = "towncrier" }, +] remote-tests = [ { name = "botocore" }, { name = "coverage" }, @@ -4077,88 +4080,89 @@ provides-extras = ["cast-value-rs", "cli", "gpu", "optional", "remote"] [package.metadata.requires-dev] dev = [ - { name = "astroid", specifier = "<4" }, + { name = "astroid", specifier = "==3.3.11" }, { name = "botocore" }, - { name = "coverage", specifier = ">=7.10" }, + { name = "coverage", specifier = "==7.14.0" }, { name = "fsspec", specifier = ">=2023.10.0" }, - { name = "griffe-inherited-docstrings" }, - { name = "hypothesis" }, - { name = "markdown-exec", extras = ["ansi"] }, - { name = "mike", specifier = ">=2.1.3" }, - { name = "mkdocs", specifier = ">=1.6.1,<2" }, - { name = "mkdocs-jupyter", specifier = ">=0.25.1" }, - { name = "mkdocs-material", extras = ["imaging"], specifier = ">=9.6.14" }, - { name = "mkdocs-redirects", specifier = ">=1.2.0" }, - { name = "mkdocstrings", specifier = ">=0.29.1" }, - { name = "mkdocstrings-python", specifier = ">=1.16.10" }, - { name = "moto", extras = ["s3", "server"] }, - { name = "mypy" }, + { name = "griffe-inherited-docstrings", specifier = "==1.1.3" }, + { name = "hypothesis", specifier = "==6.152.7" }, + { name = "markdown-exec", extras = ["ansi"], specifier = "==1.12.1" }, + { name = "mike", specifier = "==2.2.0" }, + { name = "mkdocs", specifier = "==1.6.1" }, + { name = "mkdocs-jupyter", specifier = "==0.26.3" }, + { name = "mkdocs-material", extras = ["imaging"], specifier = "==9.7.6" }, + { name = "mkdocs-redirects", specifier = "==1.2.3" }, + { name = "mkdocstrings", specifier = "==1.0.4" }, + { name = "mkdocstrings-python", specifier = "==2.0.3" }, + { name = "moto", extras = ["s3", "server"], specifier = "==5.2.1" }, + { name = "mypy", specifier = "==2.1.0" }, { name = "numcodecs", extras = ["msgpack"] }, - { name = "numpydoc" }, + { name = "numpydoc", specifier = "==1.10.0" }, { name = "obstore", specifier = ">=0.5.1" }, - { name = "pytest" }, - { name = "pytest-accept" }, - { name = "pytest-asyncio" }, - { name = "pytest-benchmark" }, - { name = "pytest-codspeed" }, - { name = "pytest-cov" }, - { name = "pytest-xdist" }, - { name = "requests" }, - { name = "ruff" }, + { name = "pytest", specifier = "==9.0.3" }, + { name = "pytest-accept", specifier = "==0.2.3" }, + { name = "pytest-asyncio", specifier = "==1.3.0" }, + { name = "pytest-benchmark", specifier = "==5.2.3" }, + { name = "pytest-codspeed", specifier = "==5.0.1" }, + { name = "pytest-cov", specifier = "==7.1.0" }, + { name = "pytest-xdist", specifier = "==3.8.0" }, + { name = "requests", specifier = "==2.34.1" }, + { name = "ruff", specifier = "==0.15.12" }, { name = "s3fs", specifier = ">=2023.10.0" }, - { name = "tomlkit" }, - { name = "towncrier" }, + { name = "tomlkit", specifier = "==0.15.0" }, + { name = "towncrier", specifier = "==25.8.0" }, { name = "universal-pathlib" }, - { name = "uv" }, + { name = "uv", specifier = "==0.11.15" }, ] docs = [ - { name = "astroid", specifier = "<4" }, - { name = "griffe-inherited-docstrings" }, - { name = "markdown-exec", extras = ["ansi"] }, - { name = "mike", specifier = ">=2.1.3" }, - { name = "mkdocs", specifier = ">=1.6.1,<2" }, - { name = "mkdocs-jupyter", specifier = ">=0.25.1" }, - { name = "mkdocs-material", extras = ["imaging"], specifier = ">=9.6.14" }, - { name = "mkdocs-redirects", specifier = ">=1.2.0" }, - { name = "mkdocstrings", specifier = ">=0.29.1" }, - { name = "mkdocstrings-python", specifier = ">=1.16.10" }, + { name = "astroid", specifier = "==3.3.11" }, + { name = "griffe-inherited-docstrings", specifier = "==1.1.3" }, + { name = "markdown-exec", extras = ["ansi"], specifier = "==1.12.1" }, + { name = "mike", specifier = "==2.2.0" }, + { name = "mkdocs", specifier = "==1.6.1" }, + { name = "mkdocs-jupyter", specifier = "==0.26.3" }, + { name = "mkdocs-material", extras = ["imaging"], specifier = "==9.7.6" }, + { name = "mkdocs-redirects", specifier = "==1.2.3" }, + { name = "mkdocstrings", specifier = "==1.0.4" }, + { name = "mkdocstrings-python", specifier = "==2.0.3" }, { name = "numcodecs", extras = ["msgpack"] }, - { name = "pytest" }, - { name = "ruff" }, + { name = "pytest", specifier = "==9.0.3" }, + { name = "ruff", specifier = "==0.15.12" }, { name = "s3fs", specifier = ">=2023.10.0" }, - { name = "towncrier" }, + { name = "towncrier", specifier = "==25.8.0" }, ] +release = [{ name = "towncrier", specifier = "==25.8.0" }] remote-tests = [ { name = "botocore" }, - { name = "coverage", specifier = ">=7.10" }, + { name = "coverage", specifier = "==7.14.0" }, { name = "fsspec", specifier = ">=2023.10.0" }, - { name = "hypothesis" }, - { name = "moto", extras = ["s3", "server"] }, - { name = "numpydoc" }, + { name = "hypothesis", specifier = "==6.152.7" }, + { name = "moto", extras = ["s3", "server"], specifier = "==5.2.1" }, + { name = "numpydoc", specifier = "==1.10.0" }, { name = "obstore", specifier = ">=0.5.1" }, - { name = "pytest" }, - { name = "pytest-accept" }, - { name = "pytest-asyncio" }, - { name = "pytest-benchmark" }, - { name = "pytest-codspeed" }, - { name = "pytest-cov" }, - { name = "pytest-xdist" }, - { name = "requests" }, + { name = "pytest", specifier = "==9.0.3" }, + { name = "pytest-accept", specifier = "==0.2.3" }, + { name = "pytest-asyncio", specifier = "==1.3.0" }, + { name = "pytest-benchmark", specifier = "==5.2.3" }, + { name = "pytest-codspeed", specifier = "==5.0.1" }, + { name = "pytest-cov", specifier = "==7.1.0" }, + { name = "pytest-xdist", specifier = "==3.8.0" }, + { name = "requests", specifier = "==2.34.1" }, { name = "s3fs", specifier = ">=2023.10.0" }, - { name = "tomlkit" }, - { name = "uv" }, + { name = "tomlkit", specifier = "==0.15.0" }, + { name = "uv", specifier = "==0.11.15" }, ] test = [ - { name = "coverage", specifier = ">=7.10" }, - { name = "hypothesis" }, - { name = "numpydoc" }, - { name = "pytest" }, - { name = "pytest-accept" }, - { name = "pytest-asyncio" }, - { name = "pytest-benchmark" }, - { name = "pytest-codspeed" }, - { name = "pytest-cov" }, - { name = "pytest-xdist" }, - { name = "tomlkit" }, - { name = "uv" }, + { name = "coverage", specifier = "==7.14.0" }, + { name = "hypothesis", specifier = "==6.152.7" }, + { name = "numpydoc", specifier = "==1.10.0" }, + { name = "pytest", specifier = "==9.0.3" }, + { name = "pytest-accept", specifier = "==0.2.3" }, + { name = "pytest-asyncio", specifier = "==1.3.0" }, + { name = "pytest-benchmark", specifier = "==5.2.3" }, + { name = "pytest-codspeed", specifier = "==5.0.1" }, + { name = "pytest-cov", specifier = "==7.1.0" }, + { name = "pytest-xdist", specifier = "==3.8.0" }, + { name = "tomlkit", specifier = "==0.15.0" }, + { name = "uv", specifier = "==0.11.15" }, ]