@@ -2,12 +2,12 @@ FROM ubuntu:24.04
22
33ENV LANG="C.UTF-8"
44ENV HOME=/root
5+ ENV DEBIAN_FRONTEND=noninteractive
56
67# ## BASE ###
78
89RUN apt-get update \
9- && apt-get upgrade -y \
10- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
10+ && apt-get install -y --no-install-recommends \
1111 binutils=2.42-* \
1212 sudo=1.9.* \
1313 build-essential=12.10* \
@@ -18,7 +18,7 @@ RUN apt-get update \
1818 gettext=0.21-* \
1919 git=1:2.43.* \
2020 git-lfs=3.4.* \
21- gnupg2 =2.4.* \
21+ gnupg =2.4.* \
2222 inotify-tools=3.22.* \
2323 iputils-ping=3:20240117-* \
2424 jq=1.7.* \
@@ -75,10 +75,14 @@ RUN apt-get update \
7575
7676# ## MISE ###
7777
78- RUN install -dm 755 /etc/apt/keyrings \
79- && curl -fsSL https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null \
80- && echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg] https://mise.jdx.dev/deb stable main" | tee /etc/apt/sources.list.d/mise.list \
81- && apt-get update && apt-get install -y --no-install-recommends mise/stable \
78+ RUN install -dm 0755 /etc/apt/keyrings \
79+ && curl -fsSL https://mise.jdx.dev/gpg-key.pub \
80+ | gpg --batch --yes --dearmor -o /etc/apt/keyrings/mise-archive-keyring.gpg \
81+ && chmod 0644 /etc/apt/keyrings/mise-archive-keyring.gpg \
82+ && echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg] https://mise.jdx.dev/deb stable main" \
83+ > /etc/apt/sources.list.d/mise.list \
84+ && apt-get update \
85+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends mise/stable \
8286 && rm -rf /var/lib/apt/lists/* \
8387 && echo 'eval "$(mise activate bash)"' >> /etc/profile \
8488 && mise settings set experimental true \
@@ -89,17 +93,16 @@ ENV PATH=$HOME/.local/share/mise/shims:$PATH
8993
9094# ## LLVM ###
9195
92- RUN apt-get update && apt-get install -y --no-install-recommends \
93- cmake=3.28.* \
94- ccache=4.9.* \
95- ninja-build=1.11.* \
96- nasm=2.16.* \
97- yasm=1.3.* \
98- gawk=1:5.2.* \
99- lsb-release=12.0-* \
100- gnupg=2.4.* \
101- && rm -rf /var/lib/apt/lists/* \
102- && bash -c "$(curl -fsSL https://apt.llvm.org/llvm.sh)"
96+ RUN install -dm 0755 /etc/apt/keyrings \
97+ && curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key \
98+ | gpg --batch --yes --dearmor -o /etc/apt/keyrings/llvm.gpg \
99+ && chmod 0644 /etc/apt/keyrings/llvm.gpg \
100+ && . /etc/os-release \
101+ && echo "deb [signed-by=/etc/apt/keyrings/llvm.gpg] https://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-20 main" \
102+ > /etc/apt/sources.list.d/llvm.list \
103+ && apt-get update \
104+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends clang-20 lld-20 lldb-20 llvm-20 \
105+ && rm -rf /var/lib/apt/lists/*
103106
104107# ## PYTHON ###
105108
@@ -110,15 +113,15 @@ ARG PYTHON_VERSION=3.11.12
110113ENV PYENV_ROOT=/root/.pyenv
111114ENV PATH=$PYENV_ROOT/bin:$PATH
112115ENV PYTHON_VERSIONS="3.10 3.11.12 3.12 3.13"
113- # hadolint ignore=SC2016,DL3003
114116RUN git -c advice.detachedHead=0 clone --branch "$PYENV_VERSION" --depth 1 https://github.com/pyenv/pyenv.git "$PYENV_ROOT" \
115117 && echo 'export PYENV_ROOT="$HOME/.pyenv"' >> /etc/profile \
116118 && echo 'export PATH="$$PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH"' >> /etc/profile \
117119 && echo 'eval "$(pyenv init - bash)"' >> /etc/profile \
118120 && cd "$PYENV_ROOT" && src/configure && make -C src \
119121 && pyenv install $PYTHON_VERSIONS \
120122 && pyenv global "$PYTHON_VERSION"
121- # Install pipx for common global package managers (e.g. poetry)
123+
124+ # Install pipx for common global package managers (e.g. poetry)
122125ENV PIPX_BIN_DIR=/root/.local/bin
123126ENV PATH=$PIPX_BIN_DIR:$PATH
124127RUN apt-get update && apt-get install -y --no-install-recommends pipx=1.4.* \
@@ -144,7 +147,7 @@ ENV COREPACK_DEFAULT_TO_LATEST=0
144147ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
145148ENV COREPACK_ENABLE_AUTO_PIN=0
146149ENV COREPACK_ENABLE_STRICT=0
147- # hadolint ignore=SC1091
150+
148151RUN git -c advice.detachedHead=0 clone --branch "$NVM_VERSION" --depth 1 https://github.com/nvm-sh/nvm.git "$NVM_DIR" \
149152 && echo 'source $NVM_DIR/nvm.sh' >> /etc/profile \
150153 && echo "prettier\n eslint\n typescript" > $NVM_DIR/default-packages \
@@ -176,26 +179,26 @@ ARG SWIFT_VERSIONS="6.1 5.10.1"
176179RUN for v in $SWIFT_VERSIONS; do mise install "swift@${v}" ; done \
177180 && mise use --global "swift@${SWIFT_VERSIONS%% *}"
178181
182+ # ## RUST ###
183+
184+ ARG RUST_VERSIONS="1.89.0 1.88.0 1.87.0 1.86.0 1.85.1 1.84.1 1.83.0"
185+ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
186+ && . "$HOME/.cargo/env" \
187+ && echo 'source $HOME/.cargo/env' >> /etc/profile \
188+ && rustup install $RUST_VERSIONS \
189+ && rustup default ${RUST_VERSIONS%% *}
190+
191+
179192# ## RUBY ###
180193
181194ARG RUBY_VERSIONS="3.2.3 3.3.8 3.4.4"
182195RUN apt-get update && apt-get install -y --no-install-recommends \
183196 libyaml-dev=0.2.* \
184197 libgmp-dev=2:6.3.* \
185- rustc=1.75.* \
186198 && rm -rf /var/lib/apt/lists/* \
187199 && for v in $RUBY_VERSIONS; do mise install "ruby@${v}" ; done \
188200 && mise use --global "ruby@${RUBY_VERSIONS%% *}"
189201
190- # ## RUST ###
191-
192- ARG RUST_VERSIONS="1.89.0 1.88.0 1.87.0 1.86.0 1.85.1 1.84.1 1.83.0"
193- RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
194- && . "$HOME/.cargo/env" \
195- && echo 'source $HOME/.cargo/env' >> /etc/profile \
196- && rustup install $RUST_VERSIONS \
197- && rustup default ${RUST_VERSIONS%% *}
198-
199202# ## C++ ###
200203# gcc is already installed via apt-get above, so these are just additional linters, etc.
201204RUN pipx install cpplint==2.0.* clang-tidy==20.1.* clang-format==20.1.* cmakelang==0.6.*
0 commit comments