Skip to content

Commit 4384a34

Browse files
fix: broken implementation and tests (#8)
- Fix how arguments are passed to `code-server`. - Pipe stdout/stderr to a log file, and make this destination configurable
1 parent a926b94 commit 4384a34

13 files changed

+73
-43
lines changed

src/code-server/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ VS Code in the browser
2828
| disableWorkspaceTrust | Disable Workspace Trust feature. This only affects the current session. | boolean | false |
2929
| extensions | Comma-separated list of VS Code extensions to install. Format: 'publisher.extension[@version]' (e.g., 'ms-python.python,ms-azuretools.vscode-docker'). | string | - |
3030
| host | The address to bind to for the code-server. Use '0.0.0.0' to listen on all interfaces. | string | 127.0.0.1 |
31+
| logFile | Path to a file to send stdout and stderr logs to from code-server. | string | /tmp/code-server.log |
3132
| port | The port to bind to for the code-server. | string | 8080 |
3233
| socket | Path to a socket. When specified, host and port will be ignored. | string | - |
3334
| socketMode | File mode of the socket when using the socket option. | string | - |

src/code-server/devcontainer-feature.json

+5
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@
7070
"default": "127.0.0.1",
7171
"description": "The address to bind to for the code-server. Use '0.0.0.0' to listen on all interfaces."
7272
},
73+
"logFile": {
74+
"type": "string",
75+
"default": "/tmp/code-server.log",
76+
"description": "Path to a file to send stdout and stderr logs to from code-server."
77+
},
7378
"port": {
7479
"type": "string",
7580
"default": "8080",

src/code-server/install.sh

+22-23
Original file line numberDiff line numberDiff line change
@@ -23,70 +23,69 @@ if [[ -n $WORKSPACE ]]; then
2323
CODE_SERVER_WORKSPACE="$WORKSPACE"
2424
fi
2525

26-
DISABLE_FLAGS=()
26+
FLAGS=()
27+
FLAGS+=(--auth "$AUTH")
28+
FLAGS+=(--bind-addr "$HOST:$PORT")
2729

2830
if [[ "$DISABLEFILEDOWNLOADS" == "true" ]]; then
29-
DISABLE_FLAGS+=(--disable-file-downloads)
31+
FLAGS+=(--disable-file-downloads)
3032
fi
3133

3234
if [[ "$DISABLEFILEUPLOADS" == "true" ]]; then
33-
DISABLE_FLAGS+=(--disable-file-uploads)
35+
FLAGS+=(--disable-file-uploads)
3436
fi
3537

3638
if [[ "$DISABLEGETTINGSTARTEDOVERRIDE" == "true" ]]; then
37-
DISABLE_FLAGS+=(--disable-getting-started-override)
39+
FLAGS+=(--disable-getting-started-override)
3840
fi
3941

4042
if [[ "$DISABLEPROXY" == "true" ]]; then
41-
DISABLE_FLAGS+=(--disable-proxy)
43+
FLAGS+=(--disable-proxy)
4244
fi
4345

4446
if [[ "$DISABLETELEMETRY" == "true" ]]; then
45-
DISABLE_FLAGS+=(--disable-telemetry)
47+
FLAGS+=(--disable-telemetry)
4648
fi
4749

4850
if [[ "$DISABLEUPDATECHECK" == "true" ]]; then
49-
DISABLE_FLAGS+=(--disable-update-check)
51+
FLAGS+=(--disable-update-check)
5052
fi
5153

5254
if [[ "$DISABLEWORKSPACETRUST" == "true" ]]; then
53-
DISABLE_FLAGS+=(--disable-workspace-trust)
55+
FLAGS+=(--disable-workspace-trust)
5456
fi
5557

56-
CERT_FLAGS=()
57-
5858
if [[ -n "$CERT" ]]; then
59-
CERT_FLAGS+=(--cert "$CERT")
59+
FLAGS+=(--cert "$CERT")
6060
fi
6161

6262
if [[ -n "$CERTHOST" ]]; then
63-
CERT_FLAGS+=(--cert-host "$CERTHOST")
63+
FLAGS+=(--cert-host "$CERTHOST")
6464
fi
6565

6666
if [[ -n "$CERTKEY" ]]; then
67-
CERT_FLAGS+=(--cert-key "$CERTKEY")
67+
FLAGS+=(--cert-key "$CERTKEY")
6868
fi
6969

70-
SOCKET_FLAGS=()
71-
7270
if [[ -n "$SOCKET" ]]; then
73-
SOCKET_FLAGS+=(--socket "$SOCKET")
71+
FLAGS+=(--socket "$SOCKET")
7472
fi
7573

7674
if [[ -n "$SOCKETMODE" ]]; then
77-
SOCKET_FLAGS+=(--socket-mode "$SOCKETMODE")
75+
FLAGS+=(--socket-mode "$SOCKETMODE")
7876
fi
7977

80-
cat > /usr/local/bin/code-server-entrypoint \
81-
<< EOF
78+
cat > /usr/local/bin/code-server-entrypoint <<EOF
8279
#!/usr/bin/env bash
8380
set -e
8481
85-
$(declare -p DISABLE_FLAGS)
86-
$(declare -p CERT_FLAGS)
87-
$(declare -p SOCKET_FLAGS)
82+
if [[ \$(whoami) != "$_REMOTE_USER" ]]; then
83+
exec su $_REMOTE_USER -c /usr/local/bin/code-server-entrypoint
84+
fi
85+
86+
$(declare -p FLAGS)
8887
89-
su $_REMOTE_USER -c 'code-server --auth "$AUTH" --bind-addr "$HOST:$PORT" "\${DISABLE_FLAGS[@]}" "\${CERT_FLAGS[@]}" "\${SOCKET_FLAGS[@]}" "$CODE_SERVER_WORKSPACE"'
88+
code-server "\${FLAGS[@]}" "$CODE_SERVER_WORKSPACE" >"$LOGFILE" 2>&1
9089
EOF
9190

9291
chmod +x /usr/local/bin/code-server-entrypoint

test/code-server/code-server-auth-none.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ check "code-server version" code-server --version
99
check "code-server running" pgrep -f 'code-server/lib/node.*/code-server'
1010
check "code-server listening" lsof -i "@127.0.0.1:8080"
1111

12-
check "code-server auth" grep $'\'code-server.* --auth "none" .*\'' < /usr/local/bin/code-server-entrypoint
12+
check "code-server auth" grep '"--auth".*"none"' < /usr/local/bin/code-server-entrypoint
1313

1414
# Report results
1515
reportResults

test/code-server/code-server-auth-password.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ check "code-server version" code-server --version
99
check "code-server running" pgrep -f 'code-server/lib/node.*/code-server'
1010
check "code-server listening" lsof -i "@127.0.0.1:8080"
1111

12-
check "code-server auth" grep $'\'code-server.* --auth "password" .*\'' < /usr/local/bin/code-server-entrypoint
12+
check "code-server auth" grep '"--auth".*"password"' < /usr/local/bin/code-server-entrypoint
1313

1414
# Report results
1515
reportResults

test/code-server/code-server-cert.sh

+2-4
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@ set -e
44
# Optional: Import test library bundled with the devcontainer CLI
55
source dev-container-features-test-lib
66

7-
cat /usr/local/bin/code-server-entrypoint
8-
97
# Feature-specific tests
108
check "code-server version" code-server --version
119
check "code-server running" pgrep -f 'code-server/lib/node.*/code-server'
1210
check "code-server listening" lsof -i "@127.0.0.1:8080"
1311

14-
check "code-server cert" grep '"--cert".*"/path/to/cert.pem"' < /usr/local/bin/code-server-entrypoint
15-
check "code-server cert-key" grep '"--cert-key".*"/path/to/key.pem"' < /usr/local/bin/code-server-entrypoint
12+
check "code-server cert" grep '"--cert".*"/home/vscode/cert.pem"' < /usr/local/bin/code-server-entrypoint
13+
check "code-server cert-key" grep '"--cert-key".*"/home/vscode/key.pem"' < /usr/local/bin/code-server-entrypoint
1614

1715
# Report results
1816
reportResults
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM mcr.microsoft.com/devcontainers/base:ubuntu
2+
3+
RUN su vscode -c "openssl req -x509 -newkey rsa:4096 -keyout /home/vscode/key.pem -out /home/vscode/cert.pem -sha256 -days 1 -nodes -subj \"/C=XX/ST=Texas/L=Austin/O=Coder/OU=Engineering/CN=dev.coder.com\""
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Optional: Import test library bundled with the devcontainer CLI
5+
source dev-container-features-test-lib
6+
7+
# Feature-specific tests
8+
check "code-server version" code-server --version
9+
check "code-server running" pgrep -f 'code-server/lib/node.*/code-server'
10+
check "code-server listening" lsof -i "@0.0.0.0:8080"
11+
12+
check "code-server log-file" test -f /tmp/code-server-log-file.log
13+
check "code-server log-file content" grep "HTTP server listening on http://127.0.0.1:8080/" < /tmp/code-server-log-file.log
14+
15+
# Report results
16+
reportResults

test/code-server/code-server-socket-with-mode.sh

+2-5
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,12 @@ set -e
44
# Optional: Import test library bundled with the devcontainer CLI
55
source dev-container-features-test-lib
66

7-
cat /usr/local/bin/code-server-entrypoint
8-
97
# Feature-specific tests
108
check "code-server version" code-server --version
119
check "code-server running" pgrep -f 'code-server/lib/node.*/code-server'
12-
check "code-server listening" lsof -i "@127.0.0.1:8080"
1310

14-
check "code-server socket" grep '"--socket".*"/tmp/code-server.sock"' < /usr/local/bin/code-server-entrypoint
15-
check "code-server socket-mode" grep '"--socket-mode".*"777"' < /usr/local/bin/code-server-entrypoint
11+
check "code-server socket" test -S /tmp/code-server.sock
12+
check "code-server socket-mode" grep '0777' <<< $(stat /tmp/code-server.sock)
1613

1714
# Report results
1815
reportResults

test/code-server/code-server-socket.sh

+3-5
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ set -e
44
# Optional: Import test library bundled with the devcontainer CLI
55
source dev-container-features-test-lib
66

7-
cat /usr/local/bin/code-server-entrypoint
8-
97
# Feature-specific tests
108
check "code-server version" code-server --version
119
check "code-server running" pgrep -f 'code-server/lib/node.*/code-server'
12-
check "code-server listening" lsof -i "@127.0.0.1:8080"
1310

14-
check "code-server socket" grep '"--socket".*"/tmp/code-server.sock"' < /usr/local/bin/code-server-entrypoint
11+
check "code-server socket" test -S /tmp/code-server.sock
12+
check "code-server socket-mode" grep '0775' <<< $(stat /tmp/code-server.sock)
1513

1614
# Report results
17-
reportResults
15+
reportResults

test/code-server/code-server-workspace.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ check "code-server version" code-server --version
99
check "code-server running" pgrep -f 'code-server/lib/node.*/code-server'
1010
check "code-server listening" lsof -i "@127.0.0.1:8080"
1111

12-
check "code-server workspace" grep $'\'code-server.*"/home"\'' < /usr/local/bin/code-server-entrypoint
12+
check "code-server workspace" grep $'/home' < /usr/local/bin/code-server-entrypoint
1313

1414
# Report results
1515
reportResults

test/code-server/scenarios.json

+13-3
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,13 @@
126126
}
127127
},
128128
"code-server-cert": {
129-
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
129+
"build": {
130+
"dockerfile": "Dockerfile"
131+
},
130132
"features": {
131133
"code-server": {
132-
"cert": "/path/to/cert.pem",
133-
"certKey": "/path/to/key.pem"
134+
"cert": "/home/vscode/cert.pem",
135+
"certKey": "/home/vscode/key.pem"
134136
}
135137
}
136138
},
@@ -158,5 +160,13 @@
158160
"socketMode": "777"
159161
}
160162
}
163+
},
164+
"code-server-log-file": {
165+
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
166+
"features": {
167+
"code-server": {
168+
"logFile": "/tmp/code-server-log-file.log"
169+
}
170+
}
161171
}
162172
}

test/code-server/test.sh

+3
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ check "code-server version" code-server --version
99
check "code-server running" pgrep -f 'code-server/lib/node.*/code-server'
1010
check "code-server listening" lsof -i "@127.0.0.1:8080"
1111

12+
check "code-server log-file" test -f /tmp/code-server.log
13+
check "code-server log-file content" grep "HTTP server listening on http://127.0.0.1:8080/" < /tmp/code-server.log
14+
1215
# Report results
1316
reportResults

0 commit comments

Comments
 (0)