# Used this to build the release version of the image. # Build the executable ARG SWIFT_IMAGE_VERSION="6.0.3" # ============================================================ # Build Swift Image # ============================================================ FROM docker.io/swift:${SWIFT_IMAGE_VERSION} AS build # Install OS updates RUN export DEBIAN_FRONTEND=nointeractive DEBCONF_NOINTERACTIVE_SEEN=true && \ apt-get -q update && \ apt-get -q dist-upgrade -y && \ apt-get install -y libjemalloc-dev WORKDIR /build # Resolve dependencies, this creates a cached layer. COPY ./Package.* ./ RUN --mount=type=cache,target=/build/.build swift package resolve COPY . . # Build the application. RUN --mount=type=cache,target=/build/.build \ swift build -c release \ --product hpa \ --static-swift-stdlib \ -Xlinker -ljemalloc # Switch to staging area. WORKDIR /staging # Copy main executable to staging area. RUN --mount=type=cache,target=/build/.build \ cp "$(swift build --package-path /build -c release --show-bin-path)/hpa" ./ # ============================================================ # Run Image # ============================================================ FROM docker.io/ubuntu:noble # Update base image and install needed packages. # # NOTE: NB: Installs vim as minimal text editor to use inside the container, bc # when I mount my home directory / use my neovim config it requires # neovim v11+, but generally only going to edit ansible vault files # inside the container. RUN export DEBIAN_FRONTEND=nointeractive DEBCONF_NOINTERACTIVE_SEEN=true && \ apt-get -q update && \ apt-get -q dist-upgrade -y && \ apt-get -q install -y \ ansible \ curl \ imagemagick \ just \ pandoc \ texlive \ texlive-xetex \ libjemalloc2 \ libcurl4 \ tzdata \ vim \ && rm -r /var/lib/apt/lists/* # Install the hpa executable. COPY --from=build /staging/hpa /usr/local/bin # Install the entrypoint script and make execuatable. COPY docker/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh # Set workdir and volume mounts. WORKDIR /root VOLUME /root ENTRYPOINT [ "/entrypoint.sh" ] CMD ["--help"]