1#!/bin/bash 2 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15# this retrieves the merge commit created by GH 16parents=(`git log -n 1 --format=%p HEAD`) 17 18if [[ "${#parents[@]}" -ne 2 ]]; then 19 echo "This PR's merge commit is missing a parent!" 20 exit 1 21fi 22 23from="${parents[0]}" 24into="${parents[1]}" 25commits=$(git show -s --format=%h ${from}..${into}) 26 27has_commits=false 28for sha in $commits; do 29 author="Signed-off-by: $(git show -s --format="%an <%ae>" ${sha})" 30 committer="Signed-off-by: $(git show -s --format="%cn <%ce>" ${sha})" 31 32 lines="$(git show -s --format=%B ${sha})" 33 34 found_author=false 35 # Don't enforce committer email on forks; this primarily avoids issues 36 # running workflows on the zephyr fork, because rebases done in the GH UX 37 # use the primary email of the committer, which might not match the one 38 # used in git CLI. 39 if [[ $GITHUB_REPOSITORY == mcu-tools/* ]]; then 40 found_committer=false 41 else 42 found_committer=true 43 fi 44 45 IFS=$'\n' 46 for line in ${lines}; do 47 stripped=$(echo $line | sed -e 's/^\s*//' | sed -e 's/\s*$//') 48 if [[ ${stripped} == ${author} ]]; then 49 found_author=true 50 fi 51 if [[ ${stripped} == ${committer} ]]; then 52 found_committer=true 53 fi 54 55 [[ ${found_author} == true && ${found_committer} == true ]] && break 56 done 57 58 if [[ ${found_author} == false ]]; then 59 echo -e "Missing \"${author}\" in commit ${sha}" 60 fi 61 if [[ ${found_committer} == false ]]; then 62 echo -e "Missing \"${committer}\" in commit ${sha}" 63 fi 64 if [[ ${found_author} == false || ${found_committer} == false ]]; then 65 exit 1 66 fi 67 68 has_commits=true 69done 70 71if [[ ${has_commits} = false ]]; then 72 echo "No commits found in this PR!" 73 exit 1 74fi 75