| #!/bin/bash |
| # |
| # Copyright 2016-present the Material Components for iOS authors. All Rights Reserved. |
| # |
| # 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. |
| |
| # To check all components: |
| # |
| # $ check_components |
| # |
| # To check specific components: |
| # |
| # $ check_components path/to/component [path/to/component [...]] |
| |
| function verbose_echo() { |
| if [[ $verbose -ne 0 ]]; then |
| echo "$*" |
| fi |
| } |
| |
| verbose=0 |
| checks="" |
| components="" |
| while [[ $# -gt 0 ]]; do |
| case $1 in |
| "-h" | "--help") |
| echo "Usage: $0 [-h] [-v] [-c check_script ...] [path/to/component ...]" |
| echo |
| echo "Check all components with all checks:" |
| echo "\$ $0" |
| echo |
| echo "Do the same but report what is going on:" |
| echo "\$ $0 -v" |
| echo |
| echo "Check all components with scripts/check/script1 scripts/check/script2:" |
| echo "\$ $0 -c scripts/check/script1 -c scripts/check/script2" |
| echo |
| echo "Check only components/Foo and components/private/Bar:" |
| echo "\$ $0 components/Foo components/private/Bar" |
| exit 0 |
| ;; |
| "-v" | "--verbose") |
| verbose=1 |
| shift 1 |
| ;; |
| "-c" | "--check") |
| checks="$checks $2" |
| shift 2 |
| ;; |
| *) |
| components="$components $1" |
| shift 1 |
| ;; |
| esac |
| done |
| |
| readonly SCRIPTS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| readonly ROOT_DIR=$(dirname "$SCRIPTS_DIR") |
| verbose_echo "SCRIPTS_DIR: $SCRIPTS_DIR" |
| verbose_echo "ROOT_DIR: $ROOT_DIR" |
| |
| # If no component listed on the command line, find them all. |
| if [[ -z "$components" ]]; then |
| readonly PUBLIC_COMPONENTS=$($SCRIPTS_DIR/list_components --public) |
| readonly PRIVATE_COMPONENTS=$($SCRIPTS_DIR/list_components --private) |
| components="$PUBLIC_COMPONENTS $PRIVATE_COMPONENTS" |
| fi |
| verbose_echo "components: $components" |
| |
| # Find all the check scripts. |
| if [[ -z "$checks" ]]; then |
| checks=$(find $SCRIPTS_DIR/check -type f -perm +111) |
| fi |
| verbose_echo "checks: $checks" |
| |
| # Run through each component, running each check in turn. |
| # Keep track of the number that fail any check. |
| verbose_echo |
| failed="" |
| for component in $components; do |
| echo "Checking $component ..." |
| |
| all_checks_passed=1 |
| for check in $checks; do |
| $check $component |
| if [[ $? -ne 0 ]]; then |
| all_checks_passed=0 |
| fi |
| done |
| |
| if [[ $all_checks_passed -ne 1 ]]; then |
| failed="$failed $component" |
| fi |
| echo |
| done |
| echo |
| |
| if [[ -z $failed ]]; then |
| echo Component checks passed. |
| else |
| echo "The following components failed:" |
| for i in $failed; do |
| echo $i |
| done |
| fi |