78 lines
2.1 KiB
Docker
Executable File
78 lines
2.1 KiB
Docker
Executable File
# 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 \
|
|
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 && mkdir /root/project
|
|
|
|
# Set workdir and volume mounts.
|
|
WORKDIR /root/project
|
|
VOLUME /root/project
|
|
|
|
ENTRYPOINT [ "/entrypoint.sh" ]
|
|
CMD ["--help"]
|