create script to check for backwards compatibility
This commit is contained in:
parent
969341130a
commit
5155598209
2 changed files with 73 additions and 1 deletions
57
.github/workflows/backwards_compatibility_check.sh
vendored
Normal file
57
.github/workflows/backwards_compatibility_check.sh
vendored
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
#!/bin/bash
|
||||
|
||||
TRUE=1
|
||||
FALSE=0
|
||||
|
||||
REMOVED_PACKAGES_FLAG=$FALSE
|
||||
REMOVED_METHODS_FLAG=$FALSE
|
||||
|
||||
KCL_MAVEN_DIR=~/.m2/repository/software/amazon/kinesis/amazon-kinesis-client
|
||||
|
||||
# clear the Maven directory so that the latest release will be the only version in the Maven directory after running mvn dependency:get
|
||||
rm -rf $KCL_MAVEN_DIR
|
||||
mvn dependency:get -Dartifact=software.amazon.kinesis:amazon-kinesis-client:LATEST
|
||||
LATEST_VERSION=$(ls $KCL_MAVEN_DIR | grep '[0-9].[0-9].[0-9]')
|
||||
LATEST_JAR=$KCL_MAVEN_DIR/$LATEST_VERSION/amazon-kinesis-client-$LATEST_VERSION.jar
|
||||
|
||||
# get the current jar (i.e. the jar that is pending review)
|
||||
mvn install -DskipTests
|
||||
CURRENT_VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
|
||||
CURRENT_JAR=$KCL_MAVEN_DIR/$CURRENT_VERSION/amazon-kinesis-client-$CURRENT_VERSION.jar
|
||||
|
||||
echo "Comparing KCL versions $LATEST_VERSION (latest release) to $CURRENT_VERSION (current)."
|
||||
|
||||
# check if any packages were removed
|
||||
echo "Checking if packages in version $LATEST_VERSION were removed in $CURRENT_VERSION"
|
||||
LATEST_PACKAGES=$(jar tf $LATEST_JAR | grep .class | tr / . | sed 's/\.class$//' | sort)
|
||||
CURRENT_PACKAGES=$(jar tf $CURRENT_JAR | grep .class | tr / . | sed 's/\.class$//' | sort)
|
||||
diff <(echo "$LATEST_PACKAGES") <(echo "$CURRENT_PACKAGES") | grep '^<' && REMOVED_PACKAGES_FLAG=$TRUE || echo "No packages removed in version $CURRENT_VERSION."
|
||||
|
||||
# check if any methods within the packages were removed
|
||||
echo "Checking if methods in $LATEST_VERSION were removed in $CURRENT_VERSION"
|
||||
for package in $CURRENT_PACKAGES
|
||||
do
|
||||
# Get the second line of the output which indicates whether a class is public. Only classes that
|
||||
# are public should be checked; other classes will not break backwards compatibility.
|
||||
CLASS_DEFINITION=$(javap -classpath $LATEST_JAR $package | head -2 | tail -1)
|
||||
if [[ $CLASS_DEFINITION != *"public"* ]]
|
||||
then
|
||||
continue
|
||||
fi
|
||||
|
||||
# check if any methods were removed
|
||||
LATEST_METHODS=$(javap -classpath $LATEST_JAR $package)
|
||||
CURRENT_METHODS=$(javap -classpath $CURRENT_JAR $package)
|
||||
diff <(echo "$LATEST_METHODS") <(echo "$CURRENT_METHODS") | grep '^<' && REMOVED_METHODS_FLAG=$TRUE || :
|
||||
done
|
||||
|
||||
if [[ $REMOVED_METHODS_FLAG == $FALSE ]]
|
||||
then
|
||||
echo "No methods removed in version $CURRENT_VERSION."
|
||||
fi
|
||||
|
||||
if [[ $REMOVED_PACKAGES_FLAG == $TRUE || $REMOVED_METHODS_FLAG == $TRUE ]]
|
||||
then
|
||||
echo "KCL version $CURRENT_VERSION is not backwards compatible with version $LATEST_VERSION. See output above for removed packages/methods."
|
||||
exit 1
|
||||
fi
|
||||
17
.github/workflows/maven.yml
vendored
17
.github/workflows/maven.yml
vendored
|
|
@ -12,6 +12,7 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- "master"
|
||||
- "bwc"
|
||||
pull_request:
|
||||
branches:
|
||||
- "master"
|
||||
|
|
@ -29,4 +30,18 @@ jobs:
|
|||
java-version: '8'
|
||||
distribution: 'corretto'
|
||||
- name: Build with Maven
|
||||
run: mvn -B package --file pom.xml -DskipITs
|
||||
run: mvn -B package --file pom.xml -DskipITs
|
||||
|
||||
backwards-compatible-check:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up JDK 8
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: '8'
|
||||
distribution: 'corretto'
|
||||
- name: Check backwards compatibility of changes
|
||||
run: .github/workflows/backwards_compatibility_check.sh
|
||||
Loading…
Reference in a new issue