Skip to content
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

[devkit] use pre-built devkits #199

Merged
merged 1 commit into from
Apr 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 0 additions & 25 deletions .github/workflows/utils.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,31 +27,6 @@ jobs:
uses: actions/checkout@v4
with:
submodules: recursive
- name: Initialise docker cache
uses: jpribyl/[email protected]
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 .
Expand Down
138 changes: 8 additions & 130 deletions utils/Dockerfile
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down