From 5b63aaeef2ad04d703abc27cd8997fa9cf016604 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Fri, 10 Oct 2025 19:19:35 +0200 Subject: [PATCH] add format CI --- .github/workflows/Format.yml | 105 +++++++++++++++++++++++++++++++++++ .pre-commit-config.yaml | 2 +- 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/Format.yml diff --git a/.github/workflows/Format.yml b/.github/workflows/Format.yml new file mode 100644 index 0000000..0e1ce4a --- /dev/null +++ b/.github/workflows/Format.yml @@ -0,0 +1,105 @@ +name: 'Format' + +on: + pull_request_target: + paths: ['**/*.jl'] + types: [opened, synchronize, reopened, ready_for_review] + +permissions: + contents: read + actions: write + pull-requests: write + +jobs: + runic: + runs-on: ubuntu-latest + if: github.event.pull_request.draft == false + steps: + - name: Check out repository + uses: actions/checkout@v5 + with: + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} + fetch-depth: 0 + + - name: Add upstream remote + run: | + git remote add upstream https://github.com/${{ github.repository }} + git fetch upstream + + - name: Setup Julia + uses: julia-actions/setup-julia@v2 + with: + version: '1' + arch: 'x64' + - uses: julia-actions/cache@v2 + + - name: Install Runic + run: | + julia --project=@runic -e 'using Pkg; Pkg.add("Runic")' + curl -o git-runic https://raw.githubusercontent.com/fredrikekre/Runic.jl/master/bin/git-runic + chmod +x git-runic + sudo mv git-runic /usr/local/bin + + - name: Run Runic + id: runic + run: | + set +e + MERGE_BASE=$(git merge-base upstream/${{ github.base_ref }} HEAD) || exit 1 + DIFF=$(git runic --diff $MERGE_BASE) + EXIT_CODE=$? + + echo "exit_code=$EXIT_CODE" >> $GITHUB_OUTPUT + echo "diff<> $GITHUB_OUTPUT + echo "$DIFF" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + # if Runic failed, bail out + [ $EXIT_CODE -eq 2 ] && exit 1 || exit 0 + + - name: Find comment + uses: peter-evans/find-comment@v3 + id: find-comment + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: '' + + - name: Comment formatting suggestions + if: steps.runic.outputs.exit_code == 1 + uses: peter-evans/create-or-update-comment@v4 + with: + comment-id: ${{ steps.find-comment.outputs.comment-id }} + issue-number: ${{ github.event.pull_request.number }} + body: | + + + Your PR requires formatting changes to meet the project's style guidelines. + Please consider running [Runic](https://github.com/fredrikekre/Runic.jl) (`git runic ${{ github.base_ref }}`) to apply these changes. + +
+ Click here to view the suggested changes. + + ~~~diff + ${{ steps.runic.outputs.diff }} + ~~~ + +
+ edit-mode: replace + + - name: Update stale comment + if: steps.runic.outputs.exit_code == 0 && steps.find-comment.outputs.comment-id + uses: peter-evans/create-or-update-comment@v4 + with: + comment-id: ${{ steps.find-comment.outputs.comment-id }} + issue-number: ${{ github.event.pull_request.number }} + body: | + + + Your PR no longer requires formatting changes. Thank you for your contribution! + edit-mode: replace + + # XXX: if Github ever supports allow-failure (actions/runner#2347) + #- name: Propagate exit code + # run: | + # exit ${{ steps.runic.outputs.exit_code }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f2ac4f6..3e2823c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,5 @@ repos: - repo: https://github.com/fredrikekre/runic-pre-commit - rev: v1.0.0 + rev: v2.0.1 hooks: - id: runic