#!/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. # TODO(stuartmorgan): Replace this script either with flutter_plugin_tools # functionality, or something pigeon-specific, to eliminate the need to have a # bash copy of checked_changed_packages in this repository. set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" REPO_DIR="$(dirname "$SCRIPT_DIR")" TEST_SCRIPT_NAME="run_tests.sh" function check_changed_packages() { # Try get a merge base for the branch and calculate affected packages. # We need this check because some CIs can do a single branch clones with a limited history of commits. local packages local branch_base_sha="$(git merge-base --fork-point FETCH_HEAD HEAD || git merge-base FETCH_HEAD HEAD)" if [[ "$?" == 0 ]]; then echo "Checking for changed packages from $branch_base_sha" IFS=$'\n' packages=( $(git diff --name-only "$branch_base_sha" HEAD | grep -o "packages/[^/]*" | sed -e "s/packages\///g" | sort | uniq) ) else error "Cannot find a merge base for the current branch to run an incremental build..." error "Please rebase your branch onto the latest master!" return 1 fi # Filter out any packages that don't have a pubspec.yaml: they have probably # been deleted in this PR. CHANGED_PACKAGES="" CHANGED_PACKAGE_LIST=() for package in "${packages[@]}"; do if [[ -f "$REPO_DIR/packages/$package/pubspec.yaml" ]]; then CHANGED_PACKAGES="${CHANGED_PACKAGES},$package" CHANGED_PACKAGE_LIST=("${CHANGED_PACKAGE_LIST[@]}" "$package") fi done if [[ "${#CHANGED_PACKAGE_LIST[@]}" == 0 ]]; then echo "No changes detected in packages." else echo "Detected changes in the following ${#CHANGED_PACKAGE_LIST[@]} package(s):" for package in "${CHANGED_PACKAGE_LIST[@]}"; do echo "$package" done echo "" fi return 0 } check_changed_packages for PACKAGE in $CHANGED_PACKAGE_LIST; do PACKAGE_PATH=./packages/$PACKAGE TEST_SCRIPT=$PACKAGE_PATH/$TEST_SCRIPT_NAME if [ -e $TEST_SCRIPT ]; then pushd $PWD cd $PACKAGE_PATH ls ./$TEST_SCRIPT_NAME popd fi done