@@ -11,34 +11,39 @@ RUN su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${N
1111# INSTALL TOOLS (baked in for faster startup)
1212# ============================================
1313
14- # Install Docker CLI and Docker Compose
14+ # SimpleAccounts-UAE Development Container
15+ # Base image with Node 20 and Java 21 for full-stack development
16+
17+ FROM mcr.microsoft.com/devcontainers/java:21-bookworm
18+
19+ # Install Node.js 20
20+ ARG NODE_VERSION="20"
21+ RUN su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"
22+
23+ # ============================================
24+ # INSTALL TOOLS (baked in for faster startup)
25+ # ============================================
26+
27+ # Install Docker CLI, Docker Compose, GitHub CLI, and System Dependencies
1528RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
1629 && apt-get -y install --no-install-recommends \
1730 apt-transport-https \
1831 ca-certificates \
1932 curl \
2033 gnupg \
2134 lsb-release \
35+ # Docker Setup
2236 && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
2337 && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list \
24- && apt-get update \
25- && apt-get -y install --no-install-recommends docker-ce-cli docker-compose-plugin \
26- && apt-get clean -y && rm -rf /var/lib/apt/lists/*
27-
28- # Install GitHub CLI
29- RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
38+ # GitHub CLI Setup
39+ && curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
3040 && chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
3141 && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" > /etc/apt/sources.list.d/github-cli.list \
3242 && apt-get update \
33- && apt-get -y install --no-install-recommends gh \
34- && apt-get clean -y && rm -rf /var/lib/apt/lists/*
35-
36- # ============================================
37- # INSTALL SYSTEM DEPENDENCIES
38- # ============================================
39-
40- RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
4143 && apt-get -y install --no-install-recommends \
44+ docker-ce-cli \
45+ docker-compose-plugin \
46+ gh \
4247 postgresql-client \
4348 redis-tools \
4449 chromium \
@@ -60,6 +65,27 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
6065 libxfixes3 \
6166 libxrandr2 \
6267 xdg-utils \
68+ # Playwright / WebKit / Firefox dependencies
69+ gstreamer1.0-libav \
70+ gstreamer1.0-plugins-bad \
71+ gstreamer1.0-plugins-base \
72+ gstreamer1.0-plugins-good \
73+ hunspell-en-us \
74+ libavcodec59 \
75+ libavformat59 \
76+ libavutil57 \
77+ libenchant-2-2 \
78+ libsecret-1-0 \
79+ libhyphen0 \
80+ libmanette-0.2-0 \
81+ libgles2 \
82+ libopus0 \
83+ libwebpdemux2 \
84+ libwoff1 \
85+ libharfbuzz-icu0 \
86+ libevdev2 \
87+ libnotify4 \
88+ libflite1 \
6389 && apt-get clean -y && rm -rf /var/lib/apt/lists/*
6490
6591# Set Playwright to use system Chromium
@@ -69,7 +95,33 @@ ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium
6995# Install global npm packages
7096RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g npm@latest" 2>&1
7197
72- # Set working directory
98+ # ============================================
99+ # PRE-CACHE DEPENDENCIES
100+ # ============================================
101+
102+ USER vscode
103+
104+ # Pre-cache Maven dependencies
105+ # Copy pom.xml files (and parent poms if needed) to a temp directory
106+ WORKDIR /tmp/backend
107+ COPY --chown=vscode:vscode apps/backend/pom.xml .
108+ # Run go-offline to download dependencies to ~/.m2/repository
109+ RUN mvn dependency:go-offline -B -q
110+
111+ # Pre-cache NPM dependencies
112+ WORKDIR /tmp/root
113+ COPY --chown=vscode:vscode package.json package-lock.json ./
114+ RUN . /usr/local/share/nvm/nvm.sh && npm ci --ignore-scripts
115+
116+ WORKDIR /tmp/frontend
117+ COPY --chown=vscode:vscode apps/frontend/package.json apps/frontend/package-lock.json ./
118+ RUN . /usr/local/share/nvm/nvm.sh && npm ci --legacy-peer-deps --ignore-scripts
119+
120+ # Clean up temp directories
121+ USER root
122+ RUN rm -rf /tmp/backend /tmp/root /tmp/frontend
123+
124+ # Reset working directory
73125WORKDIR /workspaces
74126
75127# Default command
0 commit comments