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 CACHEBUST=1 ENV CACHEBUST=$CACHEBUST RUN OSU_VERSION=$(curl -s https://api.github.com/repos/ppy/osu/releases/latest | jq -r .tag_name) \ && 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 RUN for ruleset in \ "Bosu|https://github.com/EVAST9919/bosu" \ "Hitokori|https://github.com/Flutterish/Hitokori" \ "Karaoke|https://github.com/karaoke-dev/karaoke" \ "Mvis|https://github.com/EVAST9919/lazer-m-vis" \ "Rush|https://github.com/swoolcock/rush" \ "Sentakki|https://github.com/LumpBloom7/sentakki" \ "Swing|https://github.com/EVAST9919/lazer-swing" \ "Tau|https://github.com/Altenhh/tau" \ ; do \ repo_url="$(echo $ruleset | cut -d'|' -f2)" \ && assembly_name="osu.Game.Rulesets.$(echo $ruleset | cut -d'|' -f1)" \ && git clone --depth=1 "$repo_url" ruleset \ && cd ruleset \ && dotnet build \ -c Release \ "$assembly_name" \ && cp "${assembly_name}"/bin/Release/net*/"${assembly_name}".dll /opt/osu/ \ && cd .. \ && rm -rf ruleset \ ; done 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 \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /opt/osu/ /opt/osu/ RUN adduser --disabled-password --gecos '' osu USER osu ENTRYPOINT ["/opt/osu/osu!"]