Last active
February 11, 2020 11:04
-
-
Save suztomo/ec4834151a81f8e1d26aa0afb278818b to your computer and use it in GitHub Desktop.
beam-linkage-check.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -o pipefail | |
set -e | |
ARTIFACTS="beam-sdks-java-core beam-sdks-java-io-google-cloud-platform beam-runners-google-cloud-dataflow-java beam-sdks-java-io-hadoop-format beam-sdks-java-io-cassandra" | |
BRANCH_NAME=$(git symbolic-ref --short HEAD) | |
if [ BRANCH_NAME == "master" ]; then | |
echo "Please run this script on a branch other than master" | |
fi | |
OUTPUT_DIR=$HOME/linkagecheck | |
mkdir -p $OUTPUT_DIR | |
if [ ! -z "$(git diff)" ]; then | |
echo "Uncommited change detected" | |
exit 1 | |
fi | |
function runLinkageCheck () { | |
COMMIT=$1 | |
local BRANCH_NAME=$(git symbolic-ref --short HEAD) | |
# An empty invocation so that the subsequent checkJavaLinkage does not | |
# contain garbage | |
echo [`date`] "Installing artifacts (${COMMIT}) to Maven local repository" | |
./gradlew -Ppublishing -PjavaLinkageArtifactIds=beam-sdks-java-core :checkJavaLinkage > /dev/null 2>&1 | |
for ARTIFACT in $ARTIFACTS; do | |
echo [`date`] "Running linkage check for ${ARTIFACT} in ${BRANCH_NAME}" | |
# Removing time taken to have clean diff | |
./gradlew -Ppublishing -PjavaLinkageArtifactIds=$ARTIFACT :checkJavaLinkage |grep -v 'BUILD SUCCESSFUL in' | grep -v 'dependency paths' > ${OUTPUT_DIR}/${COMMIT}-${ARTIFACT} | |
echo [`date`] "Done: ${OUTPUT_DIR}/${COMMIT}-${ARTIFACT}" | |
done | |
} | |
BRANCH_COMMIT=`git rev-parse --short=8 HEAD` | |
runLinkageCheck $BRANCH_COMMIT | |
git checkout master | |
git pull | |
MASTER_COMMIT=`git rev-parse --short=8 HEAD` | |
runLinkageCheck $MASTER_COMMIT | |
# Restore original branch | |
git checkout $BRANCH_NAME | |
# Diff command can return non-zero status | |
set +e | |
FOUND_DIFFERENCE=false | |
for ARTIFACT in $ARTIFACTS; do | |
echo; echo | |
echo "Linkage Check difference on $ARTIFACT between master (${MASTER_COMMIT}) and ${BRANCH_NAME}(${BRANCH_COMMIT}):" | |
DIFF=$(diff ${OUTPUT_DIR}/${MASTER_COMMIT}-${ARTIFACT} ${OUTPUT_DIR}/${BRANCH_COMMIT}-${ARTIFACT}) | |
if [ -z "$DIFF" ]; then | |
echo "(no difference)" | |
else | |
FOUND_DIFFERENCE=true | |
echo "Lines starting with '<' mean the errors are remedied in the branch (good)" | |
echo "Lines starting with '>' mean the errors are introduced in the branch (bad)" | |
diff ${OUTPUT_DIR}/${MASTER_COMMIT}-${ARTIFACT} ${OUTPUT_DIR}/${BRANCH_COMMIT}-${ARTIFACT} | |
fi | |
done | |
if [ "FOUND_DIFFERENCE" == true ]; then | |
exit 1 | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment