From fa133e8887d9cc582d74b93166fb21dde5ba9b67 Mon Sep 17 00:00:00 2001 From: Muhammad Atif Ali Date: Tue, 13 Feb 2024 13:46:32 +0300 Subject: [PATCH] add extensions support for vscode-web --- vscode-web/main.tf | 34 +++++++++++++++++++++++++++----- vscode-web/run.sh | 49 +++++++++++++++++++++++++++++++++++++--------- 2 files changed, 69 insertions(+), 14 deletions(-) diff --git a/vscode-web/main.tf b/vscode-web/main.tf index 9932fac..1447f55 100644 --- a/vscode-web/main.tf +++ b/vscode-web/main.tf @@ -53,15 +53,21 @@ variable "log_path" { default = "/tmp/vscode-web.log" } -variable "install_dir" { +variable "install_prefix" { type = string - description = "The directory to install VS Code CLI" - default = "/tmp/vscode-cli" + description = "The prefix to install vscode-web to." + default = "/tmp/vscode-server" +} + +variable "extensions" { + type = list(string) + description = "A list of extensions to install." + default = [] } variable "accept_license" { type = bool - description = "Accept the VS Code license. https://code.visualstudio.com/license" + description = "Accept the VS Code Server license. https://code.visualstudio.com/license/server" default = false validation { condition = var.accept_license == true @@ -69,6 +75,22 @@ variable "accept_license" { } } +variable "extensions" { + type = list(string) + description = "A list of extensions to install." + default = [] +} + +variable "telemetry_level" { + type = string + description = "Set the telemetry level for VS Code Web." + default = "error" + validation { + condition = var.telemetry_level == "off" || var.telemetry_level == "crash" || var.telemetry_level == "error" || var.telemetry_level == "all" + error_message = "Incorrect value. Please set either 'off', 'crash', 'error', or 'all'." + } +} + resource "coder_script" "vscode-web" { agent_id = var.agent_id display_name = "VS Code Web" @@ -76,7 +98,9 @@ resource "coder_script" "vscode-web" { script = templatefile("${path.module}/run.sh", { PORT : var.port, LOG_PATH : var.log_path, - INSTALL_DIR : var.install_dir, + INSTALL_PREFIX : var.install_prefix, + EXTENSIONS : join(",", var.extensions), + TELEMETRY_LEVEL : var.telemetry_level, }) run_on_start = true } diff --git a/vscode-web/run.sh b/vscode-web/run.sh index d19be62..93564ae 100644 --- a/vscode-web/run.sh +++ b/vscode-web/run.sh @@ -1,21 +1,52 @@ #!/usr/bin/env sh BOLD='\033[0;1m' +EXTENSIONS=("${EXTENSIONS}") -# Create install directory if it doesn't exist -mkdir -p ${INSTALL_DIR} +# Create install prefix +mkdir -p ${INSTALL_PREFIX} -printf "$${BOLD}Installing vscode-cli!\n" +printf "$${BOLD}Installing Microsoft Visual Studio Code Server!\n" -# Download and extract code-cli tarball -output=$(curl -Lk 'https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64' --output vscode_cli.tar.gz && tar -xf vscode_cli.tar.gz -C ${INSTALL_DIR} && rm vscode_cli.tar.gz) +# Download and extract vscode-server +ARCH=$(uname -m) +case "$ARCH" in + x86_64) ARCH="x64" ;; + aarch64) ARCH="arm64" ;; + *) + echo "Unsupported architecture" + exit 1 + ;; +esac + +HASH=$(curl https://update.code.visualstudio.com/api/commits/stable/server-linux-$ARCH-web | cut -d '"' -f 2) +outut=$(curl -sL https://vscode.download.prss.microsoft.com/dbazure/download/stable/$HASH/vscode-server-linux-$ARCH-web.tar.gz | tar -xz -C ${INSTALL_PREFIX} --strip-components 1 && rm -rf vscode-server-linux-$ARCH-web.tar.gz) if [ $? -ne 0 ]; then - echo "Failed to install vscode-cli: $output" + echo "Failed to install vscode-server: $output" exit 1 fi -printf "🥳 vscode-cli has been installed.\n\n" +printf "🥳 vscode-server has been installed in ${INSTALL_PREFIX}" + +VSCODE_SERVER="${INSTALL_PREFIX}/bin/code-server" + +# Install each extension... +IFS=',' read -r -a EXTENSIONLIST <<< "$${EXTENSIONS}" +for extension in "$${EXTENSIONLIST[@]}"; do + if [ -z "$extension" ]; then + continue + fi + printf "🧩 Installing extension $${CODE}$extension$${RESET}...\n" + output=$($VSCODE_SERVER --install-extension "$extension" --force) + if [ $? -ne 0 ]; then + echo "Failed to install extension: $extension: $output" + exit 1 + fi +done + +echo "👷 Running ${INSTALL_DIR}/bin/code-server -echo "👷 Running ${INSTALL_DIR}/bin/code serve-web --port ${PORT} --without-connection-token --accept-server-license-terms in the background..." echo "Check logs at ${LOG_PATH}!" -${INSTALL_DIR}/code serve-web --port ${PORT} --without-connection-token --accept-server-license-terms > ${LOG_PATH} 2>&1 & +${INSTALL_DIR}/code serve-local --port ${PORT} --accept-server-license-terms serve-local --without-connection-token --telemetry-level ${TELEMETRY_LEVEL} > ${LOG_PATH} 2>&1 & + +