# Builder for base osu! FROM mcr.microsoft.com/dotnet/sdk:8.0 as builder ENV DOTNET_CLI_TELEMETRY_OPTOUT 1 RUN apt-get update \ && apt-get -y install jq ARG OSU_VERSION ENV OSU_VERSION=$OSU_VERSION RUN --mount=type=cache,target=/root/.nuget/packages --mount=type=cache,target=/root/.local/share/NuGet/http-cache echo "Downloading and building osu! ${OSU_VERSION}" >&2 \ && git clone --depth=1 --single-branch -b ${OSU_VERSION} https://github.com/ppy/osu \ && cd osu \ && dotnet publish \ -c Release \ -r linux-x64 \ --no-self-contained \ -o /opt/osu/ \ -p:Version=${OSU_VERSION} \ osu.Desktop # Generic builder for rulesets FROM mcr.microsoft.com/dotnet/sdk:8.0 as builder-ruleset-generic COPY ./build-ruleset.sh /usr/local/bin/build-ruleset # External rulesets FROM builder-ruleset-generic as builder-swing RUN --mount=type=cache,target=/root/.nuget/packages --mount=type=cache,target=/root/.local/share/NuGet/http-cache build-ruleset https://github.com/EVAST9919/lazer-swing FROM builder-ruleset-generic as builder-tau RUN --mount=type=cache,target=/root/.nuget/packages --mount=type=cache,target=/root/.local/share/NuGet/http-cache build-ruleset https://github.com/Altenhh/tau FROM builder-ruleset-generic as builder-bosu RUN --mount=type=cache,target=/root/.nuget/packages --mount=type=cache,target=/root/.local/share/NuGet/http-cache build-ruleset https://github.com/EVAST9919/bosu FROM builder-ruleset-generic as builder-rush RUN --mount=type=cache,target=/root/.nuget/packages --mount=type=cache,target=/root/.local/share/NuGet/http-cache build-ruleset https://github.com/swoolcock/rush FROM builder-ruleset-generic as builder-sentakki RUN --mount=type=cache,target=/root/.nuget/packages --mount=type=cache,target=/root/.local/share/NuGet/http-cache build-ruleset https://github.com/LumpBloom7/sentakki # Runtime container FROM mcr.microsoft.com/dotnet/runtime:8.0 RUN apt-get update \ && apt-get -y install --no-install-recommends \ ffmpeg \ libegl1-mesa-dev \ libgbm1 \ libgl1 \ pulseaudio \ xdg-utils \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /opt/osu/ /opt/osu/ COPY --from=builder-swing /dlls/*.dll /opt/osu/ COPY --from=builder-tau /dlls/*.dll /opt/osu/ COPY --from=builder-bosu /dlls/*.dll /opt/osu/ COPY --from=builder-rush /dlls/*.dll /opt/osu/ COPY --from=builder-sentakki /dlls/*.dll /opt/osu/ RUN adduser --disabled-password --gecos '' osu USER osu WORKDIR /home/osu RUN mkdir -p .local/share/applications ENTRYPOINT ["/opt/osu/osu!"]