mirror of
https://github.com/ppy/osu.git
synced 2026-05-13 19:54:15 +08:00
18d4ba5874
Most of this is as everywhere else, but there's also interesting code inspection fixes from the InspectCode bump, so I'll talk about that a little. ## [Fix suspicious equality in `Hotkey`](https://github.com/ppy/osu/commit/948136e49e88a721827d54e51c5759fe9aca811d) Inspection: https://www.jetbrains.com/help/resharper/TypeWithSuspiciousEqualityIsUsedInRecord.Global.html Pretty annoying to fix, nullable array types are a pain. Does look legit though. ## [Fix `StarDifficulty` using inefficient struct equality](https://github.com/ppy/osu/commit/2db775ebb0bb9f18de67677ef84b993465d26545) Inspection: https://www.jetbrains.com/help/resharper/DefaultStructEqualityIsUsed.Global.html This is a dodgy one because there's no real sane way to define equality on `StarDifficulty` now that it has difficulty and performance attributes jammed into it. So I just basically shut the inspection up with a `record` modifier and move on. Unclear where the equality is used precisely. It's from a global inspection. F12 is very unhelpful when trying to track down usages of `Equals()`. We definitely have `Bindable<StarDifficulty>` instances and those do use equality. Maybe more than that. ## [Use `nameof` expressions to reference enum member names](https://github.com/ppy/osu/commit/aa08175c803bc725f3b15a92174dfe6d1b812d91) Inspection: https://www.jetbrains.com/help/resharper/CanSimplifyDictionaryRemovingWithSingleCall.html Pretty quaint. ## [Prefer using concrete values over `default` or `new()`](https://github.com/ppy/osu/commit/b21ee08d7748be10d42268d5c2eb77369026545d) Inspection: https://www.jetbrains.com/help/resharper/PreferConcreteValueOverDefault.html I could see this one going both ways, but I'm kinda sold on this inspection. Explicit is always better. Saves some allocations in the `CancellationToken` cases as well. ## [Explicitly call `.AsEnumerable()` in some realm usages](https://github.com/ppy/osu/commit/c8ce1ecd42b9d8abb8b9e2ab93d471f463e80401) Inspection: https://www.jetbrains.com/help/resharper/PossibleUnintendedQueryableAsEnumerable.html Not fully sold on this one but it's quick and simple so might as well. ## [Simplify dictionary removal with single `.Remove()` call](https://github.com/ppy/osu/commit/5964ceccea900302df726b7a8ecbf6b74eb2e427) Inspection: https://www.jetbrains.com/help/resharper/CanSimplifyDictionaryRemovingWithSingleCall.html Not much to say.
160 lines
5.1 KiB
YAML
160 lines
5.1 KiB
YAML
on: [push, pull_request]
|
|
name: Continuous Integration
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read # to fetch code (actions/checkout)
|
|
security-events: write # for reporting InspectCode issues
|
|
|
|
jobs:
|
|
inspect-code:
|
|
name: Code Quality
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Install .NET 8.0.x
|
|
uses: actions/setup-dotnet@v5
|
|
with:
|
|
dotnet-version: "8.0.x"
|
|
|
|
- name: Restore Tools
|
|
run: dotnet tool restore
|
|
|
|
- name: Restore Packages
|
|
run: dotnet restore osu.Desktop.slnf
|
|
|
|
- name: Restore inspectcode cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: ${{ github.workspace }}/inspectcode
|
|
key: inspectcode-${{ hashFiles('.config/dotnet-tools.json', '.github/workflows/ci.yml', 'osu.sln*', 'osu*.slnf', '.editorconfig', '.globalconfig', 'CodeAnalysis/*', '**/*.csproj', '**/*.props') }}
|
|
|
|
- name: Dotnet code style
|
|
run: dotnet build -c Debug -warnaserror osu.Desktop.slnf -p:EnforceCodeStyleInBuild=true
|
|
|
|
- name: CodeFileSanity
|
|
run: |
|
|
# TODO: Add ignore filters and GitHub Workflow Command Reporting in CFS. That way we don't have to do this workaround.
|
|
# FIXME: Suppress warnings from templates project
|
|
exit_code=0
|
|
while read -r line; do
|
|
if [[ ! -z "$line" ]]; then
|
|
echo "::error::$line"
|
|
exit_code=1
|
|
fi
|
|
done <<< $(dotnet codefilesanity)
|
|
exit $exit_code
|
|
|
|
- name: InspectCode
|
|
uses: JetBrains/ReSharper-InspectCode@v0.11
|
|
with:
|
|
# this is WTF tier but if you don't specify *both* of these the defaults assume `build: true`
|
|
build: false
|
|
no-build: true
|
|
solution: ./osu.Desktop.slnf
|
|
caches-home: inspectcode
|
|
verbosity: WARN
|
|
|
|
test:
|
|
name: Test
|
|
runs-on: ${{matrix.os.fullname}}
|
|
env:
|
|
OSU_EXECUTION_MODE: ${{matrix.threadingMode}}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- { prettyname: Windows, fullname: windows-latest }
|
|
# macOS runner performance has gotten unbearably slow so let's turn them off temporarily.
|
|
# - { prettyname: macOS, fullname: macos-latest }
|
|
- { prettyname: Linux, fullname: ubuntu-latest }
|
|
threadingMode: ['SingleThread', 'MultiThreaded']
|
|
timeout-minutes: 120
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Install .NET 8.0.x
|
|
uses: actions/setup-dotnet@v5
|
|
with:
|
|
dotnet-version: "8.0.x"
|
|
|
|
- name: Compile
|
|
run: dotnet build -c Debug -warnaserror osu.Desktop.slnf
|
|
|
|
- name: Test
|
|
run: >
|
|
dotnet test
|
|
osu.Game.Tests/bin/Debug/**/osu.Game.Tests.dll
|
|
osu.Game.Rulesets.Osu.Tests/bin/Debug/**/osu.Game.Rulesets.Osu.Tests.dll
|
|
osu.Game.Rulesets.Taiko.Tests/bin/Debug/**/osu.Game.Rulesets.Taiko.Tests.dll
|
|
osu.Game.Rulesets.Catch.Tests/bin/Debug/**/osu.Game.Rulesets.Catch.Tests.dll
|
|
osu.Game.Rulesets.Mania.Tests/bin/Debug/**/osu.Game.Rulesets.Mania.Tests.dll
|
|
osu.Game.Tournament.Tests/bin/Debug/**/osu.Game.Tournament.Tests.dll
|
|
Templates/**/*.Tests/bin/Debug/**/*.Tests.dll
|
|
--logger "trx;LogFileName=TestResults-${{matrix.os.prettyname}}-${{matrix.threadingMode}}.trx"
|
|
--
|
|
NUnit.ConsoleOut=0
|
|
|
|
# Attempt to upload results even if test fails.
|
|
# https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#always
|
|
- name: Upload Test Results
|
|
uses: actions/upload-artifact@v7
|
|
if: ${{ always() }}
|
|
with:
|
|
name: osu-test-results-${{matrix.os.prettyname}}-${{matrix.threadingMode}}
|
|
path: ${{github.workspace}}/TestResults/TestResults-${{matrix.os.prettyname}}-${{matrix.threadingMode}}.trx
|
|
|
|
build-only-android:
|
|
name: Build only (Android)
|
|
runs-on: windows-latest
|
|
timeout-minutes: 60
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Setup JDK 11
|
|
uses: actions/setup-java@v5
|
|
with:
|
|
distribution: microsoft
|
|
java-version: 11
|
|
|
|
- name: Install .NET 8.0.x
|
|
uses: actions/setup-dotnet@v5
|
|
with:
|
|
dotnet-version: "8.0.x"
|
|
|
|
- name: Install .NET workloads
|
|
run: dotnet workload install android
|
|
|
|
- name: Compile
|
|
run: dotnet build -c Debug osu.Android.slnf
|
|
|
|
build-only-ios:
|
|
name: Build only (iOS)
|
|
runs-on: macos-15
|
|
timeout-minutes: 60
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Install .NET 8.0.x
|
|
uses: actions/setup-dotnet@v5
|
|
with:
|
|
dotnet-version: "8.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
|