feat(install.sh): add support for `--mainline` (default) and `--stable` (#12858)

Fixes #12461
This commit is contained in:
Mathias Fredriksson 2024-04-03 20:26:48 +03:00 committed by GitHub
parent 426e9f2b96
commit 65f8d18ce5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 57 additions and 20 deletions

View File

@ -26,18 +26,21 @@ The remote host must have internet access.
${not_curl_usage-}
Usage:
$arg0 [--dry-run] [--version X.X.X] [--edge] [--method detect] \
${arg0} [--dry-run] [--mainline | --stable | --version X.X.X] [--method detect] \
[--prefix ~/.local] [--rsh ssh] [user@host]
--dry-run
Echo the commands for the install process without running them.
--mainline
Install the latest mainline version (default).
--stable
Install the latest stable version instead of the latest mainline version.
--version X.X.X
Install a specific version instead of the latest.
--edge
Install the latest edge version instead of the latest stable version.
--method [detect | standalone]
Choose the installation method. Defaults to detect.
- detect detects the system package manager and tries to use it.
@ -88,16 +91,25 @@ The installer will cache all downloaded assets into ~/.cache/coder
EOF
}
echo_latest_version() {
if [ "${EDGE-}" ]; then
version="$(curl -fsSL https://api.github.com/repos/coder/coder/releases | awk 'match($0,/.*"html_url": "(.*\/releases\/tag\/.*)".*/)' | head -n 1 | awk -F '"' '{print $4}')"
else
echo_latest_stable_version() {
# https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c#gistcomment-2758860
version="$(curl -fsSLI -o /dev/null -w "%{url_effective}" https://github.com/coder/coder/releases/latest)"
fi
version="${version#https://github.com/coder/coder/releases/tag/}"
version="${version#v}"
echo "$version"
version="${version#https://github.com/coder/coder/releases/tag/v}"
echo "${version}"
}
echo_latest_mainline_version() {
# Fetch the releases from the GitHub API, sort by version number,
# and take the first result. Note that we're sorting by space-
# separated numbers and without utilizing the sort -V flag for the
# best compatibility.
curl -fsSL https://api.github.com/repos/coder/coder/releases |
awk -F'"' '/"tag_name"/ {print $4}' |
tr -d v |
tr . ' ' |
sort -k1,1nr -k2,2nr -k3,3nr |
head -n1 |
tr ' ' .
}
echo_standalone_postinstall() {
@ -106,9 +118,18 @@ echo_standalone_postinstall() {
return
fi
channel=mainline
advisory="To install our stable release (v${STABLE_VERSION}), use the --stable flag. "
if [ "${MAINLINE}" = 0 ]; then
channel=stable
advisory=""
fi
cath <<EOF
Coder has been installed to
Coder ${channel} release v${VERSION} installed. ${advisory}See our releases documentation or GitHub for more information on versioning.
The Coder binary has been placed in the following location:
$STANDALONE_INSTALL_PREFIX/bin/$STANDALONE_BINARY_NAME
@ -224,6 +245,7 @@ EOF
}
main() {
MAINLINE=1
TERRAFORM_VERSION="1.6.6"
if [ "${TRACE-}" ]; then
@ -236,7 +258,6 @@ main() {
OPTIONAL \
ALL_FLAGS \
RSH_ARGS \
EDGE \
RSH \
WITH_TERRAFORM \
CAP_NET_ADMIN
@ -282,8 +303,12 @@ main() {
--version=*)
VERSION="$(parse_arg "$@")"
;;
--edge)
EDGE=1
# Support edge for backward compatibility.
--mainline | --edge)
MAINLINE=1
;;
--stable)
MAINLINE=0
;;
--rsh)
RSH="$(parse_arg "$@")"
@ -364,7 +389,12 @@ main() {
TERRAFORM_INSTALL_PREFIX=${TERRAFORM_INSTALL_PREFIX:-/usr/local}
STANDALONE_INSTALL_PREFIX=${STANDALONE_INSTALL_PREFIX:-/usr/local}
STANDALONE_BINARY_NAME=${STANDALONE_BINARY_NAME:-coder}
VERSION=${VERSION:-$(echo_latest_version)}
STABLE_VERSION=$(echo_latest_stable_version)
if [ "${MAINLINE}" = 0 ]; then
VERSION=${STABLE_VERSION}
else
VERSION=$(echo_latest_mainline_version)
fi
distro_name
@ -378,6 +408,13 @@ main() {
with_terraform
fi
# If the version is the same as the stable version, we're installing
# the stable version.
if [ "${MAINLINE}" != 0 ] && [ "${VERSION}" = "${STABLE_VERSION}" ]; then
echoh "The latest mainline version has been promoted to stable, selecting stable."
MAINLINE=0
fi
# Standalone installs by pulling pre-built releases from GitHub.
if [ "$METHOD" = standalone ]; then
if has_standalone; then