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
2023-03-27 22:40:32 +08:00
uses : actions/checkout@v3
2022-04-21 14:34:01 +08:00
2024-02-02 00:11:58 +08:00
- name : Install .NET 8.0.x
2023-03-27 22:40:32 +08:00
uses : actions/setup-dotnet@v3
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
uses : actions/cache@v3
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 }
- { prettyname: macOS, fullname : macos-latest }
- { prettyname: Linux, fullname : ubuntu-latest }
threadingMode : [ 'SingleThread' , 'MultiThreaded' ]
2021-06-23 23:55:40 +08:00
timeout-minutes : 60
2021-06-15 20:59:18 +08:00
steps :
- name : Checkout
2023-03-27 22:40:32 +08:00
uses : actions/checkout@v3
2021-06-15 20:59:18 +08:00
2024-02-02 00:11:58 +08:00
- name : Install .NET 8.0.x
2023-03-27 22:40:32 +08:00
uses : actions/setup-dotnet@v3
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
2023-03-27 22:40:32 +08:00
uses : actions/upload-artifact@v3
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)
2022-06-17 02:45:55 +08:00
runs-on : windows-latest
2021-10-24 23:25:53 +08:00
timeout-minutes : 60
steps :
- name : Checkout
2023-03-27 22:40:32 +08:00
uses : actions/checkout@v3
2021-10-24 23:25:53 +08:00
2023-11-22 06:55:39 +08:00
- name : Setup JDK 11
uses : actions/setup-java@v3
with :
distribution : microsoft
java-version : 11
2024-02-02 00:11:58 +08:00
- name : Install .NET 8.0.x
2023-03-27 22:40:32 +08:00
uses : actions/setup-dotnet@v3
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
2022-12-19 15:39:03 +08:00
run : dotnet workload install maui-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)
2023-11-23 01:18:55 +08:00
# `macos-13` is required, because the newest Microsoft.iOS.Sdk versions require Xcode 14.3.
# TODO: can be changed to `macos-latest` once `macos-13` becomes latest (currently in beta: https://github.com/actions/runner-images/tree/main#available-images)
2023-05-10 03:55:53 +08:00
runs-on : macos-13
2021-10-24 23:25:53 +08:00
timeout-minutes : 60
steps :
- name : Checkout
2023-03-27 22:40:32 +08:00
uses : actions/checkout@v3
2021-10-24 23:25:53 +08:00
2024-02-02 00:11:58 +08:00
- name : Install .NET 8.0.x
2023-03-27 22:40:32 +08:00
uses : actions/setup-dotnet@v3
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
run : dotnet workload install maui-ios
2024-02-02 01:09:00 +08:00
- name : Select Xcode 15.2
run : sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
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