mirror of
https://github.com/ppy/osu.git
synced 2026-05-13 19:54:15 +08:00
5b6d215583
## [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.
188 lines
6.0 KiB
YAML
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
|