Skip to content

Commit

Permalink
staged building with custom versions
Browse files Browse the repository at this point in the history
  • Loading branch information
shish committed Sep 28, 2023
1 parent 8ab153e commit 254d94c
Showing 1 changed file with 106 additions and 25 deletions.
131 changes: 106 additions & 25 deletions utils/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,65 +1,146 @@
ARG PHP_VERSION=8.2
ARG PYTHON_VERSION=3.11
ARG RUST_VERSION=1.67.1
ARG ZIG_VERSION=0.11.0-dev.1606+3c2a43fdc
# TODO: nim 2.0.0
ARG GO_VERSION=1.21.1
ARG NIM_VERSION=1.6.6
ARG PHP_VERSION=8.2.10
ARG PYTHON_VERSION=3.11.5
ARG RUST_VERSION=1.72.0
ARG ZIG_VERSION=0.11.0

FROM debian:unstable

#######################################################################
# Foundations

FROM debian:unstable AS base-builder
# Install foundations-which-rarely-change up-front so we can cache them,
# and then install language-specific things on top
USER root
RUN apt update && apt install -y \
build-essential linux-perf valgrind vim git libsdl2-dev wget

# To build python (could most of these live in the py-builder image?)
RUN apt-get install -y --no-install-recommends \
make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev \
libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
RUN apt-get install -y mecab-ipadic-utf8

# Configure developer environment
ARG USER_ID
ARG GROUP_ID
RUN addgroup --gid $GROUP_ID dev || true
RUN adduser --disabled-password --gecos '' --uid $USER_ID --gid $GROUP_ID dev

# Install C++ tools
USER root
RUN apt update && apt install -y cmake clang-format-14 libfmt-dev

# Install Go tools
USER root
RUN apt update && apt install -y golang
#######################################################################
# Go

# Install Nim tools
USER root
RUN apt update && apt install -y nim
FROM base-builder AS go-builder
ARG GO_VERSION
USER dev
RUN wget https://go.dev/dl/go${GO_VERSION}.linux-$(dpkg --print-architecture).tar.gz -O - | tar -xz -C /tmp
RUN mv /tmp/go /home/dev/.go
ENV PATH="/home/dev/.go/bin:$PATH"


#######################################################################
# Nim

FROM base-builder AS nim-builder
ARG NIM_VERSION
USER dev
ENV CHOOSENIM_CHOOSE_VERSION=${NIM_VERSION}
RUN curl https://nim-lang.org/choosenim/init.sh -sSf | sh -s -- -y
ENV PATH="/home/dev/.nimble/bin:$PATH"
RUN nimble refresh

# Install PHP tools

#######################################################################
# PHP

FROM base-builder AS php-builder
ARG PHP_VERSION
USER dev
RUN wget https://www.php.net/distributions/php-${PHP_VERSION}.tar.gz -O /tmp/php.tar.gz
RUN tar -xzf /tmp/php.tar.gz -C /tmp
RUN cd /tmp/php-${PHP_VERSION} && ./configure --prefix=/home/dev/.php && make install
ENV PATH="/home/dev/.php/bin:$PATH"
RUN find /home/dev/.php
USER root
RUN apt update && apt install -y php${PHP_VERSION}-cli php${PHP_VERSION}-dev
RUN apt install -y autoconf
USER dev
RUN git clone https://github.com/Ponup/php-sdl ~/php-sdl && \
cd ~/php-sdl && phpize && ./configure && make

# Install Python tools

#######################################################################
# Python

FROM base-builder AS py-builder
ARG PYTHON_VERSION
USER root
RUN apt update && apt install -y python${PYTHON_VERSION} python${PYTHON_VERSION}-venv python${PYTHON_VERSION}-dev black
RUN mkdir -p /home/dev/.local/bin && ln -s /usr/bin/python${PYTHON_VERSION} /home/dev/.local/bin/python3
ENV PATH="/home/dev/.local/bin:$PATH"
USER dev
RUN git clone --depth=1 https://github.com/yyuu/pyenv /home/dev/.pyenv
ENV PYENV_ROOT="/home/dev/.pyenv"
ENV PATH="/home/dev/.pyenv/shims:/home/dev/.pyenv/bin:$PATH"
RUN pyenv install ${PYTHON_VERSION}
RUN pyenv global ${PYTHON_VERSION}
RUN pyenv rehash

# Install Rust tools

#######################################################################
# Rust

FROM base-builder AS rs-builder
ARG RUST_VERSION
USER dev
RUN wget -qO - https://sh.rustup.rs | sh -s -- --default-toolchain ${RUST_VERSION} -y
ENV PATH="/home/dev/.cargo/bin:$PATH"
RUN cargo search foo

# Install Zig tools

#######################################################################
# Zig

FROM base-builder AS zig-builder
ARG ZIG_VERSION
USER dev

# RUN wget https://ziglang.org/download/${ZIG_VERSION}/zig-linux-$(uname -m)-${ZIG_VERSION}.tar.xz -O /tmp/zig.tar.xz && \
RUN wget https://ziglang.org/builds/zig-linux-$(uname -m)-${ZIG_VERSION}.tar.xz -O /tmp/zig.tar.xz && \
mkdir ~/.zig && tar --strip-components=1 -C ~/.zig -xf /tmp/zig.tar.xz && rm -f /tmp/zig.tar.gz


#######################################################################
# Final image

FROM base-builder AS final

# Install C/C++ tools
USER root
RUN apt update && apt install -y cmake clang clang-format-14 libfmt-dev

# Install Go tools
COPY --from=go-builder /home/dev/.go /home/dev/.go
ENV PATH="/home/dev/.go/bin:$PATH"

# Install Nim tools
COPY --from=nim-builder --chown=dev:dev /home/dev/.choosenim /home/dev/.choosenim
COPY --from=nim-builder --chown=dev:dev /home/dev/.nimble /home/dev/.nimble
ENV PATH="/home/dev/.nimble/bin:$PATH"

# Install PHP tools
COPY --from=php-builder /home/dev/.php /home/dev/.php
ENV PATH="/home/dev/.php/bin:$PATH"

# Install Python tools
COPY --from=py-builder /home/dev/.pyenv /home/dev/.pyenv
ENV PYENV_ROOT="/home/dev/.pyenv"
ENV PATH="/home/dev/.pyenv/shims:/home/dev/.pyenv/bin:$PATH"

# Install Rust tools
COPY --from=rs-builder /home/dev/.rustup /home/dev/.rustup
COPY --from=rs-builder /home/dev/.cargo /home/dev/.cargo
ENV PATH="/home/dev/.cargo/bin:$PATH"

# Install Zig tools
COPY --from=zig-builder /home/dev/.zig /home/dev/.zig
ENV PATH="/home/dev/.zig:$PATH"

# Get ready to go
Expand Down

0 comments on commit 254d94c

Please sign in to comment.