diff --git a/.github/workflows/utils.yml b/.github/workflows/utils.yml index 0ef782e..0b90055 100644 --- a/.github/workflows/utils.yml +++ b/.github/workflows/utils.yml @@ -27,31 +27,6 @@ jobs: uses: actions/checkout@v4 with: submodules: recursive - - name: Initialise docker cache - uses: jpribyl/action-docker-layer-caching@v0.1.1 - continue-on-error: true - # Building in stages to keep the logs navigable - - name: Build Container (Base) - working-directory: utils - run: docker build --build-arg USER_ID="$(id -u)" --build-arg GROUP_ID="$(id -g)" -t rosettaboy-base --target base-builder . - - name: Build Container (Go) - working-directory: utils - run: docker build --build-arg USER_ID="$(id -u)" --build-arg GROUP_ID="$(id -g)" -t rosettaboy-go --target go-builder . - - name: Build Container (Nim) - working-directory: utils - run: docker build --build-arg USER_ID="$(id -u)" --build-arg GROUP_ID="$(id -g)" -t rosettaboy-nim --target nim-builder . - - name: Build Container (PHP) - working-directory: utils - run: docker build --build-arg USER_ID="$(id -u)" --build-arg GROUP_ID="$(id -g)" -t rosettaboy-php --target php-builder . - - name: Build Container (Python) - working-directory: utils - run: docker build --build-arg USER_ID="$(id -u)" --build-arg GROUP_ID="$(id -g)" -t rosettaboy-py --target py-builder . - - name: Build Container (Rust) - working-directory: utils - run: docker build --build-arg USER_ID="$(id -u)" --build-arg GROUP_ID="$(id -g)" -t rosettaboy-rs --target rs-builder . - - name: Build Container (Zig) - working-directory: utils - run: docker build --build-arg USER_ID="$(id -u)" --build-arg GROUP_ID="$(id -g)" -t rosettaboy-zig --target zig-builder . - name: Build Container working-directory: utils run: docker build --build-arg USER_ID="$(id -u)" --build-arg GROUP_ID="$(id -g)" -t rosettaboy . diff --git a/utils/Dockerfile b/utils/Dockerfile index 2864c3a..37d5760 100644 --- a/utils/Dockerfile +++ b/utils/Dockerfile @@ -1,130 +1,8 @@ -ARG GO_VERSION=1.22.2 -ARG NIM_VERSION=2.0.2 -ARG PHP_VERSION=8.3.4 -# 3.12.2 -ARG PYTHON_VERSION=3.11.5 -ARG RUST_VERSION=1.77.1 -ARG ZIG_VERSION=0.11.0 - - -####################################################################### -# Foundations - -FROM debian:unstable AS base-pkgs -# Install foundations-which-rarely-change up-front so we can cache -# them, and then install language-specific things on top +FROM debian:unstable AS final USER root RUN apt update && apt install -y \ build-essential linux-perf valgrind vim git mercurial libsdl2-dev wget curl sudo -FROM base-pkgs AS base-builder -# build in /home/dev using a static user ID so that we don't -# need to rebuild the world when USER_ID / GROUP_ID changes, -# then copy to /home/dev using a dynamic user ID later -RUN adduser --disabled-password dev - - -####################################################################### -# Go - -FROM base-builder AS go-builder -ARG GO_VERSION -USER dev -RUN mkdir /home/dev/.go \ - && wget -nv https://go.dev/dl/go${GO_VERSION}.linux-$(dpkg --print-architecture).tar.gz -O - \ - | tar --strip-components=1 -xz -C /home/dev/.go -ENV PATH="/home/dev/.go/bin:$PATH" - - -####################################################################### -# Nim - -FROM base-builder AS nim-builder -ARG NIM_VERSION -USER dev -ENV PATH="/home/dev/.nim/bin:$PATH" -# choosenim doesn't work on arm64 D: -#ENV CHOOSENIM_CHOOSE_VERSION=${NIM_VERSION} -#RUN curl https://nim-lang.org/choosenim/init.sh -sSf | sh -s -- -y && \ -# nimble refresh -RUN wget -nv https://nim-lang.org/download/nim-${NIM_VERSION}.tar.xz -O - \ - | tar -xJ -C /tmp -RUN cd /tmp/nim-${NIM_VERSION} \ - && ./build.sh \ - && bin/nim c koch \ - && ./koch boot -d:release \ - && ./koch tools \ - && ./install.sh /tmp/install-nim \ - && mv /tmp/install-nim/nim /home/dev/.nim \ - && cp ./bin/nimble /home/dev/.nim/bin/ \ - && nimble refresh - -####################################################################### -# PHP - -FROM base-builder AS php-builder -ARG PHP_VERSION -RUN apt-get install -y libxml2-dev libsqlite3-dev libssl-dev autoconf -USER dev -RUN wget -nv https://www.php.net/distributions/php-${PHP_VERSION}.tar.gz -O - \ - | tar -xz -C /tmp -RUN cd /tmp/php-${PHP_VERSION} && ./configure --prefix=/home/dev/.php --with-openssl && make -j install -ENV PATH="/home/dev/.php/bin:$PATH" -RUN curl https://getcomposer.org/installer | php -- --quiet --install-dir=/home/dev/.php/bin/ --filename=composer -RUN git clone https://github.com/Ponup/php-sdl ~/php-sdl \ - && cd ~/php-sdl && phpize && ./configure && make -j - - -####################################################################### -# Python - -FROM base-builder AS py-builder -ARG PYTHON_VERSION -USER root -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 \ - && apt-get install -y mecab-ipadic-utf8 -USER dev -ENV PYENV_ROOT="/home/dev/.pyenv" -ENV PATH="/home/dev/.pyenv/shims:/home/dev/.pyenv/bin:$PATH" -RUN git clone --depth=1 https://github.com/yyuu/pyenv /home/dev/.pyenv \ - && pyenv install ${PYTHON_VERSION} \ - && pyenv global ${PYTHON_VERSION} \ - && pyenv rehash - - -####################################################################### -# Rust - -FROM base-builder AS rs-builder -ARG RUST_VERSION -USER dev -ENV PATH="/home/dev/.cargo/bin:$PATH" -RUN wget -nv -qO - https://sh.rustup.rs | sh -s -- --default-toolchain ${RUST_VERSION} -y \ - && cargo search foo -# Cranelift is only in nightly -RUN rustup toolchain install nightly \ - && rustup component add rustc-codegen-cranelift-preview --toolchain nightly - - -####################################################################### -# Zig - -FROM base-builder AS zig-builder -ARG ZIG_VERSION -USER dev -RUN mkdir /home/dev/.zig \ - && wget -nv https://ziglang.org/builds/zig-linux-$(uname -m)-${ZIG_VERSION}.tar.xz -O - \ - | tar --strip-components=1 -C ~/.zig -xJ - - -####################################################################### -# Final image - -FROM base-pkgs AS final - # Configure developer environment ARG USER_ID=1000 ARG GROUP_ID=$USER_ID @@ -139,29 +17,29 @@ USER root RUN apt update && apt install -y cmake clang clang-format-14 libfmt-dev # Install Go tools -COPY --from=go-builder --chown=${USER_ID}:${GROUP_ID} /home/dev/.go /home/dev/.go +COPY --from=shish2k/rosettaboy-devkit-go:1.22.2 --chown=${USER_ID}:${GROUP_ID} /home/dev/.go /home/dev/.go ENV PATH="/home/dev/.go/bin:$PATH" # Install Nim tools -COPY --from=nim-builder --chown=${USER_ID}:${GROUP_ID} /home/dev/.nim /home/dev/.nim +COPY --from=shish2k/rosettaboy-devkit-nim:2.0.2 --chown=${USER_ID}:${GROUP_ID} /home/dev/.nim /home/dev/.nim ENV PATH="/home/dev/.nim/bin:$PATH" # Install PHP tools -COPY --from=php-builder --chown=${USER_ID}:${GROUP_ID} /home/dev/.php /home/dev/.php +COPY --from=shish2k/rosettaboy-devkit-php:8.3.4 --chown=${USER_ID}:${GROUP_ID} /home/dev/.php /home/dev/.php ENV PATH="/home/dev/.php/bin:$PATH" # Install Python tools -COPY --from=py-builder --chown=${USER_ID}:${GROUP_ID} /home/dev/.pyenv /home/dev/.pyenv +COPY --from=shish2k/rosettaboy-devkit-python:3.11.5 --chown=${USER_ID}:${GROUP_ID} /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 --chown=${USER_ID}:${GROUP_ID} /home/dev/.rustup /home/dev/.rustup -COPY --from=rs-builder --chown=${USER_ID}:${GROUP_ID} /home/dev/.cargo /home/dev/.cargo +COPY --from=shish2k/rosettaboy-devkit-rust:1.77.1 --chown=${USER_ID}:${GROUP_ID} /home/dev/.rustup /home/dev/.rustup +COPY --from=shish2k/rosettaboy-devkit-rust:1.77.1 --chown=${USER_ID}:${GROUP_ID} /home/dev/.cargo /home/dev/.cargo ENV PATH="/home/dev/.cargo/bin:$PATH" # Install Zig tools -COPY --from=zig-builder --chown=${USER_ID}:${GROUP_ID} /home/dev/.zig /home/dev/.zig +COPY --from=shish2k/rosettaboy-devkit-zig:0.11.0 --chown=${USER_ID}:${GROUP_ID} /home/dev/.zig /home/dev/.zig ENV PATH="/home/dev/.zig:$PATH" # Get ready to go