corda/.ci/check-api-changes.sh

80 lines
2.2 KiB
Bash
Raw Normal View History

#!/bin/bash
set +o posix
echo "Starting API Diff"
APIHOME=$(dirname $0)
apiCurrent=$APIHOME/api-current.txt
if [ ! -f $apiCurrent ]; then
echo "Missing $apiCurrent file - cannot check API diff. Please rebase or add it to this release"
exit -1
fi
# Remove the two header lines from the diff output.
diffContents=`diff -u $apiCurrent $APIHOME/../build/api/api-corda-*.txt | tail -n +3`
echo "Diff contents:"
echo "$diffContents"
echo
# A removed line means that an API was either deleted or modified.
removals=$(echo "$diffContents" | grep "^-")
removalCount=`grep -v "^$" <<EOF | wc -l
$removals
EOF
`
echo "Number of API removals/changes: "$removalCount
if [ $removalCount -gt 0 ]; then
echo "$removals"
echo
fi
# Adding new abstract methods could also break the API.
CORDA-939 - Modify Api Scanner to check api for internal exposures (#2534) * CORDA-939 Modify Api Scanner to check api for internal exposures (#2510) * Update check api changes to look for internals * Update several more uses of internal * Make check-api-changes script filter out internal class usages * Make CordaClock part of API * Update api-current.txt * Remove exclusion of nodeapi.internal * Remove access to CordaPersistence from public api * Don't expose DB Connection from StartedMockNode and remove unnecessary transaction from CustomVaultQueryTest * Make internal tests that use need db access use InternalMockNetwork * Make test certificates internal * Address further review comments * Revert some accidental changes to api-current.txt * Address Shams' review comments * Update Api Scanner to filter out CordaInternal attribute * Update api-current.txt * Remove superfluous brackets * Add transaction to StartedMockNode * More leaky transaction fixes # Conflicts: # .ci/api-current.txt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderStaticContractTests.kt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderTests.kt # node/src/integration-test/kotlin/net/corda/node/services/AttachmentLoadingTests.kt # node/src/test/kotlin/net/corda/node/internal/cordapp/CordappProviderImplTests.kt # testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/InternalMockNetwork.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappConfigProvider.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappProvider.kt * Bump gradle plugins version * One last internal exposure * Update constants.properties * Fix api-current * Address mikes review comments
2018-02-16 15:22:13 +00:00
# However, first exclude classes marked with the @DoNotImplement annotation
function forUserImpl() {
awk '/DoNotImplement/,/^##/{ next }{ print }' $1
}
userDiffContents=`diff -u <(forUserImpl $apiCurrent) <(forUserImpl $APIHOME/../build/api/api-corda-*.txt) | tail -n +3`
newAbstracts=$(echo "$userDiffContents" | grep "^+" | grep "\(public\|protected\) abstract")
abstractCount=`grep -v "^$" <<EOF | wc -l
$newAbstracts
EOF
`
CORDA-939 - Modify Api Scanner to check api for internal exposures (#2534) * CORDA-939 Modify Api Scanner to check api for internal exposures (#2510) * Update check api changes to look for internals * Update several more uses of internal * Make check-api-changes script filter out internal class usages * Make CordaClock part of API * Update api-current.txt * Remove exclusion of nodeapi.internal * Remove access to CordaPersistence from public api * Don't expose DB Connection from StartedMockNode and remove unnecessary transaction from CustomVaultQueryTest * Make internal tests that use need db access use InternalMockNetwork * Make test certificates internal * Address further review comments * Revert some accidental changes to api-current.txt * Address Shams' review comments * Update Api Scanner to filter out CordaInternal attribute * Update api-current.txt * Remove superfluous brackets * Add transaction to StartedMockNode * More leaky transaction fixes # Conflicts: # .ci/api-current.txt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderStaticContractTests.kt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderTests.kt # node/src/integration-test/kotlin/net/corda/node/services/AttachmentLoadingTests.kt # node/src/test/kotlin/net/corda/node/internal/cordapp/CordappProviderImplTests.kt # testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/InternalMockNetwork.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappConfigProvider.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappProvider.kt * Bump gradle plugins version * One last internal exposure * Update constants.properties * Fix api-current * Address mikes review comments
2018-02-16 15:22:13 +00:00
#Get a list of any methods that expose classes in .internal. namespaces, and any classes which extend/implement
#an internal class
#TODO: check that only classes in a whitelist are part of the API rather than look for specific invalid cases going forward
CORDA-939 - Modify Api Scanner to check api for internal exposures (#2534) * CORDA-939 Modify Api Scanner to check api for internal exposures (#2510) * Update check api changes to look for internals * Update several more uses of internal * Make check-api-changes script filter out internal class usages * Make CordaClock part of API * Update api-current.txt * Remove exclusion of nodeapi.internal * Remove access to CordaPersistence from public api * Don't expose DB Connection from StartedMockNode and remove unnecessary transaction from CustomVaultQueryTest * Make internal tests that use need db access use InternalMockNetwork * Make test certificates internal * Address further review comments * Revert some accidental changes to api-current.txt * Address Shams' review comments * Update Api Scanner to filter out CordaInternal attribute * Update api-current.txt * Remove superfluous brackets * Add transaction to StartedMockNode * More leaky transaction fixes # Conflicts: # .ci/api-current.txt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderStaticContractTests.kt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderTests.kt # node/src/integration-test/kotlin/net/corda/node/services/AttachmentLoadingTests.kt # node/src/test/kotlin/net/corda/node/internal/cordapp/CordappProviderImplTests.kt # testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/InternalMockNetwork.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappConfigProvider.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappProvider.kt * Bump gradle plugins version * One last internal exposure * Update constants.properties * Fix api-current * Address mikes review comments
2018-02-16 15:22:13 +00:00
newInternalExposures=$(echo "$userDiffContents" | grep "^+" | grep "\.internal\." )
newNodeExposures=$(echo "$userDiffContents" | grep "^+" | grep "net.corda.node" )
CORDA-939 - Modify Api Scanner to check api for internal exposures (#2534) * CORDA-939 Modify Api Scanner to check api for internal exposures (#2510) * Update check api changes to look for internals * Update several more uses of internal * Make check-api-changes script filter out internal class usages * Make CordaClock part of API * Update api-current.txt * Remove exclusion of nodeapi.internal * Remove access to CordaPersistence from public api * Don't expose DB Connection from StartedMockNode and remove unnecessary transaction from CustomVaultQueryTest * Make internal tests that use need db access use InternalMockNetwork * Make test certificates internal * Address further review comments * Revert some accidental changes to api-current.txt * Address Shams' review comments * Update Api Scanner to filter out CordaInternal attribute * Update api-current.txt * Remove superfluous brackets * Add transaction to StartedMockNode * More leaky transaction fixes # Conflicts: # .ci/api-current.txt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderStaticContractTests.kt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderTests.kt # node/src/integration-test/kotlin/net/corda/node/services/AttachmentLoadingTests.kt # node/src/test/kotlin/net/corda/node/internal/cordapp/CordappProviderImplTests.kt # testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/InternalMockNetwork.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappConfigProvider.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappProvider.kt * Bump gradle plugins version * One last internal exposure * Update constants.properties * Fix api-current * Address mikes review comments
2018-02-16 15:22:13 +00:00
internalCount=`grep -v "^$" <<EOF | wc -l
$newInternalExposures
$newNodeExposures
CORDA-939 - Modify Api Scanner to check api for internal exposures (#2534) * CORDA-939 Modify Api Scanner to check api for internal exposures (#2510) * Update check api changes to look for internals * Update several more uses of internal * Make check-api-changes script filter out internal class usages * Make CordaClock part of API * Update api-current.txt * Remove exclusion of nodeapi.internal * Remove access to CordaPersistence from public api * Don't expose DB Connection from StartedMockNode and remove unnecessary transaction from CustomVaultQueryTest * Make internal tests that use need db access use InternalMockNetwork * Make test certificates internal * Address further review comments * Revert some accidental changes to api-current.txt * Address Shams' review comments * Update Api Scanner to filter out CordaInternal attribute * Update api-current.txt * Remove superfluous brackets * Add transaction to StartedMockNode * More leaky transaction fixes # Conflicts: # .ci/api-current.txt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderStaticContractTests.kt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderTests.kt # node/src/integration-test/kotlin/net/corda/node/services/AttachmentLoadingTests.kt # node/src/test/kotlin/net/corda/node/internal/cordapp/CordappProviderImplTests.kt # testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/InternalMockNetwork.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappConfigProvider.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappProvider.kt * Bump gradle plugins version * One last internal exposure * Update constants.properties * Fix api-current * Address mikes review comments
2018-02-16 15:22:13 +00:00
EOF
`
echo "Number of new internal class exposures: "$internalCount
if [ $internalCount -gt 0 ]; then
echo "$newInternalExposures"
echo "$newNodeExposures"
CORDA-939 - Modify Api Scanner to check api for internal exposures (#2534) * CORDA-939 Modify Api Scanner to check api for internal exposures (#2510) * Update check api changes to look for internals * Update several more uses of internal * Make check-api-changes script filter out internal class usages * Make CordaClock part of API * Update api-current.txt * Remove exclusion of nodeapi.internal * Remove access to CordaPersistence from public api * Don't expose DB Connection from StartedMockNode and remove unnecessary transaction from CustomVaultQueryTest * Make internal tests that use need db access use InternalMockNetwork * Make test certificates internal * Address further review comments * Revert some accidental changes to api-current.txt * Address Shams' review comments * Update Api Scanner to filter out CordaInternal attribute * Update api-current.txt * Remove superfluous brackets * Add transaction to StartedMockNode * More leaky transaction fixes # Conflicts: # .ci/api-current.txt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderStaticContractTests.kt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderTests.kt # node/src/integration-test/kotlin/net/corda/node/services/AttachmentLoadingTests.kt # node/src/test/kotlin/net/corda/node/internal/cordapp/CordappProviderImplTests.kt # testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/InternalMockNetwork.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappConfigProvider.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappProvider.kt * Bump gradle plugins version * One last internal exposure * Update constants.properties * Fix api-current * Address mikes review comments
2018-02-16 15:22:13 +00:00
echo
fi
echo "Number of new abstract APIs: "$abstractCount
if [ $abstractCount -gt 0 ]; then
echo "$newAbstracts"
echo
fi
CORDA-939 - Modify Api Scanner to check api for internal exposures (#2534) * CORDA-939 Modify Api Scanner to check api for internal exposures (#2510) * Update check api changes to look for internals * Update several more uses of internal * Make check-api-changes script filter out internal class usages * Make CordaClock part of API * Update api-current.txt * Remove exclusion of nodeapi.internal * Remove access to CordaPersistence from public api * Don't expose DB Connection from StartedMockNode and remove unnecessary transaction from CustomVaultQueryTest * Make internal tests that use need db access use InternalMockNetwork * Make test certificates internal * Address further review comments * Revert some accidental changes to api-current.txt * Address Shams' review comments * Update Api Scanner to filter out CordaInternal attribute * Update api-current.txt * Remove superfluous brackets * Add transaction to StartedMockNode * More leaky transaction fixes # Conflicts: # .ci/api-current.txt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderStaticContractTests.kt # node-api/src/test/kotlin/net/corda/nodeapi/internal/AttachmentsClassLoaderTests.kt # node/src/integration-test/kotlin/net/corda/node/services/AttachmentLoadingTests.kt # node/src/test/kotlin/net/corda/node/internal/cordapp/CordappProviderImplTests.kt # testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/InternalMockNetwork.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappConfigProvider.kt # testing/test-utils/src/main/kotlin/net/corda/testing/internal/MockCordappProvider.kt * Bump gradle plugins version * One last internal exposure * Update constants.properties * Fix api-current * Address mikes review comments
2018-02-16 15:22:13 +00:00
badChanges=$(($removalCount + $abstractCount + $internalCount))
if [ $badChanges -gt 255 ]; then
echo "OVERFLOW! Number of bad API changes: $badChanges"
badChanges=255
fi
echo "Exiting with exit code" $badChanges
exit $badChanges