xref: /aosp_15_r20/build/make/tools/lunchable (revision 9e94795a3d4ef5c1d47486f9a02bb378756cea8a)
1*9e94795aSAndroid Build Coastguard Worker#!/bin/bash
2*9e94795aSAndroid Build Coastguard Worker
3*9e94795aSAndroid Build Coastguard Worker# TODO: Currently only checks trunk_staging. Should check trunk_staging first,
4*9e94795aSAndroid Build Coastguard Worker#       then use the product-specfic releases. Only applies to -c though.
5*9e94795aSAndroid Build Coastguard Worker
6*9e94795aSAndroid Build Coastguard Workerfunction Help() {
7*9e94795aSAndroid Build Coastguard Workercat <<@EOF@
8*9e94795aSAndroid Build Coastguard WorkerUsage: lunchable [options]
9*9e94795aSAndroid Build Coastguard Worker
10*9e94795aSAndroid Build Coastguard WorkerLists products that have no functioning lunch combo.
11*9e94795aSAndroid Build Coastguard Worker
12*9e94795aSAndroid Build Coastguard Workeroptions:
13*9e94795aSAndroid Build Coastguard Worker-c    prints all failing lunch combos for all targets;
14*9e94795aSAndroid Build Coastguard Worker-w    why? Prints the error message after each failed lunch combo. Only
15*9e94795aSAndroid Build Coastguard Worker      works with -c
16*9e94795aSAndroid Build Coastguard Worker
17*9e94795aSAndroid Build Coastguard Worker@EOF@
18*9e94795aSAndroid Build Coastguard Worker}
19*9e94795aSAndroid Build Coastguard Worker
20*9e94795aSAndroid Build Coastguard Workercomplete=0
21*9e94795aSAndroid Build Coastguard Workerwhy=0
22*9e94795aSAndroid Build Coastguard Workerwhile getopts "cwh" option; do
23*9e94795aSAndroid Build Coastguard Worker  case $option in
24*9e94795aSAndroid Build Coastguard Worker    c)
25*9e94795aSAndroid Build Coastguard Worker      complete=1;;
26*9e94795aSAndroid Build Coastguard Worker    w)
27*9e94795aSAndroid Build Coastguard Worker      why=1;;
28*9e94795aSAndroid Build Coastguard Worker    h)
29*9e94795aSAndroid Build Coastguard Worker      Help
30*9e94795aSAndroid Build Coastguard Worker      exit;;
31*9e94795aSAndroid Build Coastguard Worker  esac
32*9e94795aSAndroid Build Coastguard Workerdone
33*9e94795aSAndroid Build Coastguard Worker
34*9e94795aSAndroid Build Coastguard Worker# Getting all named products can fail if we haven't lunched anything
35*9e94795aSAndroid Build Coastguard Workersource $(pwd)/build/envsetup.sh &> /dev/null
36*9e94795aSAndroid Build Coastguard Workerall_named_products=( $(get_build_var all_named_products 2> /dev/null) )
37*9e94795aSAndroid Build Coastguard Workerif [[ $? -ne 0 ]]; then
38*9e94795aSAndroid Build Coastguard Worker  echo "get_build_var all_named_products failed. Lunch something first?" >&2
39*9e94795aSAndroid Build Coastguard Worker  exit 1
40*9e94795aSAndroid Build Coastguard Workerfi
41*9e94795aSAndroid Build Coastguard Workertotal_products=${#all_named_products[@]}
42*9e94795aSAndroid Build Coastguard Workercurrent_product=0
43*9e94795aSAndroid Build Coastguard Worker
44*9e94795aSAndroid Build Coastguard Workerfor product in "${all_named_products[@]}"; do
45*9e94795aSAndroid Build Coastguard Worker  (( current_product += 1 ))
46*9e94795aSAndroid Build Coastguard Worker  single_pass=0
47*9e94795aSAndroid Build Coastguard Worker  printf " Checking ${current_product}/${total_products} \r" >&2
48*9e94795aSAndroid Build Coastguard Worker  for release in trunk_staging; do
49*9e94795aSAndroid Build Coastguard Worker    for variant in eng user userdebug; do
50*9e94795aSAndroid Build Coastguard Worker      lunchcombo="${product}-${release}-${variant}"
51*9e94795aSAndroid Build Coastguard Worker      lunch_error="$(lunch $lunchcombo 2>&1 > /dev/null)"
52*9e94795aSAndroid Build Coastguard Worker      if [[ $? -ne 0 ]]; then
53*9e94795aSAndroid Build Coastguard Worker        # Lunch failed
54*9e94795aSAndroid Build Coastguard Worker        if [[ $complete -eq 1 ]]; then
55*9e94795aSAndroid Build Coastguard Worker          echo -e "${product} : ${lunchcombo}"
56*9e94795aSAndroid Build Coastguard Worker          if [[ $why -eq 1 ]]; then
57*9e94795aSAndroid Build Coastguard Worker            echo -e "$(sed 's/^/    /g' <<<$lunch_error)"
58*9e94795aSAndroid Build Coastguard Worker          fi
59*9e94795aSAndroid Build Coastguard Worker        fi
60*9e94795aSAndroid Build Coastguard Worker      elif [[ $complete -ne 1 ]]; then
61*9e94795aSAndroid Build Coastguard Worker        single_pass=1
62*9e94795aSAndroid Build Coastguard Worker        break # skip variant
63*9e94795aSAndroid Build Coastguard Worker      fi
64*9e94795aSAndroid Build Coastguard Worker    done
65*9e94795aSAndroid Build Coastguard Worker    if [[ $single_pass -eq 1 ]]; then
66*9e94795aSAndroid Build Coastguard Worker      break # skip release
67*9e94795aSAndroid Build Coastguard Worker    fi
68*9e94795aSAndroid Build Coastguard Worker  done
69*9e94795aSAndroid Build Coastguard Worker  if [[ $complete -eq 0 ]] && [[ $single_pass -eq 0 ]]; then
70*9e94795aSAndroid Build Coastguard Worker    echo "${product}"
71*9e94795aSAndroid Build Coastguard Worker  fi
72*9e94795aSAndroid Build Coastguard Workerdone
73