blob: bd3007fdd777edf6e90e317ef2282a4e46413b49 [file] [log] [blame]
#!/bin/bash
#
# Copyright 2025 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
set -euo pipefail
usage() {
cat << EOF
Usage: $0 [baseCommit] [tasksToRun] [--runOnDependentProjects]
Optional arguments:
baseCommit Commit hash to use for the :listAffectedProjects task.
If not provided, the task will run with the last merge commit as the baseCommit.
tasksToRun Comma-separated list of Gradle tasks to run for each affected project.
If not provided, defaults to 'buildOnServer'.
--runOnDependentProjects If specified, the tasks will also run on dependent projects.
Enabling this flag will increase the processing time.
Examples:
1. Run with a base commit (e.g. HEAD~1) and a specified list of tasks:
./development/validate_changes.sh HEAD~1 bOS,allHostTests
2. Run with a base commit, a specified list of tasks, and enable running on dependent projects:
./development/validate_changes.sh HEAD~1 bOS,allHostTests --runOnDependentProjects
3. Run with default base commit (last merge commit), specified tasks, and enabling dependent projects:
./development/validate_changes.sh "" bOS,allHostTests --runOnDependentProjects
Options:
--help Display this help message and exit.
EOF
}
if [[ "${1:-}" == "--help" ]]; then
usage
exit 0
fi
# ANSI color codes for error messages
RED='\033[0;31m'
NC='\033[0m'
# Parse arguments
RUN_ON_DEPENDENT_PROJECTS="false"
ARGS=()
while [[ $# -gt 0 ]]; do
case "$1" in
--runOnDependentProjects)
RUN_ON_DEPENDENT_PROJECTS="true"
shift
;;
--help)
usage
exit 0
;;
*)
ARGS+=("$1")
shift
;;
esac
done
BASE_COMMIT="${ARGS[0]:-}"
TASKS_TO_RUN="${ARGS[1]:-bOS}"
if [[ "$RUN_ON_DEPENDENT_PROJECTS" != "true" ]]; then
echo -e "${RED}Dependent projects will NOT be captured. Running with --runOnDependentProjects will\
run tasks on dependent projects, but it may take more time.${NC}"
fi
REPO_ROOT=$(git rev-parse --show-toplevel)
cd "$REPO_ROOT" || { echo "Error: Unable to change directory to repository root"; exit 1; }
OUTPUT_FILE="$REPO_ROOT/../../out/androidx/build/changedProjects.txt"
gradle_cmd=(./gradlew :listAffectedProjects)
if [[ -n "$BASE_COMMIT" ]]; then
gradle_cmd+=("--baseCommit=$BASE_COMMIT")
fi
gradle_cmd+=("--tasksToRun=$TASKS_TO_RUN")
if [[ "$RUN_ON_DEPENDENT_PROJECTS" == "true" ]]; then
gradle_cmd+=("--runOnDependentProjects=true")
fi
echo "Running: ${gradle_cmd[*]}"
"${gradle_cmd[@]}"
if [[ ! -f "$OUTPUT_FILE" ]]; then
echo -e "${RED}Output file '$OUTPUT_FILE' not found. Exiting.${NC}"
exit 1
fi
TASKS=$(<"$OUTPUT_FILE")
if [[ -z "$TASKS" ]]; then
echo -e "${RED}No tasks found in '$OUTPUT_FILE'. Nothing to execute.${NC}"
exit 0
fi
read -r -a tasks_array <<< "$TASKS"
echo "Running: ./gradlew "${tasks_array[@]}""
PROJECT_PREFIX=: ANDROIDX_PROJECTS=ALL ./gradlew --strict "${tasks_array[@]}"