forked from nodejs/node
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lint-pr-commit-message.sh
39 lines (36 loc) · 1.41 KB
/
lint-pr-commit-message.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/sh
# Shell script to lint the message of the first commit in a pull request.
#
# Depends on curl, git, node, npm and npx being in $PATH.
#
# The pull request is either:
# 1) supplied as an argument to this shell script
# 2) derived from the HEAD commit via the GitHub API
GH_API_URL="https://api.github.com"
PR_ID=$1;
if [ -z "${PR_ID}" ]; then
# Attempt to work out the PR number based on current HEAD
if HEAD_COMMIT="$( git rev-parse HEAD )"; then
if SEARCH_RESULTS="$( curl -s "${GH_API_URL}/search/issues?q=sha:${HEAD_COMMIT}+type:pr+repo:nodejs/node" )"; then
if FOUND_PR="$( node -p 'JSON.parse(process.argv[1]).items[0].number' "${SEARCH_RESULTS}" 2> /dev/null )"; then
PR_ID=${FOUND_PR}
fi
fi
fi
fi
if [ -z "${PR_ID}" ]; then
echo "Unable to determine the pull request number to check. Please specify, "
echo " e.g. $0 <PR_NUMBER>"
exit 1
fi
PATCH=$( curl -sL "https://github.com/nodejs/node/pull/${PR_ID}.patch" | grep '^From ' )
if FIRST_COMMIT="$( echo "$PATCH" | awk '/^From [0-9a-f]{40} / { if (count++ == 0) print $2 }' )"; then
MESSAGE=$( git show --quiet --format='format:%B' "$FIRST_COMMIT" )
echo "
*** Linting the first commit message for pull request ${PR_ID}
*** according to the guidelines at https://goo.gl/p2fr5Q.
*** Commit message for $(echo "$FIRST_COMMIT" | cut -c 1-10) is:
${MESSAGE}
"
npx -q core-validate-commit --no-validate-metadata "${FIRST_COMMIT}"
fi