From 44a6af6a236bd1415edc98ef542682de3433c42d Mon Sep 17 00:00:00 2001 From: Rick van Hattem Date: Sun, 20 Sep 2026 02:06:09 +0200 Subject: [PATCH] Apply automatic Ruff fixes to pull requests --- .github/workflows/autofix.yml | 36 +++++++++++++++++++++++++++++++++++ .github/workflows/ci.yml | 5 +++++ CONTRIBUTING.MD | 13 +++++++++++++ tox.ini | 11 +++++++++++ 4 files changed, 65 insertions(+) create mode 100644 .github/workflows/autofix.yml diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml new file mode 100644 index 0000000..7c4409f --- /dev/null +++ b/.github/workflows/autofix.yml @@ -0,0 +1,36 @@ +# Ruff rewrites quote styles and capitalises docstrings without any help +# from a person, so a contributor should never have to. This hands those +# fixes to the autofix.ci app, which commits them to the pull request +# branch, forks included. The existing lint gate still reports any +# findings that ruff cannot fix. +# +# The filename and the workflow name are both fixed by autofix.ci, which +# uses them to identify the workflow it trusts. Renaming either one stops +# the app from accepting the patch. +name: autofix.ci # needed to securely identify the workflow + +on: + pull_request: + push: + branches: [develop, master] + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + autofix: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 + with: + python-version: '3.13' + - run: uvx --with tox-uv tox -e ruff-fix + - uses: autofix-ci/action@c5b2d67aa2274e7b5a18224e8171550871fc7e4a # v1.3.4 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ecdd91c..5a21c61 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,8 +35,13 @@ jobs: python-version: '3.13' - name: Install tox run: uv pip install '.[tox]' + - name: Apply Ruff fixes to pull requests + if: github.event_name == 'pull_request' && matrix.env == 'lint' + run: tox -e ruff-fix - name: Run tox env: + RUFF_OUTPUT_FORMAT: >- + ${{ github.event_name == 'pull_request' && 'github' || 'full' }} TOX_ENV: ${{ matrix.env }} run: tox -e "$TOX_ENV" diff --git a/CONTRIBUTING.MD b/CONTRIBUTING.MD index cf9768e..5de6c0f 100644 --- a/CONTRIBUTING.MD +++ b/CONTRIBUTING.MD @@ -17,3 +17,16 @@ processes in parallel. pip install tox detox detox ``` + +## Automatic formatting + +Pull requests apply Ruff fixes before the lint check. With the autofix.ci +app installed for this repository, those fixes are committed to the pull +request branch, including forks. Findings Ruff cannot fix still fail CI. +Push builds check the committed files without applying fixes. + +Apply the same fixes locally with: + +```console +uvx --with tox-uv tox -e ruff-fix +``` diff --git a/tox.ini b/tox.ini index 866a753..dd03b22 100644 --- a/tox.ini +++ b/tox.ini @@ -44,6 +44,7 @@ set_env = # ── Lint ───────────────────────────────────────────────────── [testenv:lint] +pass_env = RUFF_OUTPUT_FORMAT description = Lint and format-check with ruff skip_install = true deps = ruff>=0.15.0 @@ -105,3 +106,13 @@ commands = coverage combine {toxworkdir} coverage report --fail-under=100 coverage lcov -o {toxworkdir}/coverage.lcov + + +[testenv:ruff-fix] +labels = fix +description = Apply the available Ruff fixes +skip_install = true +deps = ruff>=0.15.0 +commands = + ruff check --fix --exit-zero django_admin_generator test_project + ruff format django_admin_generator test_project