Support dev upgrades on the CLI also

This commit is contained in:
decentral1se 2021-03-15 17:03:01 +01:00
parent a617629a7a
commit bcc15ecdb0
Signed by: decentral1se
GPG Key ID: 92DAD76BD9567B8A
1 changed files with 111 additions and 103 deletions

214
abra
View File

@ -38,7 +38,7 @@ Usage:
abra [options] server <host> rm abra [options] server <host> rm
abra [options] server <host> init abra [options] server <host> init
abra [options] server <host> apps [--status] abra [options] server <host> apps [--status]
abra [options] upgrade abra [options] upgrade [--dev]
abra [options] version abra [options] version
abra [options] help [<subcommands>...] abra [options] help [<subcommands>...]
abra [options] abra [options]
@ -155,107 +155,107 @@ eval "var_$1+=($value)"; else eval "var_$1=$value"; fi; return 0; fi; done
return 1; }; stdout() { printf -- "cat <<'EOM'\n%s\nEOM\n" "$1"; }; stderr() { return 1; }; stdout() { printf -- "cat <<'EOM'\n%s\nEOM\n" "$1"; }; stderr() {
printf -- "cat <<'EOM' >&2\n%s\nEOM\n" "$1"; }; error() { printf -- "cat <<'EOM' >&2\n%s\nEOM\n" "$1"; }; error() {
[[ -n $1 ]] && stderr "$1"; stderr "$usage"; _return 1; }; _return() { [[ -n $1 ]] && stderr "$1"; stderr "$usage"; _return 1; }; _return() {
printf -- "exit %d\n" "$1"; exit "$1"; }; set -e; trimmed_doc=${DOC:1:2009} printf -- "exit %d\n" "$1"; exit "$1"; }; set -e; trimmed_doc=${DOC:1:2017}
usage=${DOC:40:1473}; digest=2c4e4 usage=${DOC:40:1481}; digest=fd466
shorts=(-b -s -e -d -C -v -U -h '' '' '' '' '' '' '' '' '' '' '' '' '') shorts=(-e -U -d -v -C -s -h -b '' '' '' '' '' '' '' '' '' '' '' '' '' '')
longs=(--branch --stack --env --debug --skip-check --verbose --skip-update --help --status --server --type --domain --app-name --pass --secrets --all --update --force --volumes --no-tty --user) longs=(--env --skip-update --debug --verbose --skip-check --stack --help --branch --status --server --type --domain --app-name --pass --secrets --all --update --force --volumes --no-tty --user --dev)
argcounts=(1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1); node_0(){ argcounts=(1 0 0 0 0 1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1 0); node_0(){ value __env 0
value __branch 0; }; node_1(){ value __stack 1; }; node_2(){ value __env 2; } }; node_1(){ switch __skip_update 1; }; node_2(){ switch __debug 2; }; node_3(){
node_3(){ switch __debug 3; }; node_4(){ switch __skip_check 4; }; node_5(){ switch __verbose 3; }; node_4(){ switch __skip_check 4; }; node_5(){
switch __verbose 5; }; node_6(){ switch __skip_update 6; }; node_7(){ value __stack 5; }; node_6(){ switch __help 6; }; node_7(){ value __branch 7; }
switch __help 7; }; node_8(){ switch __status 8; }; node_9(){ value __server 9 node_8(){ switch __status 8; }; node_9(){ value __server 9; }; node_10(){
}; node_10(){ value __type 10; }; node_11(){ value __domain 11; }; node_12(){ value __type 10; }; node_11(){ value __domain 11; }; node_12(){
value __app_name 12; }; node_13(){ switch __pass 13; }; node_14(){ value __app_name 12; }; node_13(){ switch __pass 13; }; node_14(){
switch __secrets 14; }; node_15(){ switch __all 15; }; node_16(){ switch __secrets 14; }; node_15(){ switch __all 15; }; node_16(){
switch __update 16; }; node_17(){ switch __force 17; }; node_18(){ switch __update 16; }; node_17(){ switch __force 17; }; node_18(){
switch __volumes 18; }; node_19(){ switch __no_tty 19; }; node_20(){ switch __volumes 18; }; node_19(){ switch __no_tty 19; }; node_20(){
value __user 20; }; node_21(){ value _type_ a; }; node_22(){ value _app_ a; } value __user 20; }; node_21(){ switch __dev 21; }; node_22(){ value _type_ a; }
node_23(){ value _service_ a; }; node_24(){ value _src_ a; }; node_25(){ node_23(){ value _app_ a; }; node_24(){ value _service_ a; }; node_25(){
value _dst_ a; }; node_26(){ value _backup_file_ a; }; node_27(){ value _src_ a; }; node_26(){ value _dst_ a; }; node_27(){ value _backup_file_ a
value _args_ a true; }; node_28(){ value _secret_ a; }; node_29(){ }; node_28(){ value _args_ a true; }; node_29(){ value _secret_ a; }; node_30(){
value _version_ a; }; node_30(){ value _cmd_ a; }; node_31(){ value _data_ a; } value _version_ a; }; node_31(){ value _cmd_ a; }; node_32(){ value _data_ a; }
node_32(){ value _command_ a; }; node_33(){ value _host_ a; }; node_34(){ node_33(){ value _command_ a; }; node_34(){ value _host_ a; }; node_35(){
value _user_ a; }; node_35(){ value _port_ a; }; node_36(){ value _provider_ a value _user_ a; }; node_36(){ value _port_ a; }; node_37(){ value _provider_ a
}; node_37(){ value _subcommands_ a true; }; node_38(){ _command app; } }; node_38(){ value _subcommands_ a true; }; node_39(){ _command app; }
node_39(){ _command list; }; node_40(){ _command ls; }; node_41(){ _command new node_40(){ _command list; }; node_41(){ _command ls; }; node_42(){ _command new
}; node_42(){ _command backup; }; node_43(){ _command deploy; }; node_44(){ }; node_43(){ _command backup; }; node_44(){ _command deploy; }; node_45(){
_command check; }; node_45(){ _command config; }; node_46(){ _command cp; } _command check; }; node_46(){ _command config; }; node_47(){ _command cp; }
node_47(){ _command logs; }; node_48(){ _command ps; }; node_49(){ node_48(){ _command logs; }; node_49(){ _command ps; }; node_50(){
_command restore; }; node_50(){ _command rm; }; node_51(){ _command delete; } _command restore; }; node_51(){ _command rm; }; node_52(){ _command delete; }
node_52(){ _command run; }; node_53(){ _command rollback; }; node_54(){ node_53(){ _command run; }; node_54(){ _command rollback; }; node_55(){
_command secret; }; node_55(){ _command generate; }; node_56(){ _command insert _command secret; }; node_56(){ _command generate; }; node_57(){ _command insert
}; node_57(){ _command undeploy; }; node_58(){ _command server; }; node_59(){ }; node_58(){ _command undeploy; }; node_59(){ _command server; }; node_60(){
_command add; }; node_60(){ _command init; }; node_61(){ _command apps; } _command add; }; node_61(){ _command init; }; node_62(){ _command apps; }
node_62(){ _command upgrade; }; node_63(){ _command version; }; node_64(){ node_63(){ _command upgrade; }; node_64(){ _command version; }; node_65(){
_command help; }; node_65(){ optional 0 1 2 3 4 5 6 7; }; node_66(){ optional 65 _command help; }; node_66(){ optional 0 1 2 3 4 5 6 7; }; node_67(){ optional 66
}; node_67(){ either 39 40; }; node_68(){ required 67; }; node_69(){ optional 8 }; node_68(){ either 40 41; }; node_69(){ required 68; }; node_70(){ optional 8
}; node_70(){ optional 9; }; node_71(){ optional 10; }; node_72(){ }; node_71(){ optional 9; }; node_72(){ optional 10; }; node_73(){
required 66 38 68 69 70 71; }; node_73(){ optional 11; }; node_74(){ optional 12 required 67 39 69 70 71 72; }; node_74(){ optional 11; }; node_75(){ optional 12
}; node_75(){ optional 13; }; node_76(){ optional 14; }; node_77(){ }; node_76(){ optional 13; }; node_77(){ optional 14; }; node_78(){
required 66 38 41 70 73 74 75 76 21; }; node_78(){ either 23 15; }; node_79(){ required 67 39 42 71 74 75 76 77 22; }; node_79(){ either 24 15; }; node_80(){
required 78; }; node_80(){ required 66 38 22 42 79; }; node_81(){ optional 16; } required 79; }; node_81(){ required 67 39 23 43 80; }; node_82(){ optional 16; }
node_82(){ required 66 38 22 43 81; }; node_83(){ required 66 38 22 44; } node_83(){ required 67 39 23 44 82; }; node_84(){ required 67 39 23 45; }
node_84(){ required 66 38 22 45; }; node_85(){ required 66 38 22 46 24 25; } node_85(){ required 67 39 23 46; }; node_86(){ required 67 39 23 47 25 26; }
node_86(){ optional 23; }; node_87(){ required 66 38 22 47 86; }; node_88(){ node_87(){ optional 24; }; node_88(){ required 67 39 23 48 87; }; node_89(){
required 66 38 22 48; }; node_89(){ required 66 38 22 49 79; }; node_90(){ required 67 39 23 49; }; node_90(){ required 67 39 23 50 80; }; node_91(){
either 50 51; }; node_91(){ required 90; }; node_92(){ optional 17; } either 51 52; }; node_92(){ required 91; }; node_93(){ optional 17; }
node_93(){ optional 18; }; node_94(){ required 66 38 22 91 92 93 76; } node_94(){ optional 18; }; node_95(){ required 67 39 23 92 93 94 77; }
node_95(){ optional 26; }; node_96(){ required 66 38 22 49 23 95; }; node_97(){ node_96(){ optional 27; }; node_97(){ required 67 39 23 50 24 96; }; node_98(){
optional 19; }; node_98(){ optional 20; }; node_99(){ oneormore 27; } optional 19; }; node_99(){ optional 20; }; node_100(){ oneormore 28; }
node_100(){ required 66 38 22 52 97 98 23 99; }; node_101(){ node_101(){ required 67 39 23 53 98 99 24 100; }; node_102(){
required 66 38 22 53 23; }; node_102(){ required 28 29; }; node_103(){ required 67 39 23 54 24; }; node_103(){ required 29 30; }; node_104(){
either 102 15; }; node_104(){ required 103; }; node_105(){ optional 30; } either 103 15; }; node_105(){ required 104; }; node_106(){ optional 31; }
node_106(){ required 66 38 22 54 55 104 105 75; }; node_107(){ node_107(){ required 67 39 23 55 56 105 106 76; }; node_108(){
required 66 38 22 54 56 28 29 31 75; }; node_108(){ either 28 15; }; node_109(){ required 67 39 23 55 57 29 30 32 76; }; node_109(){ either 29 15; }; node_110(){
required 108; }; node_110(){ required 66 38 22 54 91 109 75 92; }; node_111(){ required 109; }; node_111(){ required 67 39 23 55 92 110 76 93; }; node_112(){
required 66 38 22 57; }; node_112(){ optional 99; }; node_113(){ required 67 39 23 58; }; node_113(){ optional 100; }; node_114(){
required 66 38 22 32 112; }; node_114(){ optional 34; }; node_115(){ optional 35 required 67 39 23 33 113; }; node_115(){ optional 35; }; node_116(){ optional 36
}; node_116(){ required 66 58 59 33 114 115; }; node_117(){ required 66 58 41 36 }; node_117(){ required 67 59 60 34 115 116; }; node_118(){ required 67 59 42 37
}; node_118(){ required 66 58 68; }; node_119(){ required 66 58 33 50; } }; node_119(){ required 67 59 69; }; node_120(){ required 67 59 34 51; }
node_120(){ required 66 58 33 60; }; node_121(){ required 66 58 33 61 69; } node_121(){ required 67 59 34 61; }; node_122(){ required 67 59 34 62 70; }
node_122(){ required 66 62; }; node_123(){ required 66 63; }; node_124(){ node_123(){ optional 21; }; node_124(){ required 67 63 123; }; node_125(){
oneormore 37; }; node_125(){ optional 124; }; node_126(){ required 66 64 125; } required 67 64; }; node_126(){ oneormore 38; }; node_127(){ optional 126; }
node_127(){ required 66; }; node_128(){ node_128(){ required 67 65 127; }; node_129(){ required 67; }; node_130(){
either 72 77 80 82 83 84 85 87 88 89 94 96 100 101 106 107 110 111 113 116 117 118 119 120 121 122 123 126 127 either 73 78 81 83 84 85 86 88 89 90 95 97 101 102 107 108 111 112 114 117 118 119 120 121 122 124 125 128 129
}; node_129(){ required 128; }; cat <<<' docopt_exit() { }; node_131(){ required 130; }; cat <<<' docopt_exit() {
[[ -n $1 ]] && printf "%s\n" "$1" >&2; printf "%s\n" "${DOC:40:1473}" >&2 [[ -n $1 ]] && printf "%s\n" "$1" >&2; printf "%s\n" "${DOC:40:1481}" >&2
exit 1; }'; unset var___branch var___stack var___env var___debug \ exit 1; }'; unset var___env var___skip_update var___debug var___verbose \
var___skip_check var___verbose var___skip_update var___help var___status \ var___skip_check var___stack var___help var___branch var___status var___server \
var___server var___type var___domain var___app_name var___pass var___secrets \ var___type var___domain var___app_name var___pass var___secrets var___all \
var___all var___update var___force var___volumes var___no_tty var___user \ var___update var___force var___volumes var___no_tty var___user var___dev \
var__type_ var__app_ var__service_ var__src_ var__dst_ var__backup_file_ \ var__type_ var__app_ var__service_ var__src_ var__dst_ var__backup_file_ \
var__args_ var__secret_ var__version_ var__cmd_ var__data_ var__command_ \ var__args_ var__secret_ var__version_ var__cmd_ var__data_ var__command_ \
var__host_ var__user_ var__port_ var__provider_ var__subcommands_ var_app \ var__host_ var__user_ var__port_ var__provider_ var__subcommands_ var_app \
var_list var_ls var_new var_backup var_deploy var_check var_config var_cp \ var_list var_ls var_new var_backup var_deploy var_check var_config var_cp \
var_logs var_ps var_restore var_rm var_delete var_run var_rollback var_secret \ var_logs var_ps var_restore var_rm var_delete var_run var_rollback var_secret \
var_generate var_insert var_undeploy var_server var_add var_init var_apps \ var_generate var_insert var_undeploy var_server var_add var_init var_apps \
var_upgrade var_version var_help; parse 129 "$@" var_upgrade var_version var_help; parse 131 "$@"
local prefix=${DOCOPT_PREFIX:-''}; unset "${prefix}__branch" \ local prefix=${DOCOPT_PREFIX:-''}; unset "${prefix}__env" \
"${prefix}__stack" "${prefix}__env" "${prefix}__debug" "${prefix}__skip_check" \ "${prefix}__skip_update" "${prefix}__debug" "${prefix}__verbose" \
"${prefix}__verbose" "${prefix}__skip_update" "${prefix}__help" \ "${prefix}__skip_check" "${prefix}__stack" "${prefix}__help" \
"${prefix}__status" "${prefix}__server" "${prefix}__type" "${prefix}__domain" \ "${prefix}__branch" "${prefix}__status" "${prefix}__server" "${prefix}__type" \
"${prefix}__app_name" "${prefix}__pass" "${prefix}__secrets" "${prefix}__all" \ "${prefix}__domain" "${prefix}__app_name" "${prefix}__pass" \
"${prefix}__update" "${prefix}__force" "${prefix}__volumes" \ "${prefix}__secrets" "${prefix}__all" "${prefix}__update" "${prefix}__force" \
"${prefix}__no_tty" "${prefix}__user" "${prefix}_type_" "${prefix}_app_" \ "${prefix}__volumes" "${prefix}__no_tty" "${prefix}__user" "${prefix}__dev" \
"${prefix}_service_" "${prefix}_src_" "${prefix}_dst_" \ "${prefix}_type_" "${prefix}_app_" "${prefix}_service_" "${prefix}_src_" \
"${prefix}_backup_file_" "${prefix}_args_" "${prefix}_secret_" \ "${prefix}_dst_" "${prefix}_backup_file_" "${prefix}_args_" \
"${prefix}_version_" "${prefix}_cmd_" "${prefix}_data_" "${prefix}_command_" \ "${prefix}_secret_" "${prefix}_version_" "${prefix}_cmd_" "${prefix}_data_" \
"${prefix}_host_" "${prefix}_user_" "${prefix}_port_" "${prefix}_provider_" \ "${prefix}_command_" "${prefix}_host_" "${prefix}_user_" "${prefix}_port_" \
"${prefix}_subcommands_" "${prefix}app" "${prefix}list" "${prefix}ls" \ "${prefix}_provider_" "${prefix}_subcommands_" "${prefix}app" "${prefix}list" \
"${prefix}new" "${prefix}backup" "${prefix}deploy" "${prefix}check" \ "${prefix}ls" "${prefix}new" "${prefix}backup" "${prefix}deploy" \
"${prefix}config" "${prefix}cp" "${prefix}logs" "${prefix}ps" \ "${prefix}check" "${prefix}config" "${prefix}cp" "${prefix}logs" "${prefix}ps" \
"${prefix}restore" "${prefix}rm" "${prefix}delete" "${prefix}run" \ "${prefix}restore" "${prefix}rm" "${prefix}delete" "${prefix}run" \
"${prefix}rollback" "${prefix}secret" "${prefix}generate" "${prefix}insert" \ "${prefix}rollback" "${prefix}secret" "${prefix}generate" "${prefix}insert" \
"${prefix}undeploy" "${prefix}server" "${prefix}add" "${prefix}init" \ "${prefix}undeploy" "${prefix}server" "${prefix}add" "${prefix}init" \
"${prefix}apps" "${prefix}upgrade" "${prefix}version" "${prefix}help" "${prefix}apps" "${prefix}upgrade" "${prefix}version" "${prefix}help"
eval "${prefix}"'__branch=${var___branch:-}'
eval "${prefix}"'__stack=${var___stack:-}'
eval "${prefix}"'__env=${var___env:-}' eval "${prefix}"'__env=${var___env:-}'
eval "${prefix}"'__debug=${var___debug:-false}'
eval "${prefix}"'__skip_check=${var___skip_check:-false}'
eval "${prefix}"'__verbose=${var___verbose:-false}'
eval "${prefix}"'__skip_update=${var___skip_update:-false}' eval "${prefix}"'__skip_update=${var___skip_update:-false}'
eval "${prefix}"'__debug=${var___debug:-false}'
eval "${prefix}"'__verbose=${var___verbose:-false}'
eval "${prefix}"'__skip_check=${var___skip_check:-false}'
eval "${prefix}"'__stack=${var___stack:-}'
eval "${prefix}"'__help=${var___help:-false}' eval "${prefix}"'__help=${var___help:-false}'
eval "${prefix}"'__branch=${var___branch:-}'
eval "${prefix}"'__status=${var___status:-false}' eval "${prefix}"'__status=${var___status:-false}'
eval "${prefix}"'__server=${var___server:-}' eval "${prefix}"'__server=${var___server:-}'
eval "${prefix}"'__type=${var___type:-}' eval "${prefix}"'__type=${var___type:-}'
@ -269,6 +269,7 @@ eval "${prefix}"'__force=${var___force:-false}'
eval "${prefix}"'__volumes=${var___volumes:-false}' eval "${prefix}"'__volumes=${var___volumes:-false}'
eval "${prefix}"'__no_tty=${var___no_tty:-false}' eval "${prefix}"'__no_tty=${var___no_tty:-false}'
eval "${prefix}"'__user=${var___user:-}' eval "${prefix}"'__user=${var___user:-}'
eval "${prefix}"'__dev=${var___dev:-false}'
eval "${prefix}"'_type_=${var__type_:-}'; eval "${prefix}"'_app_=${var__app_:-}' eval "${prefix}"'_type_=${var__type_:-}'; eval "${prefix}"'_app_=${var__app_:-}'
eval "${prefix}"'_service_=${var__service_:-}' eval "${prefix}"'_service_=${var__service_:-}'
eval "${prefix}"'_src_=${var__src_:-}'; eval "${prefix}"'_dst_=${var__dst_:-}' eval "${prefix}"'_src_=${var__src_:-}'; eval "${prefix}"'_dst_=${var__dst_:-}'
@ -311,20 +312,19 @@ eval "${prefix}"'upgrade=${var_upgrade:-false}'
eval "${prefix}"'version=${var_version:-false}' eval "${prefix}"'version=${var_version:-false}'
eval "${prefix}"'help=${var_help:-false}'; local docopt_i=1 eval "${prefix}"'help=${var_help:-false}'; local docopt_i=1
[[ $BASH_VERSION =~ ^4.3 ]] && docopt_i=2; for ((;docopt_i>0;docopt_i--)); do [[ $BASH_VERSION =~ ^4.3 ]] && docopt_i=2; for ((;docopt_i>0;docopt_i--)); do
declare -p "${prefix}__branch" "${prefix}__stack" "${prefix}__env" \ declare -p "${prefix}__env" "${prefix}__skip_update" "${prefix}__debug" \
"${prefix}__debug" "${prefix}__skip_check" "${prefix}__verbose" \ "${prefix}__verbose" "${prefix}__skip_check" "${prefix}__stack" \
"${prefix}__skip_update" "${prefix}__help" "${prefix}__status" \ "${prefix}__help" "${prefix}__branch" "${prefix}__status" "${prefix}__server" \
"${prefix}__server" "${prefix}__type" "${prefix}__domain" \ "${prefix}__type" "${prefix}__domain" "${prefix}__app_name" "${prefix}__pass" \
"${prefix}__app_name" "${prefix}__pass" "${prefix}__secrets" "${prefix}__all" \ "${prefix}__secrets" "${prefix}__all" "${prefix}__update" "${prefix}__force" \
"${prefix}__update" "${prefix}__force" "${prefix}__volumes" \ "${prefix}__volumes" "${prefix}__no_tty" "${prefix}__user" "${prefix}__dev" \
"${prefix}__no_tty" "${prefix}__user" "${prefix}_type_" "${prefix}_app_" \ "${prefix}_type_" "${prefix}_app_" "${prefix}_service_" "${prefix}_src_" \
"${prefix}_service_" "${prefix}_src_" "${prefix}_dst_" \ "${prefix}_dst_" "${prefix}_backup_file_" "${prefix}_args_" \
"${prefix}_backup_file_" "${prefix}_args_" "${prefix}_secret_" \ "${prefix}_secret_" "${prefix}_version_" "${prefix}_cmd_" "${prefix}_data_" \
"${prefix}_version_" "${prefix}_cmd_" "${prefix}_data_" "${prefix}_command_" \ "${prefix}_command_" "${prefix}_host_" "${prefix}_user_" "${prefix}_port_" \
"${prefix}_host_" "${prefix}_user_" "${prefix}_port_" "${prefix}_provider_" \ "${prefix}_provider_" "${prefix}_subcommands_" "${prefix}app" "${prefix}list" \
"${prefix}_subcommands_" "${prefix}app" "${prefix}list" "${prefix}ls" \ "${prefix}ls" "${prefix}new" "${prefix}backup" "${prefix}deploy" \
"${prefix}new" "${prefix}backup" "${prefix}deploy" "${prefix}check" \ "${prefix}check" "${prefix}config" "${prefix}cp" "${prefix}logs" "${prefix}ps" \
"${prefix}config" "${prefix}cp" "${prefix}logs" "${prefix}ps" \
"${prefix}restore" "${prefix}rm" "${prefix}delete" "${prefix}run" \ "${prefix}restore" "${prefix}rm" "${prefix}delete" "${prefix}run" \
"${prefix}rollback" "${prefix}secret" "${prefix}generate" "${prefix}insert" \ "${prefix}rollback" "${prefix}secret" "${prefix}generate" "${prefix}insert" \
"${prefix}undeploy" "${prefix}server" "${prefix}add" "${prefix}init" \ "${prefix}undeploy" "${prefix}server" "${prefix}add" "${prefix}init" \
@ -1591,13 +1591,20 @@ sub_server_apps() {
###### .. upgrade ###### .. upgrade
help_upgrade (){ help_upgrade (){
echo "abra [options] upgrade echo "abra [options] upgrade [--dev]
Upgrade abra itself, using the online installer script." Upgrade abra itself, using the online installer script.
OPTIONS
--dev Upgrade to the latest development version (HEAD)"
} }
sub_upgrade() { sub_upgrade() {
curl https://install.abra.autonomic.zone | bash if [[ "$abra___dev" == "true" ]]; then
curl https://install.abra.autonomic.zone | bash -s -- --dev
else
curl https://install.abra.autonomic.zone | bash
fi
} }
###### .. version ###### .. version
@ -1672,7 +1679,8 @@ abra() {
abra___secrets abra___status abra___no_tty abra___app_name \ abra___secrets abra___status abra___no_tty abra___app_name \
abra__subcommands_ abra___skip_update abra___skip_check \ abra__subcommands_ abra___skip_update abra___skip_check \
abra__backup_file_ abra___verbose abra___debug abra___help \ abra__backup_file_ abra___verbose abra___debug abra___help \
abra___branch abra___volumes abra__provider_ abra___type abra___branch abra___volumes abra__provider_ abra___type \
abra___dev
if ! type tput > /dev/null 2>&1; then if ! type tput > /dev/null 2>&1; then
tput() { tput() {