Skip to content

Commit a3ed4e4

Browse files
committed
Merge branch 'pp-dev' into fix-spinners
2 parents 87a49c1 + dd26162 commit a3ed4e4

File tree

1,395 files changed

+63421
-18000
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,395 files changed

+63421
-18000
lines changed

.editorconfig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ indent_style = space
1919
indent_size = 4
2020
trim_trailing_whitespace = true
2121

22+
# temporary workaround for https://youtrack.jetbrains.com/issue/RIDER-130051/Cannot-resolve-symbol-inspections-incorrectly-firing-for-xmldoc-protected-member-references
23+
resharper_c_sharp_warnings_cs1574_cs1584_cs1581_cs1580_highlighting = hint
24+
# temporary workaround for https://youtrack.jetbrains.com/issue/RIDER-130381/Rider-does-not-respect-propagated-NoWarn-CS1591?backToIssues=false
25+
dotnet_diagnostic.CS1591.severity = none
26+
2227
#license header
2328
file_header_template = Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.\nSee the LICENCE file in the repository root for full licence text.
2429

.github/workflows/_diffcalc_processor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
generator:
3737
name: Run
3838
runs-on: self-hosted
39-
timeout-minutes: 720
39+
timeout-minutes: 1440
4040

4141
outputs:
4242
target: ${{ steps.run.outputs.target }}

.github/workflows/ci.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ jobs:
131131

132132
build-only-ios:
133133
name: Build only (iOS)
134-
runs-on: macos-latest
134+
runs-on: macos-15
135135
timeout-minutes: 60
136136
steps:
137137
- name: Checkout
@@ -143,7 +143,12 @@ jobs:
143143
dotnet-version: "8.0.x"
144144

145145
- name: Install .NET Workloads
146-
run: dotnet workload install ios --from-rollback-file https://raw.githubusercontent.com/ppy/osu-framework/refs/heads/master/workloads.json
146+
run: dotnet workload install ios
147+
148+
# https://github.com/dotnet/macios/issues/19157
149+
# https://github.com/actions/runner-images/issues/12758
150+
- name: Use Xcode 16.4
151+
run: sudo xcode-select -switch /Applications/Xcode_16.4.app
147152

148153
- name: Build
149154
run: dotnet build -c Debug osu.iOS.slnf

