From 7e589de3ca28b3644ba977d177203a0d80504e43 Mon Sep 17 00:00:00 2001 From: Vincent Hardouin <vincenthardouin@icloud.com> Date: Sat, 5 Nov 2022 22:22:38 +0100 Subject: [PATCH 1/4] fix: typo in arg --- npm-bump | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-bump b/npm-bump index 61c0b45..820dcd4 100755 --- a/npm-bump +++ b/npm-bump @@ -35,7 +35,7 @@ function handle_arguments() { show_help exit ;; - -m | --mardown) + -m | --markdown) markdown=1 ;; -e | --exclude) From 0c35ac018474c535e8666e2d9bc7b2f72ae49aaa Mon Sep 17 00:00:00 2001 From: Vincent Hardouin <vincenthardouin@icloud.com> Date: Sat, 5 Nov 2022 22:23:07 +0100 Subject: [PATCH 2/4] feat: add step-by-step arg --- npm-bump | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/npm-bump b/npm-bump index 820dcd4..d145be7 100755 --- a/npm-bump +++ b/npm-bump @@ -46,6 +46,9 @@ function handle_arguments() { -nt | --no-test) no_test=1 ;; + -sbs | --step-by-step) + step_by_step=1 + ;; *) break ;; @@ -60,6 +63,7 @@ function show_help() { printf " %-25s %s\n" "-m, --markdown" "display updated packages in markdown table" printf " %-25s %s\n" "-e, --exclude" "exclude package name seprated by a comma (e.g -e lodash,mocha)" printf " %-25s %s\n" "-nt, --no-test" "does not run test command when update package" + printf " %-25s %s\n" "-sbs, --step-by-step" "test bump version step by step" } function commit_bump() { From 19bf856054c0083021b3e14ca462385319d814d8 Mon Sep 17 00:00:00 2001 From: Vincent Hardouin <vincenthardouin@icloud.com> Date: Sat, 5 Nov 2022 22:24:52 +0100 Subject: [PATCH 3/4] feat: add get newest version function --- npm-bump | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/npm-bump b/npm-bump index d145be7..36b1e2b 100755 --- a/npm-bump +++ b/npm-bump @@ -81,6 +81,31 @@ function add_updated_package_informations() { new_version_packages+=("$3") } +function verlte() { printf '%s\n%s' "$1" "$2" | sort -C -V; } +function verlt() { ! verlte "$2" "$1"; } + +function get_versions() { + read -r -d '\n' -a versions < <( npm view "$1" versions --json | awk -F "[,\n]" '!/\[|beta|alpha|rc|\]/ { gsub(/"/, "", $1); print $1}' | sort -V --reverse ) +} + +function filter_new_versions() { + for i in "${versions[@]}" + do + # shellcheck disable=SC2086 + if verlt $1 $i; then + desc_newest_versions+=("$i") + else + break + fi + done +} + +function get_newest_versions() { + get_versions "$1" + filter_new_versions "$2" + read -r -d '\n' -a newest_versions < <( printf '%s\n' "${desc_newest_versions[@]}" | sort -V ) +} + function bump_version() { if [ -z ${exclude+x} ]; then outdated_packages=$(npm outdated | tail -n +2) @@ -166,4 +191,4 @@ function show_result() { handle_arguments "$@" npm_files_exist bump_version -show_result +show_result \ No newline at end of file From b981137ada3fab07e3e737feee681af11d8f3500 Mon Sep 17 00:00:00 2001 From: Vincent Hardouin <vincenthardouin@icloud.com> Date: Sat, 5 Nov 2022 22:25:51 +0100 Subject: [PATCH 4/4] feat: allow step-by-step in bump-version method --- npm-bump | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/npm-bump b/npm-bump index 36b1e2b..793c189 100755 --- a/npm-bump +++ b/npm-bump @@ -5,6 +5,7 @@ declare -a old_version_packages declare -a new_version_packages declare -a no_updated_packages markdown=0 +step_by_step=0 trap ctrl_c SIGINT @@ -106,6 +107,27 @@ function get_newest_versions() { read -r -d '\n' -a newest_versions < <( printf '%s\n' "${desc_newest_versions[@]}" | sort -V ) } +function install_version() { + echo "Try to bump $1 from $2 to $3" + + if [ -z ${no_test} ]; then + npm install "$1"@"$3" && npm test + else + npm install "$1"@"$3" + fi + + # shellcheck disable=SC2181 + if [ $? -eq 0 ]; then + commit_bump "$1" "$2" "$3" + add_updated_package_informations "$1" "$2" "$3" + status=0 + else + no_updated_packages+=("$1") + undo_changes + status=1 + fi +} + function bump_version() { if [ -z ${exclude+x} ]; then outdated_packages=$(npm outdated | tail -n +2) @@ -115,24 +137,18 @@ function bump_version() { if [ -n "$outdated_packages" ]; then # shellcheck disable=SC2034 - while read -r package actual_version coll3 latest_version col4; do - echo "Try to bump ${package} from ${actual_version} to ${latest_version}" - - if [ -z ${no_test} ]; then - npm install "$package"@"$latest_version" && npm test - else - npm install "$package"@"$latest_version" - fi - - # shellcheck disable=SC2181 - if [ $? -eq 0 ]; then - commit_bump "$package" "$actual_version" "$latest_version" - add_updated_package_informations "$package" "$actual_version" "$latest_version" + while read -r package actual_version col3 latest_version col4; do + if [ ${step_by_step} -eq 0 ]; then + install_version "${package}" "${actual_version}" "${latest_version}" else - no_updated_packages+=("${package}") - undo_changes + get_newest_versions "${package}" "${actual_version}" + for version in "${newest_versions[@]}"; do + install_version "${package}" "${actual_version}" "${version}" + if [ ${status} -eq 1 ]; then + break + fi + done fi - done <<<"$outdated_packages" fi }