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 FROM mcr.microsoft.com/dotnet/sdk:8.0 as builder
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1 ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
@ -8,7 +9,7 @@ RUN apt-get update \
ARG OSU_VERSION ARG OSU_VERSION
ENV OSU_VERSION=$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 \ && git clone --depth=1 --single-branch -b ${OSU_VERSION} https://github.com/ppy/osu \
&& cd osu \ && cd osu \
&& dotnet publish \ && dotnet publish \
@ -19,27 +20,25 @@ RUN echo "Downloading and building osu! ${OSU_VERSION}" >&2 \
-p:Version=${OSU_VERSION} \ -p:Version=${OSU_VERSION} \
osu.Desktop osu.Desktop
RUN for ruleset in \ # Generic builder for rulesets (using onbuild and args)
"Bosu|https://github.com/EVAST9919/bosu" \ FROM mcr.microsoft.com/dotnet/sdk:8.0 as builder-ruleset-generic
"Hitokori|https://github.com/Flutterish/Hitokori" \
"Karaoke|https://github.com/karaoke-dev/karaoke" \ COPY ./build-ruleset.sh /usr/local/bin/build-ruleset
"Mvis|https://github.com/EVAST9919/lazer-m-vis" \
"Rush|https://github.com/swoolcock/rush" \ FROM builder-ruleset-generic as builder-swing
"Sentakki|https://github.com/LumpBloom7/sentakki" \ 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
"Swing|https://github.com/EVAST9919/lazer-swing" \
"Tau|https://github.com/Altenhh/tau" \ FROM builder-ruleset-generic as builder-tau
; do \ 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
repo_url="$(echo $ruleset | cut -d'|' -f2)" \
&& assembly_name="osu.Game.Rulesets.$(echo $ruleset | cut -d'|' -f1)" \ FROM builder-ruleset-generic as builder-bosu
&& git clone --depth=1 "$repo_url" ruleset \ 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
&& cd ruleset \
&& dotnet build \ FROM builder-ruleset-generic as builder-rush
-c Release \ 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
"$assembly_name" \
&& cp "${assembly_name}"/bin/Release/net*/"${assembly_name}".dll /opt/osu/ \ FROM builder-ruleset-generic as builder-sentakki
&& cd .. \ 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
&& rm -rf ruleset \
; done
FROM mcr.microsoft.com/dotnet/runtime:8.0 FROM mcr.microsoft.com/dotnet/runtime:8.0
@ -53,6 +52,11 @@ RUN apt-get update \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
COPY --from=builder /opt/osu/ /opt/osu/ 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 RUN adduser --disabled-password --gecos '' osu
USER osu USER osu

View file

@ -6,9 +6,11 @@
Using podman/buildah: 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. 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 ### 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