#!/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