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