# Primary image FROM mcr.microsoft.com/devcontainers/base:debian-12 # apt caching & install packages RUN rm -f /etc/apt/apt.conf.d/docker-clean && \ echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && \ apt-get install --no-install-recommends --no-install-suggests -qqy \ abiword \ autoconf \ build-essential \ ca-certificates \ curl \ ffmpeg \ ffmpegthumbnailer \ file \ gnupg \ iputils-ping \ libblas-dev \ libdb-dev \ libffi-dev \ libgdbm-dev \ libgdbm6 \ libgmp-dev \ libicu-dev \ liblapack-dev \ libncurses5-dev \ libpq-dev \ libreadline6-dev \ libreoffice \ libsqlite3-dev \ libssl-dev \ libyaml-dev \ patch \ pdftohtml \ pkg-config \ rustc \ uuid-dev \ watchman \ zlib1g-dev # Install vips dependencies RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && \ apt-get install --no-install-recommends --no-install-suggests -qqy \ automake \ gtk-doc-tools \ gobject-introspection \ libgirepository1.0-dev \ libglib2.0-dev \ libexpat1-dev \ libjpeg-dev \ libpng-dev \ libtiff5-dev \ libwebp-dev \ libheif-dev \ libexif-dev \ liblcms2-dev \ libxml2-dev \ libfftw3-dev \ liborc-0.4-dev \ libcgif-dev \ libjxl-dev \ libopenjp2-7-dev \ meson \ ninja-build # Install imagemagick from source RUN cd /tmp && \ wget -qO- https://imagemagick.org/archive/releases/ImageMagick-7.1.2-1.tar.xz | tar -xJ && \ cd ImageMagick-7.1.2-1 && \ ./configure && \ make -j$(nproc) && \ make install && \ ldconfig && \ cd / && \ rm -rf /tmp/ImageMagick-7.1.2-1* # Install vips from source RUN cd /tmp && \ wget -qO- https://github.com/libvips/libvips/releases/download/v8.17.1/vips-8.17.1.tar.xz | tar -xJ && \ cd vips-8.17.1 && \ meson setup build --prefix=/usr/local -Dcgif=enabled && \ cd build && \ ninja && \ ninja install && \ ldconfig && \ cd / && \ rm -rf /tmp/vips-8.17.1* # Install postgres 15 client RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ sudo install -d /usr/share/postgresql-common/pgdg && \ curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc && \ sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' && \ sudo apt update && \ sudo apt-get install --no-install-recommends --no-install-suggests -qqy \ postgresql-client-17 # Install & configure delta diff tool RUN wget -O- https://github.com/dandavison/delta/releases/download/0.18.2/git-delta_0.18.2_amd64.deb > /tmp/git-delta.deb && \ sudo dpkg -i /tmp/git-delta.deb && \ rm /tmp/git-delta.deb RUN git config --system core.pager "delta" && \ git config --system interactive.diffFilter "delta --color-only" && \ git config --system delta.navigate "true" && \ git config --system delta.dark "true" && \ git config --system delta.side-by-side "true" && \ git config --system merge.conflictstyle "zdiff3" && \ git config --system core.editor "cursor --wait" && \ git config --system diff.algorithm "histogram" && \ git config --system diff.colorMoved "default" # Install ruby USER vscode RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv ENV PATH="/home/vscode/.rbenv/bin:/home/vscode/.rbenv/shims:$PATH" RUN echo 'eval "$(rbenv init - --no-rehash bash)"' >> ~/.bashrc RUN git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build RUN rbenv install 3.4.4 && \ rbenv global 3.4.4 ENV RAILS_ENV development # Pre install gems to speed up container startup USER root RUN mkdir -p /tmp/bundle-install-cache && \ chown -R vscode:vscode /tmp/bundle-install-cache WORKDIR /tmp/bundle-install-cache USER vscode COPY Gemfile.lock Gemfile ./ COPY gems/has_aux_table ./gems/has_aux_table RUN BUNDLE_FROZEN=true MAKE="make -j$(nproc)" bundle install --jobs $(nproc) # install exo RUN curl -sL https://exo.deref.io/install | bash ENV PATH "/home/vscode/.exo/bin:$PATH" # install just (command runner) RUN curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | sudo bash -s -- --to /usr/local/bin