Merge pull request #9 from MPACT-ORG/yinying-lisa-li-patch-1
Create linters in github action
diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
new file mode 100644
index 0000000..90eed2f
--- /dev/null
+++ b/.github/workflows/format.yml
@@ -0,0 +1,93 @@
+name: "Check code formatting"
+
+permissions:
+ contents: read
+
+on:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ code_formatter:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Fetch sources
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.event.pull_request.head.sha }}
+
+ - name: Checkout through merge base
+ uses: rmacklin/fetch-through-merge-base@v0
+ with:
+ base_ref: ${{ github.event.pull_request.base.ref }}
+ head_ref: ${{ github.event.pull_request.head.sha }}
+ deepen_length: 500
+
+ - name: Get changed files
+ id: changed-files
+ uses: tj-actions/changed-files@v39
+ with:
+ separator: ","
+ skip_initial_fetch: true
+
+ # We need to pull the script from the main branch, so that we ensure
+ # we get the latest version of this script.
+ - name: Fetch code formatting utils
+ uses: actions/checkout@v4
+ with:
+ repository: llvm/llvm-project
+ ref: refs/heads/main
+ sparse-checkout: |
+ llvm/utils/git/requirements_formatting.txt
+ llvm/utils/git/code-format-helper.py
+ sparse-checkout-cone-mode: false
+ path: code-format-tools
+
+ - name: "Listed files"
+ env:
+ CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
+ run: |
+ echo "Formatting files:"
+ echo "$CHANGED_FILES"
+ - name: Install clang-format
+ uses: aminya/setup-cpp@v1
+ with:
+ clangformat: 18.1.1
+
+ - name: Setup Python env
+ uses: actions/setup-python@v4
+ with:
+ python-version: '3.11'
+ cache: 'pip'
+ cache-dependency-path: 'code-format-tools/llvm/utils/git/requirements_formatting.txt'
+
+ - name: Install python dependencies
+ run: pip install -r code-format-tools/llvm/utils/git/requirements_formatting.txt
+
+ - name: Run code formatter
+ env:
+ GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }}
+ START_REV: ${{ github.event.pull_request.base.sha }}
+ END_REV: ${{ github.event.pull_request.head.sha }}
+ CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
+ # TODO: Once clang v18 is released, we should be able
+ # to take advantage of the new --diff_from_common_commit option
+ # explicitly in code-format-helper.py and not have to diff starting at
+ # the merge base.
+ # Create an empty comments file so the pr-write job doesn't fail.
+ run: |
+ echo "[]" > comments &&
+ python ./code-format-tools/llvm/utils/git/code-format-helper.py \
+ --write-comment-to-file \
+ --token ${{ secrets.GITHUB_TOKEN }} \
+ --issue-number $GITHUB_PR_NUMBER \
+ --start-rev $(git merge-base $START_REV $END_REV) \
+ --end-rev $END_REV \
+ --changed-files "$CHANGED_FILES"
+ - uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 #v4.3.0
+ if: always()
+ with:
+ name: workflow-args
+ path: |
+ comments