# syntax=docker/dockerfile:1 FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build WORKDIR /src COPY TuneRipper.Shared/TuneRipper.Shared.csproj TuneRipper.Shared/ COPY TuneRipper/TuneRipper.csproj TuneRipper/ COPY TuneRipper.Api/TuneRipper.Api.csproj TuneRipper.Api/ RUN dotnet restore TuneRipper.Api/TuneRipper.Api.csproj \ && dotnet restore TuneRipper/TuneRipper.csproj COPY . . RUN dotnet publish TuneRipper/TuneRipper.csproj -c Release -o /out/client --no-restore \ && dotnet publish TuneRipper.Api/TuneRipper.Api.csproj -c Release -o /out/api --no-restore FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble AS runtime ARG TARGETARCH ARG YT_DLP_VERSION=2026.08.19 RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates curl ffmpeg \ && case "$TARGETARCH" in \ amd64) asset="yt-dlp_linux" ;; \ arm64) asset="yt-dlp_linux_aarch64" ;; \ *) echo "Unsupported architecture: $TARGETARCH" >&2; exit 1 ;; \ esac \ && cd /tmp \ && curl -fsSLO "https://github.com/yt-dlp/yt-dlp/releases/download/${YT_DLP_VERSION}/${asset}" \ && curl -fsSLO "https://github.com/yt-dlp/yt-dlp/releases/download/${YT_DLP_VERSION}/SHA2-256SUMS" \ && grep " ${asset}$" SHA2-256SUMS | sha256sum -c - \ && install -m 0755 "$asset" /usr/local/bin/yt-dlp \ && rm -f "$asset" SHA2-256SUMS \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=build /out/api/ ./ COPY --from=build /out/client/wwwroot/ ./wwwroot/ RUN mkdir -p /data/downloads \ && chown -R app:app /app /data/downloads USER app ENV ASPNETCORE_URLS=http://+:8080 \ ASPNETCORE_ENVIRONMENT=Production \ YtDlp__ExecutablePath=/usr/local/bin/yt-dlp \ YtDlp__FfmpegExecutablePath=/usr/bin/ffmpeg \ Storage__DownloadsPath=/data/downloads EXPOSE 8080 ENTRYPOINT ["dotnet", "TuneRipper.Api.dll"]