From 326a08f116e4a25b34f62ed75fceb94f4c545165 Mon Sep 17 00:00:00 2001 From: Ethan Edwards Date: Thu, 19 Oct 2017 15:21:25 -0500 Subject: [PATCH 1/3] added initial command skeleton --- commands/package-version/metadata | 7 +++ commands/package-version/options.sh | 68 +++++++++++++++++++++++++++++ commands/package-version/script | 25 +++++++++++ generator.sh | 21 +++++++-- options/org/metadata | 2 +- options/package/metadata | 2 +- options/repo/metadata | 2 +- tests/package-version-1-test.sh | 20 +++++++++ 8 files changed, 141 insertions(+), 6 deletions(-) create mode 100644 commands/package-version/metadata create mode 100644 commands/package-version/options.sh create mode 100755 commands/package-version/script create mode 100644 tests/package-version-1-test.sh diff --git a/commands/package-version/metadata b/commands/package-version/metadata new file mode 100644 index 0000000..61bf1c1 --- /dev/null +++ b/commands/package-version/metadata @@ -0,0 +1,7 @@ +# command metadata +# generated by stubbs:add-command +# Thu Oct 19 15:19:18 CDT 2017 +NAME=package-version +DESCRIPTION="Retrieves versions for specified remote package." +OPTIONS="org repo package" +GENERATE_HELP="true" diff --git a/commands/package-version/options.sh b/commands/package-version/options.sh new file mode 100644 index 0000000..c163b99 --- /dev/null +++ b/commands/package-version/options.sh @@ -0,0 +1,68 @@ +# Generated by stubbs:add-option. Do not edit, if using stubbs. +# Created: Thu Oct 19 15:21:05 CDT 2017 +# +#/ usage: bintray:package-version --org <> --repo <> --package <> + +# _rerun_options_parse_ - Parse the command arguments and set option variables. +# +# rerun_options_parse "$@" +# +# Arguments: +# +# * the command options and their arguments +# +# Notes: +# +# * Sets shell variables for any parsed options. +# * The "-?" help argument prints command usage and will exit 2. +# * Return 0 for successful option parse. +# +rerun_options_parse() { + + unrecognized_args=() + + while (( "$#" > 0 )) + do + OPT="$1" + case "$OPT" in + --org) rerun_option_check $# $1; ORG=$2 ; shift 2 ;; + --repo) rerun_option_check $# $1; REPO=$2 ; shift 2 ;; + --package) rerun_option_check $# $1; PACKAGE=$2 ; shift 2 ;; + # help option + -\?|--help) + rerun_option_usage + exit 2 + ;; + # unrecognized arguments + *) + unrecognized_args+=("$OPT") + shift + ;; + esac + done + + # Set defaultable options. + + # Check required options are set + [[ -z "$ORG" ]] && { echo >&2 "missing required option: --org" ; return 2 ; } + [[ -z "$REPO" ]] && { echo >&2 "missing required option: --repo" ; return 2 ; } + [[ -z "$PACKAGE" ]] && { echo >&2 "missing required option: --package" ; return 2 ; } + # If option variables are declared exportable, export them. + + # Make unrecognized command line options available in $_CMD_LINE + if [ ${#unrecognized_args[@]} -gt 0 ]; then + export _CMD_LINE="${unrecognized_args[@]}" + fi + # + return 0 +} + + +# If not already set, initialize the options variables to null. +: ${ORG:=} +: ${REPO:=} +: ${PACKAGE:=} +# Default command line to null if not set +: ${_CMD_LINE:=} + + diff --git a/commands/package-version/script b/commands/package-version/script new file mode 100755 index 0000000..b98ba4c --- /dev/null +++ b/commands/package-version/script @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +#/ command: bintray:package-version: "Retrieves versions for specified remote package." +#/ usage: rerun bintray:package-version --org <> --repo <> --package <> +#/ rerun-variables: RERUN, RERUN_VERSION, RERUN_MODULES, RERUN_MODULE_DIR +#/ option-variables: ORG REPO PACKAGE + +. $RERUN_MODULE_DIR/lib/functions.sh package-version || { + echo >&2 "Failed loading function library." ; exit 1 ; +} + +set -o errexit -o nounset -o pipefail + +rerun_options_parse "$@" + +# Command implementation +# ---------------------- + +# - - - +# Put the command implementation here. +# - - - + +# Done. Exit with last command exit status. +exit $? + diff --git a/generator.sh b/generator.sh index 2d2c528..551e2ac 100644 --- a/generator.sh +++ b/generator.sh @@ -1,14 +1,29 @@ + +## modules + +## commands + +# rerun bintray: package-uri RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ add-command \ --command package-uri \ --description "Retrieves URIs for remote package artifacts of a specified version." \ --module bintray +# rerun bintray: package-version +RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ + add-command \ + --command package-version \ + --description "Retrieves versions for specified remote package." \ + --module bintray + +## options + # --org RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ add-option \ --arg "true" \ - --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri" \ + --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri,package-version" \ --description "The bintray organization." \ --export "false" \ --long "org" \ @@ -20,7 +35,7 @@ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ add-option \ --arg "true" \ - --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri" \ + --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri,package-version" \ --description "The targeted repo." \ --export "false" \ --long "repo" \ @@ -32,7 +47,7 @@ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ add-option \ --arg "true" \ - --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri" \ + --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri,package-version" \ --description "The package name." \ --export "false" \ --long "package" \ diff --git a/options/org/metadata b/options/org/metadata index 82b2975..185d502 100644 --- a/options/org/metadata +++ b/options/org/metadata @@ -1,6 +1,6 @@ # option metadata # generated by stubbs:add-option -# Mon Oct 9 15:06:22 CDT 2017 +# Thu Oct 19 15:20:16 CDT 2017 NAME=org DESCRIPTION="The bintray organization." ARGUMENTS=true diff --git a/options/package/metadata b/options/package/metadata index 7e41bb0..27b8095 100644 --- a/options/package/metadata +++ b/options/package/metadata @@ -1,6 +1,6 @@ # option metadata # generated by stubbs:add-option -# Mon Oct 9 15:10:43 CDT 2017 +# Thu Oct 19 15:21:04 CDT 2017 NAME=package DESCRIPTION="The package name." ARGUMENTS=true diff --git a/options/repo/metadata b/options/repo/metadata index 34995e1..c33bf4a 100644 --- a/options/repo/metadata +++ b/options/repo/metadata @@ -1,6 +1,6 @@ # option metadata # generated by stubbs:add-option -# Mon Oct 9 15:09:15 CDT 2017 +# Thu Oct 19 15:20:43 CDT 2017 NAME=repo DESCRIPTION="The targeted repo." ARGUMENTS=true diff --git a/tests/package-version-1-test.sh b/tests/package-version-1-test.sh new file mode 100644 index 0000000..d754b77 --- /dev/null +++ b/tests/package-version-1-test.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env roundup +# +#/ usage: rerun stubbs:test -m bintray -p package-version [--answers <>] +# + +# Helpers +# ------- +[[ -f ./functions.sh ]] && . ./functions.sh + +# The Plan +# -------- +describe "package-version" + +# ------------------------------ +# Replace this test. +it_fails_without_a_real_test() { + exit 1 +} +# ------------------------------ + From 1edc7caefda73899907a242ec9f784be6e4a1f0b Mon Sep 17 00:00:00 2001 From: Ethan Edwards Date: Thu, 19 Oct 2017 15:42:56 -0500 Subject: [PATCH 2/3] added version script and tests --- commands/package-version/script | 3 +- tests/package-version-1-test.sh | 118 ++++++++++++++++++++++++++++++-- 2 files changed, 115 insertions(+), 6 deletions(-) diff --git a/commands/package-version/script b/commands/package-version/script index b98ba4c..6df2127 100755 --- a/commands/package-version/script +++ b/commands/package-version/script @@ -17,9 +17,8 @@ rerun_options_parse "$@" # ---------------------- # - - - -# Put the command implementation here. +scrape_bintray_package_for_versions "$ORG" "$REPO" "$PACKAGE" # - - - # Done. Exit with last command exit status. exit $? - diff --git a/tests/package-version-1-test.sh b/tests/package-version-1-test.sh index d754b77..657b3bc 100644 --- a/tests/package-version-1-test.sh +++ b/tests/package-version-1-test.sh @@ -3,18 +3,128 @@ #/ usage: rerun stubbs:test -m bintray -p package-version [--answers <>] # +set -u + # Helpers # ------- [[ -f ./functions.sh ]] && . ./functions.sh +rerun() { + command $RERUN -M $RERUN_MODULES "$@" +} + +# Constants + +DEFAULT_ORG="example-org" +DEFAULT_REPO="example-repo" +DEFAULT_PACKAGE="example-package" + +DEFAULT_VERSIONS=$(cat < + + + + +
1.0.0/
+
1.0.3/
+
1.4.0/
+ + +END_HEREDOC +) + +DEFAULT_PACKAGE_RESPONSE_ERROR_MOCK="The requested path was not found." + +DEFAULT_CURL_MOCK_TEMPFILE="/tmp/curl_mock_counter" + # The Plan # -------- describe "package-version" +after() { + if [ -e $DEFAULT_CURL_MOCK_TEMPFILE ]; then + rm $DEFAULT_CURL_MOCK_TEMPFILE + fi +} + # ------------------------------ -# Replace this test. -it_fails_without_a_real_test() { - exit 1 +it_errors_when_no_versions_are_found() { + # mock the curl calls + export DEFAULT_PACKAGE_RESPONSE_ERROR_MOCK + export DEFAULT_CURL_MOCK_TEMPFILE + echo 0 > $DEFAULT_CURL_MOCK_TEMPFILE + curl () { + curl_mock_counter=$(cat $DEFAULT_CURL_MOCK_TEMPFILE) + case $curl_mock_counter in + 0) + echo "$DEFAULT_PACKAGE_RESPONSE_ERROR_MOCK" + echo 1 > $DEFAULT_CURL_MOCK_TEMPFILE + return 0 + ;; + *) + echo >&2 "unexpected call to curl: $@" + return 1 + esac + + return 1 + } + export -f curl + + # invoke rerun + local exitcode= + $(rerun bintray: package-version \ + --org "$DEFAULT_ORG" \ + --repo "$DEFAULT_REPO" \ + --package "$DEFAULT_PACKAGE") && { + echo >&2 "rerun test command succeeded"; return 1 + } || { + exitcode=$?; test $exitcode -eq 3 + } || { + echo >&2 "rerun test command failed with exit code: $exitcode"; return 1 + } +} +# ------------------------------ +it_returns_req_package_versions() { + # mock the curl calls + export DEFAULT_PACKAGE_RESPONSE_MOCK + export DEFAULT_CURL_MOCK_TEMPFILE + echo 0 > $DEFAULT_CURL_MOCK_TEMPFILE + curl () { + curl_mock_counter=$(cat $DEFAULT_CURL_MOCK_TEMPFILE) + case $curl_mock_counter in + 0) + echo "$DEFAULT_PACKAGE_RESPONSE_MOCK" + echo 1 > $DEFAULT_CURL_MOCK_TEMPFILE + return 0 + ;; + *) + echo >&2 "unexpected call to curl: $@" + return 1 + esac + + return 1 + } + export -f curl + + # invoke rerun + requested_package_versions=$(rerun bintray: package-version \ + --org "$DEFAULT_ORG" \ + --repo "$DEFAULT_REPO" \ + --package "$DEFAULT_PACKAGE") || echo >&2 "rerun test call failed with exit code: $?" + + # validate results + test "$requested_package_versions" == "$DEFAULT_VERSIONS" } # ------------------------------ - From fff108f53cdceb9391aa63b0224294c1f1222a9f Mon Sep 17 00:00:00 2001 From: Ethan Edwards Date: Mon, 30 Oct 2017 13:51:36 -0500 Subject: [PATCH 3/3] renamed package-version to package-versions --- .../{package-version => package-versions}/metadata | 2 +- .../{package-version => package-versions}/options.sh | 2 +- commands/{package-version => package-versions}/script | 6 +++--- generator.sh | 10 +++++----- ...ge-version-1-test.sh => package-versions-1-test.sh} | 8 ++++---- 5 files changed, 14 insertions(+), 14 deletions(-) rename commands/{package-version => package-versions}/metadata (89%) rename commands/{package-version => package-versions}/options.sh (96%) rename commands/{package-version => package-versions}/script (66%) rename tests/{package-version-1-test.sh => package-versions-1-test.sh} (93%) diff --git a/commands/package-version/metadata b/commands/package-versions/metadata similarity index 89% rename from commands/package-version/metadata rename to commands/package-versions/metadata index 61bf1c1..5437c66 100644 --- a/commands/package-version/metadata +++ b/commands/package-versions/metadata @@ -1,7 +1,7 @@ # command metadata # generated by stubbs:add-command # Thu Oct 19 15:19:18 CDT 2017 -NAME=package-version +NAME=package-versions DESCRIPTION="Retrieves versions for specified remote package." OPTIONS="org repo package" GENERATE_HELP="true" diff --git a/commands/package-version/options.sh b/commands/package-versions/options.sh similarity index 96% rename from commands/package-version/options.sh rename to commands/package-versions/options.sh index c163b99..f724df3 100644 --- a/commands/package-version/options.sh +++ b/commands/package-versions/options.sh @@ -1,7 +1,7 @@ # Generated by stubbs:add-option. Do not edit, if using stubbs. # Created: Thu Oct 19 15:21:05 CDT 2017 # -#/ usage: bintray:package-version --org <> --repo <> --package <> +#/ usage: bintray:package-versions --org <> --repo <> --package <> # _rerun_options_parse_ - Parse the command arguments and set option variables. # diff --git a/commands/package-version/script b/commands/package-versions/script similarity index 66% rename from commands/package-version/script rename to commands/package-versions/script index 6df2127..0daa4ec 100755 --- a/commands/package-version/script +++ b/commands/package-versions/script @@ -1,11 +1,11 @@ #!/usr/bin/env bash -#/ command: bintray:package-version: "Retrieves versions for specified remote package." -#/ usage: rerun bintray:package-version --org <> --repo <> --package <> +#/ command: bintray:package-versions: "Retrieves versions for specified remote package." +#/ usage: rerun bintray:package-versions --org <> --repo <> --package <> #/ rerun-variables: RERUN, RERUN_VERSION, RERUN_MODULES, RERUN_MODULE_DIR #/ option-variables: ORG REPO PACKAGE -. $RERUN_MODULE_DIR/lib/functions.sh package-version || { +. $RERUN_MODULE_DIR/lib/functions.sh package-versions || { echo >&2 "Failed loading function library." ; exit 1 ; } diff --git a/generator.sh b/generator.sh index 551e2ac..ee3e1c8 100644 --- a/generator.sh +++ b/generator.sh @@ -10,10 +10,10 @@ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ --description "Retrieves URIs for remote package artifacts of a specified version." \ --module bintray -# rerun bintray: package-version +# rerun bintray: package-versions RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ add-command \ - --command package-version \ + --command package-versions \ --description "Retrieves versions for specified remote package." \ --module bintray @@ -23,7 +23,7 @@ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ add-option \ --arg "true" \ - --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri,package-version" \ + --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri,package-versions" \ --description "The bintray organization." \ --export "false" \ --long "org" \ @@ -35,7 +35,7 @@ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ add-option \ --arg "true" \ - --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri,package-version" \ + --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri,package-versions" \ --description "The targeted repo." \ --export "false" \ --long "repo" \ @@ -47,7 +47,7 @@ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ RERUN_MODULES=$(pwd)/modules ./rerun stubbs: \ add-option \ --arg "true" \ - --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri,package-version" \ + --command "package-delete,package-exists,package-update,package-upload,package-upload-deb,package-uri,package-versions" \ --description "The package name." \ --export "false" \ --long "package" \ diff --git a/tests/package-version-1-test.sh b/tests/package-versions-1-test.sh similarity index 93% rename from tests/package-version-1-test.sh rename to tests/package-versions-1-test.sh index 657b3bc..3c0be43 100644 --- a/tests/package-version-1-test.sh +++ b/tests/package-versions-1-test.sh @@ -1,6 +1,6 @@ #!/usr/bin/env roundup # -#/ usage: rerun stubbs:test -m bintray -p package-version [--answers <>] +#/ usage: rerun stubbs:test -m bintray -p package-versions [--answers <>] # set -u @@ -51,7 +51,7 @@ DEFAULT_CURL_MOCK_TEMPFILE="/tmp/curl_mock_counter" # The Plan # -------- -describe "package-version" +describe "package-versions" after() { if [ -e $DEFAULT_CURL_MOCK_TEMPFILE ]; then @@ -84,7 +84,7 @@ it_errors_when_no_versions_are_found() { # invoke rerun local exitcode= - $(rerun bintray: package-version \ + $(rerun bintray: package-versions \ --org "$DEFAULT_ORG" \ --repo "$DEFAULT_REPO" \ --package "$DEFAULT_PACKAGE") && { @@ -119,7 +119,7 @@ it_returns_req_package_versions() { export -f curl # invoke rerun - requested_package_versions=$(rerun bintray: package-version \ + requested_package_versions=$(rerun bintray: package-versions \ --org "$DEFAULT_ORG" \ --repo "$DEFAULT_REPO" \ --package "$DEFAULT_PACKAGE") || echo >&2 "rerun test call failed with exit code: $?"