xref: /aosp_15_r20/external/accompanist/scripts/run-tests.sh (revision fa44fe6ae8e729aa3cfe5c03eedbbf98fb44e2c6)
1*fa44fe6aSInna Palant#!/bin/bash
2*fa44fe6aSInna Palant
3*fa44fe6aSInna Palant# Copyright 2021 The Android Open Source Project
4*fa44fe6aSInna Palant#
5*fa44fe6aSInna Palant# Licensed under the Apache License, Version 2.0 (the "License");
6*fa44fe6aSInna Palant# you may not use this file except in compliance with the License.
7*fa44fe6aSInna Palant# You may obtain a copy of the License at
8*fa44fe6aSInna Palant#
9*fa44fe6aSInna Palant#      https://www.apache.org/licenses/LICENSE-2.0
10*fa44fe6aSInna Palant#
11*fa44fe6aSInna Palant# Unless required by applicable law or agreed to in writing, software
12*fa44fe6aSInna Palant# distributed under the License is distributed on an "AS IS" BASIS,
13*fa44fe6aSInna Palant# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*fa44fe6aSInna Palant# See the License for the specific language governing permissions and
15*fa44fe6aSInna Palant# limitations under the License.
16*fa44fe6aSInna Palant
17*fa44fe6aSInna Palant# Fail on error and print out commands
18*fa44fe6aSInna Palantset -ex
19*fa44fe6aSInna Palant
20*fa44fe6aSInna Palant# By default we don't shard
21*fa44fe6aSInna PalantSHARD_COUNT=0
22*fa44fe6aSInna PalantSHARD_INDEX=0
23*fa44fe6aSInna Palant# By default we don't log
24*fa44fe6aSInna PalantLOG_FILE=""
25*fa44fe6aSInna Palant# By default we run tests on device
26*fa44fe6aSInna PalantDEVICE=true
27*fa44fe6aSInna Palant
28*fa44fe6aSInna Palant# Parse parameters
29*fa44fe6aSInna Palantfor i in "$@"; do
30*fa44fe6aSInna Palant  case $i in
31*fa44fe6aSInna Palant  --shard-count=*)
32*fa44fe6aSInna Palant    SHARD_COUNT="${i#*=}"
33*fa44fe6aSInna Palant    shift
34*fa44fe6aSInna Palant    ;;
35*fa44fe6aSInna Palant  --unit-tests)
36*fa44fe6aSInna Palant    DEVICE=false
37*fa44fe6aSInna Palant    shift
38*fa44fe6aSInna Palant    ;;
39*fa44fe6aSInna Palant  --shard-index=*)
40*fa44fe6aSInna Palant    SHARD_INDEX="${i#*=}"
41*fa44fe6aSInna Palant    shift
42*fa44fe6aSInna Palant    ;;
43*fa44fe6aSInna Palant  --log-file=*)
44*fa44fe6aSInna Palant    LOG_FILE="${i#*=}"
45*fa44fe6aSInna Palant    shift
46*fa44fe6aSInna Palant    ;;
47*fa44fe6aSInna Palant  --run-affected)
48*fa44fe6aSInna Palant    RUN_AFFECTED=true
49*fa44fe6aSInna Palant    shift
50*fa44fe6aSInna Palant    ;;
51*fa44fe6aSInna Palant  --run-flaky-tests)
52*fa44fe6aSInna Palant    RUN_FLAKY=true
53*fa44fe6aSInna Palant    shift
54*fa44fe6aSInna Palant    ;;
55*fa44fe6aSInna Palant  --affected-base-ref=*)
56*fa44fe6aSInna Palant    BASE_REF="${i#*=}"
57*fa44fe6aSInna Palant    shift
58*fa44fe6aSInna Palant    ;;
59*fa44fe6aSInna Palant  *)
60*fa44fe6aSInna Palant    echo "Unknown option"
61*fa44fe6aSInna Palant    exit 1
62*fa44fe6aSInna Palant    ;;
63*fa44fe6aSInna Palant  esac
64*fa44fe6aSInna Palantdone
65*fa44fe6aSInna Palant
66*fa44fe6aSInna Palant# Start logcat if we have a file to log to
67*fa44fe6aSInna Palantif [[ ! -z "$LOG_FILE" ]]; then
68*fa44fe6aSInna Palant  adb logcat >$LOG_FILE &
69*fa44fe6aSInna Palantfi
70*fa44fe6aSInna Palant
71*fa44fe6aSInna PalantFILTER_OPTS=""
72*fa44fe6aSInna Palant# Filter out flaky tests if we're not set to run them
73*fa44fe6aSInna Palantif [[ -z "$RUN_FLAKY" ]]; then
74*fa44fe6aSInna Palant  FILTER_OPTS="$FILTER_OPTS -Pandroid.testInstrumentationRunnerArguments.notAnnotation=androidx.test.filters.FlakyTest"
75*fa44fe6aSInna Palantfi
76*fa44fe6aSInna Palant
77*fa44fe6aSInna Palant# If we're set to only run affected test, update the Gradle task
78*fa44fe6aSInna Palantif [[ ! -z "$RUN_AFFECTED" ]]; then
79*fa44fe6aSInna Palant  if [ "$DEVICE" = true ]; then
80*fa44fe6aSInna Palant    TASK="runAffectedAndroidTests"
81*fa44fe6aSInna Palant  else
82*fa44fe6aSInna Palant    TASK="runAffectedUnitTests"
83*fa44fe6aSInna Palant  fi
84*fa44fe6aSInna Palant  TASK="$TASK -Paffected_module_detector.enable"
85*fa44fe6aSInna Palant
86*fa44fe6aSInna Palant  # If we have a base branch set, add the Gradle property
87*fa44fe6aSInna Palant  if [[ ! -z "$BASE_REF" ]]; then
88*fa44fe6aSInna Palant    TASK="$TASK -Paffected_base_ref=$BASE_REF"
89*fa44fe6aSInna Palant  fi
90*fa44fe6aSInna Palantfi
91*fa44fe6aSInna Palant
92*fa44fe6aSInna Palant# If we don't have a task yet, use the defaults
93*fa44fe6aSInna Palantif [[ -z "$TASK" ]]; then
94*fa44fe6aSInna Palant  if [ "$DEVICE" = true ]; then
95*fa44fe6aSInna Palant    TASK="connectedCheck"
96*fa44fe6aSInna Palant  else
97*fa44fe6aSInna Palant    TASK="testDebug"
98*fa44fe6aSInna Palant  fi
99*fa44fe6aSInna Palantfi
100*fa44fe6aSInna Palant
101*fa44fe6aSInna PalantSHARD_OPTS=""
102*fa44fe6aSInna Palantif [ "$SHARD_COUNT" -gt "0" ]; then
103*fa44fe6aSInna Palant  # If we have a shard count value, create the necessary Gradle property args.
104*fa44fe6aSInna Palant  # We assume that SHARD_INDEX has been set too
105*fa44fe6aSInna Palant  SHARD_OPTS="$SHARD_OPTS -Pandroid.testInstrumentationRunnerArguments.numShards=$SHARD_COUNT"
106*fa44fe6aSInna Palant  SHARD_OPTS="$SHARD_OPTS -Pandroid.testInstrumentationRunnerArguments.shardIndex=$SHARD_INDEX"
107*fa44fe6aSInna Palantfi
108*fa44fe6aSInna Palant
109*fa44fe6aSInna Palant./gradlew --scan --continue --no-configuration-cache --stacktrace $TASK $FILTER_OPTS $SHARD_OPTS
110