199 lines
6.0 KiB
Bash
199 lines
6.0 KiB
Bash
#!/bin/bash
|
||
|
||
# Copyright (c) 2021 Razeware LLC
|
||
#
|
||
# Permission is hereby granted, free of charge, to any person
|
||
# obtaining a copy of this software and associated documentation
|
||
# files (the "Software"), to deal in the Software without
|
||
# restriction, including without limitation the rights to use,
|
||
# copy, modify, merge, publish, distribute, sublicense, and/or
|
||
# sell copies of the Software, and to permit persons to whom
|
||
# the Software is furnished to do so, subject to the following
|
||
# conditions:
|
||
#
|
||
# The above copyright notice and this permission notice shall be
|
||
# included in all copies or substantial portions of the Software.
|
||
#
|
||
# Notwithstanding the foregoing, you may not use, copy, modify,
|
||
# merge, publish, distribute, sublicense, create a derivative work,
|
||
# and/or sell copies of the Software in any work that is designed,
|
||
# intended, or marketed for pedagogical or instructional purposes
|
||
# related to programming, coding, application development, or
|
||
# information technology. Permission for such use, copying,
|
||
# modification, merger, publication, distribution, sublicensing,
|
||
# creation of derivative works, or sale is expressly withheld.
|
||
#
|
||
# This project and source code may use libraries or frameworks
|
||
# that are released under various Open-Source licenses. Use of
|
||
# those libraries and frameworks are governed by their own
|
||
# individual licenses.
|
||
#
|
||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||
# DEALINGS IN THE SOFTWARE.
|
||
|
||
DEBUG=false
|
||
if [ "$DEBUG" = true ]; then
|
||
STD_OUT=/dev/tty
|
||
else
|
||
STD_OUT=/dev/null
|
||
fi
|
||
|
||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||
IS_MACOS=true
|
||
else
|
||
IS_MACOS=false
|
||
fi
|
||
|
||
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||
|
||
WANTED_SUBFOLDER_1='.idea'
|
||
WANTED_SUBFOLDER_2='.vscode'
|
||
|
||
WANTED_SUBFOLDER_3='android/app/src/google-services.json'
|
||
WANTED_SUBFOLDER_4='ios/Runner/GoogleService-Info.plist'
|
||
|
||
ARR_WANTED=(
|
||
"${WANTED_SUBFOLDER_1}"
|
||
"${WANTED_SUBFOLDER_2}"
|
||
"${WANTED_SUBFOLDER_3}"
|
||
"${WANTED_SUBFOLDER_4}"
|
||
)
|
||
|
||
# Get root directory: /mnt/c/scripts/epidemy/
|
||
ROOT_DIR="$(dirname "$(dirname "$(dirname "$(echo $SCRIPT_DIR)")")")"
|
||
|
||
# Double check our core locations aren't empty
|
||
[ -z "$ROOT_DIR" ] && echo 'ROOT_DIR variable is unset!' && exit 1
|
||
[ -z "$SCRIPT_DIR" ] && echo 'SCRIPT_DIR variable is unset!' && exit 1
|
||
|
||
# All folders within root (e.g. 01-, 02-, 03-, 04-)
|
||
ALL_ROOT=$(find "${ROOT_DIR}" -maxdepth 3 -type d | grep -E '/[0-9]{2}[^/]*/projects/(starter|final|challenge)')
|
||
|
||
# Just the folders we care about (not template)
|
||
FOLDERS=$(printf "${ALL_ROOT}" | grep -v $(printf ${SCRIPT_DIR}))
|
||
|
||
{
|
||
echo
|
||
echo ===Found Folders===
|
||
echo '(Template)' $SCRIPT_DIR
|
||
echo "${FOLDERS}"
|
||
|
||
echo
|
||
echo ===Creating Items===
|
||
printf "${FOLDERS}\n" | while read root ; do
|
||
|
||
echo $root
|
||
|
||
for wanted in "${ARR_WANTED[@]}"; do
|
||
orig_item="${SCRIPT_DIR}/${wanted}"
|
||
dest_item="${root}/${wanted}"
|
||
dest_dir=$(dirname "${dest_item}")
|
||
|
||
# Ensure template file exists
|
||
if [[ ! -e "${orig_item}" ]]; then
|
||
continue
|
||
fi
|
||
|
||
# Skip item if there isn't a path to copy destination
|
||
if [ ! -d "${dest_dir}" ]; then
|
||
printf "\tDestination Directory Missing - ${wanted}\n"
|
||
continue
|
||
fi
|
||
|
||
# =============COPY============= #
|
||
if [ "$IS_MACOS" = true ]; then
|
||
# Doesn't support -T, uses source trailing /
|
||
cp -r "${orig_item}" "${dest_item}"
|
||
else
|
||
# -T to copy entire folder, instead of contents
|
||
cp -rT "${orig_item}" "${dest_item}"
|
||
fi
|
||
printf "\tCreated! - ${wanted}\n"
|
||
# =============COPY============= #
|
||
|
||
done
|
||
echo
|
||
done
|
||
|
||
echo
|
||
echo ===Issues===
|
||
|
||
# Print an error only if we're missing both
|
||
ERR_IF_BOTH_1=(
|
||
"/src/google-services.json$"
|
||
"/Runner/GoogleService-Info.plist$"
|
||
)
|
||
BOTH_MISSING_1=true
|
||
|
||
# Print an error only if we're missing both
|
||
ERR_IF_BOTH_2=(
|
||
".idea$"
|
||
".vscode$"
|
||
)
|
||
BOTH_MISSING_2=true
|
||
|
||
# Don't perform basic missing check on these items
|
||
# Use this if other checks should be used, e.g. ERR_IF_BOTH
|
||
# Uses regex to check, note the $ for EOL and the OR symbol
|
||
NO_ERR="\/(src|Runner)\/(GoogleService-Info.plist|google-services.json)$"
|
||
NO_ERR="${NO_ERR}|\.(vscode|idea)$"
|
||
|
||
for wanted in "${ARR_WANTED[@]}"; do
|
||
orig_item="${SCRIPT_DIR}/${wanted}"
|
||
|
||
# Loop through and check if $wanted matches
|
||
for check in "${ERR_IF_BOTH_1[@]}"; do
|
||
|
||
# Check current item
|
||
echo "${wanted}" | grep -Eq ${check}
|
||
|
||
# Current item is in ERR_IF_BOTH_1
|
||
if [ $? -eq 0 ]; then
|
||
|
||
# Update flag if item does exist
|
||
[ -e "${orig_item}" ] && BOTH_MISSING_1=false
|
||
|
||
# End this checker if found a match
|
||
[ "$BOTH_MISSING_1" = false ] && break
|
||
fi
|
||
done
|
||
|
||
# Loop through and check if $wanted matches
|
||
for check in "${ERR_IF_BOTH_2[@]}"; do
|
||
|
||
# Check current item
|
||
echo "${wanted}" | grep -Eq ${check}
|
||
|
||
# Current item is in ERR_IF_BOTH_2
|
||
if [ $? -eq 0 ]; then
|
||
|
||
# Update flag if item does exist
|
||
[ -e "${orig_item}" ] && BOTH_MISSING_2=false
|
||
|
||
# End this checker if found a match
|
||
[ "$BOTH_MISSING_2" = false ] && break
|
||
fi
|
||
done
|
||
|
||
# Don't print missing file error,
|
||
# If item path matches NO_ERR pattern
|
||
echo ${wanted} | grep -Eq ${NO_ERR}
|
||
[ $? -eq 0 ] && continue
|
||
|
||
# Generic file missing error
|
||
[ ! -e "${orig_item}" ] && echo "${orig_item} Does not exist!" 1>&2
|
||
done
|
||
|
||
[ "$BOTH_MISSING_1" = true ] && echo "Your Firebase configuration file(s) couldn’t be found. Please, make sure you have configured at least the dev app for Android or iOS. You won't be able to run the app otherwise." 1>&2 && exit 1
|
||
[ "$BOTH_MISSING_2" = true ] && echo "Your IDE’s custom running configs couldn’t be found. Please, try following the instructions again, or you'll need to run the app from the command line every time by using: flutter run --dart-define=fav-qs-app-token=YOUR_KEY" 1>&2 && exit 1
|
||
|
||
} > $STD_OUT
|
||
|
||
echo Done!
|
||
exit 0 |