diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32d52387..2505f640 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,18 +37,6 @@ jobs: contents: read id-token: write - python-tests-extensive: - name: 🐍 Test (Extensive) - needs: change-detection - if: fromJSON(needs.change-detection.outputs.run-python-tests) && github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'extensive-python-ci') - strategy: - fail-fast: false - matrix: - runs-on: [ubuntu-22.04, ubuntu-22.04-arm, macos-15, windows-2025] - uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-tests.yml@d6314c45667c131055a0389afc110e8dedc6da3f # v1.17.11 - with: - runs-on: ${{ matrix.runs-on }} - python-linter: name: 🐍 Lint needs: change-detection @@ -78,11 +66,10 @@ jobs: - change-detection - python-tests - python-coverage - - python-tests-extensive - python-linter - build-sdist - build-wheel - runs-on: ubuntu-latest + runs-on: ubuntu-slim steps: - name: Decide whether the needed jobs succeeded or failed uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2 @@ -92,10 +79,6 @@ jobs: fromJSON(needs.change-detection.outputs.run-python-tests) && '' || 'python-tests,python-coverage,python-linter,' }} - ${{ - fromJSON(needs.change-detection.outputs.run-python-tests) && github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'extensive-python-ci') - && '' || 'python-tests-extensive,' - }} ${{ fromJSON(needs.change-detection.outputs.run-cd) && '' || 'build-sdist,build-wheel,' diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index b379ec12..6e2f24f1 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -14,7 +14,7 @@ jobs: permissions: contents: write pull-requests: write - runs-on: ubuntu-latest + runs-on: ubuntu-slim steps: - uses: release-drafter/release-drafter@6db134d15f3909ccc9eefd369f02bd1e9cffdf97 # v6.2.0 env: diff --git a/.github/workflows/templating.yml b/.github/workflows/templating.yml index 8f6be419..ee80d594 100644 --- a/.github/workflows/templating.yml +++ b/.github/workflows/templating.yml @@ -8,7 +8,7 @@ on: jobs: render-template: name: Render template - runs-on: ubuntu-latest + runs-on: ubuntu-slim permissions: contents: write pull-requests: write diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e8053c20..e13927f6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,11 @@ # To run all pre-commit checks, use: # -# pre-commit run -a +# uvx prek run -a # # To install pre-commit hooks that run every time you commit: # -# pre-commit install +# uv tool install prek +# prek install # ci: @@ -14,120 +15,75 @@ ci: skip: [ty-check] repos: - # Standard hooks + # Priority 0: Fast validation and independent fixers + + ## Standard hooks - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - - id: check-added-large-files - args: ["--maxkb=2048"] - - id: check-case-conflict - - id: check-vcs-permalinks - id: check-merge-conflict - - id: check-symlinks - - id: check-json - - id: check-toml - - id: check-yaml - - id: debug-statements + priority: 0 - id: end-of-file-fixer - - id: mixed-line-ending + priority: 1 - id: trailing-whitespace + priority: 1 - # Handling unwanted unicode characters - - repo: https://github.com/sirosen/texthooks - rev: 0.7.1 - hooks: - - id: fix-ligatures - - id: fix-smartquotes - - # Check for common mistakes - - repo: https://github.com/pre-commit/pygrep-hooks - rev: v1.10.0 - hooks: - - id: rst-backticks - - id: rst-directive-colons - - id: rst-inline-touching-normal - - # Ensure uv lock file is up-to-date - - repo: https://github.com/astral-sh/uv-pre-commit - rev: 0.9.28 - hooks: - - id: uv-lock - - # Python linting using ruff - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.14.14 - hooks: - - id: ruff-check - - id: ruff-format - - # Static type checking using ty - - repo: local - hooks: - - id: ty-check - name: ty check - entry: uv run ty check - language: system - require_serial: true - types_or: [python, pyi, jupyter] - exclude: ^(docs/) - - # Also run Black on examples in the documentation - - repo: https://github.com/adamchainz/blacken-docs - rev: 1.20.0 + ## Check the pyproject.toml file + - repo: https://github.com/henryiii/validate-pyproject-schema-store + rev: 2026.01.22 hooks: - - id: blacken-docs - additional_dependencies: [black==25.*] + - id: validate-pyproject + priority: 0 - # Check for license headers - - repo: https://github.com/emzeat/mz-lictools - rev: v2.9.0 + ## Check JSON schemata + - repo: https://github.com/python-jsonschema/check-jsonschema + rev: 0.36.1 hooks: - - id: license-tools + - id: check-github-workflows + priority: 0 + - id: check-readthedocs + priority: 0 - # Catch common capitalization mistakes + ## Catch common capitalization mistakes - repo: local hooks: - id: disallow-caps name: Disallow improper capitalization language: pygrep - entry: PyBind|Numpy|Cmake|CCache|Github|PyTest|Mqt|Tum - exclude: .pre-commit-config.yaml - - # Format configuration files with prettier - - repo: https://github.com/rbubley/mirrors-prettier - rev: v3.8.1 - hooks: - - id: prettier - types_or: [yaml, markdown, html, css, scss, javascript, json] + entry: \b(Numpy|Github|PyTest|Mqt|Tum)\b + exclude: ^(\.pre-commit-config\.yaml)$ + priority: 0 - # Check for spelling + ## Check for spelling - repo: https://github.com/adhtruong/mirrors-typos rev: v1.42.3 hooks: - id: typos + priority: 0 - # Check best practices for scientific Python code + ## Check best practices for scientific Python code - repo: https://github.com/scientific-python/cookie rev: 2025.11.21 hooks: - id: sp-repo-review additional_dependencies: ["repo-review[cli]"] + priority: 0 - # Check JSON schemata - - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.36.1 + ## Check for license headers + - repo: https://github.com/emzeat/mz-lictools + rev: v2.9.0 hooks: - - id: check-dependabot - - id: check-github-workflows - - id: check-readthedocs + - id: license-tools + priority: 0 - # Check the pyproject.toml file - - repo: https://github.com/henryiii/validate-pyproject-schema-store - rev: 2026.01.22 + ## Ensure uv lock file is up-to-date + - repo: https://github.com/astral-sh/uv-pre-commit + rev: 0.9.28 hooks: - - id: validate-pyproject + - id: uv-lock + priority: 0 - # Tidy up BibTeX files + ## Tidy up BibTeX files - repo: https://github.com/FlamingTempura/bibtex-tidy rev: v1.14.0 hooks: @@ -144,3 +100,48 @@ repos: "--trailing-commas", "--remove-empty-fields", ] + priority: 0 + + # Priority 1: Second-pass fixers + + ## Format configuration files with prettier + - repo: https://github.com/rbubley/mirrors-prettier + rev: v3.8.1 + hooks: + - id: prettier + types_or: [yaml, markdown, html, css, scss, javascript, json] + priority: 1 + + ## Python linting using ruff + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.14.14 + hooks: + - id: ruff-format + priority: 1 + - id: ruff-check + require_serial: true + priority: 2 + + # Priority 2+: Final checks and fixers + + ## Also run Black on examples in the documentation (needs to run after ruff format) + - repo: https://github.com/adamchainz/blacken-docs + rev: 1.20.0 + hooks: + - id: blacken-docs + language: python + additional_dependencies: [black==26.*] + priority: 2 + + ## Static type checking using ty (needs to run after lockfile update/ruff format, and ruff lint) + - repo: local + hooks: + - id: ty-check + name: ty check + entry: uv run ty check + language: unsupported + require_serial: true + types_or: [python, pyi, jupyter] + exclude: ^(docs/) + pass_filenames: false + priority: 3 diff --git a/pyproject.toml b/pyproject.toml index 1ffab67b..9ea88ae5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -130,6 +130,7 @@ ignore = [ "MY100", # We use ty instead of mypy "PC140", # We use ty instead of mypy "PC160", # We use a mirror of crate-ci/typos + "PC170", # We do not use rST files anymore ]