From f77b1450b18cdeb328211a4a6e850c24c9078fe7 Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Sat, 8 Jun 2024 22:31:33 -0700 Subject: [PATCH 1/7] feat(code-server): skip extension if installed Skip if an extension was already installed --- code-server/run.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/code-server/run.sh b/code-server/run.sh index c89502b5..758ad9ac 100755 --- a/code-server/run.sh +++ b/code-server/run.sh @@ -18,6 +18,21 @@ function run_code_server() { $CODE_SERVER "$EXTENSION_ARG" --auth none --port "${PORT}" --app-name "${APP_NAME}" > "${LOG_PATH}" 2>&1 & } +function extension_installed() { + if [ -z "${EXTENSIONS_DIR}" ]; then + return 1 + fi + EXTENSIONS_FILE="${EXTENSIONS_DIR}/extensions.json" + if [ ! -f "$EXTENSIONS_FILE" ]; then + return 1 + fi + if grep -q "\"$1\"" "$EXTENSIONS_FILE"; then + echo "Extension $1 was found in $EXTENSIONS_FILE." + return 0 + fi + return 1 +} + # Check if the settings file exists... if [ ! -f ~/.local/share/code-server/User/settings.json ]; then echo "⚙️ Creating settings file..." @@ -63,6 +78,9 @@ for extension in "$${EXTENSIONLIST[@]}"; do if [ -z "$extension" ]; then continue fi + if extension_installed "$extension"; then + continue + fi printf "🧩 Installing extension $${CODE}$extension$${RESET}...\n" output=$($CODE_SERVER "$EXTENSION_ARG" --install-extension "$extension") if [ $? -ne 0 ]; then @@ -86,6 +104,9 @@ if [ "${AUTO_INSTALL_EXTENSIONS}" = true ]; then printf "🧩 Installing extensions from %s/.vscode/extensions.json...\n" "$WORKSPACE_DIR" extensions=$(jq -r '.recommendations[]' "$WORKSPACE_DIR"/.vscode/extensions.json) for extension in $extensions; do + if extension_installed "$extension"; then + continue + fi $CODE_SERVER "$EXTENSION_ARG" --install-extension "$extension" done fi From 741a8d7f0b1f602b0916d4a526d4443b4ceeb165 Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Sat, 8 Jun 2024 23:57:34 -0700 Subject: [PATCH 2/7] fix: add missing check for use_cached --- code-server/run.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code-server/run.sh b/code-server/run.sh index 758ad9ac..d66dcf6d 100755 --- a/code-server/run.sh +++ b/code-server/run.sh @@ -19,6 +19,9 @@ function run_code_server() { } function extension_installed() { + if [ "${USE_CACHED}" != true ]; then + return 1 + fi if [ -z "${EXTENSIONS_DIR}" ]; then return 1 fi From 484fc2747f4749f5fd4a267b30dac2ccee795e37 Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Sun, 9 Jun 2024 09:40:30 -0700 Subject: [PATCH 3/7] feat: check if grep is installed --- code-server/run.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/code-server/run.sh b/code-server/run.sh index d66dcf6d..84a37cd1 100755 --- a/code-server/run.sh +++ b/code-server/run.sh @@ -29,11 +29,15 @@ function extension_installed() { if [ ! -f "$EXTENSIONS_FILE" ]; then return 1 fi - if grep -q "\"$1\"" "$EXTENSIONS_FILE"; then - echo "Extension $1 was found in $EXTENSIONS_FILE." - return 0 + if ! command -v grep > /dev/null; then + return 1 + fi + if ! grep -q "\"$1\"" "$EXTENSIONS_FILE"; then + return 1 fi - return 1 + + echo "Extension $1 was found in $EXTENSIONS_FILE." + return 0 } # Check if the settings file exists... From 7f40af0e62129bda64dcf05aa375470ae48f4ae7 Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Mon, 10 Jun 2024 22:29:41 -0700 Subject: [PATCH 4/7] feat(code-server): add use_cached_extensions option --- code-server/main.tf | 7 +++++++ code-server/run.sh | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/code-server/main.tf b/code-server/main.tf index c186c147..30b705cb 100644 --- a/code-server/main.tf +++ b/code-server/main.tf @@ -95,6 +95,12 @@ variable "use_cached" { default = false } +variable "use_cached_extensions" { + type = bool + description = "Uses cached copy of extensions, otherwise do a forced upgrade" + default = false +} + variable "extensions_dir" { type = string description = "Override the directory to store extensions in." @@ -122,6 +128,7 @@ resource "coder_script" "code-server" { SETTINGS : replace(jsonencode(var.settings), "\"", "\\\""), OFFLINE : var.offline, USE_CACHED : var.use_cached, + USE_CACHED_EXTENSIONS : var.use_cached_extensions, EXTENSIONS_DIR : var.extensions_dir, FOLDER : var.folder, AUTO_INSTALL_EXTENSIONS : var.auto_install_extensions, diff --git a/code-server/run.sh b/code-server/run.sh index 84a37cd1..8cfc949b 100755 --- a/code-server/run.sh +++ b/code-server/run.sh @@ -19,7 +19,7 @@ function run_code_server() { } function extension_installed() { - if [ "${USE_CACHED}" != true ]; then + if [ "${USE_CACHED_EXTENSIONS}" != true ]; then return 1 fi if [ -z "${EXTENSIONS_DIR}" ]; then @@ -89,7 +89,7 @@ for extension in "$${EXTENSIONLIST[@]}"; do continue fi 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 echo "Failed to install extension: $extension: $output" exit 1 @@ -114,7 +114,7 @@ if [ "${AUTO_INSTALL_EXTENSIONS}" = true ]; then if extension_installed "$extension"; then continue fi - $CODE_SERVER "$EXTENSION_ARG" --install-extension "$extension" + $CODE_SERVER "$EXTENSION_ARG" --force --install-extension "$extension" done fi fi From ccff64244380440707c721be0f66cfc571bc9100 Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Mon, 10 Jun 2024 22:46:48 -0700 Subject: [PATCH 5/7] chore: trigger ci From 48e936726d46a0b5b22d737350e275805935fb3d Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Fri, 14 Jun 2024 22:45:09 -0700 Subject: [PATCH 6/7] feat: use --list-extensions --- code-server/run.sh | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/code-server/run.sh b/code-server/run.sh index 8cfc949b..988b2cd2 100755 --- a/code-server/run.sh +++ b/code-server/run.sh @@ -18,28 +18,6 @@ function run_code_server() { $CODE_SERVER "$EXTENSION_ARG" --auth none --port "${PORT}" --app-name "${APP_NAME}" > "${LOG_PATH}" 2>&1 & } -function extension_installed() { - if [ "${USE_CACHED_EXTENSIONS}" != true ]; then - return 1 - fi - if [ -z "${EXTENSIONS_DIR}" ]; then - return 1 - fi - EXTENSIONS_FILE="${EXTENSIONS_DIR}/extensions.json" - if [ ! -f "$EXTENSIONS_FILE" ]; then - return 1 - fi - if ! command -v grep > /dev/null; then - return 1 - fi - if ! grep -q "\"$1\"" "$EXTENSIONS_FILE"; then - return 1 - fi - - echo "Extension $1 was found in $EXTENSIONS_FILE." - return 0 -} - # Check if the settings file exists... if [ ! -f ~/.local/share/code-server/User/settings.json ]; then echo "⚙️ Creating settings file..." @@ -79,6 +57,21 @@ if [ ! -f "$CODE_SERVER" ] || [ "${USE_CACHED}" != true ]; then printf "🥳 code-server has been installed in ${INSTALL_PREFIX}\n\n" 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 + return 0 + fi + done + return 1 +} + # Install each extension... IFS=',' read -r -a EXTENSIONLIST <<< "$${EXTENSIONS}" for extension in "$${EXTENSIONLIST[@]}"; do From b7284ed07b94d838faf4f7a2064dc685b0765274 Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Fri, 14 Jun 2024 22:52:44 -0700 Subject: [PATCH 7/7] chore: add print --- code-server/run.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/code-server/run.sh b/code-server/run.sh index 988b2cd2..8e068b8d 100755 --- a/code-server/run.sh +++ b/code-server/run.sh @@ -66,6 +66,7 @@ function extension_installed() { fi for _extension in "$${EXTENSIONS_ARRAY[@]}"; do if [ "$_extension" == "$1" ]; then + echo "Extension $1 was already installed." return 0 fi done