.github/workflows/deploy.yml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Pack and nuget
2+
3+
on:
4+
push:
5+
tags:
6+
- '*'
7+
8+
jobs:
9+
notify_pending_production_deploy:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Submit pending deployment notification
13+
run: |
14+
export TITLE="Pending osu Production Deployment: $GITHUB_REF_NAME"
15+
export URL="https://github.com/ppy/osu/actions/runs/$GITHUB_RUN_ID"
16+
export DESCRIPTION="Awaiting approval for building NuGet packages for tag $GITHUB_REF_NAME:
17+
[View Workflow Run]($URL)"
18+
export ACTOR_ICON="https://avatars.githubusercontent.com/u/$GITHUB_ACTOR_ID"
19+
20+
BODY="$(jq --null-input '{
21+
"embeds": [
22+
{
23+
"title": env.TITLE,
24+
"color": 15098112,
25+
"description": env.DESCRIPTION,
26+
"url": env.URL,
27+
"author": {
28+
"name": env.GITHUB_ACTOR,
29+
"icon_url": env.ACTOR_ICON
30+
}
31+
}
32+
]
33+
}')"
34+
35+
curl \
36+
-H "Content-Type: application/json" \
37+
-d "$BODY" \
38+
"${{ secrets.DISCORD_INFRA_WEBHOOK_URL }}"
39+
40+
pack:
41+
name: Pack
42+
runs-on: ubuntu-latest
43+
environment: production
44+
steps:
45+
- name: Checkout
46+
uses: actions/checkout@v4
47+
48+
- name: Set artifacts directory
49+
id: artifactsPath
50+
run: echo "::set-output name=nuget_artifacts::${{github.workspace}}/artifacts"
51+
52+
- name: Install .NET 8.0.x
53+
uses: actions/setup-dotnet@v4
54+
with:
55+
dotnet-version: "8.0.x"
56+
57+
- name: Pack
58+
run: |
59+
# Replace project references in templates with package reference, because they're included as source files.
60+
dotnet remove Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform/osu.Game.Rulesets.EmptyFreeform.csproj reference osu.Game/osu.Game.csproj
61+
dotnet remove Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon/osu.Game.Rulesets.Pippidon.csproj reference osu.Game/osu.Game.csproj
62+
dotnet remove Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling/osu.Game.Rulesets.EmptyScrolling.csproj reference osu.Game/osu.Game.csproj
63+
dotnet remove Templates/Rulesets/ruleset-scrolling-example/osu.Game.Rulesets.Pippidon/osu.Game.Rulesets.Pippidon.csproj reference osu.Game/osu.Game.csproj
64+
65+
dotnet add Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform/osu.Game.Rulesets.EmptyFreeform.csproj package ppy.osu.Game -n -v ${{ github.ref_name }}
66+
dotnet add Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon/osu.Game.Rulesets.Pippidon.csproj package ppy.osu.Game -n -v ${{ github.ref_name }}
67+
dotnet add Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling/osu.Game.Rulesets.EmptyScrolling.csproj package ppy.osu.Game -n -v ${{ github.ref_name }}
68+
dotnet add Templates/Rulesets/ruleset-scrolling-example/osu.Game.Rulesets.Pippidon/osu.Game.Rulesets.Pippidon.csproj package ppy.osu.Game -n -v ${{ github.ref_name }}
69+
70+
# Pack
71+
dotnet pack -c Release osu.Game /p:Version=${{ github.ref_name }} /p:GenerateDocumentationFile=true /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg -o ${{steps.artifactsPath.outputs.nuget_artifacts}}
72+
dotnet pack -c Release osu.Game.Rulesets.Osu /p:Version=${{ github.ref_name }} /p:GenerateDocumentationFile=true /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg -o ${{steps.artifactsPath.outputs.nuget_artifacts}}
73+
dotnet pack -c Release osu.Game.Rulesets.Taiko /p:Version=${{ github.ref_name }} /p:GenerateDocumentationFile=true /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg -o ${{steps.artifactsPath.outputs.nuget_artifacts}}
74+
dotnet pack -c Release osu.Game.Rulesets.Catch /p:Version=${{ github.ref_name }} /p:GenerateDocumentationFile=true /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg -o ${{steps.artifactsPath.outputs.nuget_artifacts}}
75+
dotnet pack -c Release osu.Game.Rulesets.Mania /p:Version=${{ github.ref_name }} /p:GenerateDocumentationFile=true /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg -o ${{steps.artifactsPath.outputs.nuget_artifacts}}
76+
dotnet pack -c Release Templates /p:Version=${{ github.ref_name }} -o ${{steps.artifactsPath.outputs.nuget_artifacts}}
77+
78+
- name: Upload artifacts
79+
uses: actions/upload-artifact@v4
80+
with:
81+
name: osu
82+
path: |
83+
${{steps.artifactsPath.outputs.nuget_artifacts}}/*.nupkg
84+
${{steps.artifactsPath.outputs.nuget_artifacts}}/*.snupkg
85+
86+
- name: Publish packages to nuget.org
87+
run: dotnet nuget push ${{steps.artifactsPath.outputs.nuget_artifacts}}/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json

CodeAnalysis/BannedSymbols.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,7 @@ M:Humanizer.InflectorExtensions.Kebaberize(System.String);Humanizer's .Kebaberiz
2121
M:osuTK.MathHelper.Clamp(System.Int32,System.Int32,System.Int32)~System.Int32;Use Math.Clamp() instead.
2222
M:osuTK.MathHelper.Clamp(System.Single,System.Single,System.Single)~System.Single;This osuTK helper has unsafe semantics when one of the bounds provided is NaN. Use Math.Clamp() instead.
2323
M:osuTK.MathHelper.Clamp(System.Double,System.Double,System.Double)~System.Double;This osuTK helper has unsafe semantics when one of the bounds provided is NaN. Use Math.Clamp() instead.
24+
M:TagLib.File.Create(System.String);TagLib's MIME type detection changes behaviour depending on CultureInfo.CurrentCulture. Use TagLibUtils.GetTagLibFile() instead.
25+
M:TagLib.File.Create(TagLib.File.IFileAbstraction);TagLib's MIME type detection changes behaviour depending on CultureInfo.CurrentCulture. Use TagLibUtils.GetTagLibFile() instead.
26+
M:TagLib.File.Create(System.String,TagLib.ReadStyle);TagLib's MIME type detection changes behaviour depending on CultureInfo.CurrentCulture. Use TagLibUtils.GetTagLibFile() instead.
27+
M:TagLib.File.Create(TagLib.File.IFileAbstraction,TagLib.ReadStyle);TagLib's MIME type detection changes behaviour depending on CultureInfo.CurrentCulture. Use TagLibUtils.GetTagLibFile() instead.

Directory.Build.props

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
<PropertyGroup Label="C#">
44
<LangVersion>12.0</LangVersion>
55
<Nullable>enable</Nullable>
6+
<!-- Stabilises hot reload, see: https://platform.uno/docs/articles/studio/Hot%20Reload/hot-reload-overview.html?tabs=vswin%2Cwindows%2Cskia-desktop%2Ccommon-issues -->
7+
<GenerateAssemblyInfo Condition="'$(Configuration)'=='Debug'">false</GenerateAssemblyInfo>
8+
<!-- Required due to the above -->
9+
<NoWarn Condition="'$(Configuration)'=='Debug'">$(NoWarn);CA1416</NoWarn>
610
</PropertyGroup>
711
<PropertyGroup>
812
<ApplicationManifest>$(MSBuildThisFileDirectory)app.manifest</ApplicationManifest>
@@ -46,7 +50,7 @@
4650
<RepositoryUrl>https://github.com/ppy/osu</RepositoryUrl>
4751
<PackageReleaseNotes>Automated release.</PackageReleaseNotes>
4852
<Company>ppy Pty Ltd</Company>
49-
<Copyright>Copyright (c) 2024 ppy Pty Ltd</Copyright>
53+
<Copyright>Copyright (c) 2025 ppy Pty Ltd</Copyright>
5054
<PackageTags>osu game</PackageTags>
5155
</PropertyGroup>
5256
</Project>

LICENCE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Copyright (c) 2024 ppy Pty Ltd <contact@ppy.sh>.
1+
Copyright (c) 2025 ppy Pty Ltd <contact@ppy.sh>.
22

33
Permission is hereby granted, free of charge, to any person obtaining a copy
44
of this software and associated documentation files (the "Software"), to deal

Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform/Replays/EmptyFreeformReplayFrame.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// See the LICENCE file in the repository root for full licence text.
33

44
using System.Collections.Generic;
5+
using System.Linq;
56
using osu.Game.Rulesets.Replays;
67
using osuTK;
78

@@ -17,5 +18,8 @@ public EmptyFreeformReplayFrame(EmptyFreeformAction? button = null)
1718
if (button.HasValue)
1819
Actions.Add(button.Value);
1920
}
21+
22+
public override bool IsEquivalentTo(ReplayFrame other)
23+
=> other is EmptyFreeformReplayFrame freeformFrame && Time == freeformFrame.Time && Position == freeformFrame.Position && Actions.SequenceEqual(freeformFrame.Actions);
2024
}
2125
}

Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon/Replays/PippidonReplayFrame.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ namespace osu.Game.Rulesets.Pippidon.Replays
99
public class PippidonReplayFrame : ReplayFrame
1010
{
1111
public Vector2 Position;
12+
13+
public override bool IsEquivalentTo(ReplayFrame other)
14+
=> other is PippidonReplayFrame pippidonFrame && Time == pippidonFrame.Time && Position == pippidonFrame.Position;
1215
}
1316
}

Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling/Replays/EmptyScrollingReplayFrame.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// See the LICENCE file in the repository root for full licence text.
33

44
using System.Collections.Generic;
5+
using System.Linq;
56
using osu.Game.Rulesets.Replays;
67

78
namespace osu.Game.Rulesets.EmptyScrolling.Replays
@@ -15,5 +16,8 @@ public EmptyScrollingReplayFrame(EmptyScrollingAction? button = null)
1516
if (button.HasValue)
1617
Actions.Add(button.Value);
1718
}
19+
20+
public override bool IsEquivalentTo(ReplayFrame other)
21+
=> other is EmptyScrollingReplayFrame scrollingFrame && Time == scrollingFrame.Time && Actions.SequenceEqual(scrollingFrame.Actions);
1822
}
1923
}

0 commit comments

Comments
 (0)