diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40a3b72e..ede20e9a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: strategy: fail-fast: false matrix: - runs-on: [ubuntu-24.04, ubuntu-24.04-arm, macos-14, windows-2022] + runs-on: [ubuntu-24.04, ubuntu-24.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 }} @@ -70,7 +70,7 @@ jobs: - 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 diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 8389020f..a31a55d5 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -16,7 +16,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 690798da..43fbb18d 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 9dc06521..062e1f2c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,97 +1,151 @@ # 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: autoupdate_commit_msg: "⬆️🪝 update pre-commit hooks" - autofix_commit_msg: "🎨 pre-commit fixes" autoupdate_schedule: quarterly + autofix_commit_msg: "🎨 pre-commit fixes" skip: [mypy] 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 - # Clean jupyter notebooks - - repo: https://github.com/srstevenson/nb-clean - rev: 4.0.1 + ## Check the pyproject.toml file + - repo: https://github.com/henryiii/validate-pyproject-schema-store + rev: 2026.01.22 hooks: - - id: nb-clean - args: - - --remove-empty-cells - - --preserve-cell-metadata - - raw_mimetype - - -- + - id: validate-pyproject + priority: 0 - # Handling unwanted unicode characters - - repo: https://github.com/sirosen/texthooks - rev: 0.7.1 + ## Check JSON schemata + - repo: https://github.com/python-jsonschema/check-jsonschema + rev: 0.36.1 hooks: - - id: fix-ligatures - - id: fix-smartquotes + - id: check-github-workflows + priority: 0 + - id: check-readthedocs + priority: 0 - # Check for common mistakes - - repo: https://github.com/pre-commit/pygrep-hooks - rev: v1.10.0 + ## Catch common capitalization mistakes + - repo: local hooks: - - id: rst-backticks - - id: rst-directive-colons - - id: rst-inline-touching-normal + - id: disallow-caps + name: Disallow improper capitalization + language: pygrep + entry: '\b(?:Numpy|Github|PyTest|Mqt|Tum)\b' + exclude: ^(.pre-commit-config.yaml|webpage/package-lock.json|.*\.zip) + priority: 0 - # Check for license headers + ## 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 + - repo: https://github.com/scientific-python/cookie + rev: 2025.11.21 + hooks: + - id: sp-repo-review + additional_dependencies: ["repo-review[cli]"] + priority: 0 + + ## Check for license headers - repo: https://github.com/emzeat/mz-lictools rev: v2.9.0 hooks: - id: license-tools + priority: 0 - # Ensure uv lock file is up-to-date + ## 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 + priority: 0 + + ## Tidy up BibTeX files + - repo: https://github.com/FlamingTempura/bibtex-tidy + rev: v1.14.0 + hooks: + - id: bibtex-tidy + args: + [ + "--align=20", + "--curly", + "--months", + "--blank-lines", + "--sort", + "--strip-enclosing-braces", + "--sort-fields", + "--trailing-commas", + "--remove-empty-fields", + ] + priority: 0 - # Python linting and formatting using ruff + # 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-check - 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 + ## Clean Jupyter notebooks + - repo: https://github.com/srstevenson/nb-clean + rev: 4.0.1 + hooks: + - id: nb-clean + args: + - --remove-empty-cells + - --preserve-cell-metadata + - raw_mimetype + - -- + priority: 2 + + ## 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 - additional_dependencies: [black==25.*] - - # 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] + language: python + additional_dependencies: [black==26.*] + priority: 2 - # Check static types with mypy + ## Static type checking using mypy (needs to run after lockfile update/ruff format, and ruff lint) - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.19.1 hooks: @@ -106,57 +160,4 @@ repos: - pandas-stubs - mqt-core - mqt-bench>=2.0.1 - - # Check for spelling - - repo: https://github.com/adhtruong/mirrors-typos - rev: v1.42.3 - hooks: - - id: typos - - # 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|\.pkl$|\.zip$|\.json$ - - # 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]"] - - # Check JSON schemata - - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.36.1 - hooks: - - id: check-dependabot - - id: check-github-workflows - - id: check-readthedocs - - # Check the pyproject.toml file - - repo: https://github.com/henryiii/validate-pyproject-schema-store - rev: 2026.01.22 - hooks: - - id: validate-pyproject - - # Tidy up BibTeX files - - repo: https://github.com/FlamingTempura/bibtex-tidy - rev: v1.14.0 - hooks: - - id: bibtex-tidy - args: - [ - "--align=20", - "--curly", - "--months", - "--blank-lines", - "--sort", - "--strip-enclosing-braces", - "--sort-fields", - "--trailing-commas", - "--remove-empty-fields", - ] + priority: 3 diff --git a/pyproject.toml b/pyproject.toml index dbcfc079..485d570d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -261,6 +261,7 @@ aer = "aer" ignore = [ "GH200", # We use Renovate instead of Dependabot "PC160", # We use a mirror of crate-ci/typos + "PC170", # We do not use rST files anymore ]