diff --git a/.config/copier/.copier-answers.python.yaml b/.config/copier/.copier-answers.python.yaml index 03e8321..8df8473 100644 --- a/.config/copier/.copier-answers.python.yaml +++ b/.config/copier/.copier-answers.python.yaml @@ -1,7 +1,7 @@ # This file is @generated by . # DO NOT EDIT! # prettier-ignore -_commit: 5602f9a +_commit: v0.1.10 _src_path: gh:liblaf/copier-python answers_file_shared: .config/copier/.copier-answers.shared.yaml namespace: liblaf diff --git a/.config/copier/.copier-answers.release.yaml b/.config/copier/.copier-answers.release.yaml index a32bb1f..65f24f8 100644 --- a/.config/copier/.copier-answers.release.yaml +++ b/.config/copier/.copier-answers.release.yaml @@ -1,6 +1,6 @@ # This file is @generated by . # DO NOT EDIT! # prettier-ignore -_commit: 55dfc73 +_commit: v0.1.3 _src_path: gh:liblaf/copier-release release_type: python diff --git a/.config/copier/.copier-answers.shared.yaml b/.config/copier/.copier-answers.shared.yaml index e12a99a..45c6fcb 100644 --- a/.config/copier/.copier-answers.shared.yaml +++ b/.config/copier/.copier-answers.shared.yaml @@ -1,7 +1,7 @@ # This file is @generated by . # DO NOT EDIT! # prettier-ignore -_commit: 610df18 +_commit: v0.1.4 _src_path: gh:liblaf/copier-shared author_email: 30631553+liblaf@users.noreply.github.com author_name: liblaf diff --git a/.config/copier/mise-tasks/bench.sh b/.config/copier/mise-tasks/bench.sh index 2e30760..c0e591b 100755 --- a/.config/copier/mise-tasks/bench.sh +++ b/.config/copier/mise-tasks/bench.sh @@ -5,7 +5,4 @@ set -o errexit set -o nounset set -o pipefail -# ref: -export EAGER_IMPORT=1 - pytest -m 'benchmark' --numprocesses 0 --codspeed --codspeed-warmup-time='0.2' "$@" diff --git a/.config/copier/mise-tasks/install.sh b/.config/copier/mise-tasks/install.sh index e83be27..d234a0d 100755 --- a/.config/copier/mise-tasks/install.sh +++ b/.config/copier/mise-tasks/install.sh @@ -16,7 +16,7 @@ if [[ -f 'pixi.lock' ]]; then fi if [[ -f 'uv.lock' ]]; then - uv='uv' - if has uv-wrapper.sh; then uv='uv-wrapper.sh'; fi - "$uv" sync --all-extras --all-groups "$@" + uv_sync=(uv sync) + if has uv-sync.sh; then uv_sync=(uv-sync.sh); fi + "${uv_sync[@]}" "$@" fi diff --git a/.config/copier/mise-tasks/lint/_default b/.config/copier/mise-tasks/lint/_default new file mode 100755 index 0000000..d08a1fb --- /dev/null +++ b/.config/copier/mise-tasks/lint/_default @@ -0,0 +1,4 @@ +#!/bin/bash +# This file is @generated by . +# DO NOT EDIT! +# [MISE] depends=["lint:python", "lint:toml"] diff --git a/.config/copier/mise-tasks/test.sh b/.config/copier/mise-tasks/test.sh index c58d31d..e1be499 100755 --- a/.config/copier/mise-tasks/test.sh +++ b/.config/copier/mise-tasks/test.sh @@ -5,18 +5,12 @@ set -o errexit set -o nounset set -o pipefail -function is-in-ci() { - if [[ -z ${CI:-} ]]; then +function in-ci() { + if [[ -n ${CI:-} ]]; then + return 0 + else return 1 fi - case "${CI,,}" in - 1 | on | true | y | yes) return 0 ;; - 0 | off | false | n | no | "") return 1 ;; - *) - echo "Invalid boolean: $CI." >&2 - exit 1 - ;; - esac } function needs-gpu() { @@ -37,12 +31,13 @@ else numprocesses='auto' fi -if is-in-ci; then +if in-ci; then # ref: pytest \ --junit-xml='junit.xml' --override-ini junit_family=legacy \ --cov --cov-branch \ --numprocesses "$numprocesses" \ + --hypothesis-show-statistics \ "$@" else pytest --numprocesses "$numprocesses" "$@" diff --git a/.config/copier/mise-tasks/upgrade.sh b/.config/copier/mise-tasks/upgrade.sh index ee6fab7..f99c1f7 100755 --- a/.config/copier/mise-tasks/upgrade.sh +++ b/.config/copier/mise-tasks/upgrade.sh @@ -17,7 +17,7 @@ if [[ -f 'pixi.lock' ]]; then fi if [[ -f 'uv.lock' ]]; then - uv='uv' - if has uv-wrapper.sh; then uv='uv-wrapper.sh'; fi - "$uv" sync --upgrade "$@" + uv_sync=(uv sync) + if has uv-sync.sh; then uv_sync=(uv-sync.sh); fi + "${uv_sync[@]}" --upgrade "$@" fi diff --git a/.config/copier/mkdocs.yaml b/.config/copier/mkdocs.yaml index 49bb7ea..cc2d236 100644 --- a/.config/copier/mkdocs.yaml +++ b/.config/copier/mkdocs.yaml @@ -15,7 +15,6 @@ edit_uri: blob/main/docs/ extra_css: - https://cdn.jsdelivr.net/gh/liblaf/copier-python/docs/css/fonts.min.css - - https://cdn.jsdelivr.net/gh/liblaf/copier-python/docs/css/mkdocstrings/api-autonav.min.css - https://cdn.jsdelivr.net/gh/liblaf/copier-python/docs/css/mkdocstrings/material.min.css - https://cdn.jsdelivr.net/gh/liblaf/copier-python/docs/css/mkdocstrings/syntax-highlight-in-signatures.min.css @@ -165,30 +164,33 @@ plugins: # General backlinks: tree extensions: - # Official extensions + # Built-in + - dataclasses + - unpack_typeddict + # Official - griffe_inherited_docstrings - griffe_pydantic: schema: true - griffe_warnings_deprecated # Third-party extensions - - docstring_inheritance.griffe + # - docstring_inheritance.griffe # crash - griffe_fieldz: include_inherited: true # - griffe_generics # crash # - griffe_inherited_method_crossrefs # does not work find_stubs_package: true show_inheritance_diagram: true + skip_local_inventory: true # Headings heading_level: 1 + parameter_headings: true show_root_heading: true show_symbol_type_heading: true show_symbol_type_toc: true + type_parameter_headings: true # Members inherited_members: true - filters: - - "!__all__" - - "!^_[^_]" - - "!^_$" + filters: public summary: true # Docstrings docstring_style: google @@ -201,9 +203,10 @@ plugins: show_if_no_docstring: true # Signatures modernize_annotations: true + overloads_only: true show_signature_annotations: true + show_signature_type_parameters: true separate_signature: true - show_overloads: true signature_crossrefs: true # ---------------------------- External Plugins ---------------------------- # diff --git a/.config/direnv/10-python.sh b/.config/direnv/10-python.sh index 93b866f..6ce3a6c 100644 --- a/.config/direnv/10-python.sh +++ b/.config/direnv/10-python.sh @@ -19,11 +19,9 @@ if [[ -f 'pixi.lock' ]]; then fi if [[ -f 'uv.lock' ]]; then - uv='uv' - if has uv-wrapper.sh; then uv='uv-wrapper.sh'; fi - "$uv" sync --all-extras --all-groups - sed --in-place --regexp-extended \ - 's|\s*(include-system-site-packages)\s*=\s*.*\s*|\1 = true|' '.venv/pyvenv.cfg' + uv_sync=(uv sync) + if has uv-sync.sh; then uv_sync=(uv-sync.sh); fi + "${uv_sync[@]}" # shellcheck disable=SC1091 source '.venv/bin/activate' fi diff --git a/.config/linters/.ruff.toml b/.config/linters/.ruff.toml index c1bb597..66c16a6 100644 --- a/.config/linters/.ruff.toml +++ b/.config/linters/.ruff.toml @@ -27,6 +27,7 @@ ignore = [ "D107", "E501", "ERA001", + "EXE001", "FIX002", "INP001", "PLC0415", @@ -42,7 +43,7 @@ ignore = [ "TD002", "TD003", "TD004", - "TD005", + "TD005" ] select = ["ALL"] diff --git a/.config/release-please/config.json b/.config/release-please/config.json index 65a7649..41468a0 100644 --- a/.config/release-please/config.json +++ b/.config/release-please/config.json @@ -50,7 +50,6 @@ "section": "⏪️ Reverts" } ], - "extra-label": "automerge", "include-component-in-tag": false, "always-update": true, "initial-version": "0.1.0", diff --git a/.github/workflows/bench.yaml b/.github/workflows/bench.yaml index 6a013d0..845cbcc 100644 --- a/.github/workflows/bench.yaml +++ b/.github/workflows/bench.yaml @@ -5,57 +5,56 @@ name: Bench on: push: + branches: + - main pull_request: workflow_dispatch: -jobs: - skip-duplicate: - name: Skip Duplicate - permissions: - actions: write - runs-on: ubuntu-latest - outputs: - should-skip: ${{ steps.skip-duplicate.outputs.should-skip }} - steps: - - id: skip-duplicate - name: Skip Duplicate - uses: liblaf/actions/skip-duplicate@dist - with: - cancel-others: true +env: + FORCE_COLOR: 1 - collect: - name: Collect - needs: - - skip-duplicate - if: needs.skip-duplicate.outputs.should-skip != 'true' +jobs: + metadata: + name: Metadata runs-on: ubuntu-latest outputs: has-benches: ${{ steps.collect.outputs.has-benches }} + python-versions: ${{ steps.inspect.outputs.supported_python_classifiers_json_array }} steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 + - id: inspect + name: Build and Inspect a Python Package + uses: hynek/build-and-inspect-python-package@v2 - name: Setup Python - uses: liblaf/actions/setup-python@dist + uses: liblaf/actions/setup-python@v1 - id: collect name: Collect run: |- if pytest -m 'benchmark' --collect-only; then - echo 'has-benches=true' >> "$GITHUB_OUTPUT" + echo 'has-tests=true' >> "$GITHUB_OUTPUT" else - echo 'has-benches=false' >> "$GITHUB_OUTPUT" + code="$?" + if (("$code" == 5)); then + echo 'has-tests=false' >> "$GITHUB_OUTPUT" + else + exit "$code" + fi fi + # CodSpeedHQ does not support the same benchmark multiple times + # so we don't run on multiple python versions here. bench: name: Bench needs: - - collect - if: needs.collect.outputs.has-benches == 'true' + - metadata + if: needs.metadata.outputs.has-benches == 'true' runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Setup Python - uses: liblaf/actions/setup-python@dist + uses: liblaf/actions/setup-python@v1 - name: Install Mise uses: jdx/mise-action@v3 - name: Bench diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml deleted file mode 100644 index 36df299..0000000 --- a/.github/workflows/build.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# This file is @generated by . -# DO NOT EDIT! - -name: Build - -on: - push: - pull_request: - workflow_dispatch: - -jobs: - skip-duplicate: - name: Skip Duplicate - permissions: - actions: write - runs-on: ubuntu-latest - outputs: - should-skip: ${{ steps.skip-duplicate.outputs.should-skip }} - steps: - - id: skip-duplicate - name: Skip Duplicate - uses: liblaf/actions/skip-duplicate@dist - with: - cancel-others: true - - build: - name: Build - needs: - - skip-duplicate - if: needs.skip-duplicate.outputs.should-skip != 'true' - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v5 - - name: Build and Inspect a Python Package - uses: hynek/build-and-inspect-python-package@v2 diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index e2c98a9..b283e14 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -5,54 +5,53 @@ name: Docs on: push: + branches: + - main pull_request: workflow_dispatch: -jobs: - skip-duplicate: - name: Skip Duplicate - permissions: - actions: write - runs-on: ubuntu-latest - outputs: - should-skip: ${{ steps.skip-duplicate.outputs.should-skip }} - steps: - - id: skip-duplicate - name: Skip Duplicate - uses: liblaf/actions/skip-duplicate@dist - with: - cancel-others: true +env: + FORCE_COLOR: 1 - docs: - name: Docs - permissions: - contents: write - pages: write - needs: - - skip-duplicate - if: needs.skip-duplicate.outputs.should-skip != 'true' +jobs: + build: + name: Build runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 + - id: config + name: Configure GitHub Pages + uses: actions/configure-pages@v5 + - name: Set Environment Variables + run: echo 'SITE_URL=${{ steps.config.outputs.base_url }}' >> "$GITHUB_ENV" - name: Setup Python - uses: liblaf/actions/setup-python@dist + uses: liblaf/actions/setup-python@v1 - if: hashFiles('docs/scripts/pre-build.sh') != '' name: Pre-Build run: docs/scripts/pre-build.sh - name: Build run: mkdocs build - - if: ${{ github.ref == 'refs/heads/main' }} - name: Deploy - uses: JamesIves/github-pages-deploy-action@v4 - with: - folder: site - single-commit: true - - if: ${{ github.ref == 'refs/heads/main' }} - name: Setup GitHub Pages - uses: liblaf/actions/setup-pages@dist + - name: Upload Github Pages Artifact + uses: actions/upload-pages-artifact@v4 with: - token: ${{ github.token }} - continue-on-error: true + path: site + + deploy: + name: Deploy + permissions: + id-token: write + pages: write + needs: + - build + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deploy.outputs.page_url }} + steps: + - id: deploy + name: Deploy Github Pages Site + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/mega-linter.yaml b/.github/workflows/mega-linter.yaml index 9a2cdac..a71f243 100644 --- a/.github/workflows/mega-linter.yaml +++ b/.github/workflows/mega-linter.yaml @@ -8,42 +8,39 @@ name: MegaLinter on: push: + branches: + - main pull_request: workflow_dispatch: -jobs: - skip-duplicate: - name: Skip Duplicate - permissions: - actions: write - runs-on: ubuntu-latest - outputs: - should-skip: ${{ steps.skip-duplicate.outputs.should-skip }} - steps: - - id: skip-duplicate - name: Skip Duplicate - uses: liblaf/actions/skip-duplicate@dist - with: - cancel-others: true +env: + FORCE_COLOR: 1 +jobs: mega-linter: name: MegaLinter permissions: contents: write - issues: write pull-requests: write - needs: - - skip-duplicate - if: needs.skip-duplicate.outputs.should-skip != 'true' runs-on: ubuntu-latest + environment: + name: MegaLinter steps: + - id: auth + name: Auth + uses: liblaf/actions/auth@v1 + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: ref: ${{ github.head_ref || github.ref }} - id: lint name: MegaLinter - uses: liblaf/actions/mega-linter@dist + uses: liblaf/actions/mega-linter@v1 + with: + token: ${{ steps.auth.outputs.token }} - if: success() || failure() name: Upload Reports uses: actions/upload-artifact@v5 @@ -67,14 +64,12 @@ jobs: sign-commits: true title: "chore(mega-linter): apply linters automatic fixes" body-path: ${{ runner.temp }}/megalinter-report.md - labels: |- - autofix - automerge + labels: automerge,bot assignees: ${{ github.repository_owner }} reviewers: ${{ github.repository_owner }} - if: steps.lint.outputs.has-updated-sources > 0 && github.ref != 'refs/heads/main' name: Commit and Push Applied Linter Fixes - uses: liblaf/actions/commit@dist + uses: liblaf/actions/commit@v1 with: add-options: --verbose --update message: "chore(mega-linter): apply linters automatic fixes" diff --git a/.github/workflows/release-please.yaml b/.github/workflows/release-please.yaml new file mode 100644 index 0000000..0899cfa --- /dev/null +++ b/.github/workflows/release-please.yaml @@ -0,0 +1,141 @@ +# This file is @generated by . +# DO NOT EDIT! + +name: Release Please + +on: + push: + branches: + - main + +env: + FORCE_COLOR: 1 + +concurrency: + group: ${{ github.workflow }} @ ${{ github.ref }} + cancel-in-progress: false + +jobs: + release-please: + name: Release Please + permissions: + contents: write + pull-requests: write + runs-on: ubuntu-latest + environment: + name: Release Please + outputs: + pr: ${{ steps.release-please.outputs.pr }} + prs_created: ${{ steps.release-please.outputs.prs_created }} + release_created: ${{ steps.release-please.outputs.release_created }} + tag: ${{ steps.release-please.outputs.tag_name }} + steps: + - id: auth + name: Auth + uses: liblaf/actions/auth@v1 + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} + - name: Checkout + uses: actions/checkout@v6 + with: + token: ${{ steps.auth.outputs.token }} + - id: release-please + name: Release Please + uses: googleapis/release-please-action@v4 + with: + token: ${{ steps.auth.outputs.token }} + config-file: .config/release-please/config.json + manifest-file: .config/release-please/.manifest.json + + post-pr: + name: Post PR + permissions: + contents: write + pull-requests: write + needs: + - release-please + if: ${{ needs.release-please.outputs.pr }} + runs-on: ubuntu-latest + environment: + name: Release Please + steps: + - id: auth + name: Auth + uses: liblaf/actions/auth@v1 + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} + - name: Checkout + uses: actions/checkout@v6 + with: + ref: ${{ fromJson(needs.release-please.outputs.pr).headBranchName }} + token: ${{ steps.auth.outputs.token }} + fetch-depth: 0 + - id: tag + name: Get Tag + run: |- + title='${{ fromJson(needs.release-please.outputs.pr).title }}' + version="$(awk '{ print $NF }' <<< "$title")" + printf 'tag=%s\n' "v$version" >> "$GITHUB_OUTPUT" + - name: Changelog + uses: liblaf/actions/changelog@v1 + with: + output: CHANGELOG.md + args: --tag '${{ steps.tag.outputs.tag }}' + - id: message + name: Get Commit Message + run: |- + delimiter="$(uuidgen)" + message="$(git show --format='%B' --no-patch)" + printf 'message<<%s\n%s\n%s\n' "$delimiter" "$message" "$delimiter" >> "$GITHUB_OUTPUT" + - name: Undo Last Commit + run: git reset --soft HEAD~1 + - name: Commit + uses: liblaf/actions/commit@v1 + with: + add-options: --verbose 'CHANGELOG.md' + force: true + message: ${{ steps.message.outputs.message }} + ref: ${{ fromJson(needs.release-please.outputs.pr).headBranchName }} + token: ${{ steps.auth.outputs.token }} + - name: Add Label + run: |- + gh pr edit '${{ fromJson(needs.release-please.outputs.pr).number }}' --add-label 'automerge' + env: + GH_TOKEN: ${{ steps.auth.outputs.token }} + + post-release: + name: Post Release + permissions: + contents: write + needs: + - release-please + if: ${{ needs.release-please.outputs.release_created }} + runs-on: ubuntu-latest + environment: + name: Release Please + steps: + - id: auth + name: Auth + uses: liblaf/actions/auth@v1 + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} + - name: Checkout + uses: actions/checkout@v6 + with: + ref: ${{ needs.release-please.outputs.tag }} + token: ${{ steps.auth.outputs.token }} + fetch-depth: 0 + - id: changelog + name: Changelog + uses: liblaf/actions/changelog@v1 + with: + args: --current --strip all + - name: Update Release Notes + run: >- + gh release edit '${{ needs.release-please.outputs.tag }}' + --notes-file '${{ steps.changelog.outputs.changelog }}' + env: + GH_TOKEN: ${{ steps.auth.outputs.token }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 5a99626..20341aa 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -9,6 +9,9 @@ on: - published workflow_dispatch: +env: + FORCE_COLOR: 1 + jobs: build: name: Build @@ -22,7 +25,7 @@ jobs: package-version: ${{ steps.build.outputs.package_version }} steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - id: build name: Build and Inspect a Python Package uses: hynek/build-and-inspect-python-package@v2 @@ -49,6 +52,8 @@ jobs: - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: + verbose: true + print-hash: true attestations: true release: @@ -59,17 +64,12 @@ jobs: - build runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v5 - with: - fetch-depth: 0 - name: Download Artifacts uses: actions/download-artifact@v6 with: name: ${{ needs.build.outputs.artifact-name }} path: dist - name: Upload Release Assets - uses: liblaf/actions/release@dist + uses: softprops/action-gh-release@v2 with: files: dist/* - tag: ${{ github.ref_name }} diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index c6675d3..47d271b 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -7,68 +7,68 @@ name: Test on: push: + branches: + - main pull_request: workflow_dispatch: -jobs: - skip-duplicate: - name: Skip Duplicate - permissions: - actions: write - runs-on: ubuntu-latest - outputs: - should-skip: ${{ steps.skip-duplicate.outputs.should-skip }} - steps: - - id: skip-duplicate - name: Skip Duplicate - uses: liblaf/actions/skip-duplicate@dist - with: - cancel-others: true +env: + FORCE_COLOR: 1 - collect: - name: Collect - needs: - - skip-duplicate - if: needs.skip-duplicate.outputs.should-skip != 'true' +jobs: + metadata: + name: Metadata runs-on: ubuntu-latest outputs: has-tests: ${{ steps.collect.outputs.has-tests }} + python-versions: ${{ steps.inspect.outputs.supported_python_classifiers_json_array }} steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 + - id: inspect + name: Build and Inspect a Python Package + uses: hynek/build-and-inspect-python-package@v2 - name: Setup Python - uses: liblaf/actions/setup-python@dist + uses: liblaf/actions/setup-python@v1 - id: collect name: Collect run: |- if pytest --collect-only; then echo 'has-tests=true' >> "$GITHUB_OUTPUT" else - echo 'has-tests=false' >> "$GITHUB_OUTPUT" + code="$?" + if (("$code" == 5)); then + echo 'has-tests=false' >> "$GITHUB_OUTPUT" + else + exit "$code" + fi fi test: name: Test - needs: - - collect - if: needs.collect.outputs.has-tests == 'true' permissions: id-token: write + needs: + - metadata + if: needs.metadata.outputs.has-tests == 'true' runs-on: ubuntu-latest + env: + EAGER_IMPORT: true # ref: steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: - fetch-depth: 0 # I don't know why, but it is present in the official example + fetch-depth: 0 # I don't know why, but it is present in Codecov's documentation - name: Setup Python - uses: liblaf/actions/setup-python@dist + uses: liblaf/actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} - name: Install Mise uses: jdx/mise-action@v3 - name: Test run: mise run test - env: - FORCE_COLOR: 1 - - name: Upload Coverage + - if: success() || failure() + name: Upload Coverage uses: codecov/codecov-action@v5 with: use_oidc: true @@ -77,3 +77,7 @@ jobs: uses: codecov/test-results-action@v1 with: use_oidc: true + strategy: + matrix: + python-version: ${{ fromJson(needs.metadata.outputs.python-versions) }} + fail-fast: false diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3d06e7c..2c47c52 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,14 +19,14 @@ ci: repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.14.1 + rev: v0.14.8 hooks: - id: ruff-check args: - --fix - id: ruff-format - repo: https://github.com/biomejs/pre-commit - rev: v2.2.6 + rev: v2.3.8 hooks: - id: biome-check exclude: \.jsonc?$ diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 49d3b08..9504185 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -24,7 +24,7 @@ build: create_environment: - uv venv "${READTHEDOCS_VIRTUALENV_PATH}" install: - - UV_PROJECT_ENVIRONMENT="${READTHEDOCS_VIRTUALENV_PATH}" uv sync --all-extras --all-groups --frozen --link-mode copy + - UV_PROJECT_ENVIRONMENT="${READTHEDOCS_VIRTUALENV_PATH}" uv sync --frozen --all-packages --link-mode copy pre_build: - if test -f 'docs/scripts/pre-build.sh'; then bash 'docs/scripts/pre-build.sh'; fi diff --git a/typings/__builtins__.pyi b/typings/__builtins__.pyi index 60b39f7..0f88a51 100644 --- a/typings/__builtins__.pyi +++ b/typings/__builtins__.pyi @@ -8,12 +8,12 @@ from typing import overload, type_check_only @type_check_only class _IceCreamDebugger: @overload - def __call__(self) -> None: ... + def __call__(self, **kwargs) -> None: ... @overload - def __call__[T](self, arg: T) -> T: ... + def __call__[T](self, arg: T, **kwargs) -> T: ... @overload def __call__[T1, T2, *Ts]( - self, arg1: T1, arg2: T2, *args: *Ts + self, arg1: T1, arg2: T2, *args: *Ts, **kwargs ) -> tuple[T1, T2, *Ts]: ... ic: _IceCreamDebugger