From 2ee570423910ef49dafebe486b1a73b5a88d635e Mon Sep 17 00:00:00 2001 From: helpermethod Date: Wed, 26 Jan 2022 22:14:56 +0100 Subject: [PATCH 01/16] Add Homebrew formula template --- .../sdkman-cli/brew/README.md.tpl | 48 +++++++++++++++++ .../distributions/sdkman-cli/brew/cask.rb.tpl | 53 +++++++++++++++++++ .../sdkman-cli/brew/formula-multi.rb.tpl | 30 +++++++++++ .../sdkman-cli/brew/formula.rb.tpl | 46 ++++++++++++++++ 4 files changed, 177 insertions(+) create mode 100644 src/jreleaser/distributions/sdkman-cli/brew/README.md.tpl create mode 100644 src/jreleaser/distributions/sdkman-cli/brew/cask.rb.tpl create mode 100644 src/jreleaser/distributions/sdkman-cli/brew/formula-multi.rb.tpl create mode 100644 src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl diff --git a/src/jreleaser/distributions/sdkman-cli/brew/README.md.tpl b/src/jreleaser/distributions/sdkman-cli/brew/README.md.tpl new file mode 100644 index 000000000..6dbfee9c1 --- /dev/null +++ b/src/jreleaser/distributions/sdkman-cli/brew/README.md.tpl @@ -0,0 +1,48 @@ +# Homebrew + +## Formulae +Invoke either of the following commands if the formula is hosted at GitHub + +```sh +$ brew install {{repoOwner}}/tap/ +``` + +Or + +```sh +$ brew tap {{repoOwner}}/tap +$ brew install +``` + +Invoke the following command if the formula is *not* hosted at GitHub + +```sh +brew tap {{repoOwner}}/homebrew-tap {{tapRepoCloneUrl}} +brew install +``` + +## Casks +Invoke either of the following commands if the cask is hosted at GitHub + +```sh +$ brew install --cask {{repoOwner}}/tap/ +``` + +Or + +```sh +$ brew tap {{repoOwner}}/tap +$ brew install --cask +``` + +Invoke the following command if the cask is *not* hosted at GitHub + +```sh +brew tap {{repoOwner}}/homebrew-tap {{tapRepoCloneUrl}} +brew install --cask +``` + +If you get a dialog stating the cask is broken try installing with `--no-quarantine`. + +## Documentation +`brew help`, `man brew` or check [Homebrew's documentation](https://docs.brew.sh). diff --git a/src/jreleaser/distributions/sdkman-cli/brew/cask.rb.tpl b/src/jreleaser/distributions/sdkman-cli/brew/cask.rb.tpl new file mode 100644 index 000000000..c8fd4733a --- /dev/null +++ b/src/jreleaser/distributions/sdkman-cli/brew/cask.rb.tpl @@ -0,0 +1,53 @@ +# Generated with JReleaser 1.0.0-M1 at 2022-01-26T22:03:59.537647+01:00 +cask "{{brewCaskName}}" do + desc "{{projectDescription}}" + homepage "{{projectWebsite}}" + url "{{distributionUrl}}", + verified: "{{repoHost}}" + version "{{projectVersion}}" + sha256 "{{distributionChecksumSha256}}" + name "{{brewCaskDisplayName}}" + {{#brewCaskHasAppcast}} + appcast {{brewCaskAppcast}} + {{/brewCaskHasAppcast}} + auto_updates true + + {{#brewHasLivecheck}} + livecheck do + {{#brewLivecheck}} + {{.}} + {{/brewLivecheck}} + end + {{/brewHasLivecheck}} + {{#brewDependencies}} + depends_on {{.}} + {{/brewDependencies}} + + {{#brewCaskHasPkg}} + pkg "{{brewCaskPkg}}" + {{/brewCaskHasPkg}} + {{#brewCaskHasApp}} + app "{{brewCaskApp}}" + {{/brewCaskHasApp}} + {{#brewCaskHasBinary}} + binary "{{distributionArtifactFileName}}/bin/{{distributionExecutable}}" + {{/brewCaskHasBinary}} + {{#brewCaskHasUninstall}} + {{#brewCaskUninstall}} + uninstall {{name}}: [ + {{#items}} + "{{.}}", + {{/items}} + ] + {{/brewCaskUninstall}} + {{/brewCaskHasUninstall}} + {{#brewCaskHasZap}} + {{#brewCaskZap}} + zap {{name}}: [ + {{#items}} + "{{.}}", + {{/items}} + ] + {{/brewCaskZap}} + {{/brewCaskHasZap}} +end diff --git a/src/jreleaser/distributions/sdkman-cli/brew/formula-multi.rb.tpl b/src/jreleaser/distributions/sdkman-cli/brew/formula-multi.rb.tpl new file mode 100644 index 000000000..6be4cc914 --- /dev/null +++ b/src/jreleaser/distributions/sdkman-cli/brew/formula-multi.rb.tpl @@ -0,0 +1,30 @@ +# Generated with JReleaser 1.0.0-M1 at 2022-01-26T22:03:59.537647+01:00 +class {{brewFormulaName}} < Formula + desc "{{projectDescription}}" + homepage "{{projectWebsite}}" + version "{{projectVersion}}" + license "{{projectLicense}}" + + {{brewMultiPlatform}} + + {{#brewHasLivecheck}} + livecheck do + {{#brewLivecheck}} + {{.}} + {{/brewLivecheck}} + end + {{/brewHasLivecheck}} + {{#brewDependencies}} + depends_on {{.}} + {{/brewDependencies}} + + def install + libexec.install Dir["*"] + bin.install_symlink "#{libexec}/bin/{{distributionExecutable}}" + end + + test do + output = shell_output("#{bin}/{{distributionExecutable}} --version") + assert_match "{{projectVersion}}", output + end +end diff --git a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl new file mode 100644 index 000000000..d3edd5d39 --- /dev/null +++ b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl @@ -0,0 +1,46 @@ +# Generated with JReleaser 1.0.0-M1 at 2022-01-26T22:03:59.537647+01:00 +class {{brewFormulaName}} < Formula + desc "{{projectDescription}}" + homepage "{{projectWebsite}}" + url "{{distributionUrl}}" + version "{{projectVersion}}" + sha256 "{{distributionChecksumSha256}}" + license "{{projectLicense}}" + + {{#brewHasLivecheck}} + livecheck do + {{#brewLivecheck}} + {{.}} + {{/brewLivecheck}} + end + {{/brewHasLivecheck}} + {{#brewDependencies}} + depends_on {{.}} + {{/brewDependencies}} + + def install + libexec.install Dir["*"] + + %w[tmp ext etc var archives candidates].each { |dir| mkdir libexec/dir } + + system "curl", "-s", "https://api.sdkman.io/2/candidates/all", "-o", libexec/"var/candidates" + + (libexec/"etc/config").write <<~EOS + sdkman_auto_answer=false + sdkman_auto_complete=true + sdkman_auto_env=false + sdkman_beta_channel=false + sdkman_colour_enable=true + sdkman_curl_connect_timeout=7 + sdkman_curl_max_time=10 + sdkman_debug_mode=false + sdkman_insecure_ssl=false + sdkman_rosetta2_compatible=false + sdkman_selfupdate_enable=true + EOS + end + + test do + assert_match {{projectVersion}}, shell_output("export SDKMAN_DIR=#{libexec} && source #{libexec}/bin/sdkman-init.sh && sdk version") + end +end From f4f40bb42980194ca72821086ebf9a9f3bba3dd1 Mon Sep 17 00:00:00 2001 From: helpermethod Date: Wed, 26 Jan 2022 22:18:20 +0100 Subject: [PATCH 02/16] Remove unused templates --- .../distributions/sdkman-cli/brew/cask.rb.tpl | 53 ------------------- .../sdkman-cli/brew/formula-multi.rb.tpl | 30 ----------- .../sdkman-cli/brew/formula.rb.tpl | 11 ---- 3 files changed, 94 deletions(-) delete mode 100644 src/jreleaser/distributions/sdkman-cli/brew/cask.rb.tpl delete mode 100644 src/jreleaser/distributions/sdkman-cli/brew/formula-multi.rb.tpl diff --git a/src/jreleaser/distributions/sdkman-cli/brew/cask.rb.tpl b/src/jreleaser/distributions/sdkman-cli/brew/cask.rb.tpl deleted file mode 100644 index c8fd4733a..000000000 --- a/src/jreleaser/distributions/sdkman-cli/brew/cask.rb.tpl +++ /dev/null @@ -1,53 +0,0 @@ -# Generated with JReleaser 1.0.0-M1 at 2022-01-26T22:03:59.537647+01:00 -cask "{{brewCaskName}}" do - desc "{{projectDescription}}" - homepage "{{projectWebsite}}" - url "{{distributionUrl}}", - verified: "{{repoHost}}" - version "{{projectVersion}}" - sha256 "{{distributionChecksumSha256}}" - name "{{brewCaskDisplayName}}" - {{#brewCaskHasAppcast}} - appcast {{brewCaskAppcast}} - {{/brewCaskHasAppcast}} - auto_updates true - - {{#brewHasLivecheck}} - livecheck do - {{#brewLivecheck}} - {{.}} - {{/brewLivecheck}} - end - {{/brewHasLivecheck}} - {{#brewDependencies}} - depends_on {{.}} - {{/brewDependencies}} - - {{#brewCaskHasPkg}} - pkg "{{brewCaskPkg}}" - {{/brewCaskHasPkg}} - {{#brewCaskHasApp}} - app "{{brewCaskApp}}" - {{/brewCaskHasApp}} - {{#brewCaskHasBinary}} - binary "{{distributionArtifactFileName}}/bin/{{distributionExecutable}}" - {{/brewCaskHasBinary}} - {{#brewCaskHasUninstall}} - {{#brewCaskUninstall}} - uninstall {{name}}: [ - {{#items}} - "{{.}}", - {{/items}} - ] - {{/brewCaskUninstall}} - {{/brewCaskHasUninstall}} - {{#brewCaskHasZap}} - {{#brewCaskZap}} - zap {{name}}: [ - {{#items}} - "{{.}}", - {{/items}} - ] - {{/brewCaskZap}} - {{/brewCaskHasZap}} -end diff --git a/src/jreleaser/distributions/sdkman-cli/brew/formula-multi.rb.tpl b/src/jreleaser/distributions/sdkman-cli/brew/formula-multi.rb.tpl deleted file mode 100644 index 6be4cc914..000000000 --- a/src/jreleaser/distributions/sdkman-cli/brew/formula-multi.rb.tpl +++ /dev/null @@ -1,30 +0,0 @@ -# Generated with JReleaser 1.0.0-M1 at 2022-01-26T22:03:59.537647+01:00 -class {{brewFormulaName}} < Formula - desc "{{projectDescription}}" - homepage "{{projectWebsite}}" - version "{{projectVersion}}" - license "{{projectLicense}}" - - {{brewMultiPlatform}} - - {{#brewHasLivecheck}} - livecheck do - {{#brewLivecheck}} - {{.}} - {{/brewLivecheck}} - end - {{/brewHasLivecheck}} - {{#brewDependencies}} - depends_on {{.}} - {{/brewDependencies}} - - def install - libexec.install Dir["*"] - bin.install_symlink "#{libexec}/bin/{{distributionExecutable}}" - end - - test do - output = shell_output("#{bin}/{{distributionExecutable}} --version") - assert_match "{{projectVersion}}", output - end -end diff --git a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl index d3edd5d39..b31d917f4 100644 --- a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl +++ b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl @@ -7,17 +7,6 @@ class {{brewFormulaName}} < Formula sha256 "{{distributionChecksumSha256}}" license "{{projectLicense}}" - {{#brewHasLivecheck}} - livecheck do - {{#brewLivecheck}} - {{.}} - {{/brewLivecheck}} - end - {{/brewHasLivecheck}} - {{#brewDependencies}} - depends_on {{.}} - {{/brewDependencies}} - def install libexec.install Dir["*"] From b8fcf6839f68cc796b02f31121e7a42fb496e3d1 Mon Sep 17 00:00:00 2001 From: helpermethod Date: Thu, 27 Jan 2022 10:00:05 +0100 Subject: [PATCH 03/16] Remove comment --- src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl index b31d917f4..8d4df72df 100644 --- a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl +++ b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl @@ -1,4 +1,3 @@ -# Generated with JReleaser 1.0.0-M1 at 2022-01-26T22:03:59.537647+01:00 class {{brewFormulaName}} < Formula desc "{{projectDescription}}" homepage "{{projectWebsite}}" From 239afe839949138160c29490663216ecd5b0b1ea Mon Sep 17 00:00:00 2001 From: helpermethod Date: Thu, 27 Jan 2022 12:28:26 +0100 Subject: [PATCH 04/16] Add brew packager --- gradle/release.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gradle/release.gradle b/gradle/release.gradle index 7d20c6a3d..641870020 100644 --- a/gradle/release.gradle +++ b/gradle/release.gradle @@ -35,9 +35,12 @@ jreleaser { artifact { path = "build/distributions/{{distributionName}}-${sdkmanVersion}.zip" } + brew { + active = 'ALWAYS' + } } } - + announce { twitter { active = 'RELEASE' From 732b1b05c16f7347385eb152fbdc2a5bffaf0d1b Mon Sep 17 00:00:00 2001 From: helpermethod Date: Thu, 3 Feb 2022 17:35:11 +0100 Subject: [PATCH 05/16] Remove selfupdate functionality when installed via Homebrew --- .../sdkman-cli/brew/README.md.tpl | 45 ++++++------------- .../sdkman-cli/brew/formula.rb.tpl | 5 ++- src/main/bash/sdkman-help.sh | 6 ++- src/main/bash/sdkman-init.sh | 7 +++ src/main/bash/sdkman-main.sh | 2 +- 5 files changed, 30 insertions(+), 35 deletions(-) diff --git a/src/jreleaser/distributions/sdkman-cli/brew/README.md.tpl b/src/jreleaser/distributions/sdkman-cli/brew/README.md.tpl index 6dbfee9c1..8c000a8b9 100644 --- a/src/jreleaser/distributions/sdkman-cli/brew/README.md.tpl +++ b/src/jreleaser/distributions/sdkman-cli/brew/README.md.tpl @@ -1,48 +1,29 @@ -# Homebrew +# SDKMAN! Homebrew Tap -## Formulae -Invoke either of the following commands if the formula is hosted at GitHub +A Homebrew tap containing the Formula for the SDKMAN! CLI. -```sh -$ brew install {{repoOwner}}/tap/ -``` - -Or - -```sh -$ brew tap {{repoOwner}}/tap -$ brew install -``` - -Invoke the following command if the formula is *not* hosted at GitHub +## Installation ```sh -brew tap {{repoOwner}}/homebrew-tap {{tapRepoCloneUrl}} -brew install +$ brew tap sdkman/tap +$ brew install sdkman ``` -## Casks -Invoke either of the following commands if the cask is hosted at GitHub +After successful installation add the following lines to the end of your `.bash_profile` ```sh -$ brew install --cask {{repoOwner}}/tap/ +export SDKMAN_DIR=$(brew --prefix sdkman)/libexec +[[ -s "${SDKMAN_DIR}/bin/sdkman-init.sh" ]] && source "${SDKMAN_DIR}/bin/sdkman-init.sh" ``` -Or +Open a new terminal and type ```sh -$ brew tap {{repoOwner}}/tap -$ brew install --cask +sdk version ``` -Invoke the following command if the cask is *not* hosted at GitHub +The output should look similar to this ```sh -brew tap {{repoOwner}}/homebrew-tap {{tapRepoCloneUrl}} -brew install --cask -``` - -If you get a dialog stating the cask is broken try installing with `--no-quarantine`. - -## Documentation -`brew help`, `man brew` or check [Homebrew's documentation](https://docs.brew.sh). +SDKMAN {{version}} +``` \ No newline at end of file diff --git a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl index 8d4df72df..6704edacb 100644 --- a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl +++ b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl @@ -24,10 +24,13 @@ class {{brewFormulaName}} < Formula sdkman_debug_mode=false sdkman_insecure_ssl=false sdkman_rosetta2_compatible=false - sdkman_selfupdate_enable=true EOS end + def post_install + rm libexec/"src/sdkman-selfupdate.sh" + end + test do assert_match {{projectVersion}}, shell_output("export SDKMAN_DIR=#{libexec} && source #{libexec}/bin/sdkman-init.sh && sdk version") end diff --git a/src/main/bash/sdkman-help.sh b/src/main/bash/sdkman-help.sh index 88eebfc6e..6724bf7ff 100644 --- a/src/main/bash/sdkman-help.sh +++ b/src/main/bash/sdkman-help.sh @@ -36,7 +36,11 @@ function __sdk_help() { __sdkman_echo_no_colour " broadcast or b" __sdkman_echo_no_colour " help" __sdkman_echo_no_colour " offline [enable|disable]" - __sdkman_echo_no_colour " selfupdate [force]" + + if [[ "$sdkman_allow_selfupdate" == "true" ]]; then + __sdkman_echo_no_colour " selfupdate [force]" + fi + __sdkman_echo_no_colour " update" __sdkman_echo_no_colour " flush [archives|tmp|broadcast|metadata|version]" __sdkman_echo_no_colour "" diff --git a/src/main/bash/sdkman-init.sh b/src/main/bash/sdkman-init.sh index 89ad27e84..db11c2494 100644 --- a/src/main/bash/sdkman-init.sh +++ b/src/main/bash/sdkman-init.sh @@ -138,6 +138,13 @@ done IFS="$OLD_IFS" unset OLD_IFS scripts f +# the selfupdate function does not exists when SDKMAN! is installed via Homebrew +if type -t __sdk_selfupdate; then + sdkman_allow_selfupdate=true +else + sdkman_allow_selfupdate=false +fi + # Create upgrade delay file if it doesn't exist if [[ ! -f "${SDKMAN_DIR}/var/delay_upgrade" ]]; then touch "${SDKMAN_DIR}/var/delay_upgrade" diff --git a/src/main/bash/sdkman-main.sh b/src/main/bash/sdkman-main.sh index d134231e2..ce98ec1b1 100644 --- a/src/main/bash/sdkman-main.sh +++ b/src/main/bash/sdkman-main.sh @@ -165,7 +165,7 @@ function sdk() { fi # Attempt upgrade after all is done - if [[ "$COMMAND" != "selfupdate" && "$sdkman_selfupdate_enable" == true ]]; then + if [[ "$sdkman_allow_selfupdate" == "true" && "$COMMAND" != "selfupdate" && "$sdkman_selfupdate_enable" == true ]]; then __sdkman_auto_update "$SDKMAN_REMOTE_VERSION" "$SDKMAN_VERSION" fi return $final_rc From e18fccd34dc379c0e7fdec3a39e7a0f95f06e373 Mon Sep 17 00:00:00 2001 From: helpermethod Date: Thu, 3 Feb 2022 17:53:56 +0100 Subject: [PATCH 06/16] Add config flag for disabling selfupdates --- .../distributions/sdkman-cli/brew/formula.rb.tpl | 6 ++---- src/main/bash/sdkman-init.sh | 11 ++++------- src/main/bash/sdkman-main.sh | 2 +- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl index 6704edacb..3183ae22a 100644 --- a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl +++ b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl @@ -24,13 +24,11 @@ class {{brewFormulaName}} < Formula sdkman_debug_mode=false sdkman_insecure_ssl=false sdkman_rosetta2_compatible=false + sdkman_auto_update=false + sdkman_selfupdate_feature=false EOS end - def post_install - rm libexec/"src/sdkman-selfupdate.sh" - end - test do assert_match {{projectVersion}}, shell_output("export SDKMAN_DIR=#{libexec} && source #{libexec}/bin/sdkman-init.sh && sdk version") end diff --git a/src/main/bash/sdkman-init.sh b/src/main/bash/sdkman-init.sh index db11c2494..dac037555 100644 --- a/src/main/bash/sdkman-init.sh +++ b/src/main/bash/sdkman-init.sh @@ -133,18 +133,15 @@ OLD_IFS="$IFS" IFS=$'\n' scripts=($(find "${SDKMAN_DIR}/src" "${SDKMAN_DIR}/ext" -type f -name 'sdkman-*.sh')) for f in "${scripts[@]}"; do + if [[ "$f" == *sdkman-selfupdate.sh && "$sdkman_selfupdate_feature" == "false" ]]; then + continue + fi + source "$f" done IFS="$OLD_IFS" unset OLD_IFS scripts f -# the selfupdate function does not exists when SDKMAN! is installed via Homebrew -if type -t __sdk_selfupdate; then - sdkman_allow_selfupdate=true -else - sdkman_allow_selfupdate=false -fi - # Create upgrade delay file if it doesn't exist if [[ ! -f "${SDKMAN_DIR}/var/delay_upgrade" ]]; then touch "${SDKMAN_DIR}/var/delay_upgrade" diff --git a/src/main/bash/sdkman-main.sh b/src/main/bash/sdkman-main.sh index ce98ec1b1..d8e33e185 100644 --- a/src/main/bash/sdkman-main.sh +++ b/src/main/bash/sdkman-main.sh @@ -165,7 +165,7 @@ function sdk() { fi # Attempt upgrade after all is done - if [[ "$sdkman_allow_selfupdate" == "true" && "$COMMAND" != "selfupdate" && "$sdkman_selfupdate_enable" == true ]]; then + if [[ "$COMMAND" != "selfupdate" && "$sdkman_selfupdate_feature" == "true" && "$sdkman_auto_update" == true ]]; then __sdkman_auto_update "$SDKMAN_REMOTE_VERSION" "$SDKMAN_VERSION" fi return $final_rc From 36ba3449d8df44ea21713cae8dd543132155d27c Mon Sep 17 00:00:00 2001 From: helpermethod Date: Thu, 3 Feb 2022 18:02:17 +0100 Subject: [PATCH 07/16] Keep support for sdkman_selfupdate_enable for backwards-compatibilty --- src/main/bash/sdkman-main.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/bash/sdkman-main.sh b/src/main/bash/sdkman-main.sh index d8e33e185..e27cd7ccd 100644 --- a/src/main/bash/sdkman-main.sh +++ b/src/main/bash/sdkman-main.sh @@ -165,7 +165,7 @@ function sdk() { fi # Attempt upgrade after all is done - if [[ "$COMMAND" != "selfupdate" && "$sdkman_selfupdate_feature" == "true" && "$sdkman_auto_update" == true ]]; then + if [[ "$COMMAND" != "selfupdate" && "$sdkman_selfupdate_feature" == "true" && ("$sdkman_auto_update" == true || "$sdkman_selfupdate_enable" == "true") ]]; then __sdkman_auto_update "$SDKMAN_REMOTE_VERSION" "$SDKMAN_VERSION" fi return $final_rc From d5be30b0e477aa6546a988d8ac45c9d48a3a7455 Mon Sep 17 00:00:00 2001 From: helpermethod Date: Fri, 4 Feb 2022 20:23:52 +0100 Subject: [PATCH 08/16] Add tests for sdkman_selfupdate_feature --- src/main/bash/sdkman-help.sh | 2 +- src/main/bash/sdkman-init.sh | 4 -- src/main/bash/sdkman-main.sh | 10 ++-- src/main/bash/sdkman-selfupdate.sh | 2 + .../groovy/sdkman/specs/SelfupdateSpec.groovy | 58 +++++++++++++++++++ 5 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 src/test/groovy/sdkman/specs/SelfupdateSpec.groovy diff --git a/src/main/bash/sdkman-help.sh b/src/main/bash/sdkman-help.sh index 6724bf7ff..6fe593bac 100644 --- a/src/main/bash/sdkman-help.sh +++ b/src/main/bash/sdkman-help.sh @@ -37,7 +37,7 @@ function __sdk_help() { __sdkman_echo_no_colour " help" __sdkman_echo_no_colour " offline [enable|disable]" - if [[ "$sdkman_allow_selfupdate" == "true" ]]; then + if [[ "$sdkman_selfupdate_feature" == "true" ]]; then __sdkman_echo_no_colour " selfupdate [force]" fi diff --git a/src/main/bash/sdkman-init.sh b/src/main/bash/sdkman-init.sh index dac037555..89ad27e84 100644 --- a/src/main/bash/sdkman-init.sh +++ b/src/main/bash/sdkman-init.sh @@ -133,10 +133,6 @@ OLD_IFS="$IFS" IFS=$'\n' scripts=($(find "${SDKMAN_DIR}/src" "${SDKMAN_DIR}/ext" -type f -name 'sdkman-*.sh')) for f in "${scripts[@]}"; do - if [[ "$f" == *sdkman-selfupdate.sh && "$sdkman_selfupdate_feature" == "false" ]]; then - continue - fi - source "$f" done IFS="$OLD_IFS" diff --git a/src/main/bash/sdkman-main.sh b/src/main/bash/sdkman-main.sh index e27cd7ccd..73a7e9515 100644 --- a/src/main/bash/sdkman-main.sh +++ b/src/main/bash/sdkman-main.sh @@ -103,9 +103,11 @@ function sdk() { # Check if it is a valid command CMD_FOUND="" - CMD_TARGET="${SDKMAN_DIR}/src/sdkman-${COMMAND}.sh" - if [[ -f "$CMD_TARGET" ]]; then - CMD_FOUND="$CMD_TARGET" + if [[ "$COMMAND" != "selfupdate" || "$sdkman_selfupdate_feature" == "true" ]]; then + CMD_TARGET="${SDKMAN_DIR}/src/sdkman-${COMMAND}.sh" + if [[ -f "$CMD_TARGET" ]]; then + CMD_FOUND="$CMD_TARGET" + fi fi # Check if it is a sourced function @@ -165,7 +167,7 @@ function sdk() { fi # Attempt upgrade after all is done - if [[ "$COMMAND" != "selfupdate" && "$sdkman_selfupdate_feature" == "true" && ("$sdkman_auto_update" == true || "$sdkman_selfupdate_enable" == "true") ]]; then + if [[ "$COMMAND" != "selfupdate" && "$sdkman_selfupdate_feature" == "true" && ("$sdkman_auto_update" == "true" || "$sdkman_selfupdate_enable" == "true") ]]; then __sdkman_auto_update "$SDKMAN_REMOTE_VERSION" "$SDKMAN_VERSION" fi return $final_rc diff --git a/src/main/bash/sdkman-selfupdate.sh b/src/main/bash/sdkman-selfupdate.sh index f262a5a6f..fb43209b6 100644 --- a/src/main/bash/sdkman-selfupdate.sh +++ b/src/main/bash/sdkman-selfupdate.sh @@ -19,6 +19,8 @@ function __sdk_selfupdate() { local force_selfupdate + echo "$SDKMAN_VERSION $SDKMAN_REMOTE_VERSION" + force_selfupdate="$1" if [[ "$SDKMAN_AVAILABLE" == "false" ]]; then echo "This command is not available while offline." diff --git a/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy b/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy new file mode 100644 index 000000000..41eba70d5 --- /dev/null +++ b/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy @@ -0,0 +1,58 @@ +package sdkman.specs + +import sdkman.support.SdkmanEnvSpecification +import spock.lang.Unroll + +class SelfupdateSpec extends SdkmanEnvSpecification { + static final String CANDIDATES_API = "http://localhost:8080/2" + static final String BROADCAST_API_LATEST_ID_ENDPOINT = "$CANDIDATES_API/broadcast/latest/id" + static final String VERSION_ENDPOINT = "$CANDIDATES_API/broker/download/sdkman/version/stable" + + def setup() { + curlStub.primeWith(BROADCAST_API_LATEST_ID_ENDPOINT, "echo dbfb025be9f97fda2052b5febcca0155") + curlStub.primeWith(VERSION_ENDPOINT, "echo 5.0.0") + } + + def "should list selfupdate as a valid command when the selfupdate feature is toggled on"() { + given: + bash = sdkmanBashEnvBuilder + .withConfiguration("sdkman_selfupdate_feature", selfupdateEnabled) + .build() + + bash.start() + bash.execute("source $bootstrapScript") + + when: + bash.execute("sdk help") + + then: + verifyOutput(bash.output) + + where: + selfupdateEnabled | verifyOutput + "false" | { !it.contains("selfupdate") } + "true" | { it.contains("selfupdate") } + } + + @Unroll + def "should source sdkman-selfupdate.sh when the selfupdate feature is toggled on"() { + given: + bash = sdkmanBashEnvBuilder + .withConfiguration("sdkman_selfupdate_feature", selfupdateEnabled) + .build() + + bash.start() + bash.execute("source $bootstrapScript") + + when: + bash.execute("sdk selfupdate") + + then: + verifyOutput(bash.output) + + where: + selfupdateEnabled | verifyOutput + "false" | { it.contains("Invalid command: selfupdate") } + "true" | { it.contains("No update available at this time.") } + } +} From 9503c62821612976288ea5f5cc757bcc70b88f6a Mon Sep 17 00:00:00 2001 From: helpermethod Date: Sun, 6 Feb 2022 22:04:00 +0100 Subject: [PATCH 09/16] Add more tests --- src/main/bash/sdkman-selfupdate.sh | 2 - .../groovy/sdkman/specs/SelfupdateSpec.groovy | 51 ++++++++++++++++--- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/main/bash/sdkman-selfupdate.sh b/src/main/bash/sdkman-selfupdate.sh index fb43209b6..f262a5a6f 100644 --- a/src/main/bash/sdkman-selfupdate.sh +++ b/src/main/bash/sdkman-selfupdate.sh @@ -19,8 +19,6 @@ function __sdk_selfupdate() { local force_selfupdate - echo "$SDKMAN_VERSION $SDKMAN_REMOTE_VERSION" - force_selfupdate="$1" if [[ "$SDKMAN_AVAILABLE" == "false" ]]; then echo "This command is not available while offline." diff --git a/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy b/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy index 41eba70d5..98b962259 100644 --- a/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy +++ b/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy @@ -1,22 +1,25 @@ package sdkman.specs import sdkman.support.SdkmanEnvSpecification -import spock.lang.Unroll + +import java.time.Instant + +import static java.time.temporal.ChronoUnit.DAYS class SelfupdateSpec extends SdkmanEnvSpecification { static final String CANDIDATES_API = "http://localhost:8080/2" static final String BROADCAST_API_LATEST_ID_ENDPOINT = "$CANDIDATES_API/broadcast/latest/id" static final String VERSION_ENDPOINT = "$CANDIDATES_API/broker/download/sdkman/version/stable" - + def setup() { curlStub.primeWith(BROADCAST_API_LATEST_ID_ENDPOINT, "echo dbfb025be9f97fda2052b5febcca0155") - curlStub.primeWith(VERSION_ENDPOINT, "echo 5.0.0") + curlStub.primeWith(VERSION_ENDPOINT, "echo 5.0.0") } def "should list selfupdate as a valid command when the selfupdate feature is toggled on"() { given: bash = sdkmanBashEnvBuilder - .withConfiguration("sdkman_selfupdate_feature", selfupdateEnabled) + .withConfiguration("sdkman_selfupdate_feature", selfUpdateFeature) .build() bash.start() @@ -29,16 +32,15 @@ class SelfupdateSpec extends SdkmanEnvSpecification { verifyOutput(bash.output) where: - selfupdateEnabled | verifyOutput + selfUpdateFeature | verifyOutput "false" | { !it.contains("selfupdate") } "true" | { it.contains("selfupdate") } } - @Unroll def "should source sdkman-selfupdate.sh when the selfupdate feature is toggled on"() { given: bash = sdkmanBashEnvBuilder - .withConfiguration("sdkman_selfupdate_feature", selfupdateEnabled) + .withConfiguration("sdkman_selfupdate_feature", selfupdateFeature) .build() bash.start() @@ -51,8 +53,41 @@ class SelfupdateSpec extends SdkmanEnvSpecification { verifyOutput(bash.output) where: - selfupdateEnabled | verifyOutput + selfupdateFeature | verifyOutput "false" | { it.contains("Invalid command: selfupdate") } "true" | { it.contains("No update available at this time.") } } + + def "should perform an autoupdate when the selfupdate feature is toggled on and one of selfupdate or autoupdate are enabled"() { + given: + new File("$sdkmanDotDirectory/var/delay_upgrade").with { + parentFile.mkdirs() + createNewFile() + lastModified = Instant.now().minus(2, DAYS).toEpochMilli() + } + + bash = sdkmanBashEnvBuilder + .withSdkmanVersion("4.0.0") + .withConfiguration("sdkman_selfupdate_feature", selfupdateFeature) + .withConfiguration("sdkman_selfupdate_enable", selfupdateEnabled) + .withConfiguration("sdkman_auto_update", autoUpdateEnabled) + .withConfiguration("sdkman_auto_answer", "true") + .build() + + bash.start() + bash.execute("source $bootstrapScript") + + when: + bash.execute("sdk version") + + then: + verifyOutput(bash.output) + + where: + selfupdateFeature | selfupdateEnabled | autoUpdateEnabled | verifyOutput + "true" | "true" | "true" | { it.contains("ATTENTION: A new version of SDKMAN is available...") } + "true" | "true" | "false" | { it.contains("ATTENTION: A new version of SDKMAN is available...") } + "true" | "false" | "true" | { it.contains("ATTENTION: A new version of SDKMAN is available...") } + "false" | "true" | "true" | { !it.contains("ATTENTION: A new version of SDKMAN is available...") } + } } From a326899252f7c6626ca1f14caa85ec6438bbd7a7 Mon Sep 17 00:00:00 2001 From: helpermethod Date: Sun, 6 Feb 2022 22:17:01 +0100 Subject: [PATCH 10/16] Enable sdkman_selfupdate_feature by default --- src/main/bash/sdkman-init.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/bash/sdkman-init.sh b/src/main/bash/sdkman-init.sh index 89ad27e84..0ecb0f0e3 100644 --- a/src/main/bash/sdkman-init.sh +++ b/src/main/bash/sdkman-init.sh @@ -156,6 +156,8 @@ if [[ -z "${sdkman_curl_retry_max_time}" ]]; then sdkman_curl_retry_max_time=60; # set curl to continue downloading automatically if [[ -z "${sdkman_curl_continue}" ]]; then sdkman_curl_continue=true; fi +if [[ -z "$sdkman_selfupdate_feature" ]]; then sdkman_selfupdate_feature=true; fi + # read list of candidates and set array SDKMAN_CANDIDATES_CACHE="${SDKMAN_DIR}/var/candidates" SDKMAN_CANDIDATES_CSV=$(<"$SDKMAN_CANDIDATES_CACHE") From 3b54af3148ada429ba4cf3972404204d1ea0c4a1 Mon Sep 17 00:00:00 2001 From: helpermethod Date: Tue, 8 Feb 2022 14:04:46 +0100 Subject: [PATCH 11/16] Do not enable sdkman_selfupdate_feature by default --- src/main/bash/sdkman-init.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/bash/sdkman-init.sh b/src/main/bash/sdkman-init.sh index 0ecb0f0e3..89ad27e84 100644 --- a/src/main/bash/sdkman-init.sh +++ b/src/main/bash/sdkman-init.sh @@ -156,8 +156,6 @@ if [[ -z "${sdkman_curl_retry_max_time}" ]]; then sdkman_curl_retry_max_time=60; # set curl to continue downloading automatically if [[ -z "${sdkman_curl_continue}" ]]; then sdkman_curl_continue=true; fi -if [[ -z "$sdkman_selfupdate_feature" ]]; then sdkman_selfupdate_feature=true; fi - # read list of candidates and set array SDKMAN_CANDIDATES_CACHE="${SDKMAN_DIR}/var/candidates" SDKMAN_CANDIDATES_CSV=$(<"$SDKMAN_CANDIDATES_CACHE") From 66d42b0159fd3d8c216de86138a9d287dc75bec9 Mon Sep 17 00:00:00 2001 From: helpermethod Date: Tue, 8 Feb 2022 22:34:04 +0100 Subject: [PATCH 12/16] Set sdkman_selfupdate_feature to true in SdkmanBashEnvBuilder's config map --- src/test/groovy/sdkman/env/SdkmanBashEnvBuilder.groovy | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/sdkman/env/SdkmanBashEnvBuilder.groovy b/src/test/groovy/sdkman/env/SdkmanBashEnvBuilder.groovy index e24b22be2..ee6d0e6ed 100644 --- a/src/test/groovy/sdkman/env/SdkmanBashEnvBuilder.groovy +++ b/src/test/groovy/sdkman/env/SdkmanBashEnvBuilder.groovy @@ -30,7 +30,8 @@ class SdkmanBashEnvBuilder { Map config = [ sdkman_auto_answer : 'false', - sdkman_beta_channel: 'false' + sdkman_beta_channel: 'false', + sdkman_selfupdate_feature: 'true' ] File sdkmanDir, sdkmanBinDir, sdkmanVarDir, sdkmanSrcDir, sdkmanEtcDir, sdkmanExtDir, sdkmanArchivesDir, From 3b2661a0df68392bfc10c9c3b7b5243f0fce317b Mon Sep 17 00:00:00 2001 From: helpermethod Date: Wed, 9 Feb 2022 15:32:15 +0100 Subject: [PATCH 13/16] Configure JRELEASER_HOMEBREW_GITHUB_TOKEN --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 285c92244..d10656121 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,6 +17,7 @@ jobs: JRELEASER_TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_API_SECRET }} JRELEASER_TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }} JRELEASER_TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} + JRELEASER_HOMEBREW_GITHUB_TOKEN: ${{ secrets.HOMEBREW_GITHUB_TOKEN }} services: mongodb: image: mongo:3.2 From b457505d75c953ea995c1e31053bf19abd7db292 Mon Sep 17 00:00:00 2001 From: helpermethod Date: Sat, 12 Feb 2022 10:03:57 +0100 Subject: [PATCH 14/16] Order configuration alphabetically --- src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl index 3183ae22a..d42d839e0 100644 --- a/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl +++ b/src/jreleaser/distributions/sdkman-cli/brew/formula.rb.tpl @@ -17,6 +17,7 @@ class {{brewFormulaName}} < Formula sdkman_auto_answer=false sdkman_auto_complete=true sdkman_auto_env=false + sdkman_auto_update=false sdkman_beta_channel=false sdkman_colour_enable=true sdkman_curl_connect_timeout=7 @@ -24,7 +25,6 @@ class {{brewFormulaName}} < Formula sdkman_debug_mode=false sdkman_insecure_ssl=false sdkman_rosetta2_compatible=false - sdkman_auto_update=false sdkman_selfupdate_feature=false EOS end From feaa133b37712e4dd39b9c3ddef9ce499db69d6d Mon Sep 17 00:00:00 2001 From: helpermethod Date: Mon, 7 Mar 2022 22:07:46 +0100 Subject: [PATCH 15/16] Remove unneeded check --- src/main/bash/sdkman-main.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/bash/sdkman-main.sh b/src/main/bash/sdkman-main.sh index 73a7e9515..ee51b0d87 100644 --- a/src/main/bash/sdkman-main.sh +++ b/src/main/bash/sdkman-main.sh @@ -167,7 +167,7 @@ function sdk() { fi # Attempt upgrade after all is done - if [[ "$COMMAND" != "selfupdate" && "$sdkman_selfupdate_feature" == "true" && ("$sdkman_auto_update" == "true" || "$sdkman_selfupdate_enable" == "true") ]]; then + if [[ "$COMMAND" != "selfupdate" && "$sdkman_selfupdate_feature" == "true" && "$sdkman_auto_update" == "true" ]]; then __sdkman_auto_update "$SDKMAN_REMOTE_VERSION" "$SDKMAN_VERSION" fi return $final_rc From 276ab0e8fc95834449c0175c0e33df6cfe515679 Mon Sep 17 00:00:00 2001 From: helpermethod Date: Mon, 7 Mar 2022 22:24:28 +0100 Subject: [PATCH 16/16] Exclude selfupdate_enable flag from SelfupdateSpec --- src/test/groovy/sdkman/specs/SelfupdateSpec.groovy | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy b/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy index 98b962259..2ac64e547 100644 --- a/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy +++ b/src/test/groovy/sdkman/specs/SelfupdateSpec.groovy @@ -58,18 +58,17 @@ class SelfupdateSpec extends SdkmanEnvSpecification { "true" | { it.contains("No update available at this time.") } } - def "should perform an autoupdate when the selfupdate feature is toggled on and one of selfupdate or autoupdate are enabled"() { + def "should perform an autoupdate when the selfupdate feature is toggled on and autoupdate is enabled"() { given: new File("$sdkmanDotDirectory/var/delay_upgrade").with { parentFile.mkdirs() createNewFile() lastModified = Instant.now().minus(2, DAYS).toEpochMilli() } - + bash = sdkmanBashEnvBuilder .withSdkmanVersion("4.0.0") .withConfiguration("sdkman_selfupdate_feature", selfupdateFeature) - .withConfiguration("sdkman_selfupdate_enable", selfupdateEnabled) .withConfiguration("sdkman_auto_update", autoUpdateEnabled) .withConfiguration("sdkman_auto_answer", "true") .build() @@ -84,10 +83,9 @@ class SelfupdateSpec extends SdkmanEnvSpecification { verifyOutput(bash.output) where: - selfupdateFeature | selfupdateEnabled | autoUpdateEnabled | verifyOutput - "true" | "true" | "true" | { it.contains("ATTENTION: A new version of SDKMAN is available...") } - "true" | "true" | "false" | { it.contains("ATTENTION: A new version of SDKMAN is available...") } - "true" | "false" | "true" | { it.contains("ATTENTION: A new version of SDKMAN is available...") } - "false" | "true" | "true" | { !it.contains("ATTENTION: A new version of SDKMAN is available...") } + selfupdateFeature | autoUpdateEnabled | verifyOutput + "true" | "true" | { it.contains("ATTENTION: A new version of SDKMAN is available...") } + "true" | "false" | { !it.contains("ATTENTION: A new version of SDKMAN is available...") } + "false" | "true" | { !it.contains("ATTENTION: A new version of SDKMAN is available...") } } }