Skip to content

Commit a3336f8

Browse files
committed
Split install templates into beta and stable channels.
1 parent ba3641a commit a3336f8

File tree

4 files changed

+352
-8
lines changed

4 files changed

+352
-8
lines changed
Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package controllers
22

3-
import javax.inject.Inject
43
import play.api.Configuration
54
import play.api.mvc.{AbstractController, ControllerComponents}
65
import repo.ApplicationRepo
76

7+
import javax.inject.Inject
88
import scala.concurrent.ExecutionContext.Implicits.global
99

1010
class InstallController @Inject() (
@@ -13,14 +13,39 @@ class InstallController @Inject() (
1313
config: Configuration
1414
) extends AbstractController(cc) {
1515

16-
lazy val fallbackVersion = config.get[String]("service.fallbackVersion")
16+
private val stableBaseUrlO = configUrl("service.stableBaseUrl")
1717

18-
lazy val baseUrl = config.get[String]("service.baseUrl")
18+
private val betaBaseUrlO = configUrl("service.betaBaseUrl")
1919

20-
def install(rcUpdate: Option[Boolean]) = Action.async { _ =>
20+
def install(beta: Boolean, rcUpdate: Option[Boolean]) = Action.async { _ =>
2121
appRepo.findApplication().map { maybeApp =>
22-
val version = maybeApp.map(_.stableCliVersion).getOrElse(fallbackVersion)
23-
Ok(views.txt.install(version, baseUrl, rcUpdate.getOrElse(true)))
22+
val response = for {
23+
stableBaseUrl <- stableBaseUrlO
24+
betaBaseUrl <- betaBaseUrlO
25+
app <- maybeApp
26+
stableVersion = app.stableCliVersion
27+
betaVersion = app.betaCliVersion
28+
} yield
29+
if (beta) {
30+
Ok(
31+
views.txt.install_beta(
32+
cliVersion = betaVersion,
33+
baseUrl = betaBaseUrl,
34+
rcUpdate = rcUpdate.getOrElse(true)
35+
)
36+
)
37+
} else {
38+
Ok(
39+
views.txt.install_stable(
40+
cliVersion = stableVersion,
41+
baseUrl = stableBaseUrl,
42+
rcUpdate = rcUpdate.getOrElse(true)
43+
)
44+
)
45+
}
46+
response getOrElse ServiceUnavailable
2447
}
2548
}
49+
50+
private def configUrl(url: String): Option[String] = config.getOptional[String](url)
2651
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# limitations under the License.
1616
#
1717

18-
#Install: stable
18+
# install:- channel: beta; version: @cliVersion; api: @baseUrl
1919

2020
# Global variables
2121
SDKMAN_SERVICE="@baseUrl"

app/views/install_stable.scala.txt

Lines changed: 318 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,318 @@
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!!!"

conf/routes

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
# ~~~~
44

55
GET /alive controllers.HealthController.alive
6-
GET /install controllers.InstallController.install(rcupdate: Option[Boolean])
6+
GET /install/beta controllers.InstallController.install(beta: Boolean = true, rcupdate: Option[Boolean])
7+
GET /install/stable controllers.InstallController.install(beta: Boolean = false, rcupdate: Option[Boolean])
78
GET /selfupdate/beta controllers.SelfUpdateController.selfUpdate(beta: Boolean = true)
89
GET /selfupdate/stable controllers.SelfUpdateController.selfUpdate(beta: Boolean = false)
910
GET /hooks/:phase/:candidate/:version/:platform controllers.HooksController.hook(phase, candidate, version, platform)

0 commit comments

Comments
 (0)