From 2716ab875e1ffd9a7617817f950f3c03566881f2 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Fri, 27 Jun 2025 16:37:54 +0000 Subject: [PATCH 1/5] fix(.devcontainer): fix code-server app URL, healthcheck and order, add home volume --- .devcontainer/devcontainer.json | 22 +++++++++++++++++++ .../filebrowser/devcontainer-feature.json | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d88d947d962c5..49dbd26c1cd36 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -43,11 +43,33 @@ "external": true, "icon": "/icon/zed.svg", "order": 5 + }, + // Reproduce `code-server` app here from the code-server + // feature so that we can set the correct folder and order. + // Currently, the order cannot be specified via option because + // we parse it as a number whereas variable interpolation + // results in a string. Additionally we set health check which + // is not yet set in the feature. + { + "slug": "code-server", + "displayName": "code-server", + "url": "http://${localEnv:FEATURE_CODE_SERVER_OPTION_HOST:127.0.0.1}:${localEnv:FEATURE_CODE_SERVER_OPTION_PORT:8080}/?folder=${containerWorkspaceFolder}", + "openIn": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPOPENIN:slim-window}", + "share": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPSHARE:owner}", + "icon": "/icon/code.svg", + "group": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPGROUP:Web Editors}", + "order": 3, + "healthCheck": { + "url": "http://${localEnv:FEATURE_CODE_SERVER_OPTION_HOST:127.0.0.1}:${localEnv:FEATURE_CODE_SERVER_OPTION_PORT:8080}/healthz", + "interval": 5, + "threshold": 2 + } } ] } }, "mounts": [ + "source=coder-coder-devcontainer-home,target=/home/coder", // Mount the entire home because conditional mounts are not supported. // See: https://github.com/devcontainers/spec/issues/132 "source=${localEnv:HOME},target=/mnt/home/coder,type=bind,readonly" diff --git a/.devcontainer/filebrowser/devcontainer-feature.json b/.devcontainer/filebrowser/devcontainer-feature.json index 3829139cf3143..f0c873831f899 100644 --- a/.devcontainer/filebrowser/devcontainer-feature.json +++ b/.devcontainer/filebrowser/devcontainer-feature.json @@ -41,7 +41,7 @@ "healthcheck": { "url": "http://localhost:${localEnv:FEATURE_FILEBROWSER_OPTION_PORT:13339}/health", "interval": 5, - "threshold": 6 + "threshold": 2 } } ] From 47a2245ae1b81af2e4381bf98aeba95511771a94 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Fri, 27 Jun 2025 16:47:20 +0000 Subject: [PATCH 2/5] comment --- .devcontainer/devcontainer.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 49dbd26c1cd36..0deda9a9c66bc 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -69,6 +69,8 @@ } }, "mounts": [ + // Add a volume for the Coder home directory to persist shell history, + // and speed up dotfiles init and/or personalization. "source=coder-coder-devcontainer-home,target=/home/coder", // Mount the entire home because conditional mounts are not supported. // See: https://github.com/devcontainers/spec/issues/132 From 6a2456568034f4c68edf3d7ab4bea5f083d8ecab Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Fri, 27 Jun 2025 17:08:18 +0000 Subject: [PATCH 3/5] explicit type --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0deda9a9c66bc..0e4d428b9e5ae 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -71,7 +71,7 @@ "mounts": [ // Add a volume for the Coder home directory to persist shell history, // and speed up dotfiles init and/or personalization. - "source=coder-coder-devcontainer-home,target=/home/coder", + "source=coder-coder-devcontainer-home,target=/home/coder,type=volume", // Mount the entire home because conditional mounts are not supported. // See: https://github.com/devcontainers/spec/issues/132 "source=${localEnv:HOME},target=/mnt/home/coder,type=bind,readonly" From e3de0d9ae7ae80bafb62bc81e47e20e16614007f Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Fri, 27 Jun 2025 17:15:51 +0000 Subject: [PATCH 4/5] clean up scripts --- .devcontainer/devcontainer.json | 4 ++-- .../{postCreateCommand.sh => scripts/post_create.sh} | 0 .devcontainer/scripts/post_start.sh | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) rename .devcontainer/{postCreateCommand.sh => scripts/post_create.sh} (100%) create mode 100755 .devcontainer/scripts/post_start.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0e4d428b9e5ae..3cf381eaad7a7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -76,6 +76,6 @@ // See: https://github.com/devcontainers/spec/issues/132 "source=${localEnv:HOME},target=/mnt/home/coder,type=bind,readonly" ], - "postCreateCommand": "./.devcontainer/postCreateCommand.sh", - "postStartCommand": "sudo service docker start" + "postCreateCommand": ["./.devcontainer/scripts/post_create.sh"], + "postStartCommand": ["./.devcontainer/scripts/post_start.sh"] } diff --git a/.devcontainer/postCreateCommand.sh b/.devcontainer/scripts/post_create.sh similarity index 100% rename from .devcontainer/postCreateCommand.sh rename to .devcontainer/scripts/post_create.sh diff --git a/.devcontainer/scripts/post_start.sh b/.devcontainer/scripts/post_start.sh new file mode 100755 index 0000000000000..c98674037d353 --- /dev/null +++ b/.devcontainer/scripts/post_start.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Start Docker service if not already running. +sudo service docker start From dbf7d71993259c0cf03ed21c822de211886c1641 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Fri, 27 Jun 2025 17:40:27 +0000 Subject: [PATCH 5/5] fix filebrowser --- .devcontainer/devcontainer.json | 5 +-- .../filebrowser/devcontainer-feature.json | 20 +++++------ .devcontainer/filebrowser/install.sh | 36 +++++++------------ 3 files changed, 24 insertions(+), 37 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 3cf381eaad7a7..06b6192b7cdb4 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,7 +2,6 @@ "name": "Development environments on your infrastructure", "image": "codercom/oss-dogfood:latest", "features": { - // See all possible options here https://github.com/devcontainers/features/tree/main/src/docker-in-docker "ghcr.io/devcontainers/features/docker-in-docker:2": { "moby": "false" }, @@ -10,7 +9,9 @@ "auth": "none", "port": 13337 }, - "./filebrowser": {} + "./filebrowser": { + "folder": "${containerWorkspaceFolder}" + } }, // SYS_PTRACE to enable go debugging "runArgs": ["--cap-add=SYS_PTRACE"], diff --git a/.devcontainer/filebrowser/devcontainer-feature.json b/.devcontainer/filebrowser/devcontainer-feature.json index f0c873831f899..c7a55a0d8a14e 100644 --- a/.devcontainer/filebrowser/devcontainer-feature.json +++ b/.devcontainer/filebrowser/devcontainer-feature.json @@ -9,19 +9,15 @@ "default": "13339", "description": "The port to run filebrowser on" }, - // "folder": { - // "type": "string", - // "default": "${containerWorkspaceFolder}", - // "description": "The root directory for filebrowser to serve" - // }, - "auth": { + "folder": { "type": "string", - "enum": [ - "none", - "password" - ], - "default": "none", - "description": "Authentication method (none or password)" + "default": "", + "description": "The root directory for filebrowser to serve" + }, + "baseUrl": { + "type": "string", + "default": "", + "description": "The base URL for filebrowser (e.g., /filebrowser)" } }, "entrypoint": "/usr/local/bin/filebrowser-entrypoint", diff --git a/.devcontainer/filebrowser/install.sh b/.devcontainer/filebrowser/install.sh index 1f8390f63864c..48158a38cd782 100644 --- a/.devcontainer/filebrowser/install.sh +++ b/.devcontainer/filebrowser/install.sh @@ -11,38 +11,29 @@ if ! command -v filebrowser &>/dev/null; then curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash fi -printf "🥳 Installation complete!\n\n" - -# Create run script. +# Create entrypoint. cat >/usr/local/bin/filebrowser-entrypoint <>\${LOG_PATH} 2>&1 + filebrowser users add admin "" --perm.admin=true --viewMode=mosaic >>\${LOG_PATH} 2>&1 fi -set -euo pipefail +filebrowser config set --baseurl=\${BASEURL} --port=\${PORT} --auth.method=noauth --root=\${FOLDER} >>\${LOG_PATH} 2>&1 printf "👷 Starting filebrowser...\n\n" + printf "📂 Serving \${FOLDER} at http://localhost:\${PORT}\n\n" filebrowser >>\${LOG_PATH} 2>&1 & @@ -52,5 +43,4 @@ EOF chmod +x /usr/local/bin/filebrowser-entrypoint -printf "✅ File Browser installed!\n\n" -printf "🚀 Run 'filebrowser-entrypoint' to start the service\n\n" +printf "🥳 Installation complete!\n\n"