Skip to content

Instantly share code, notes, and snippets.

@suztomo
Last active February 11, 2020 11:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save suztomo/ec4834151a81f8e1d26aa0afb278818b to your computer and use it in GitHub Desktop.
Save suztomo/ec4834151a81f8e1d26aa0afb278818b to your computer and use it in GitHub Desktop.
beam-linkage-check.sh
#!/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