-
Notifications
You must be signed in to change notification settings - Fork 686
MAINT: Optimize devcontainer Dockerfile #1437
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,8 @@ | ||
| FROM mcr.microsoft.com/devcontainers/python:3.11 | ||
| FROM mcr.microsoft.com/devcontainers/python:3.11-bookworm | ||
|
|
||
| # Makes installation faster | ||
| ENV UV_COMPILE_BYTECODE=1 | ||
| ENV DEBIAN_FRONTEND=noninteractive | ||
|
|
||
| SHELL ["/bin/bash", "-c"] | ||
|
|
||
|
|
@@ -11,66 +12,61 @@ USER root | |
| RUN rm -f /etc/apt/sources.list.d/yarn.list 2>/dev/null || true | ||
|
|
||
| # Install required system packages + ODBC prerequisites | ||
| RUN apt-get update && apt-get install -y \ | ||
| sudo \ | ||
| unixodbc \ | ||
| unixodbc-dev \ | ||
| libgl1 \ | ||
| git \ | ||
| curl \ | ||
| xdg-utils \ | ||
| build-essential \ | ||
| && apt-get clean && rm -rf /var/lib/apt/lists/* | ||
| RUN --mount=type=cache,target=/var/cache/apt \ | ||
| --mount=type=cache,target=/var/lib/apt \ | ||
| apt-get update \ | ||
|
Comment on lines
1
to
+17
|
||
| && apt-get install -y --no-install-recommends \ | ||
| sudo \ | ||
| unixodbc \ | ||
| unixodbc-dev \ | ||
| libgl1 \ | ||
| git \ | ||
| curl \ | ||
| xdg-utils \ | ||
| build-essential | ||
|
|
||
| # Install the Azure CLI, Microsoft ODBC Driver 18 & SQL tools | ||
| # Install Microsoft ODBC Driver 18 & SQL tools | ||
| # Note: Debian Trixie's sqv rejects SHA1 signatures, so we use gpg directly to import the Microsoft key | ||
| RUN apt-get update && apt-get install -y \ | ||
| apt-transport-https \ | ||
| RUN --mount=type=cache,target=/var/cache/apt \ | ||
| --mount=type=cache,target=/var/lib/apt \ | ||
| apt-get update \ | ||
| && apt-get install -y --no-install-recommends \ | ||
| ca-certificates \ | ||
| gnupg \ | ||
| lsb-release \ | ||
| && curl -sL https://packages.microsoft.com/keys/microsoft.asc \ | ||
| | gpg --dearmor \ | ||
| > /usr/share/keyrings/microsoft-archive-keyring.gpg \ | ||
| && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" \ | ||
| > /etc/apt/sources.list.d/microsoft.list \ | ||
| && apt-get update \ | ||
| && ACCEPT_EULA=Y apt-get install -y msodbcsql18 mssql-tools18 \ | ||
| && apt-get install -y azure-cli \ | ||
| && echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> /etc/profile.d/sqltools.sh \ | ||
| && apt-get clean \ | ||
| && rm -rf /var/lib/apt/lists/* | ||
| && ACCEPT_EULA=Y apt-get install -y --no-install-recommends \ | ||
| msodbcsql18 \ | ||
| mssql-tools18 \ | ||
| && echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> /etc/profile.d/sqltools.sh | ||
|
|
||
| # audio back-ends needed by Azure Speech SDK | ||
| RUN apt-get update \ | ||
| && DEBIAN_FRONTEND=noninteractive \ | ||
| apt-get install -y --no-install-recommends \ | ||
| RUN --mount=type=cache,target=/var/cache/apt \ | ||
| --mount=type=cache,target=/var/lib/apt \ | ||
| apt-get update \ | ||
| && apt-get install -y --no-install-recommends \ | ||
| libasound2 \ | ||
| libpulse0 \ | ||
| && rm -rf /var/lib/apt/lists/* | ||
| libpulse0 | ||
|
|
||
| # Install Node.js 24.x LTS for frontend development | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Switching from 18 to 24 there could be a lot of changes. If that's absolutely needed right now I'd defer until later because it could significantly slow down ongoing front end work that was built with 18.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @romanlutz I can pull this change out, but Node 20 is EOL April 2026 |
||
| RUN --mount=type=cache,target=/var/cache/apt \ | ||
| --mount=type=cache,target=/var/lib/apt \ | ||
| curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \ | ||
| && apt-get install -y --no-install-recommends nodejs | ||
|
Comment on lines
+56
to
+59
|
||
|
|
||
| # Install uv system-wide and create pyrit-dev venv | ||
| RUN curl -LsSf https://astral.sh/uv/install.sh | sh \ | ||
| && mv /root/.local/bin/uv /usr/local/bin/uv \ | ||
| && rm -rf /opt/venv \ | ||
| && uv venv /opt/venv --python 3.11 --prompt pyrit-dev \ | ||
| && chown -R vscode:vscode /opt/venv \ | ||
| && ls -la /opt/venv/bin/activate | ||
| COPY --from=ghcr.io/astral-sh/uv:0.10.8 /uv /uvx /bin/ | ||
| RUN uv venv /opt/venv --python 3.11 --prompt pyrit-dev \ | ||
| && chown -R vscode:vscode /opt/venv | ||
| ENV PATH="/opt/venv/bin:$PATH" | ||
|
|
||
| # vscode user already exists in the base image, just ensure sudo access | ||
| RUN echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers | ||
|
|
||
| # Install Node.js 20.x and npm for frontend development | ||
| RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ | ||
| && apt-get install -y nodejs \ | ||
| && npm install -g npm@latest \ | ||
| && npm install -g @github/copilot@0.0.421 \ | ||
| && npm cache clean --force \ | ||
| && rm -rf /root/.npm \ | ||
| && apt-get clean \ | ||
| && rm -rf /var/lib/apt/lists/* | ||
|
|
||
| # Pre-create common user caches and fix permissions | ||
| RUN mkdir -p /home/vscode/.cache/pre-commit \ | ||
| && mkdir -p /home/vscode/.vscode-server \ | ||
|
|
@@ -79,7 +75,7 @@ RUN mkdir -p /home/vscode/.cache/pre-commit \ | |
| && mkdir -p /home/vscode/.cache/venv \ | ||
| && mkdir -p /home/vscode/.cache/pylance \ | ||
| && chown -R vscode:vscode /home/vscode/.cache /home/vscode/.vscode-server \ | ||
| && chmod -R 777 /home/vscode/.cache/pip /home/vscode/.cache/pylance /home/vscode/.cache/venv /home/vscode/.cache/uv\ | ||
| && chmod -R 755 /home/vscode/.cache/pip /home/vscode/.cache/pylance /home/vscode/.cache/venv /home/vscode/.cache/uv \ | ||
| && chmod -R 755 /home/vscode/.vscode-server | ||
|
|
||
| USER vscode | ||
|
|
@@ -95,6 +91,6 @@ RUN git config --global core.preloadindex true \ | |
| && git config --global status.showUntrackedFiles all \ | ||
| && git config --global core.fsmonitor true | ||
|
|
||
| # Set cache directories so they can be mounted | ||
| # Set cache directories so they can be mounted | ||
| ENV PIP_CACHE_DIR="/home/vscode/.cache/pip" | ||
| ENV UV_CACHE_DIR="/home/vscode/.cache/uv" | ||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -90,6 +90,14 @@ | |||||||||||||||||
| ] | ||||||||||||||||||
| } | ||||||||||||||||||
| }, | ||||||||||||||||||
| "features": { | ||||||||||||||||||
| "ghcr.io/devcontainers/features/azure-cli:1": { | ||||||||||||||||||
| "version": "latest" | ||||||||||||||||||
| }, | ||||||||||||||||||
| "ghcr.io/devcontainers/features/copilot-cli:1": { | ||||||||||||||||||
| "version": "latest" | ||||||||||||||||||
| } | ||||||||||||||||||
|
Comment on lines
+94
to
+99
|
||||||||||||||||||
| "ghcr.io/devcontainers/features/azure-cli:1": { | |
| "version": "latest" | |
| }, | |
| "ghcr.io/devcontainers/features/copilot-cli:1": { | |
| "version": "latest" | |
| } | |
| "ghcr.io/devcontainers/features/azure-cli:1": {}, | |
| "ghcr.io/devcontainers/features/copilot-cli:1": {} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,3 @@ | ||
| #!/usr/bin/env python3 | ||
| # Copyright (c) Microsoft Corporation. | ||
| # Licensed under the MIT license. | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,3 @@ | ||
| #!/usr/bin/env python3 | ||
| # Copyright (c) Microsoft Corporation. | ||
| # Licensed under the MIT license. | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When using
--mount=type=cachefor apt directories, concurrent builds can contend on apt lock files stored inside the shared cache (and occasionally corrupt the cache). It’s safer to setsharing=lockedon these cache mounts (and mount the more specific.../apt/listspath) to avoid intermittent build failures when multiple builds run in parallel.