From a150da4f478558714ff85a45d7a4bcb14bc605c5 Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Sat, 16 Mar 2024 02:32:34 -0700 Subject: [PATCH] feat: add use_cached mode Changes: - Update docs to include use_cached mode - Add validation checks - Add support for use_cached mode --- code-server/README.md | 18 ++++++++++++++++-- code-server/main.tf | 19 +++++++++++++++++++ code-server/run.sh | 16 ++++++++++++---- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/code-server/README.md b/code-server/README.md index 55c4bbd..375d0e2 100644 --- a/code-server/README.md +++ b/code-server/README.md @@ -80,9 +80,23 @@ module "code-server" { } ``` -### Offline Mode +### Offline and Use Cached Modes -Run an existing copy of code-server if found, otherwise download from GitHub. By default the module looks for code-server at `/tmp/code-server` but this can be changed with `install_prefix`. +By default the module looks for code-server at `/tmp/code-server` but this can be changed with `install_prefix`. + +Run an existing copy of code-server if found, otherwise download from GitHub: + +```tf +module "code-server" { + source = "registry.coder.com/modules/code-server/coder" + version = "1.0.8" + agent_id = coder_agent.example.id + use_cached = true + extensions = ["dracula-theme.theme-dracula", "ms-azuretools.vscode-docker"] +} +``` + +Just run code-server in the background, don't fetch it from GitHub: ```tf module "code-server" { diff --git a/code-server/main.tf b/code-server/main.tf index a0dfbf8..30b92bc 100644 --- a/code-server/main.tf +++ b/code-server/main.tf @@ -89,6 +89,12 @@ variable "offline" { default = false } +variable "use_cached" { + type = bool + description = "Uses cached copy code-server in the background, otherwise fetched it from GitHub" + default = false +} + resource "coder_script" "code-server" { agent_id = var.agent_id display_name = "code-server" @@ -103,8 +109,21 @@ resource "coder_script" "code-server" { // This is necessary otherwise the quotes are stripped! SETTINGS : replace(jsonencode(var.settings), "\"", "\\\""), OFFLINE : var.offline, + USE_CACHED : var.use_cached, }) run_on_start = true + + lifecycle { + precondition { + condition = !var.offline || length(var.extensions) == 0 + error_message = "Offline mode does not allow extensions to be installed" + } + + precondition { + condition = !var.offline || !var.use_cached + error_message = "Offline and Use Cached can not be used together" + } + } } resource "coder_app" "code-server" { diff --git a/code-server/run.sh b/code-server/run.sh index 95e79f7..fc474b1 100755 --- a/code-server/run.sh +++ b/code-server/run.sh @@ -19,10 +19,18 @@ if [ ! -f ~/.local/share/code-server/User/settings.json ]; then echo "${SETTINGS}" > ~/.local/share/code-server/User/settings.json fi -if [ "${OFFLINE}" = true ] && [ -f $CODE_SERVER ]; then - echo "🥳 Found offline copy of code-server" - run_code_server - exit 0 +# Check if code-server is already installed for offline or cached mode +if [ -f $CODE_SERVER ]; then + if "${OFFLINE}" = true || "${USE_CACHED}" = true; then + echo "🥳 Found a copy of code-server" + run_code_server + exit 0 + fi +fi +# Offline mode always expects a copy of code-server to be present +if [ "${OFFLINE}" = true ]; then + echo "Failed to find a copy of code-server" + exit 1 fi printf "$${BOLD}Installing code-server!\n"