# 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"]