FROM alpine:3.22 AS base WORKDIR /app FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build WORKDIR /src COPY ["RobotNet.ScriptManager/RobotNet.ScriptManager.csproj", "RobotNet.ScriptManager/"] COPY ["RobotNet.Script.Shares/RobotNet.Script.Shares.csproj", "RobotNet.Script.Shares/"] COPY ["RobotNet.RobotShares/RobotNet.RobotShares.csproj", "RobotNet.RobotShares/"] COPY ["RobotNet.MapShares/RobotNet.MapShares.csproj", "RobotNet.MapShares/"] COPY ["RobotNet.Script/RobotNet.Script.csproj", "RobotNet.Script/"] COPY ["RobotNet.Script.Expressions/RobotNet.Script.Expressions.csproj", "RobotNet.Script.Expressions/"] COPY ["RobotNet.Shares/RobotNet.Shares.csproj", "RobotNet.Shares/"] COPY ["RobotNet.OpenIddictClient/RobotNet.OpenIddictClient.csproj", "RobotNet.OpenIddictClient/"] COPY ["RobotNet.Clients/RobotNet.Clients.csproj", "RobotNet.Clients/"] # RUN dotnet package remove "Microsoft.EntityFrameworkCore.Tools" --project "RobotNet.ScriptManager/RobotNet.ScriptManager.csproj" RUN dotnet restore "RobotNet.ScriptManager/RobotNet.ScriptManager.csproj" COPY RobotNet.Script/ RobotNet.Script/ COPY RobotNet.Script.Expressions/ RobotNet.Script.Expressions/ RUN rm -rf ./RobotNet.Script/bin RUN rm -rf ./RobotNet.Script/obj RUN rm -rf ./RobotNet.Script.Expressions/bin RUN rm -rf ./RobotNet.Script.Expressions/obj WORKDIR "/src/RobotNet.Script" RUN dotnet build "RobotNet.Script.csproj" -c Release -o /app/script/ WORKDIR /src COPY RobotNet.ScriptManager/ RobotNet.ScriptManager/ COPY RobotNet.Script.Shares/ RobotNet.Script.Shares/ COPY RobotNet.RobotShares/ RobotNet.RobotShares/ COPY RobotNet.MapShares/ RobotNet.MapShares/ COPY RobotNet.Script/ RobotNet.Script/ COPY RobotNet.Shares/ RobotNet.Shares/ COPY RobotNet.OpenIddictClient/ RobotNet.OpenIddictClient/ COPY RobotNet.Clients/ RobotNet.Clients/ RUN rm -rf ./RobotNet.ScriptManager/bin RUN rm -rf ./RobotNet.ScriptManager/obj RUN rm -rf ./RobotNet.Script.Shares/bin RUN rm -rf ./RobotNet.Script.Shares/obj RUN rm -rf ./RobotNet.RobotShares/bin RUN rm -rf ./RobotNet.RobotShares/obj RUN rm -rf ./RobotNet.MapShares/bin RUN rm -rf ./RobotNet.MapShares/obj RUN rm -rf ./RobotNet.Script/bin RUN rm -rf ./RobotNet.Script/obj RUN rm -rf ./RobotNet.Shares/bin RUN rm -rf ./RobotNet.Shares/obj RUN rm -rf ./RobotNet.OpenIddictClient/bin RUN rm -rf ./RobotNet.OpenIddictClient/obj RUN rm -rf ./RobotNet.Clients/bin RUN rm -rf ./RobotNet.Clients/obj RUN rm /src/RobotNet.ScriptManager/wwwroot/dlls/* RUN cp /app/script/RobotNet.Script.dll /src/RobotNet.ScriptManager/wwwroot/dlls/ RUN cp /app/script/RobotNet.Script.xml /src/RobotNet.ScriptManager/wwwroot/dlls/ RUN cp /app/script/RobotNet.Script.Expressions.dll /src/RobotNet.ScriptManager/wwwroot/dlls/ RUN cp /app/script/RobotNet.Script.Expressions.xml /src/RobotNet.ScriptManager/wwwroot/dlls/ RUN cp /usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/$DOTNET_VERSION/ref/net9.0/System.Collections.dll /src/RobotNet.ScriptManager/wwwroot/dlls/ RUN cp /usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/$DOTNET_VERSION/ref/net9.0/System.Linq.Expressions.dll /src/RobotNet.ScriptManager/wwwroot/dlls/ RUN cp /usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/$DOTNET_VERSION/ref/net9.0/System.Runtime.dll /src/RobotNet.ScriptManager/wwwroot/dlls/ WORKDIR "/src/RobotNet.ScriptManager" RUN dotnet build "RobotNet.ScriptManager.csproj" -c Release -o /app/build FROM build AS publish WORKDIR /src/RobotNet.ScriptManager RUN dotnet publish "RobotNet.ScriptManager.csproj" \ -c Release \ -o /app/publish \ --runtime linux-musl-x64 \ --self-contained true \ /p:PublishTrimmed=false \ /p:PublishReadyToRun=true WORKDIR /app/publish RUN mkdir -p /app/publish/scripts RUN mkdir -p /app/publish/dlls RUN cp /app/build/RobotNet.Script.dll /app/publish/dlls/RobotNet.Script.dll RUN cp /app/build/RobotNet.Script.Expressions.dll /app/publish/dlls/RobotNet.Script.Expressions.dll RUN cp /usr/share/dotnet/shared/Microsoft.NETCore.App/$DOTNET_VERSION/System.Linq.Expressions.dll /app/publish/dlls/ RUN cp /usr/share/dotnet/shared/Microsoft.NETCore.App/$DOTNET_VERSION/System.Private.CoreLib.dll /app/publish/dlls/ RUN cp /usr/share/dotnet/shared/Microsoft.NETCore.App/$DOTNET_VERSION/System.Runtime.dll /app/publish/dlls/ FROM base AS final WORKDIR /app COPY --from=publish /app/publish /app/ RUN apk add --no-cache icu-libs tzdata ca-certificates RUN echo '#!/bin/sh' >> ./start.sh RUN echo 'update-ca-certificates' >> ./start.sh RUN echo 'cd /app' >> ./start.sh RUN echo 'exec ./RobotNet.ScriptManager' >> ./start.sh RUN chmod +x ./RobotNet.ScriptManager RUN chmod +x ./start.sh # Use the start script to ensure certificates are updated before starting the application EXPOSE 443 ENTRYPOINT ["./start.sh"]