From cfe041d4a5f42144bcb020dffc376ec6db23936a Mon Sep 17 00:00:00 2001 From: Matan Lurey Date: Thu, 22 Feb 2024 11:31:40 -0800 Subject: [PATCH 1/6] Move into separate file and improve testing. --- ci/ban_generated_plugin_registrant_java.sh | 60 +++++++++++++++++++ ci/builders/linux_unopt.json | 8 ++- ci/format.sh | 23 ------- ..._generated_plugin_registrant_java_test.sh} | 35 ++++++++--- 4 files changed, 93 insertions(+), 33 deletions(-) create mode 100755 ci/ban_generated_plugin_registrant_java.sh rename ci/test/{format_no_generated_java_test.sh => ban_generated_plugin_registrant_java_test.sh} (50%) diff --git a/ci/ban_generated_plugin_registrant_java.sh b/ci/ban_generated_plugin_registrant_java.sh new file mode 100755 index 0000000000000..32de2b45e7677 --- /dev/null +++ b/ci/ban_generated_plugin_registrant_java.sh @@ -0,0 +1,60 @@ +#!/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 [[ -h "$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 + +# Find all files named GeneratedPluginRegistrant.java in the project. +GENERATED_PLUGIN_REGISTRANT_PATHS=$(find . -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 + +# Change back to the original working directory. +popd > /dev/null diff --git a/ci/builders/linux_unopt.json b/ci/builders/linux_unopt.json index 62cba879cebe0..e10d3e210b167 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": "run: ban GeneratedPluginRegistrant.java", + "script": "flutter/ci/ban_generated_plugin_registrant.sh" + }, + { + "name": "test: ban GeneratedPluginRegistrant.java", + "script": "flutter/ci/test/ban_generated_plugin_registrant_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" +} From f8343a3234585ce8d1ef377462bfd5613b6ddf57 Mon Sep 17 00:00:00 2001 From: Matan Lurey Date: Thu, 22 Feb 2024 12:44:22 -0800 Subject: [PATCH 2/6] Fix script. --- ci/ban_generated_plugin_registrant_java.sh | 25 ++++++++++++---------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/ci/ban_generated_plugin_registrant_java.sh b/ci/ban_generated_plugin_registrant_java.sh index 32de2b45e7677..22884577cc5b1 100755 --- a/ci/ban_generated_plugin_registrant_java.sh +++ b/ci/ban_generated_plugin_registrant_java.sh @@ -18,7 +18,7 @@ unset CDPATH function follow_links() ( cd -P "$(dirname -- "$1")" file="$PWD/$(basename -- "$1")" - while [[ -h "$file" ]]; do + while [[ -L "$file" ]]; do cd -P "$(dirname -- "$file")" file="$(readlink -- "$file")" cd -P "$(dirname -- "$file")" @@ -28,7 +28,10 @@ function follow_links() ( ) SCRIPT_DIR=$(follow_links "$(dirname -- "${BASH_SOURCE[0]}")") -SRC_DIR="$(cd "$SCRIPT_DIR/../.."; pwd -P)" +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 @@ -40,21 +43,21 @@ SRC_DIR="$(cd "$SCRIPT_DIR/../.."; pwd -P)" 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 +pushd "$SRC_DIR/flutter" >/dev/null # Find all files named GeneratedPluginRegistrant.java in the project. GENERATED_PLUGIN_REGISTRANT_PATHS=$(find . -name "GeneratedPluginRegistrant.java") -# Check for GeneratedPluginRegistrant.java in unexpected locations +# Check for GeneratedPluginRegistrant.java in unexpected locations, except in third_party. for expected_path in "${EXPECTED_PATHS[@]}"; do - found_files=$(find . -name "GeneratedPluginRegistrant.java" -not -path "$expected_path") + found_files=$(echo "$GENERATED_PLUGIN_REGISTRANT_PATHS" | grep -v "\.\/third_party\/" | grep -v "$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 + 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 # Change back to the original working directory. -popd > /dev/null +popd >/dev/null From 23d4e7d42056d708588763ebe4a45dca6f3d92c0 Mon Sep 17 00:00:00 2001 From: Matan Lurey Date: Thu, 22 Feb 2024 13:12:44 -0800 Subject: [PATCH 3/6] ++ --- ci/builders/linux_unopt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/builders/linux_unopt.json b/ci/builders/linux_unopt.json index e10d3e210b167..6c7980efda644 100644 --- a/ci/builders/linux_unopt.json +++ b/ci/builders/linux_unopt.json @@ -47,11 +47,11 @@ }, { "name": "run: ban GeneratedPluginRegistrant.java", - "script": "flutter/ci/ban_generated_plugin_registrant.sh" + "script": "flutter/ci/ban_generated_plugin_registrant_java.sh" }, { "name": "test: ban GeneratedPluginRegistrant.java", - "script": "flutter/ci/test/ban_generated_plugin_registrant_test.sh" + "script": "flutter/ci/test/ban_generated_plugin_registrant_java_test.sh" }, { "language": "python3", From d9809f52fbad5141e98c7f1a69adcc13d10afb6a Mon Sep 17 00:00:00 2001 From: Matan Lurey Date: Thu, 22 Feb 2024 17:12:31 -0800 Subject: [PATCH 4/6] ++ --- ci/ban_generated_plugin_registrant_java.sh | 11 +++++++++-- ci/builders/linux_unopt.json | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ci/ban_generated_plugin_registrant_java.sh b/ci/ban_generated_plugin_registrant_java.sh index 22884577cc5b1..5aaf196badd00 100755 --- a/ci/ban_generated_plugin_registrant_java.sh +++ b/ci/ban_generated_plugin_registrant_java.sh @@ -45,7 +45,15 @@ EXPECTED_PATHS=("./shell/platform/android/test/io/flutter/plugins/GeneratedPlugi # 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") # Check for GeneratedPluginRegistrant.java in unexpected locations, except in third_party. @@ -59,5 +67,4 @@ for expected_path in "${EXPECTED_PATHS[@]}"; do done done -# Change back to the original working directory. -popd >/dev/null +echo "Done" diff --git a/ci/builders/linux_unopt.json b/ci/builders/linux_unopt.json index 6c7980efda644..76374acb0c747 100644 --- a/ci/builders/linux_unopt.json +++ b/ci/builders/linux_unopt.json @@ -46,11 +46,11 @@ ] }, { - "name": "run: ban GeneratedPluginRegistrant.java", + "name": "[lint] ban GeneratedPluginRegistrant.java", "script": "flutter/ci/ban_generated_plugin_registrant_java.sh" }, { - "name": "test: ban GeneratedPluginRegistrant.java", + "name": "[test] ban GeneratedPluginRegistrant.java", "script": "flutter/ci/test/ban_generated_plugin_registrant_java_test.sh" }, { From fe836e56df4a89f413f825a86d0c5cc3ffffdcae Mon Sep 17 00:00:00 2001 From: Matan Lurey Date: Thu, 22 Feb 2024 17:51:08 -0800 Subject: [PATCH 5/6] ++ --- ci/ban_generated_plugin_registrant_java.sh | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/ci/ban_generated_plugin_registrant_java.sh b/ci/ban_generated_plugin_registrant_java.sh index 5aaf196badd00..ac154b3b53f4f 100755 --- a/ci/ban_generated_plugin_registrant_java.sh +++ b/ci/ban_generated_plugin_registrant_java.sh @@ -56,15 +56,13 @@ trap cleanup EXIT echo "Finding all files named GeneratedPluginRegistrant.java in the project..." GENERATED_PLUGIN_REGISTRANT_PATHS=$(find . -name "GeneratedPluginRegistrant.java") -# Check for GeneratedPluginRegistrant.java in unexpected locations, except in third_party. -for expected_path in "${EXPECTED_PATHS[@]}"; do - found_files=$(echo "$GENERATED_PLUGIN_REGISTRANT_PATHS" | grep -v "\.\/third_party\/" | grep -v "$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" +# 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 - done + fi done -echo "Done" +echo "Done." From 8c9c3fdf4dcf40e8a5010a344a1dcb7733c785d6 Mon Sep 17 00:00:00 2001 From: Matan Lurey Date: Thu, 22 Feb 2024 20:18:12 -0800 Subject: [PATCH 6/6] ++ --- ci/builders/linux_unopt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/builders/linux_unopt.json b/ci/builders/linux_unopt.json index 76374acb0c747..0dfd43c8305c2 100644 --- a/ci/builders/linux_unopt.json +++ b/ci/builders/linux_unopt.json @@ -46,11 +46,11 @@ ] }, { - "name": "[lint] ban GeneratedPluginRegistrant.java", + "name": "ban GeneratedPluginRegistrant.java", "script": "flutter/ci/ban_generated_plugin_registrant_java.sh" }, { - "name": "[test] ban GeneratedPluginRegistrant.java", + "name": "ban_test GeneratedPluginRegistrant.java", "script": "flutter/ci/test/ban_generated_plugin_registrant_java_test.sh" }, {