#!/bin/bash set -e # This script runs frameworks/support/gradlew # find script SCRIPT_DIR="$(cd $(dirname $0) && pwd)" # resolve directories cd "$SCRIPT_DIR/../.." if [ "$OUT_DIR" == "" ]; then OUT_DIR="../../out" fi mkdir -p "$OUT_DIR" export OUT_DIR="$(cd $OUT_DIR && pwd)" if [ "$DIST_DIR" == "" ]; then DIST_DIR="$OUT_DIR/dist" fi mkdir -p "$DIST_DIR" export DIST_DIR="$DIST_DIR" if [ "$CHANGE_INFO" != "" ]; then cp "$CHANGE_INFO" "$DIST_DIR/" if [ "$MANIFEST" == "" ]; then export MANIFEST="$DIST_DIR/manifest_${BUILD_NUMBER}.xml" fi fi # parse arguments if [ "$1" == "--diagnose" ]; then DIAGNOSE=true shift else DIAGNOSE=false fi if [ "$1" == "--diagnose-timeout" ]; then shift DIAGNOSE_TIMEOUT_ARG="--timeout $1" shift else DIAGNOSE_TIMEOUT_ARG="" fi # record the build start time BUILD_START_MARKER="$OUT_DIR/build.sh.start" rm -f "$BUILD_START_MARKER" touch $BUILD_START_MARKER # record the build number echo "$BUILD_NUMBER" >> "$OUT_DIR/build_number.log" # only keep the last 10 build numbers tail -n 10 "$OUT_DIR/build_number.log" > "$OUT_DIR/build_number.log.tail" mv "$OUT_DIR/build_number.log.tail" "$OUT_DIR/build_number.log" cp "$OUT_DIR/build_number.log" "$DIST_DIR/build_number.log" # runs a given command and prints its result if it fails function run() { echo Running "$*" if eval "$*"; then return 0 else # Echo the Gradle command formatted for ease of reading. echo "Gradle command failed:" >&2 echo " $*" >&2 return 1 fi } BUILD_STATUS=0 # enable remote build cache unless explicitly disabled if [ "$USE_ANDROIDX_REMOTE_BUILD_CACHE" == "" ]; then export USE_ANDROIDX_REMOTE_BUILD_CACHE=gcp fi # list kotlin sessions in case there are several, b/279739438 function checkForLeftoverKotlinSessions() { KOTLIN_SESSIONS_DIR=$OUT_DIR/gradle-project-cache/kotlin/sessions NUM_KOTLIN_SESSIONS="$(ls $KOTLIN_SESSIONS_DIR 2>/dev/null | wc -l)" if [ "$NUM_KOTLIN_SESSIONS" -gt 0 ]; then echo "Found $NUM_KOTLIN_SESSIONS leftover kotlin sessions in $KOTLIN_SESSIONS_DIR" fi } checkForLeftoverKotlinSessions # list java processes to check for any running kotlin daemons, b/282228230 function listJavaProcesses() { echo "All java processes:" ps -ef | grep /java || true } listJavaProcesses # launch a process to monitor for timeouts busytown/impl/monitor.sh 3600 busytown/impl/showJavaStacks.sh & # run the build if run ./gradlew --ci "$@"; then echo build passed else if [ "$DIAGNOSE" == "true" ]; then # see if diagnose-build-failure.sh can identify the root cauase echo "running diagnose-build-failure.sh, see build.log" >&2 # Specify a short timeout in case we're running on a remote server, so we don't take too long. # We probably won't have enough time to fully diagnose the problem given this timeout, but # we might be able to determine whether this problem is reproducible enough for a developer to # more easily investigate further ./development/diagnose-build-failure/diagnose-build-failure.sh $DIAGNOSE_TIMEOUT_ARG "--ci $*" || true scansPrevDir="$DIST_DIR/scans-prev" mkdir -p "$scansPrevDir" # restore any prior build scans into the dist dir cp ../../diagnose-build-failure/prev/dist/scan*.zip "$scansPrevDir/" || true fi BUILD_STATUS=1 # failure fi # check that no unexpected modifications were made to the source repository, such as new cache directories DIST_DIR=$DIST_DIR $SCRIPT_DIR/verify_no_caches_in_source_repo.sh $BUILD_START_MARKER # copy problem report to DIST_DIR so we can see them PROBLEM_REPORTS_EXPORTED=$DIST_DIR/problem-reports PROBLEM_REPORTS=$OUT_DIR/androidx/build/reports/problems if [ -d "$PROBLEM_REPORTS" ]; then rm -rf "$PROBLEM_REPORTS_EXPORTED" cp -r "$PROBLEM_REPORTS" "$PROBLEM_REPORTS_EXPORTED" fi # copy configuration cache reports to DIST_DIR so we can see them b/250893051 CONFIGURATION_CACHE_REPORTS_EXPORTED=$DIST_DIR/configuration-cache-reports CONFIGURATION_CACHE_REPORTS=$OUT_DIR/androidx/build/reports/configuration-cache if [ -d "$CONFIGURATION_CACHE_REPORTS" ]; then rm -rf "$CONFIGURATION_CACHE_REPORTS_EXPORTED" cp -r "$CONFIGURATION_CACHE_REPORTS" "$CONFIGURATION_CACHE_REPORTS_EXPORTED" fi # stop Gradle daemon to clean up after ourselves ./gradlew --stop exit "$BUILD_STATUS"