Update 3rd party rulesets

Some did not build and were removed. This change also makes building
much faster, as the build now caches NuGet packages and uses one stage
per ruleset, so they can be built in parallel (by passing `--jobs N`).
This commit is contained in:
Simon Bruder 2024-05-09 02:31:43 +02:00
parent 11957cddba
commit 3ed6442b49
Signed by: simon
GPG key ID: 347FF8699CDA0776
3 changed files with 47 additions and 23 deletions

View file

@ -1,3 +1,4 @@
# Builder for base osu!
FROM mcr.microsoft.com/dotnet/sdk:8.0 as builder
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
@ -8,7 +9,7 @@ RUN apt-get update \
ARG OSU_VERSION
ENV OSU_VERSION=$OSU_VERSION
RUN echo "Downloading and building osu! ${OSU_VERSION}" >&2 \
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 \
@ -19,27 +20,25 @@ RUN echo "Downloading and building osu! ${OSU_VERSION}" >&2 \
-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
# Generic builder for rulesets (using onbuild and args)
FROM mcr.microsoft.com/dotnet/sdk:8.0 as builder-ruleset-generic
COPY ./build-ruleset.sh /usr/local/bin/build-ruleset
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
FROM mcr.microsoft.com/dotnet/runtime:8.0
@ -53,6 +52,11 @@ RUN apt-get update \
&& 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

View file

@ -6,9 +6,11 @@
Using podman/buildah:
buildah build --format docker --layers -t osu --build-arg OSU_VERSION=2024.412.1
buildah build --format docker --layers -t osu --build-arg OSU_VERSION=2024.412.1 --jobs 0
Change `2024.412.1` to the newest osu! version.
By changing `--jobs 0` to a positive integer N,
at most N build stages will be run in parallel.
### Running

18
build-ruleset.sh Executable file
View file

@ -0,0 +1,18 @@
#!/usr/bin/env bash
set -euo pipefail
RULESET_URL="$1"
git clone --depth=1 "${RULESET_URL}" ruleset
pushd ruleset
ASSEMBLY_NAME="$(basename "$(find . -iname '*.sln' -printf '%f\n' | head -n1)" .sln)"
dotnet build -c Release ${ASSEMBLY_NAME}
case "${ASSEMBLY_NAME}" in
# special build steps can be put here
*)
mkdir /dlls
mv ${ASSEMBLY_NAME}/bin/Release/net*/${ASSEMBLY_NAME}.dll /dlls/
;;
esac
popd
rm -rf ruleset