63 lines
2.8 KiB
Text
63 lines
2.8 KiB
Text
# syntax=docker/dockerfile:1.7
|
|
# Bootstrap only when no F# Runner image is available; Project Delivery owns the canonical build.
|
|
|
|
ARG SDK=10.0.403-noble@sha256:de4fe90a98845d75910b9769662465c84de1a934665c431279d1382b2bddc02b
|
|
ARG RUNTIME=10.0.14@sha256:a3f9f81954b9c810af2ed18849716c8dc74a4707bd0907fdbd69be81554c0f30
|
|
ARG APKO=cgr.dev/chainguard/apko@sha256:c53d15d53090012cdc9f138b667a73a283b0b5bba1b61963ae84be6e28cfe5a0
|
|
|
|
FROM ${APKO} AS apko
|
|
|
|
FROM mcr.microsoft.com/dotnet/sdk:${SDK} AS build-root
|
|
|
|
ARG TARGETARCH
|
|
|
|
COPY --from=apko /usr/bin/apko /usr/local/bin/apko
|
|
COPY services/project-delivery/k8s/workflows/fsharp-runner/fsharp-runner.apko.yaml services/project-delivery/k8s/workflows/fsharp-runner/fsharp-runner.apko.lock.json /configuration/
|
|
|
|
RUN set -eu; \
|
|
case "$TARGETARCH" in \
|
|
amd64) arch=x86_64 ;; \
|
|
arm64) arch=arm64 ;; \
|
|
*) exit 1 ;; \
|
|
esac; \
|
|
mkdir -p /image /rootfs; \
|
|
apko build --sbom=false --arch "$arch" --lockfile /configuration/fsharp-runner.apko.lock.json /configuration/fsharp-runner.apko.yaml fsharp-runner:root /image/root.tar; \
|
|
mkdir /image/export; \
|
|
tar -xf /image/root.tar -C /image/export; \
|
|
tar --exclude=dev --exclude=./dev -xf /image/export/*.tar.gz -C /rootfs; \
|
|
rm -rf /rootfs/dev /rootfs/usr/share/bash-completion /rootfs/usr/share/doc /rootfs/usr/share/man
|
|
|
|
FROM mcr.microsoft.com/dotnet/sdk:${SDK} AS sdk
|
|
|
|
COPY packages/fsharp-runner/global.json /source/global.json
|
|
COPY packages/fsharp-runner/Directory.Build.props /Directory.Build.props
|
|
COPY packages/fsharp-runner/runner.csproj packages/fsharp-runner/packages.lock.json /restore/
|
|
COPY packages/fsharp-runner/oci/ /oci/
|
|
COPY packages/fsharp-runner/hostexec/ /hostexec/
|
|
|
|
RUN mkdir /packages && \
|
|
dotnet restore --locked-mode --packages /packages /restore/runner.csproj && \
|
|
dotnet build --configuration Release --no-restore --output /managed-out /restore/runner.csproj && \
|
|
dotnet publish --configuration Release --output /oci-out /oci/Oci.csproj && \
|
|
dotnet publish --configuration Release --output /host-out /hostexec/HostExec.csproj
|
|
|
|
FROM mcr.microsoft.com/dotnet/runtime:${RUNTIME} AS runtime
|
|
|
|
FROM scratch
|
|
|
|
COPY --from=build-root /rootfs/ /
|
|
COPY --from=runtime /usr/share/dotnet/ /usr/share/dotnet/
|
|
COPY --from=sdk /usr/share/dotnet/sdk/10.0.403/FSharp/ /opt/fsi/
|
|
COPY --from=sdk /managed-out/AWSSDK.Core.dll /managed-out/AWSSDK.S3.dll /managed-out/SharpCompress.dll /managed-out/ZstdSharp.dll /opt/fsi/packages/
|
|
COPY --from=sdk /oci-out/Oci.dll /opt/fsi/packages/Oci.dll
|
|
COPY --from=sdk /host-out/HostExec.dll /host-out/HostExec.deps.json /host-out/HostExec.runtimeconfig.json /opt/fsi/packages/
|
|
|
|
ENV DOTNET_MULTILEVEL_LOOKUP=0
|
|
ENV DOTNET_ROOT=/usr/share/dotnet
|
|
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
|
|
ENV HOME=/tmp
|
|
|
|
USER 65532:65532
|
|
WORKDIR /work
|
|
|
|
ENTRYPOINT ["/usr/share/dotnet/dotnet", "/opt/fsi/fsi.dll", "--exec"]
|