diff --git a/.github/workflows/mixed-version-compatibility-review.yml b/.github/workflows/mixed-version-compatibility-review.yml index 936b1c814266..f5f83eac66d8 100644 --- a/.github/workflows/mixed-version-compatibility-review.yml +++ b/.github/workflows/mixed-version-compatibility-review.yml @@ -49,7 +49,8 @@ jobs: grep '^+.*public.*(' | \ grep -v '^+[[:space:]]*//.*public.*(' | \ grep -v '^+.*".*public.*(' | \ - grep -v '^+[[:space:]]*\*.*public.*(' || true) + grep -v '^+[[:space:]]*\*.*public.*(' | \ + grep -v '^+[[:space:]]*/\*.*public.*(' || true) if [ -n "$NEW_METHODS" ]; then echo "::warning::New public methods detected in base classes:" @@ -67,9 +68,20 @@ jobs: - name: Fail if compatibility risks found without approval if: ${{ steps.compatibility-check.outputs.has_risk == 'true' && !contains(github.event.pull_request.labels.*.name, 'mixed-version-compatibility-reviewed') }} run: | + # Define the base class files + BASE_CLASS_FILES="core/aws-core/src/main/java/software/amazon/awssdk/awscore/AwsRequest.java + core/aws-core/src/main/java/software/amazon/awssdk/awscore/AwsResponse.java + core/aws-core/src/main/java/software/amazon/awssdk/awscore/AwsResponseMetadata.java + core/aws-core/src/main/java/software/amazon/awssdk/awscore/exception/AwsServiceException.java + core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkPojo.java" + + # Extract class names from the actually changed files + CHANGED_BASE_FILES=$(git diff --name-only remotes/origin/${{ github.base_ref }} -- $BASE_CLASS_FILES || true) + CHANGED_CLASS_NAMES=$(echo "$CHANGED_BASE_FILES" | sed 's|.*/||' | sed 's|\.java||' | paste -sd ',' - | sed 's/,/, /g') + echo "::error::Mixed version compatibility risk detected!" echo "::error::Changes were made to base classes that generated service code implements:" - echo "::error::- AwsRequest, AwsResponse, AwsResponseMetadata, AwsServiceException, SdkPojo" + echo "::error::- $CHANGED_CLASS_NAMES" echo "::error::" echo "::error::This may break customers using mixed SDK versions if:" echo "::error::- New methods are added with UnsupportedOperationException defaults"