158 lines
3.2 KiB
Bash
Executable File
158 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#
|
|
# validates that a pull request builds & passes all unit tests
|
|
#
|
|
# by emaloney, 11 September 2017
|
|
#
|
|
|
|
set -o pipefail # to ensure xcodebuild pipeline errors are propagated correctly
|
|
|
|
SCRIPT_NAME=$(basename "$0")
|
|
SCRIPT_DIR=$(cd "$PWD" ; cd `dirname "$0"` ; echo "$PWD")
|
|
|
|
source "${SCRIPT_DIR}/include-common.sh"
|
|
|
|
showHelp()
|
|
{
|
|
define HELP <<HELP
|
|
$SCRIPT_NAME
|
|
|
|
Validates that a pull request builds & passes all unit tests.
|
|
|
|
Usage:
|
|
|
|
$SCRIPT_NAME <branch> [--owner <owner>]
|
|
|
|
Where:
|
|
|
|
<branch> is the GitHub branch published by <author> that corresponds to the
|
|
given pull request being validated.
|
|
|
|
<owner> is the GitHub organization or user under which the pull request
|
|
was posted. This argument may be omitted if <owner> is the same as the
|
|
owner of this repo.
|
|
|
|
Optional arguments:
|
|
|
|
-o <owner>
|
|
Shorthand for --owner <owner>
|
|
|
|
--skip-tests
|
|
Skips running the unit tests :-(
|
|
|
|
--quiet (or -q)
|
|
Silences output
|
|
|
|
Help
|
|
|
|
This documentation is displayed when supplying the --help (or -help, -h,
|
|
or -?) argument.
|
|
|
|
Note that when this script displays help documentation, all other
|
|
command line arguments are ignored and no other actions are performed.
|
|
|
|
HELP
|
|
printf "$HELP" | less
|
|
}
|
|
|
|
#
|
|
# make sure we're in a git repo
|
|
#
|
|
cd "$SCRIPT_DIR/../../."
|
|
git status 2&> /dev/null
|
|
if [[ $? != 0 ]]; then
|
|
exitWithErrorSuggestHelp "You must invoke this script from within a git repo"
|
|
fi
|
|
|
|
#
|
|
# figure out the default --owner
|
|
#
|
|
ORIGIN_URL=`git remote get-url origin`
|
|
if [[ `echo $ORIGIN_URL | grep -c "^https://"` > 0 ]]; then
|
|
DEFAULT_OWNER=`echo $ORIGIN_URL | sed "sq^https://.*github.com/qq" | sed "sq/.*qq"`
|
|
elif [[ `echo $ORIGIN_URL | grep -c "^ssh://"` > 0 ]]; then
|
|
DEFAULT_OWNER=`echo $ORIGIN_URL | sed "sq^ssh://.*github.com/qq" | sed "sq/.*qq"`
|
|
else
|
|
DEFAULT_OWNER=`echo $ORIGIN_URL | sed "sq.*:qq" | sed "sq/.*qq"`
|
|
fi
|
|
|
|
#
|
|
# parse the command-line arguments
|
|
#
|
|
QUIET_ARG=""
|
|
OWNER="$DEFAULT_OWNER"
|
|
while [[ $1 ]]; do
|
|
case $1 in
|
|
--owner|-o)
|
|
if [[ $2 ]]; then
|
|
OWNER="$2"
|
|
shift
|
|
fi
|
|
;;
|
|
|
|
--skip-tests)
|
|
SKIP_TESTS=1
|
|
;;
|
|
|
|
--quiet|-q)
|
|
QUIET=1
|
|
QUIET_ARG="-q"
|
|
;;
|
|
|
|
--help|-help|-h|-\?)
|
|
SHOW_HELP=1
|
|
;;
|
|
|
|
-*)
|
|
exitWithErrorSuggestHelp "Unrecognized argument: $1"
|
|
;;
|
|
|
|
*)
|
|
if [[ -z $BRANCH ]]; then
|
|
BRANCH=$1
|
|
elif [[ -z $ARGS ]]; then
|
|
ARGS=$1
|
|
else
|
|
ARGS="$ARGS $1"
|
|
fi
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [[ $SHOW_HELP ]]; then
|
|
showHelp
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z $BRANCH ]]; then
|
|
exitWithErrorSuggestHelp "The pull request branch name must be specified"
|
|
fi
|
|
|
|
for ARG in $ARGS; do
|
|
exitWithErrorSuggestHelp "Unrecognized argument: $ARG"
|
|
done
|
|
|
|
#
|
|
# clone the repo using the pull request branch
|
|
#
|
|
PROJECT_NAME="CleanroomLogger"
|
|
REPO_URL="ssh://github.com/$OWNER/$PROJECT_NAME"
|
|
REPO_TEMP_DIR=`mktemp -d`
|
|
updateStatus "Cloning $BRANCH from $REPO_URL into $REPO_TEMP_DIR"
|
|
cd "$REPO_TEMP_DIR"
|
|
executeCommand "git clone --recursive $QUIET_ARG -b $BRANCH $REPO_URL"
|
|
cd "$PROJECT_NAME"
|
|
|
|
#
|
|
# execute buildCheck.sh, preferring the one in the repo (if any)
|
|
#
|
|
BUILD_CHECK_SCRIPT="BuildControl/bin/buildCheck.sh"
|
|
if [[ -e "$BUILD_CHECK_SCRIPT" ]]; then
|
|
executeCommand "$BUILD_CHECK_SCRIPT $QUIET_ARG"
|
|
else
|
|
exitWithError "Couldn't find expected script at $PWD/$BUILD_CHECK_SCRIPT"
|
|
fi
|
|
|
|
updateStatus "Success! The $BRANCH branch of $PROJECT_NAME passes all checks."
|