2021-06-15 20:59:18 +08:00
|
|
|
on: [push, pull_request]
|
|
|
|
name: Continuous Integration
|
2022-09-12 18:09:24 +08:00
|
|
|
concurrency:
|
|
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
|
|
cancel-in-progress: true
|
2021-06-15 20:59:18 +08:00
|
|
|
|
2022-09-26 00:00:28 +08:00
|
|
|
permissions:
|
|
|
|
contents: read # to fetch code (actions/checkout)
|
|
|
|
|
2021-06-15 20:59:18 +08:00
|
|
|
jobs:
|
2022-04-21 14:34:01 +08:00
|
|
|
inspect-code:
|
|
|
|
name: Code Quality
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- name: Checkout
|
2024-02-22 23:58:21 +08:00
|
|
|
uses: actions/checkout@v4
|
2022-04-21 14:34:01 +08:00
|
|
|
|
2024-02-02 00:11:58 +08:00
|
|
|
- name: Install .NET 8.0.x
|
2024-02-22 23:58:21 +08:00
|
|
|
uses: actions/setup-dotnet@v4
|
2022-04-21 14:34:01 +08:00
|
|
|
with:
|
2024-02-02 00:11:58 +08:00
|
|
|
dotnet-version: "8.0.x"
|
2022-04-21 14:34:01 +08:00
|
|
|
|
|
|
|
- name: Restore Tools
|
|
|
|
run: dotnet tool restore
|
|
|
|
|
|
|
|
- name: Restore Packages
|
2022-12-19 14:43:12 +08:00
|
|
|
run: dotnet restore osu.Desktop.slnf
|
2022-04-21 14:34:01 +08:00
|
|
|
|
|
|
|
- name: Restore inspectcode cache
|
2024-02-22 23:58:21 +08:00
|
|
|
uses: actions/cache@v4
|
2022-04-21 14:34:01 +08:00
|
|
|
with:
|
|
|
|
path: ${{ github.workspace }}/inspectcode
|
2022-06-17 16:55:58 +08:00
|
|
|
key: inspectcode-${{ hashFiles('.config/dotnet-tools.json', '.github/workflows/ci.yml', 'osu.sln*', 'osu*.slnf', '.editorconfig', '.globalconfig', 'CodeAnalysis/*', '**/*.csproj', '**/*.props') }}
|
2022-04-21 14:34:01 +08:00
|
|
|
|
2022-05-06 01:24:19 +08:00
|
|
|
- name: Dotnet code style
|
|
|
|
run: dotnet build -c Debug -warnaserror osu.Desktop.slnf -p:EnforceCodeStyleInBuild=true
|
|
|
|
|
2022-04-21 14:34:01 +08:00
|
|
|
- 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
|
|
|
|
run: dotnet jb inspectcode $(pwd)/osu.Desktop.slnf --no-build --output="inspectcodereport.xml" --caches-home="inspectcode" --verbosity=WARN
|
|
|
|
|
|
|
|
- name: NVika
|
2023-03-27 23:07:01 +08:00
|
|
|
run: dotnet nvika parsereport "${{github.workspace}}/inspectcodereport.xml" --treatwarningsaserrors
|
2022-04-21 14:34:01 +08:00
|
|
|
|
2021-06-15 20:59:18 +08:00
|
|
|
test:
|
|
|
|
name: Test
|
2023-03-27 23:07:01 +08:00
|
|
|
runs-on: ${{matrix.os.fullname}}
|
2021-06-15 20:59:18 +08:00
|
|
|
env:
|
2023-03-27 23:07:01 +08:00
|
|
|
OSU_EXECUTION_MODE: ${{matrix.threadingMode}}
|
2021-06-15 20:59:18 +08:00
|
|
|
strategy:
|
2023-03-27 23:07:01 +08:00
|
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
|
|
os:
|
|
|
|
- { prettyname: Windows, fullname: windows-latest }
|
2024-07-25 08:05:58 +08:00
|
|
|
# macOS runner performance has gotten unbearably slow so let's turn them off temporarily.
|
|
|
|
# - { prettyname: macOS, fullname: macos-latest }
|
2023-03-27 23:07:01 +08:00
|
|
|
- { prettyname: Linux, fullname: ubuntu-latest }
|
|
|
|
threadingMode: ['SingleThread', 'MultiThreaded']
|
2024-07-18 15:01:09 +08:00
|
|
|
timeout-minutes: 120
|
2021-06-15 20:59:18 +08:00
|
|
|
steps:
|
|
|
|
- name: Checkout
|
2024-02-22 23:58:21 +08:00
|
|
|
uses: actions/checkout@v4
|
2021-06-15 20:59:18 +08:00
|
|
|
|
2024-02-02 00:11:58 +08:00
|
|
|
- name: Install .NET 8.0.x
|
2024-02-22 23:58:21 +08:00
|
|
|
uses: actions/setup-dotnet@v4
|
2021-06-15 20:59:18 +08:00
|
|
|
with:
|
2024-02-02 00:11:58 +08:00
|
|
|
dotnet-version: "8.0.x"
|
2021-06-15 20:59:18 +08:00
|
|
|
|
|
|
|
- name: Compile
|
|
|
|
run: dotnet build -c Debug -warnaserror osu.Desktop.slnf
|
|
|
|
|
|
|
|
- name: Test
|
2023-03-27 23:07:01 +08:00
|
|
|
run: dotnet test $pwd/**/*.Tests/bin/Debug/*/*.Tests.dll --logger "trx;LogFileName=TestResults-${{matrix.os.prettyname}}-${{matrix.threadingMode}}.trx" -- NUnit.ConsoleOut=0
|
2021-06-15 20:59:18 +08:00
|
|
|
shell: pwsh
|
|
|
|
|
|
|
|
# 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
|
2024-11-06 13:02:01 +08:00
|
|
|
uses: actions/upload-artifact@v4
|
2021-06-15 20:59:18 +08:00
|
|
|
if: ${{ always() }}
|
|
|
|
with:
|
2023-03-27 23:07:01 +08:00
|
|
|
name: osu-test-results-${{matrix.os.prettyname}}-${{matrix.threadingMode}}
|
|
|
|
path: ${{github.workspace}}/TestResults/TestResults-${{matrix.os.prettyname}}-${{matrix.threadingMode}}.trx
|
2021-06-15 20:59:18 +08:00
|
|
|
|
2021-10-24 23:25:53 +08:00
|
|
|
build-only-android:
|
|
|
|
name: Build only (Android)
|
Fix android build again
Another month, another freak android build failure.
From what I can tell, this time the build is broken because the second-
-to-last workaround applied to fix it, namely explicitly specifying
the version of workloads to install, stopped working, presumably because
github pushed a new .NET SDK version to runners, and microsoft didn't
actually put up a set of workload packages whose version matches the
.NET SDK version 1:1.
Thankfully, the fix to the *last* android build breakage (which caused
the workload installation to completely and irrecoverably fail), appears
to be rolling out this week, and *also* fix that same second-last issue,
so both workarounds of specifying the workload version and pinning the
image to `windows-2019` appear to no longer be required.
Note that the newest image version, 20250209.1.0, is still not fully
rolled out yet, thus rather than just fix all builds, this will fix like
20% of builds until the newest image is fully rolled out. But I guess
a 20% passing build is better than a 0% passing build, in a sense...?
2025-02-12 21:12:43 +08:00
|
|
|
runs-on: windows-latest
|
2021-10-24 23:25:53 +08:00
|
|
|
timeout-minutes: 60
|
|
|
|
steps:
|
|
|
|
- name: Checkout
|
2024-02-22 23:58:21 +08:00
|
|
|
uses: actions/checkout@v4
|
2021-10-24 23:25:53 +08:00
|
|
|
|
2023-11-22 06:55:39 +08:00
|
|
|
- name: Setup JDK 11
|
2024-02-22 23:58:21 +08:00
|
|
|
uses: actions/setup-java@v4
|
2023-11-22 06:55:39 +08:00
|
|
|
with:
|
|
|
|
distribution: microsoft
|
|
|
|
java-version: 11
|
|
|
|
|
2024-02-02 00:11:58 +08:00
|
|
|
- name: Install .NET 8.0.x
|
2024-02-22 23:58:21 +08:00
|
|
|
uses: actions/setup-dotnet@v4
|
2021-10-24 23:25:53 +08:00
|
|
|
with:
|
2024-02-02 00:11:58 +08:00
|
|
|
dotnet-version: "8.0.x"
|
2021-10-24 23:25:53 +08:00
|
|
|
|
2022-12-19 14:43:12 +08:00
|
|
|
- name: Install .NET workloads
|
Fix android build again
Another month, another freak android build failure.
From what I can tell, this time the build is broken because the second-
-to-last workaround applied to fix it, namely explicitly specifying
the version of workloads to install, stopped working, presumably because
github pushed a new .NET SDK version to runners, and microsoft didn't
actually put up a set of workload packages whose version matches the
.NET SDK version 1:1.
Thankfully, the fix to the *last* android build breakage (which caused
the workload installation to completely and irrecoverably fail), appears
to be rolling out this week, and *also* fix that same second-last issue,
so both workarounds of specifying the workload version and pinning the
image to `windows-2019` appear to no longer be required.
Note that the newest image version, 20250209.1.0, is still not fully
rolled out yet, thus rather than just fix all builds, this will fix like
20% of builds until the newest image is fully rolled out. But I guess
a 20% passing build is better than a 0% passing build, in a sense...?
2025-02-12 21:12:43 +08:00
|
|
|
run: dotnet workload install android
|
2022-06-17 02:45:55 +08:00
|
|
|
|
2022-12-19 14:43:12 +08:00
|
|
|
- name: Compile
|
|
|
|
run: dotnet build -c Debug osu.Android.slnf
|
2021-10-24 23:25:53 +08:00
|
|
|
|
|
|
|
build-only-ios:
|
|
|
|
name: Build only (iOS)
|
2024-08-08 15:49:17 +08:00
|
|
|
runs-on: macos-latest
|
2021-10-24 23:25:53 +08:00
|
|
|
timeout-minutes: 60
|
|
|
|
steps:
|
|
|
|
- name: Checkout
|
2024-02-22 23:58:21 +08:00
|
|
|
uses: actions/checkout@v4
|
2021-10-24 23:25:53 +08:00
|
|
|
|
2024-02-02 00:11:58 +08:00
|
|
|
- name: Install .NET 8.0.x
|
2024-02-22 23:58:21 +08:00
|
|
|
uses: actions/setup-dotnet@v4
|
2021-10-24 23:25:53 +08:00
|
|
|
with:
|
2024-02-02 00:11:58 +08:00
|
|
|
dotnet-version: "8.0.x"
|
2021-10-24 23:25:53 +08:00
|
|
|
|
2022-12-15 23:21:23 +08:00
|
|
|
- name: Install .NET Workloads
|
2024-10-05 22:00:04 +08:00
|
|
|
run: dotnet workload install ios --from-rollback-file https://raw.githubusercontent.com/ppy/osu-framework/refs/heads/master/workloads.json
|
2024-09-27 15:24:51 +08:00
|
|
|
|
2021-10-24 23:25:53 +08:00
|
|
|
- name: Build
|
2022-12-15 23:21:23 +08:00
|
|
|
run: dotnet build -c Debug osu.iOS
|