]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
ci: Run formatting check on pull request
authorRoland Fischer <roli@gugus.ca>
Wed, 15 Jul 2020 03:43:58 +0000 (23:43 -0400)
committerVictor Julien <victor@inliniac.net>
Mon, 31 Aug 2020 13:16:42 +0000 (15:16 +0200)
.github/workflows/formatting.yml [new file with mode: 0644]

diff --git a/.github/workflows/formatting.yml b/.github/workflows/formatting.yml
new file mode 100644 (file)
index 0000000..38bd821
--- /dev/null
@@ -0,0 +1,142 @@
+name: formatting-check
+
+on:
+  push:
+    # Only run on pushes to pull request branches
+    branches-ignore:
+      - 'master'
+      - 'master-*'
+  pull_request:
+
+jobs:
+
+  # Checking for correct formatting of branch for C code changes
+  check-formatting:
+    name: Formatting Check (clang 9)
+    runs-on: ubuntu-18.04
+    container: ubuntu:18.04
+    continue-on-error: true
+    steps:
+
+      # Cache Rust stuff.
+      - name: Cache cargo registry
+        uses: actions/cache@v1
+        with:
+          path: ~/.cargo/registry
+          key: cargo-registry
+
+      - name: Install dependencies
+        run: |
+          apt update
+          apt -y install \
+                libpcre3 \
+                libpcre3-dev \
+                build-essential \
+                autoconf \
+                automake \
+                git \
+                libtool \
+                libpcap-dev \
+                libnet1-dev \
+                libyaml-0-2 \
+                libyaml-dev \
+                libcap-ng-dev \
+                libcap-ng0 \
+                libmagic-dev \
+                libnetfilter-queue-dev \
+                libnetfilter-queue1 \
+                libnfnetlink-dev \
+                libnfnetlink0 \
+                libhiredis-dev \
+                libjansson-dev \
+                libpython2.7 \
+                make \
+                python \
+                rustc \
+                software-properties-common \
+                wget \
+                zlib1g \
+                zlib1g-dev
+      - name: Install packages for clang-format 9
+        run: |
+          # no need to install full clang
+          apt-get install -y clang-format-9
+      - name: Install cbindgen
+        run: cargo install --force --debug --version 0.14.1 cbindgen
+      - run: echo "::add-path::$HOME/.cargo/bin"
+      # Checking out the branch is not as simple as "checking out".
+      #
+      # In case master has any new commits since we branched off, github will
+      # automatically add a "merge commit" from our branch to master and check
+      # this out instead of the original last commit on the branch.
+      #
+      # This screws up git clang-format as it'll also format the "merge commit"
+      # and essentially report any formatting issues in the "merge commit".
+      # However, we really don't care about any of the new commits on master.
+      #
+      # There are supposed to be ways to use with/ref to fix that and while
+      # they work perfectly well for pull requests within the forked repo, none
+      # of the ones tried worked for pull requests from forks to the OISF repo.
+      #
+      # My patience simply ran too short to keep on looking. See follow-on
+      # action to manually fix this up.
+      - name: Checkout - might be merge commit!
+        uses: actions/checkout@v1
+        # Use last commit of branch, not potential merge commit!
+        #
+        # This works perfectly well on pull requests within forked repos, but
+        # not for pull requests from forks to the OISF repo as the latter one
+        # does not know the branch (from the forked repo). Argh.
+#        with:
+#          ref: ${{ github.head_ref }} # check out branch
+
+      # Manually ignore the merge commit as none of the with/ref things tried
+      # with actions/checkout seemed to work for pull requests from forks into
+      # the OISF repo.
+      - name: Peel off potential merge request
+        run: |
+          # The "merge commit" has a distinct subject that we can look for.
+          # If we find it, ignore it by checking out the "real last commit".
+          #
+          # Note, github uses the non-abbreviated sha for the commit subject.
+          #
+          # Commit history example in case github added merge, i.e. if you did
+          # git log --pretty=oneline -2:
+          #   sha_1 Merge sha_2 into latest_sha_on_master
+          #   sha_2 This is the real last commit on branch
+          echo "Last two commits on checkout:"
+          git log --pretty=oneline -2
+          last_commit_subject=$(git log --pretty=%s -1)
+          second_last_commit_sha=$(git log --pretty=%H -2 |tail -1)
+          echo "$last_commit_subject" | grep -e "^Merge $second_last_commit_sha into [0-9a-fA-F]*$" > /dev/null 2>&1
+          if [ $? -eq 0 ]; then
+              # Last commit was a merge to master - ignore
+              echo "Found github merge commit - checking out real last commit instead..."
+              git checkout $second_last_commit_sha
+          else
+              echo "No github merge commit found"
+          fi
+        shell: bash {0}
+      - run: git clone https://github.com/OISF/libhtp -b 0.5.x
+      - run: ./autogen.sh
+      - run: ./configure --enable-unittests
+      - name: Check formatting
+        run: |
+          ./scripts/clang-format.sh check-branch --diffstat --show-commits  >> check_formatting_log.txt 2>&1
+          rc=$?
+          if [ $rc -eq 0 ]; then
+              cat check_formatting_log.txt
+              echo "Formatting is following code style guide"
+          elif [ $rc -eq 1 ]; then
+              # limit output as it might be a lot in the worst case
+              tail -n 100 check_formatting_log.txt
+              echo "::error ::Formatting is not following code style guide!"
+              exit 1
+          else
+              cat check_formatting_log.txt
+              # use last output line as error
+              last_line=$(tail -n 1 check_formatting_log.txt)
+              echo "::error ::$last_line"
+              exit 1
+          fi
+        shell: bash {0}