diff --git a/.github/workflows/Format.yml b/.github/workflows/Format.yml new file mode 100644 index 000000000..32afbf310 --- /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@v4 + 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/.github/workflows/Formatting.yml b/.github/workflows/Formatting.yml deleted file mode 100644 index d6943ac9b..000000000 --- a/.github/workflows/Formatting.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: 'Format' - -on: - pull_request_target: - paths: ['**/*.jl'] - types: [opened, synchronize, reopened, ready_for_review] - -permissions: - contents: read - - # needed for julia-actions/cache to delete old caches - actions: write - - # needed for googleapis/code-suggester - pull-requests: write - -jobs: - runic: - runs-on: ubuntu-latest - if: github.event.pull_request.draft == false - steps: - - uses: actions/checkout@v4 - with: - ref: ${{github.event.pull_request.head.ref}} - repository: ${{github.event.pull_request.head.repo.full_name}} - fetch-depth: 0 - - - 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 - run: | - set +e - git runic origin/main - [ $? -eq 2 ] && exit 1 || exit 0 - - - name: Suggest changes - uses: googleapis/code-suggester@v4 - env: - ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - command: review - pull_number: ${{ github.event.pull_request.number }} - git_dir: '.'