|
| 1 | +@(cliVersion: String, baseUrl: String, rcUpdate: Boolean)#!/bin/bash |
| 2 | +# |
| 3 | +# Copyright 2017 Marco Vermeulen |
| 4 | +# |
| 5 | +# Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | +# you may not use this file except in compliance with the License. |
| 7 | +# You may obtain a copy of the License at |
| 8 | +# |
| 9 | +# http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | +# |
| 11 | +# Unless required by applicable law or agreed to in writing, software |
| 12 | +# distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | +# See the License for the specific language governing permissions and |
| 15 | +# limitations under the License. |
| 16 | +# |
| 17 | + |
| 18 | +# install:- channel: stable; version: @cliVersion; api: @baseUrl |
| 19 | + |
| 20 | +# Global variables |
| 21 | +SDKMAN_SERVICE="@baseUrl" |
| 22 | +SDKMAN_VERSION="@cliVersion" |
| 23 | +SDKMAN_PLATFORM=$(uname) |
| 24 | + |
| 25 | +if [ -z "$SDKMAN_DIR" ]; then |
| 26 | + SDKMAN_DIR="$HOME/.sdkman" |
| 27 | + SDKMAN_DIR_RAW='$HOME/.sdkman' |
| 28 | +else |
| 29 | + SDKMAN_DIR_RAW="$SDKMAN_DIR" |
| 30 | +fi |
| 31 | + |
| 32 | +# Local variables |
| 33 | +sdkman_bin_folder="${SDKMAN_DIR}/bin" |
| 34 | +sdkman_src_folder="${SDKMAN_DIR}/src" |
| 35 | +sdkman_contrib_folder=${SDKMAN_DIR}/contrib |
| 36 | +sdkman_tmp_folder="${SDKMAN_DIR}/tmp" |
| 37 | +sdkman_stage_folder="${sdkman_tmp_folder}/stage" |
| 38 | +sdkman_zip_file="${sdkman_tmp_folder}/sdkman-${SDKMAN_VERSION}.zip" |
| 39 | +sdkman_ext_folder="${SDKMAN_DIR}/ext" |
| 40 | +sdkman_etc_folder="${SDKMAN_DIR}/etc" |
| 41 | +sdkman_var_folder="${SDKMAN_DIR}/var" |
| 42 | +sdkman_archives_folder="${SDKMAN_DIR}/archives" |
| 43 | +sdkman_candidates_folder="${SDKMAN_DIR}/candidates" |
| 44 | +sdkman_config_file="${sdkman_etc_folder}/config" |
| 45 | +sdkman_bash_profile="${HOME}/.bash_profile" |
| 46 | +sdkman_profile="${HOME}/.profile" |
| 47 | +sdkman_bashrc="${HOME}/.bashrc" |
| 48 | +sdkman_zshrc="${ZDOTDIR:-${HOME}}/.zshrc" |
| 49 | + |
| 50 | +sdkman_init_snippet=$( cat << EOF |
| 51 | +#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! |
| 52 | +export SDKMAN_DIR="$SDKMAN_DIR_RAW" |
| 53 | +[[ -s "${SDKMAN_DIR_RAW}/bin/sdkman-init.sh" ]] && source "${SDKMAN_DIR_RAW}/bin/sdkman-init.sh" |
| 54 | +EOF |
| 55 | +) |
| 56 | + |
| 57 | +# OS specific support (must be 'true' or 'false'). |
| 58 | +cygwin=false; |
| 59 | +darwin=false; |
| 60 | +solaris=false; |
| 61 | +freebsd=false; |
| 62 | +case "$(uname)" in |
| 63 | + CYGWIN*) |
| 64 | + cygwin=true |
| 65 | + ;; |
| 66 | + Darwin*) |
| 67 | + darwin=true |
| 68 | + ;; |
| 69 | + SunOS*) |
| 70 | + solaris=true |
| 71 | + ;; |
| 72 | + FreeBSD*) |
| 73 | + freebsd=true |
| 74 | +esac |
| 75 | + |
| 76 | + |
| 77 | +echo '' |
| 78 | +echo ' -+syyyyyyys:' |
| 79 | +echo ' `/yho:` -yd.' |
| 80 | +echo ' `/yh/` +m.' |
| 81 | +echo ' .oho. hy .`' |
| 82 | +echo ' .sh/` :N` `-/o` `+dyyo:.' |
| 83 | +echo ' .yh:` `M- `-/osysoym :hs` `-+sys: hhyssssssssy+' |
| 84 | +echo ' .sh:` `N: ms/-`` yy.yh- -hy. `.N-````````+N.' |
| 85 | +echo ' `od/` `N- -/oM- ddd+` `sd: hNNm -N:' |
| 86 | +echo ' :do` .M. dMMM- `ms. /d+` `NMMs `do' |
| 87 | +echo ' .yy- :N` ```mMMM. - -hy. /MMM: yh' |
| 88 | +echo ' `+d+` `:/oo/` `-/osyh/ossssssdNMM` .sh: yMMN` /m.' |
| 89 | +echo ' -dh- :ymNMMMMy `-/shmNm-`:N/-.`` `.sN /N- `NMMy .m/' |
| 90 | +echo ' `oNs` -hysosmMMMMydmNmds+-.:ohm : sd` :MMM/ yy' |
| 91 | +echo ' .hN+ /d: -MMMmhs/-.` .MMMh .ss+- `yy` sMMN` :N.' |
| 92 | +echo ' :mN/ `N/ `o/-` :MMMo +MMMN- .` `ds mMMh do' |
| 93 | +echo ' /NN/ `N+....--:/+oooosooo+:sMMM: hMMMM: `my .m+ -MMM+ :N.' |
| 94 | +echo ' /NMo -+ooooo+/:-....`...:+hNMN. `NMMMd` .MM/ -m: oMMN. hs' |
| 95 | +echo ' -NMd` :mm -MMMm- .s/ -MMm. /m- mMMd -N.' |
| 96 | +echo ' `mMM/ .- /MMh. -dMo -MMMy od. .MMMs..---yh' |
| 97 | +echo ' +MMM. sNo`.sNMM+ :MMMM/ sh`+MMMNmNm+++-' |
| 98 | +echo ' mMMM- /--ohmMMM+ :MMMMm. `hyymmmdddo' |
| 99 | +echo ' MMMMh. ```` `-+yy/`yMMM/ :MMMMMy -sm:.``..-:-.`' |
| 100 | +echo ' dMMMMmo-.``````..-:/osyhddddho. `+shdh+. hMMM: :MmMMMM/ ./yy/` `:sys+/+sh/' |
| 101 | +echo ' .dMMMMMMmdddddmmNMMMNNNNNMMMMMs sNdo- dMMM- `-/yd/MMMMm-:sy+. :hs- /N`' |
| 102 | +echo ' `/ymNNNNNNNmmdys+/::----/dMMm: +m- mMMM+ohmo/.` sMMMMdo- .om: `sh' |
| 103 | +echo ' `.-----+/.` `.-+hh/` `od. NMMNmds/ `mmy:` +mMy `:yy.' |
| 104 | +echo ' /moyso+//+ossso:. .yy` `dy+:` .. :MMMN+---/oys:' |
| 105 | +echo ' /+m: `.-:::-` /d+ +MMMMMMMNh:`' |
| 106 | +echo ' +MN/ -yh. `+hddhy+.' |
| 107 | +echo ' /MM+ .sh:' |
| 108 | +echo ' :NMo -sh/' |
| 109 | +echo ' -NMs `/yy:' |
| 110 | +echo ' .NMy `:sh+.' |
| 111 | +echo ' `mMm` ./yds-' |
| 112 | +echo ' `dMMMmyo:-.````.-:oymNy:`' |
| 113 | +echo ' +NMMMMMMMMMMMMMMMMms:`' |
| 114 | +echo ' -+shmNMMMNmdy+:`' |
| 115 | +echo '' |
| 116 | +echo '' |
| 117 | +echo ' Now attempting installation...' |
| 118 | +echo '' |
| 119 | +echo '' |
| 120 | + |
| 121 | +# Sanity checks |
| 122 | + |
| 123 | +echo "Looking for a previous installation of SDKMAN..." |
| 124 | +if [ -d "$SDKMAN_DIR" ]; then |
| 125 | + echo "SDKMAN found." |
| 126 | + echo "" |
| 127 | + echo "======================================================================================================" |
| 128 | + echo " You already have SDKMAN installed." |
| 129 | + echo " SDKMAN was found at:" |
| 130 | + echo "" |
| 131 | + echo " ${SDKMAN_DIR}" |
| 132 | + echo "" |
| 133 | + echo " Please consider running the following if you need to upgrade." |
| 134 | + echo "" |
| 135 | + echo " $ sdk selfupdate force" |
| 136 | + echo "" |
| 137 | + echo "======================================================================================================" |
| 138 | + echo "" |
| 139 | + exit 0 |
| 140 | +fi |
| 141 | + |
| 142 | +echo "Looking for unzip..." |
| 143 | +if ! command -v unzip > /dev/null; then |
| 144 | + echo "Not found." |
| 145 | + echo "======================================================================================================" |
| 146 | + echo " Please install unzip on your system using your favourite package manager." |
| 147 | + echo "" |
| 148 | + echo " Restart after installing unzip." |
| 149 | + echo "======================================================================================================" |
| 150 | + echo "" |
| 151 | + exit 1 |
| 152 | +fi |
| 153 | + |
| 154 | +echo "Looking for zip..." |
| 155 | +if ! command -v zip > /dev/null; then |
| 156 | + echo "Not found." |
| 157 | + echo "======================================================================================================" |
| 158 | + echo " Please install zip on your system using your favourite package manager." |
| 159 | + echo "" |
| 160 | + echo " Restart after installing zip." |
| 161 | + echo "======================================================================================================" |
| 162 | + echo "" |
| 163 | + exit 1 |
| 164 | +fi |
| 165 | + |
| 166 | +echo "Looking for curl..." |
| 167 | +if ! command -v curl > /dev/null; then |
| 168 | + echo "Not found." |
| 169 | + echo "" |
| 170 | + echo "======================================================================================================" |
| 171 | + echo " Please install curl on your system using your favourite package manager." |
| 172 | + echo "" |
| 173 | + echo " Restart after installing curl." |
| 174 | + echo "======================================================================================================" |
| 175 | + echo "" |
| 176 | + exit 1 |
| 177 | +fi |
| 178 | + |
| 179 | +if [[ "$solaris" == true ]]; then |
| 180 | + echo "Looking for gsed..." |
| 181 | + if [ -z $(which gsed) ]; then |
| 182 | + echo "Not found." |
| 183 | + echo "" |
| 184 | + echo "======================================================================================================" |
| 185 | + echo " Please install gsed on your solaris system." |
| 186 | + echo "" |
| 187 | + echo " SDKMAN uses gsed extensively." |
| 188 | + echo "" |
| 189 | + echo " Restart after installing gsed." |
| 190 | + echo "======================================================================================================" |
| 191 | + echo "" |
| 192 | + exit 1 |
| 193 | + fi |
| 194 | +else |
| 195 | + echo "Looking for sed..." |
| 196 | + if [ -z $(command -v sed) ]; then |
| 197 | + echo "Not found." |
| 198 | + echo "" |
| 199 | + echo "======================================================================================================" |
| 200 | + echo " Please install sed on your system using your favourite package manager." |
| 201 | + echo "" |
| 202 | + echo " Restart after installing sed." |
| 203 | + echo "======================================================================================================" |
| 204 | + echo "" |
| 205 | + exit 1 |
| 206 | + fi |
| 207 | +fi |
| 208 | + |
| 209 | + |
| 210 | +echo "Installing SDKMAN scripts..." |
| 211 | + |
| 212 | + |
| 213 | +# Create directory structure |
| 214 | + |
| 215 | +echo "Create distribution directories..." |
| 216 | +mkdir -p "$sdkman_bin_folder" |
| 217 | +mkdir -p "$sdkman_src_folder" |
| 218 | +mkdir -p "$sdkman_contrib_folder" |
| 219 | +mkdir -p "$sdkman_tmp_folder" |
| 220 | +mkdir -p "$sdkman_stage_folder" |
| 221 | +mkdir -p "$sdkman_ext_folder" |
| 222 | +mkdir -p "$sdkman_etc_folder" |
| 223 | +mkdir -p "$sdkman_var_folder" |
| 224 | +mkdir -p "$sdkman_archives_folder" |
| 225 | +mkdir -p "$sdkman_candidates_folder" |
| 226 | + |
| 227 | +echo "Getting available candidates..." |
| 228 | +SDKMAN_CANDIDATES_CSV=$(curl -s "${SDKMAN_SERVICE}/candidates/all") |
| 229 | +echo "$SDKMAN_CANDIDATES_CSV" > "${SDKMAN_DIR}/var/candidates" |
| 230 | + |
| 231 | +echo "Prime the config file..." |
| 232 | +touch "$sdkman_config_file" |
| 233 | +echo "sdkman_auto_answer=false" >> "$sdkman_config_file" |
| 234 | +echo "sdkman_selfupdate_enable=true" >> "$sdkman_config_file" |
| 235 | +echo "sdkman_insecure_ssl=false" >> "$sdkman_config_file" |
| 236 | +echo "sdkman_curl_connect_timeout=7" >> "$sdkman_config_file" |
| 237 | +echo "sdkman_curl_max_time=10" >> "$sdkman_config_file" |
| 238 | +echo "sdkman_beta_channel=false" >> "$sdkman_config_file" |
| 239 | +echo "sdkman_debug_mode=false" >> "$sdkman_config_file" |
| 240 | +echo "sdkman_colour_enable=true" >> "$sdkman_config_file" |
| 241 | +echo "sdkman_auto_env=false" >> "$sdkman_config_file" |
| 242 | +echo "sdkman_rosetta2_compatible=true" >> "$sdkman_config_file" |
| 243 | + |
| 244 | +if [ -z "$ZSH_VERSION" -a -z "$BASH_VERSION" ]; then |
| 245 | + echo "sdkman_auto_complete=false" >> "$sdkman_config_file" |
| 246 | +else |
| 247 | + echo "sdkman_auto_complete=true" >> "$sdkman_config_file" |
| 248 | +fi |
| 249 | + |
| 250 | +echo "Download script archive..." |
| 251 | +curl --location --progress-bar "${SDKMAN_SERVICE}/broker/download/sdkman/install/${SDKMAN_VERSION}/${SDKMAN_PLATFORM}" > "$sdkman_zip_file" |
| 252 | + |
| 253 | +ARCHIVE_OK=$(unzip -qt "$sdkman_zip_file" | grep 'No errors detected in compressed data') |
| 254 | +if [[ -z "$ARCHIVE_OK" ]]; then |
| 255 | + echo "Downloaded zip archive corrupt. Are you connected to the internet?" |
| 256 | + echo "" |
| 257 | + echo "If problems persist, please ask for help on our Slack:" |
| 258 | + echo "* easy sign up: https://slack.sdkman.io/" |
| 259 | + echo "* report on channel: https://sdkman.slack.com/app_redirect?channel=user-issues" |
| 260 | + rm -rf "$SDKMAN_DIR" |
| 261 | + exit 1 |
| 262 | +fi |
| 263 | + |
| 264 | +echo "Extract script archive..." |
| 265 | +if [[ "$cygwin" == 'true' ]]; then |
| 266 | + echo "Cygwin detected - normalizing paths for unzip..." |
| 267 | + sdkman_zip_file=$(cygpath -w "$sdkman_zip_file") |
| 268 | + sdkman_stage_folder=$(cygpath -w "$sdkman_stage_folder") |
| 269 | +fi |
| 270 | +unzip -qo "$sdkman_zip_file" -d "$sdkman_stage_folder" |
| 271 | + |
| 272 | + |
| 273 | +echo "Install scripts..." |
| 274 | +mv -f "${sdkman_stage_folder}/sdkman-init.sh" "$sdkman_bin_folder" |
| 275 | +mv -f "$sdkman_stage_folder"/sdkman-* "$sdkman_src_folder" |
| 276 | + |
| 277 | +echo "Install contributed software..." |
| 278 | +mv -vf "$sdkman_stage_folder/contrib/completion" "$sdkman_contrib_folder" |
| 279 | + |
| 280 | +echo "Set version to $SDKMAN_VERSION ..." |
| 281 | +echo "$SDKMAN_VERSION" > "${SDKMAN_DIR}/var/version" |
| 282 | + |
| 283 | +@if(rcUpdate) { |
| 284 | +if [[ $darwin == true ]]; then |
| 285 | + touch "$sdkman_bash_profile" |
| 286 | + echo "Attempt update of login bash profile on OSX..." |
| 287 | + if [[ -z $(grep 'sdkman-init.sh' "$sdkman_bash_profile") ]]; then |
| 288 | + echo -e "\n$sdkman_init_snippet" >> "$sdkman_bash_profile" |
| 289 | + echo "Added sdkman init snippet to $sdkman_bash_profile" |
| 290 | + fi |
| 291 | +else |
| 292 | + echo "Attempt update of interactive bash profile on regular UNIX..." |
| 293 | + touch "${sdkman_bashrc}" |
| 294 | + if [[ -z $(grep 'sdkman-init.sh' "$sdkman_bashrc") ]]; then |
| 295 | + echo -e "\n$sdkman_init_snippet" >> "$sdkman_bashrc" |
| 296 | + echo "Added sdkman init snippet to $sdkman_bashrc" |
| 297 | + fi |
| 298 | +fi |
| 299 | + |
| 300 | +echo "Attempt update of zsh profile..." |
| 301 | +touch "$sdkman_zshrc" |
| 302 | +if [[ -z $(grep 'sdkman-init.sh' "$sdkman_zshrc") ]]; then |
| 303 | + echo -e "\n$sdkman_init_snippet" >> "$sdkman_zshrc" |
| 304 | + echo "Updated existing ${sdkman_zshrc}" |
| 305 | +fi |
| 306 | + |
| 307 | +} |
| 308 | +echo -e "\n\n\nAll done!\n\n" |
| 309 | + |
| 310 | +echo "Please open a new terminal, or run the following in the existing one:" |
| 311 | +echo "" |
| 312 | +echo " source \"${SDKMAN_DIR}/bin/sdkman-init.sh\"" |
| 313 | +echo "" |
| 314 | +echo "Then issue the following command:" |
| 315 | +echo "" |
| 316 | +echo " sdk help" |
| 317 | +echo "" |
| 318 | +echo "Enjoy!!!" |
0 commit comments