Skip to content

Commit

Permalink
chore(scripts): allow --reset --up/--down to automatically run script (
Browse files Browse the repository at this point in the history
…#8826)

**[ISSUE]**
Honestly, kind of miss being able to use `lerna` for any kind of npm test through parameters with the old `builddown`. Wanted to be able to run something like `builddown build+test` or `builddown test`.

**[APPROACH]**
Added a `-r | --reset` flag to allow the `foreach.sh` script to reset and run in one line like `builddown`/`buildup`.

**[NOTE]**
Won't change anyone's current workflow because `--reset` is still in codebase.

Also arguments for the script aren't restricted by order (i.e. `foreach.sh --reset --up yarn build ` and `builddown yarn build --up --reset` will produce the same results)!

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
  • Loading branch information
BryanPan342 committed Jul 30, 2020
1 parent d0b3289 commit 3cf6a94
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 49 deletions.
6 changes: 2 additions & 4 deletions scripts/builddown
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,15 @@ echo " for advanced usage, see ${scriptdir}/foreach.sh"
echo "************************************************************"

if [ "$#" -eq 0 ]; then
${scriptdir}/foreach.sh --reset
${scriptdir}/foreach.sh --reset --down yarn build
else
if [ "$1" != "--resume" ]; then
echo "Unknown option: $1"
exit 1
fi
${scriptdir}/foreach.sh --down yarn build
fi

${scriptdir}/foreach.sh --down yarn build
${scriptdir}/foreach.sh --reset

echo "************************************************************"
echo "builddown done"
echo "************************************************************"
6 changes: 2 additions & 4 deletions scripts/buildup
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,15 @@ echo " for advanced usage, see ${scriptdir}/foreach.sh"
echo "************************************************************"

if [ "$#" -eq 0 ]; then
${scriptdir}/foreach.sh --reset
${scriptdir}/foreach.sh --reset --up yarn build
else
if [ "$1" != "--resume" ]; then
echo "Unknown option: $1"
exit 1
fi
${scriptdir}/foreach.sh --up yarn build
fi

${scriptdir}/foreach.sh --up yarn build
${scriptdir}/foreach.sh --reset

echo "************************************************************"
echo "buildup done"
echo "************************************************************"
105 changes: 64 additions & 41 deletions scripts/foreach.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,16 @@
# if a task fails, it will stop, and then to resume, simply run `foreach.sh` again (with or without the same command).
#
# to reset the session (either when all tasks finished or if you wish to run a different session), run:
# foreach.sh --reset
# foreach.sh [-r | --reset]
#
# to force a reset and run a session with the current, run:
# foreach.sh [-r | --reset] [-u | --up || -d | --down] COMMAND
#
# to run the command only against the current module and its dependencies:
# foreach.sh --up COMMAND
# foreach.sh [-u | --up] COMMAND
#
# to run the command only against the current module and its consumers:
# foreach.sh --down COMMAND
# foreach.sh [-d | --down] COMMAND
#
# --------------------------------------------------------------------------------------------------
set -euo pipefail
Expand All @@ -41,52 +44,72 @@ function success {
printf "\e[32;5;81m$@\e[0m\n"
}

if [[ "${1:-}" == "--reset" ]]; then
rm -f "${statedir}/.foreach."*
success "state cleared. you are free to start a new command."
exit 0
function reset {
rm -f "${statedir}/.foreach."*
success "state cleared. you are free to start a new command."
}

DIRECTION=""
RESET=0
SKIP=0
command_arg=""

for arg in "$@"
do
case "$arg" in
-r | --reset) RESET=1 ;;
-s | --skip) SKIP=1 ;;
-u | --up) DIRECTION="UP" ;;
-d | --down) DIRECTION="DOWN" ;;
*) command_arg="$command_arg$arg " ;;
esac
shift
done

if [[ "$RESET" -eq 1 ]]; then
reset
fi

if [[ "${1:-}" == "--skip" ]]; then
if [ ! -f ${statefile} ]; then
error "skip failed. no active sessions found."
exit 1
fi
next=$(head -1 ${statefile})
if [ -z "${next}" ]; then
error "skip failed. queue is empty. to reset:"
error " $0 --reset"
exit 1
fi
tail -n +2 "${statefile}" > "${statefile}.tmp"
cp "${statefile}.tmp" "${statefile}"
success "directory '$next' skipped. re-run the original foreach command to resume."
exit 0
if [[ "$RESET" -eq 1 && "$DIRECTION" == "" ]]; then
exit 0
fi

if [[ "$SKIP" -eq 1 ]]; then
if [ ! -f ${statefile} ]; then
error "skip failed. no active sessions found."
exit 1
fi
next=$(head -1 ${statefile})
if [ -z "${next}" ]; then
error "skip failed. queue is empty. to reset:"
error " $0 --reset"
exit 1
fi
tail -n +2 "${statefile}" > "${statefile}.tmp"
cp "${statefile}.tmp" "${statefile}"
success "directory '$next' skipped. re-run the original foreach command (without --reset) to resume."
exit 0
fi

direction=""
direction_desc=""
if [[ "${1:-}" == "--up" || "${1:-}" == "--down" ]]; then
if [ ! -f package.json ]; then
echo "--up or --down can only be executed from within a module directory (looking for package.json)"
exit 1
fi

scope=$(node -p "require('./package.json').name")
if [[ "$DIRECTION" == "UP" || "$DIRECTION" == "DOWN" ]]; then
if [ ! -f package.json ]; then
error "--up or --down can only be executed from within a module directory (looking for package.json)"
exit 1
fi

if [[ "${1:-}" == "--up" ]]; then
direction=" --scope ${scope} --include-dependencies"
direction_desc="('${scope}' and its dependencies)"
else # --down
direction=" --scope ${scope} --include-dependents"
direction_desc="('${scope}' and its consumers)"
fi
scope=$(node -p "require('./package.json').name")

shift
if [[ "$DIRECTION" == "UP" ]]; then
direction=" --scope ${scope} --include-dependencies"
direction_desc="('${scope}' and its dependencies)"
else # --down
direction=" --scope ${scope} --include-dependents"
direction_desc="('${scope}' and its consumers)"
fi
fi

command_arg="${@:-}"

if [ -f "${statefile}" ] && [ -f "${commandfile}" ]; then
command="$(cat ${commandfile})"
if [ ! -z "${command_arg}" ] && [ "${command}" != "${command_arg}" ]; then
Expand All @@ -110,8 +133,8 @@ fi

next="$(head -n1 ${statefile})"
if [ -z "${next}" ]; then
success "done (queue is empty). to reset:"
success " $0 --reset"
success "done (queue is empty). reseting queue:"
reset
exit 0
fi

Expand Down

0 comments on commit 3cf6a94

Please sign in to comment.