1
0
mirror of https://github.com/ppy/osu.git synced 2026-05-13 19:54:15 +08:00
Files
osu-lazer/.github/workflows/ci.yml
T
Bartłomiej Dach 5b6d215583 More tooling updates & fixes (#37177)
## [Adjust CI test reporting to upstream action
changes](https://github.com/ppy/osu/commit/f736337b1acf311bf48fb8c39cae67c3f172608d)

It's been semi-broken since I bumped it a few weeks ago. Paper trail for
this is at https://github.com/dorny/test-reporter/issues/750, but to
TL;DR it: `dorny/test-reporter@>=v2.0.0` migrated from [creating new
check runs via the GitHub
API](https://docs.github.com/en/rest/checks/runs) to [job
summaries](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-commands#adding-a-job-summary)
by default.

The main difference is that compared to check runs, job summaries do not
*appear to* require extra `GITHUB_TOKEN` permissions, but in exchange
are limited to the job that called it. This broke visibility of the test
reports because due to `GITHUB_TOKEN` permissions foibles the test
reporter was running in a separate workflow.

I see migrating as a plus here, since:

- The visibility of results is comparable-to-better (example available
for preview at https://github.com/bdach/osu/actions/runs/23892493152)
- No longer required to have a completely separate workflow for test
result reporting
- No longer required to give `checks: write` permissions to the action
(I'd hope, we'll see, untested on a public repository with PRs involved)

One downside is there'll be no in-code annotations for failing tests
anymore but that's whatever IMO. Half the time they weren't even very
helpful, test results pretty much require maintainer interpretation
anyway.

This needs to be applied to a few other repos but I'm starting here
because this is the one where the traffic is highest and therefore
unbreaking the report is of most value (and also the one where I'll see
if it works with public PRs the fastest).

Side note, I was hoping to remove the artifact upload/download games by
just attaching the summary inside each individual test job in the
matrix, but [it looks like
crap](https://github.com/bdach/osu-framework/actions/runs/23888384309)
because only the first three summaries are loaded by default, so if
there are more, you have to click each remaining one to see its output.
Wow. Awesome.

Also updates the action to `v3.0.0` to resolve node deprecation
warnings.

## [Update inspectcode version to resolve deprecation
warnings](https://github.com/ppy/osu/commit/496cf6890ecb6571e6361731d46f53cceb7cb584)

More node deprecation warning fixes.
2026-04-03 00:19:46 +09:00

188 lines
6.0 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.12
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/workflows-and-actions/expressions#cancelled
- name: Upload Test Results
uses: actions/upload-artifact@v7
if: ${{ !cancelled() }}
with:
name: osu-test-results-${{matrix.os.prettyname}}-${{matrix.threadingMode}}
path: ${{github.workspace}}/TestResults/TestResults-${{matrix.os.prettyname}}-${{matrix.threadingMode}}.trx
test-results:
name: Test results
runs-on: ubuntu-latest
# we want to wait for the `test` job to complete, but run regardless of whether it succeeds or fails
# https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#example-not-requiring-successful-dependent-jobs
if: ${{ !cancelled() }}
needs: test
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Download results
uses: actions/download-artifact@v8
with:
pattern: osu-test-results-*
merge-multiple: true
- name: Add test results summary to workflow run
uses: dorny/test-reporter@v3.0.0
with:
name: Results
path: "*.trx"
reporter: dotnet-trx
list-suites: 'failed'
list-tests: 'failed'
use-actions-summary: 'true'
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