Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
31efe9e
Initial plan
Copilot Mar 27, 2026
37030ec
Upgrade entire project from .NET 8 (C# 12) to .NET 10 (C# 14)
Copilot Mar 27, 2026
c4c274a
Apply .NET 10 / C# 14 code optimizations across entire codebase
Copilot Mar 27, 2026
0a501ca
Changes before error encountered
Copilot Mar 27, 2026
6e4cf24
Fix remaining build errors from collection expression migration
Copilot Mar 27, 2026
9c5d3b4
Fix all CI failures: code quality (IDE0005/0017/0018/0019/0031/0032/0…
Copilot Mar 27, 2026
f449df1
Fix AutoMapper vulnerability (13.0.1→16.1.1), update SharpCompress, f…
Copilot Mar 27, 2026
de44c1e
Update NUnit3TestAdapter 6.1.0→6.2.0, align Moq/Bogus versions, harde…
Copilot Mar 27, 2026
bfd9857
Fix workflow inconsistencies: checkout@v4→v6, deprecated set-output s…
Copilot Mar 27, 2026
e1631b8
Update all GitHub Actions to latest: fix deploy.yml GITHUB_OUTPUT bug…
Copilot Mar 27, 2026
6005694
Fix CI failures: Android XA1032, iOS ILLink trimmer, code style (392 …
Copilot Mar 27, 2026
20b9d5e
Android optimization: AOT compilation, profiled AOT, targetSdkVersion…
Copilot Mar 27, 2026
4d0a932
Fix remaining CI errors: code quality (IDE0017/0027/0270/0055), iOS n…
Copilot Mar 27, 2026
460e1e1
Fix iOS ILLink trim analyzer warnings (IL2026/IL2067); improve Androi…
Copilot Mar 27, 2026
d32427e
Replace Android 16KB suppression with MSBuild ELF patcher; fix iOS tr…
Copilot Mar 27, 2026
34ff418
Fix Android build: add file locking to ELF patcher + restore XA0141 s…
Copilot Mar 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
25 changes: 10 additions & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ jobs:
- name: Checkout
uses: actions/checkout@v6

- name: Install .NET 8.0.x
- name: Install .NET 10.0.x
uses: actions/setup-dotnet@v5
with:
dotnet-version: "8.0.x"
dotnet-version: "10.0.x"

- name: Restore Tools
run: dotnet tool restore
Expand Down Expand Up @@ -50,7 +50,7 @@ jobs:
exit $exit_code

- name: InspectCode
uses: JetBrains/ReSharper-InspectCode@v0.11
uses: JetBrains/ReSharper-InspectCode@v0.12
with:
# this is WTF tier but if you don't specify *both* of these the defaults assume `build: true`
build: false
Expand Down Expand Up @@ -78,10 +78,10 @@ jobs:
- name: Checkout
uses: actions/checkout@v6

- name: Install .NET 8.0.x
- name: Install .NET 10.0.x
uses: actions/setup-dotnet@v5
with:
dotnet-version: "8.0.x"
dotnet-version: "10.0.x"

- name: Compile
run: dotnet build -c Debug -warnaserror osu.Desktop.slnf
Expand Down Expand Up @@ -123,10 +123,10 @@ jobs:
distribution: microsoft
java-version: 11

- name: Install .NET 8.0.x
- name: Install .NET 10.0.x
uses: actions/setup-dotnet@v5
with:
dotnet-version: "8.0.x"
dotnet-version: "10.0.x"

- name: Install .NET workloads
run: dotnet workload install android
Expand All @@ -136,24 +136,19 @@ jobs:

build-only-ios:
name: Build only (iOS)
runs-on: macos-15
runs-on: macos-26
timeout-minutes: 60
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Install .NET 8.0.x
- name: Install .NET 10.0.x
uses: actions/setup-dotnet@v5
with:
dotnet-version: "8.0.x"
dotnet-version: "10.0.x"

- name: Install .NET Workloads
run: dotnet workload install ios

# https://github.com/dotnet/macios/issues/19157
# https://github.com/actions/runner-images/issues/12758
- name: Use Xcode 16.4
run: sudo xcode-select -switch /Applications/Xcode_16.4.app

- name: Build
run: dotnet build -c Debug osu.iOS.slnf
6 changes: 3 additions & 3 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ jobs:

- name: Set artifacts directory
id: artifactsPath
run: echo "::set-output name=nuget_artifacts::${{github.workspace}}/artifacts"
run: echo "nuget_artifacts=${{github.workspace}}/artifacts" >> "$GITHUB_OUTPUT"

- name: Install .NET 8.0.x
- name: Install .NET 10.0.x
uses: actions/setup-dotnet@v5
with:
dotnet-version: "8.0.x"
dotnet-version: "10.0.x"

- name: Pack
run: |
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ jobs:
distribution: microsoft
java-version: 17

- name: Install .NET 8.0.x
- name: Install .NET 10.0.x
uses: actions/setup-dotnet@v5
with:
dotnet-version: "8.0.x"
dotnet-version: "10.0.x"

- name: Install .NET Android workload
run: dotnet workload install android
Expand Down Expand Up @@ -89,7 +89,7 @@ jobs:
run: >
dotnet publish -c Release
osu.Android/osu.Android.csproj
-f net8.0-android
-f net10.0-android
-p:Version=${{ steps.version.outputs.version }}
-p:ApplicationDisplayVersion=${{ steps.version.outputs.version }}
-p:ApplicationVersion=${{ github.run_number }}
Expand All @@ -104,7 +104,7 @@ jobs:
run: >
dotnet publish -c Release
osu.Android/osu.Android.csproj
-f net8.0-android
-f net10.0-android
-p:Version=${{ steps.version.outputs.version }}
-p:ApplicationDisplayVersion=${{ steps.version.outputs.version }}
-p:ApplicationVersion=${{ github.run_number }}
Expand All @@ -113,7 +113,7 @@ jobs:
- name: Find APK
id: find_apk
run: |
PUBLISH_DIR="osu.Android/bin/Release/net8.0-android/publish"
PUBLISH_DIR="osu.Android/bin/Release/net10.0-android/publish"
APK=$(find "$PUBLISH_DIR" -maxdepth 1 -name "*.apk" 2>/dev/null | head -1)
if [ -z "$APK" ]; then
APK=$(find osu.Android/bin/Release -name "*.apk" | head -1)
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/report-nunit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
github-token: ${{ github.token }}

- name: Annotate CI run with test results
uses: dorny/test-reporter@v2.6.0
uses: dorny/test-reporter@v2
with:
name: Results
path: "*.trx"
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/update-web-mod-definitions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,24 +12,24 @@ jobs:
name: Update osu-web mod definitions
runs-on: ubuntu-latest
steps:
- name: Install .NET 8.0.x
uses: actions/setup-dotnet@v4
- name: Install .NET 10.0.x
uses: actions/setup-dotnet@v5
with:
dotnet-version: "8.0.x"
dotnet-version: "10.0.x"

- name: Checkout ppy/osu
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
path: osu

- name: Checkout ppy/osu-tools
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
repository: ppy/osu-tools
path: osu-tools

- name: Checkout ppy/osu-web
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
repository: ppy/osu-web
path: osu-web
Expand All @@ -47,7 +47,7 @@ jobs:
working-directory: ./osu-tools

- name: Create pull request with changes
uses: peter-evans/create-pull-request@v6
uses: peter-evans/create-pull-request@v8
with:
title: Update mod definitions
body: "This PR has been auto-generated to update the mod definitions to match ppy/osu@${{ github.ref_name }}."
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<!-- Contains required properties for osu!framework projects. -->
<Project>
<PropertyGroup Label="C#">
<LangVersion>12.0</LangVersion>
<LangVersion>14.0</LangVersion>
<Nullable>enable</Nullable>
<!-- Stabilises hot reload, see: https://platform.uno/docs/articles/studio/Hot%20Reload/hot-reload-overview.html?tabs=vswin%2Cwindows%2Cskia-desktop%2Ccommon-issues -->
<GenerateAssemblyInfo Condition="'$(Configuration)'=='Debug'">false</GenerateAssemblyInfo>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
<ItemGroup Label="Package References">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit" Version="4.5.1" />
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\osu.Game.Rulesets.EmptyFreeform\osu.Game.Rulesets.EmptyFreeform.csproj" />
</ItemGroup>
<PropertyGroup Label="Project">
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>osu.Game.Rulesets.EmptyFreeform.Tests</RootNamespace>
</PropertyGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
return new DifficultyAttributes(mods, 0);
}

protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty<DifficultyHitObject>();
protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => [];

protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty<Skill>();
protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => [];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public override IEnumerable<Mod> GetModsFor(ModType type)
return new[] { new EmptyFreeformModAutoplay() };

default:
return Array.Empty<Mod>();
return [];
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Project">
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<AssemblyTitle>osu.Game.Rulesets.EmptyFreeform</AssemblyTitle>
<OutputType>Library</OutputType>
<PlatformTarget>AnyCPU</PlatformTarget>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
<ItemGroup Label="Package References">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit" Version="4.5.1" />
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\osu.Game.Rulesets.Pippidon\osu.Game.Rulesets.Pippidon.csproj" />
</ItemGroup>
<PropertyGroup Label="Project">
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>osu.Game.Rulesets.Pippidon.Tests</RootNamespace>
</PropertyGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
return new DifficultyAttributes(mods, 0);
}

protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty<DifficultyHitObject>();
protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => [];

protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty<Skill>();
protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => [];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public override IEnumerable<Mod> GetModsFor(ModType type)
return new[] { new PippidonModAutoplay() };

default:
return Array.Empty<Mod>();
return [];
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Project">
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<AssemblyTitle>osu.Game.Rulesets.Pippidon</AssemblyTitle>
<OutputType>Library</OutputType>
<PlatformTarget>AnyCPU</PlatformTarget>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
<ItemGroup Label="Package References">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit" Version="4.5.1" />
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\osu.Game.Rulesets.EmptyScrolling\osu.Game.Rulesets.EmptyScrolling.csproj" />
</ItemGroup>
<PropertyGroup Label="Project">
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>osu.Game.Rulesets.EmptyScrolling.Tests</RootNamespace>
</PropertyGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
using System.Collections.Generic;
using System.Threading;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.EmptyScrolling.Objects;
using osu.Game.Rulesets.Objects;

namespace osu.Game.Rulesets.EmptyScrolling.Beatmaps
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
return new DifficultyAttributes(mods, 0);
}

protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty<DifficultyHitObject>();
protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => [];

protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty<Skill>();
protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => [];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
using osu.Game.Beatmaps;
using osu.Game.Graphics;
using osu.Game.Rulesets.Difficulty;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.EmptyScrolling.Beatmaps;
using osu.Game.Rulesets.EmptyScrolling.Mods;
using osu.Game.Rulesets.EmptyScrolling.UI;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.UI;

namespace osu.Game.Rulesets.EmptyScrolling
Expand All @@ -35,7 +35,7 @@ public override IEnumerable<Mod> GetModsFor(ModType type)
return new[] { new EmptyScrollingModAutoplay() };

default:
return Array.Empty<Mod>();
return [];
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
using osu.Game.Beatmaps;
using osu.Game.Input.Handlers;
using osu.Game.Replays;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.EmptyScrolling.Objects;
using osu.Game.Rulesets.EmptyScrolling.Objects.Drawables;
using osu.Game.Rulesets.EmptyScrolling.Replays;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.UI;
using osu.Game.Rulesets.UI.Scrolling;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Project">
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<AssemblyTitle>osu.Game.Rulesets.EmptyScrolling</AssemblyTitle>
<OutputType>Library</OutputType>
<PlatformTarget>AnyCPU</PlatformTarget>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
<ItemGroup Label="Package References">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit" Version="4.5.1" />
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\osu.Game.Rulesets.Pippidon\osu.Game.Rulesets.Pippidon.csproj" />
</ItemGroup>
<PropertyGroup Label="Project">
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>osu.Game.Rulesets.Pippidon.Tests</RootNamespace>
</PropertyGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
return new DifficultyAttributes(mods, 0);
}

protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty<DifficultyHitObject>();
protected override IEnumerable<DifficultyHitObject> CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => [];

protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty<Skill>();
protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => [];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public override IEnumerable<Mod> GetModsFor(ModType type)
return new[] { new PippidonModAutoplay() };

default:
return Array.Empty<Mod>();
return [];
}
}

Expand Down
Loading
Loading