From 649bdbf7282345e3d0b5fabea797e880c510891f Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Tue, 4 Nov 2025 09:10:54 -0500 Subject: [PATCH] feat: Updates Dockerfile, WIP --- docker/Dockerfile | 65 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 7 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 47e69fa..33be46c 100755 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -2,23 +2,74 @@ # Build the executable ARG SWIFT_IMAGE_VERSION="6.0.3" -FROM swift:${SWIFT_IMAGE_VERSION} AS build +# ============================================================ +# 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 swift package resolve +RUN --mount=type=cache,target=/build/.build swift package resolve + COPY . . -RUN swift build -c release -Xswiftc -g -# Run image -FROM swift:${SWIFT_IMAGE_VERSION}-slim +# Build the application. +RUN --mount=type=cache,target=/build/.build \ + swift build -c release \ + --product hpa \ + --static-swift-stdlib \ + -Xlinker -ljemalloc -RUN export DEBIAN_FRONTEND=nointeractive DEBCONF_NOINTERACTIVE_SEEN=true && apt-get -q update && \ +# 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 + +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 \ pandoc \ texlive \ + libjemalloc2 \ + libcurl4 \ + tzdata \ && rm -r /var/lib/apt/lists/* -COPY --from=build /build/.build/release/hpa /usr/local/bin +COPY --from=build /staging/hpa /usr/local/bin + +# Setup completion +RUN mkdir /root/.bash_completion && \ + echo "source /root/.bash_completion/hpa.bash" >>/root/.bashrc && \ + /usr/local/bin/hpa --generate-completion-script bash >/root/.bash_completion/hpa.bash + +# Setup volumes +RUN mkdir /config && \ + mkdir /consults && \ + mkdir /playbook && \ + mkdir /template && \ + mkdir -p /root/.local/share/hpa && \ + ln -sfv /config /root/.config && \ + ln -sfv /playbook /root/.local/share/hpa/playbook + +VOLUME /config /consults /playbook /template + CMD ["/bin/bash", "-xc", "/usr/local/bin/hpa"]