diff --git a/ci/ban_generated_plugin_registrant_java.sh b/ci/ban_generated_plugin_registrant_java.sh new file mode 100755 index 0000000000000..ac154b3b53f4f --- /dev/null +++ b/ci/ban_generated_plugin_registrant_java.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# +# Copyright 2013 The Flutter Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +set -e + +# Needed because if it is set, cd may print the path it changed to. +unset CDPATH + +# On Mac OS, readlink -f doesn't work, so follow_links traverses the path one +# link at a time, and then cds into the link destination and find out where it +# ends up. +# +# The function is enclosed in a subshell to avoid changing the working directory +# of the caller. +function follow_links() ( + cd -P "$(dirname -- "$1")" + file="$PWD/$(basename -- "$1")" + while [[ -L "$file" ]]; do + cd -P "$(dirname -- "$file")" + file="$(readlink -- "$file")" + cd -P "$(dirname -- "$file")" + file="$PWD/$(basename -- "$file")" + done + echo "$file" +) + +SCRIPT_DIR=$(follow_links "$(dirname -- "${BASH_SOURCE[0]}")") +SRC_DIR="$( + cd "$SCRIPT_DIR/../.." + pwd -P +)" + +# Check if a file named **/GeneratedPluginRegistrant.java exists in the project. +# If it does, fail the build and print a message to the user pointing them to +# the file and instructing them to remove it. +# +# See: https://github.com/flutter/flutter/issues/143782. + +# The expected path to the file. Any *other* path is unexpected. +EXPECTED_PATHS=("./shell/platform/android/test/io/flutter/plugins/GeneratedPluginRegistrant.java") + +# Temporarily change the working directory to the root of the Flutter project. +pushd "$SRC_DIR/flutter" >/dev/null + +# Change back to the original working directory. +function cleanup() { + popd >/dev/null +} + +trap cleanup EXIT + +# Find all files named GeneratedPluginRegistrant.java in the project. +echo "Finding all files named GeneratedPluginRegistrant.java in the project..." +GENERATED_PLUGIN_REGISTRANT_PATHS=$(find . -name "GeneratedPluginRegistrant.java") + +# Iterate over the found paths and check if they are expected. +for path in $GENERATED_PLUGIN_REGISTRANT_PATHS; do + if [[ ! " ${EXPECTED_PATHS[@]} " =~ " ${path} " ]]; then + echo "ERROR: Found unexpected file named GeneratedPluginRegistrant.java at $path." + echo "Please remove this file from the project." + exit 1 + fi +done + +echo "Done." diff --git a/ci/builders/linux_unopt.json b/ci/builders/linux_unopt.json index 62cba879cebe0..0dfd43c8305c2 100644 --- a/ci/builders/linux_unopt.json +++ b/ci/builders/linux_unopt.json @@ -46,8 +46,12 @@ ] }, { - "nane": "test:GeneratedPluginRegistant.java omitted", - "script": "flutter/ci/test/format_no_generated_java_test.sh" + "name": "ban GeneratedPluginRegistrant.java", + "script": "flutter/ci/ban_generated_plugin_registrant_java.sh" + }, + { + "name": "ban_test GeneratedPluginRegistrant.java", + "script": "flutter/ci/test/ban_generated_plugin_registrant_java_test.sh" }, { "language": "python3", diff --git a/ci/format.sh b/ci/format.sh index bcde4aedcff0d..0425eb380eb7c 100755 --- a/ci/format.sh +++ b/ci/format.sh @@ -32,29 +32,6 @@ SRC_DIR="$(cd "$SCRIPT_DIR/../.."; pwd -P)" DART_SDK_DIR="${SRC_DIR}/third_party/dart/tools/sdks/dart-sdk" DART="${DART_SDK_DIR}/bin/dart" -# Check if a file named **/GeneratedPluginRegistrant.java exists in the project. -# If it does, fail the build and print a message to the user pointing them to -# the file and instructing them to remove it. -# -# See: https://github.com/flutter/flutter/issues/143782. - -# The expected path to the file. Any *other* path is unexpected. -EXPECTED_PATHS=("./shell/platform/android/test/io/flutter/plugins/GeneratedPluginRegistrant.java") - -# Find all files named GeneratedPluginRegistrant.java in the project. -GENERATED_PLUGIN_REGISTRANT_PATHS=$(find "$SRC_DIR/flutter" -name "GeneratedPluginRegistrant.java") - -# Check for GeneratedPluginRegistrant.java in unexpected locations -for expected_path in "${EXPECTED_PATHS[@]}"; do - found_files=$(find . -name "GeneratedPluginRegistrant.java" -not -path "$expected_path") - - for file in $found_files; do - echo "Error: Unexpected GeneratedPluginRegistrant.java found: $file" - echo "Please remove the unexpected file and see: https://github.com/flutter/flutter/issues/143782" - exit 1 - done -done - cd "$SCRIPT_DIR" "$DART" \ --disable-dart-dev \ diff --git a/ci/test/format_no_generated_java_test.sh b/ci/test/ban_generated_plugin_registrant_java_test.sh similarity index 50% rename from ci/test/format_no_generated_java_test.sh rename to ci/test/ban_generated_plugin_registrant_java_test.sh index 4d9c7ce4f4a6d..3f6d4e415a85e 100755 --- a/ci/test/format_no_generated_java_test.sh +++ b/ci/test/ban_generated_plugin_registrant_java_test.sh @@ -39,20 +39,39 @@ FLUTTER_DIR="$SRC_DIR/flutter" # name and location is required to get loaded). # # This file is typically generated by Flutter tooling and should not exist. +echo "Creating file ./src/flutter/GeneratedPluginRegistrant.java" touch "$FLUTTER_DIR/GeneratedPluginRegistrant.java" -# Create a trap that, on exit, removes the file. +# Create a trap that, on exit, removes the temp files. function cleanup() { + rm -f "$SRC_DIR/third_party/GeneratedPluginRegistrant.java" rm -f "$FLUTTER_DIR/GeneratedPluginRegistrant.java" + rm -f "$FLUTTER_DIR/third_party/GeneratedPluginRegistrant.java" } trap cleanup EXIT -# Runs ../format.sh and verifies that it fails with the expected error message. -# If it fails, the script prints an error message and exits with a non-zero status. -"$FLUTTER_DIR/ci/format.sh" || { - echo "PASS: analyze.sh failed as expected" - exit 0 +# Run the ban script, expecting it to fail. +# Intercept the output, only check the exit code. +"$FLUTTER_DIR/ci/ban_generated_plugin_registrant_java.sh" > /dev/null 2>&1 && { + echo "FAIL: ban_generated_plugin_registrant_java did not fail as expected" + exit 1 } +echo "PASS: ban_generated_plugin_registrant_java failed as expected" -echo "FAIL: format.sh did not fail as expected" -exit 1 +# Create a file in SRC_DIR/third_party, that should be OK. +echo "Creating file ./src/third_party/GeneratedPluginRegistrant.java" +touch "$SRC_DIR/third_party/GeneratedPluginRegistrant.java" + +# Run the ban script, expecting it to succeed. +"$FLUTTER_DIR/ci/ban_generated_plugin_registrant_java.sh" > /dev/null 2>&1 || { + echo "PASS: ban_generated_plugin_registrant_java ignored third_party" +} + +# Create a file in SRC_DIR/flutter/third_party, that should be OK too. +echo "Creating file ./src/flutter/third_party/GeneratedPluginRegistrant.java" +touch "$FLUTTER_DIR/third_party/GeneratedPluginRegistrant.java" + +# Run the ban script, expecting it to succeed. +"$FLUTTER_DIR/ci/ban_generated_plugin_registrant_java.sh" > /dev/null 2>&1 || { + echo "PASS: ban_generated_plugin_registrant_java ignored flutter/third_party" +}