spiegel-keyman/resources/build/builder-report.sh
Marc Durdin 986544c778 feat(common): builder script dependency and legacy script report
Adds /resources/build/builder-report.sh, internal maintenance script for
tracking build dependency tree and remaining legacy build.sh scripts.

@keymanapp-test-bot skip
2022-10-14 07:54:00 +11:00

103 lines
2.5 KiB
Bash
Executable file

#!/usr/bin/env bash
#
# Reports on all builder scripts in repo and builds a dependency tree
#
# Exit on command failure and when using unset variables:
set -eu
# Include some helper functions from resources
## START STANDARD BUILD SCRIPT INCLUDE
# adjust relative paths as necessary
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
. "$(dirname "$THIS_SCRIPT")/../../resources/build/build-utils.sh"
## END STANDARD BUILD SCRIPT INCLUDE
cd "$KEYMAN_ROOT"
builder_scripts=(`find . -name "build.sh" | xargs grep -l "builder_describe"`)
non_builder_scripts=(`find . -name "build.sh" | xargs grep -L "builder_describe"`)
declare -A dependencies
function get_script_dependencies() {
local script="${1#./}"
if [[ $script =~ "node_modules/" ]]; then
# we may get builder scripts copied into node_modules by npm
return 0
fi
script="${script%/build.sh}"
echo "$script"
local deps=`./$script/build.sh --builder-report-dependencies`
dependencies[$script]="$deps"
}
echo
echo "${COLOR_BLUE}## Locating builds${COLOR_RESET}"
echo
for e in "${builder_scripts[@]}"; do
get_script_dependencies "$e"
done
# Find top-level projects
root_dependencies=()
for e in "${!dependencies[@]}"; do
if [[ ! " ${dependencies[@]} " =~ " $e " ]]; then
root_dependencies+=($e)
fi
done
# Sort results
IFS=$'\n' root_dependencies=($(sort <<<"${root_dependencies[*]}")); unset IFS
IFS=$'\n' sorted_dependencies=($(sort <<<"${!dependencies[*]}")); unset IFS
# Print project dependency tree
function print_dependencies() {
local depth=$1
local name=$2
if (($depth > 0 )); then printf ' %.0s' $(seq 1 $depth); fi
echo "$name"
for e in ${dependencies[$name]}; do
if [[ -z $e ]]; then continue; fi
print_dependencies $((depth + 1)) $e
done
}
echo
echo "${COLOR_BLUE}## Project Dependency Tree${COLOR_RESET}"
echo
for e in "${root_dependencies[@]}"; do
print_dependencies 0 $e
echo
done
# Print list of all non-builder scripts
echo "${COLOR_BLUE}## Legacy build scripts (not using builder)${COLOR_RESET}"
echo
for e in "${non_builder_scripts[@]}"; do
scriptname="${e#./}"
if [[ $scriptname =~ "node_modules/" ]]; then
# we may get build.sh scripts copied into node_modules by npm
continue
fi
scriptname="${scriptname%/build.sh}"
echo "$scriptname"
done
# Print list of all projects and dependencies
echo
echo "${COLOR_BLUE}## All Projects and Dependencies${COLOR_RESET}"
echo
for e in "${sorted_dependencies[@]}"; do
echo "$e: ${dependencies[$e]}"
done
echo