ci: Import latest ci-commitmessage-submodules from rpm-ostree
authorJonathan Lebon <jonathan@jlebon.com>
Wed, 17 Jun 2020 14:38:06 +0000 (10:38 -0400)
committerJonathan Lebon <jonathan@jlebon.com>
Wed, 17 Jun 2020 14:39:51 +0000 (10:39 -0400)
Especially for https://github.com/coreos/rpm-ostree/pull/2079.

ci/ci-commitmessage-submodules.sh

index 35d828e49b28094e325ecee6df917a9e4081e7c9..edc0d780d0e5fefde382f1a5032bd0fd9977143d 100755 (executable)
@@ -1,5 +1,8 @@
 #!/bin/bash
-set -euo pipefail
+set -xeuo pipefail
+
+dn=$(dirname $0)
+. ${dn}/libbuild.sh
 
 # Copyright 2017 Colin Walters <walters@verbum.org>
 # Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php)
@@ -13,11 +16,8 @@ set -euo pipefail
 # It's very common for people to accidentally change submodules, and having this
 # requirement is a small hurdle to pass.
 
-# if running under PAPR, use the branch/PR HEAD actually
-# being tested rather than the merge sha
-HEAD=${PAPR_COMMIT:-HEAD}
-dn=$(dirname $0)
-. ${dn}/libpaprci/libbuild.sh
+# If passed the commit, use that. Otherwise, just use HEAD.
+HEAD=${1:-HEAD}
 
 tmpd=$(mktemp -d)
 touch ${tmpd}/.tmpdir
@@ -30,8 +30,8 @@ cleanup_tmp() {
 trap cleanup_tmp EXIT
 
 if ! [ -x /usr/bin/git ]; then
-    pkg_upgrade
-    pkg_install git
+  pkg_upgrade
+  pkg_install git
 fi
 
 gitdir=$(realpath $(pwd))
@@ -42,17 +42,34 @@ cp -a ${gitdir} ${tmpd}/workdir
 cd ${tmpd}/workdir
 git log --pretty=oneline origin/master..$HEAD | while read logline; do
     commit=$(echo ${logline} | cut -f 1 -d ' ')
+    # For merge commits, just check that they're empty (i.e. no conflict
+    # resolution was needed). Otherwise, let's just error out. Conflicts should
+    # be resolved by rebasing the PR.
+    # https://stackoverflow.com/questions/3824050#comment82244548_13956422
+    if [ "$(git rev-list --no-walk --count --merges ${commit})" -ne 0 ]; then
+      if [ -n "$(git diff-tree ${commit})" ]; then
+        echo "error: non-empty git merge: resolve conflicts by rebasing!"
+        exit 1
+      fi
+      echo "Commit ${commit} is an empty merge commit; ignoring..."
+      continue
+    fi
     git diff --name-only ${commit}^..${commit} > ${tmpd}/diff.txt
     git log -1 ${commit} > ${tmpd}/log.txt
     echo "Validating commit for submodules: $commit"
+    sed -e 's,^,# ,' < ${tmpd}/log.txt
     git checkout -q "${commit}"
     git submodule update --init
     git submodule foreach --quiet 'echo $path'| while read submodule; do
         if grep -q -e '^'${submodule} ${tmpd}/diff.txt; then
             echo "Commit $commit modifies submodule: $submodule"
             expected_match="Update submodule: $submodule"
+            # check if it's from dependabot
+            if grep -q -e '^Author: dependabot' ${tmpd}/log.txt; then
+              echo "Commit $commit contains bump from Dependabot"
+              continue
+            fi
             if ! grep -q -e "$expected_match" ${tmpd}/log.txt; then
-                sed -e 's,^,# ,' < ${tmpd}/log.txt
                 echo "error: Commit message for ${commit} changes a submodule, but does not match regex ${expected_match}"
                 exit 1
             fi