feat(code-server): add option to skip reinstalling extensions (#259)
This commit is contained in:
@@ -95,6 +95,12 @@ variable "use_cached" {
|
|||||||
default = false
|
default = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "use_cached_extensions" {
|
||||||
|
type = bool
|
||||||
|
description = "Uses cached copy of extensions, otherwise do a forced upgrade"
|
||||||
|
default = false
|
||||||
|
}
|
||||||
|
|
||||||
variable "extensions_dir" {
|
variable "extensions_dir" {
|
||||||
type = string
|
type = string
|
||||||
description = "Override the directory to store extensions in."
|
description = "Override the directory to store extensions in."
|
||||||
@@ -122,6 +128,7 @@ resource "coder_script" "code-server" {
|
|||||||
SETTINGS : replace(jsonencode(var.settings), "\"", "\\\""),
|
SETTINGS : replace(jsonencode(var.settings), "\"", "\\\""),
|
||||||
OFFLINE : var.offline,
|
OFFLINE : var.offline,
|
||||||
USE_CACHED : var.use_cached,
|
USE_CACHED : var.use_cached,
|
||||||
|
USE_CACHED_EXTENSIONS : var.use_cached_extensions,
|
||||||
EXTENSIONS_DIR : var.extensions_dir,
|
EXTENSIONS_DIR : var.extensions_dir,
|
||||||
FOLDER : var.folder,
|
FOLDER : var.folder,
|
||||||
AUTO_INSTALL_EXTENSIONS : var.auto_install_extensions,
|
AUTO_INSTALL_EXTENSIONS : var.auto_install_extensions,
|
||||||
|
|||||||
@@ -57,14 +57,33 @@ if [ ! -f "$CODE_SERVER" ] || [ "${USE_CACHED}" != true ]; then
|
|||||||
printf "🥳 code-server has been installed in ${INSTALL_PREFIX}\n\n"
|
printf "🥳 code-server has been installed in ${INSTALL_PREFIX}\n\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Get the list of installed extensions...
|
||||||
|
LIST_EXTENSIONS=$($CODE_SERVER --list-extensions $EXTENSION_ARG)
|
||||||
|
readarray -t EXTENSIONS_ARRAY <<< "$LIST_EXTENSIONS"
|
||||||
|
function extension_installed() {
|
||||||
|
if [ "${USE_CACHED_EXTENSIONS}" != true ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
for _extension in "$${EXTENSIONS_ARRAY[@]}"; do
|
||||||
|
if [ "$_extension" == "$1" ]; then
|
||||||
|
echo "Extension $1 was already installed."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# Install each extension...
|
# Install each extension...
|
||||||
IFS=',' read -r -a EXTENSIONLIST <<< "$${EXTENSIONS}"
|
IFS=',' read -r -a EXTENSIONLIST <<< "$${EXTENSIONS}"
|
||||||
for extension in "$${EXTENSIONLIST[@]}"; do
|
for extension in "$${EXTENSIONLIST[@]}"; do
|
||||||
if [ -z "$extension" ]; then
|
if [ -z "$extension" ]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
if extension_installed "$extension"; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
printf "🧩 Installing extension $${CODE}$extension$${RESET}...\n"
|
printf "🧩 Installing extension $${CODE}$extension$${RESET}...\n"
|
||||||
output=$($CODE_SERVER "$EXTENSION_ARG" --install-extension "$extension")
|
output=$($CODE_SERVER "$EXTENSION_ARG" --force --install-extension "$extension")
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Failed to install extension: $extension: $output"
|
echo "Failed to install extension: $extension: $output"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -86,7 +105,10 @@ if [ "${AUTO_INSTALL_EXTENSIONS}" = true ]; then
|
|||||||
printf "🧩 Installing extensions from %s/.vscode/extensions.json...\n" "$WORKSPACE_DIR"
|
printf "🧩 Installing extensions from %s/.vscode/extensions.json...\n" "$WORKSPACE_DIR"
|
||||||
extensions=$(jq -r '.recommendations[]' "$WORKSPACE_DIR"/.vscode/extensions.json)
|
extensions=$(jq -r '.recommendations[]' "$WORKSPACE_DIR"/.vscode/extensions.json)
|
||||||
for extension in $extensions; do
|
for extension in $extensions; do
|
||||||
$CODE_SERVER "$EXTENSION_ARG" --install-extension "$extension"
|
if extension_installed "$extension"; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
$CODE_SERVER "$EXTENSION_ARG" --force --install-extension "$extension"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user