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
|
|
|
|
|
|
|
# FIXME: Tools won't run in .NET 6.0 unless you install 3.1.x LTS side by side.
|
|
|
|
# https://itnext.io/how-to-support-multiple-net-sdks-in-github-actions-workflows-b988daa884e
|
|
|
|
- name: Install .NET 3.1.x LTS
|
2023-03-27 22:40:32 +08:00
|
|
|
uses: actions/setup-dotnet@v3
|
2022-04-21 14:34:01 +08:00
|
|
|
with:
|
|
|
|
dotnet-version: "3.1.x"
|
|
|
|
|
|
|
|
- name: Install .NET 6.0.x
|
2023-03-27 22:40:32 +08:00
|
|
|
uses: actions/setup-dotnet@v3
|
2022-04-21 14:34:01 +08:00
|
|
|
with:
|
|
|
|
dotnet-version: "6.0.x"
|
|
|
|
|
|
|
|
- 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
|
|
|
|
2022-02-14 21:35:08 +08:00
|
|
|
- name: Install .NET 6.0.x
|
2023-03-27 22:40:32 +08:00
|
|
|
uses: actions/setup-dotnet@v3
|
2021-06-15 20:59:18 +08:00
|
|
|
with:
|
2022-02-14 21:35:08 +08:00
|
|
|
dotnet-version: "6.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
|
|
|
|
2022-02-14 21:35:08 +08:00
|
|
|
- name: Install .NET 6.0.x
|
2023-03-27 22:40:32 +08:00
|
|
|
uses: actions/setup-dotnet@v3
|
2021-10-24 23:25:53 +08:00
|
|
|
with:
|
2022-02-14 21:35:08 +08:00
|
|
|
dotnet-version: "6.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-05-10 03:55:53 +08:00
|
|
|
# `macos-13` is required, because Xcode 14.3 is required (see below).
|
|
|
|
# TODO: can be changed to `macos-latest` once `macos-13` becomes latest (currently in beta)
|
|
|
|
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
|
|
|
|
2023-05-10 03:55:53 +08:00
|
|
|
# newest Microsoft.iOS.Sdk versions require Xcode 14.3.
|
|
|
|
# 14.3 is currently not the default Xcode version (https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md#xcode),
|
|
|
|
# so set it manually.
|
|
|
|
# TODO: remove when 14.3 becomes the default Xcode version.
|
|
|
|
- name: Set Xcode version
|
|
|
|
shell: bash
|
|
|
|
run: |
|
|
|
|
sudo xcode-select -s "/Applications/Xcode_14.3.app"
|
|
|
|
echo "MD_APPLE_SDK_ROOT=/Applications/Xcode_14.3.app" >> $GITHUB_ENV
|
|
|
|
|
2022-02-14 21:35:08 +08:00
|
|
|
- name: Install .NET 6.0.x
|
2023-03-27 22:40:32 +08:00
|
|
|
uses: actions/setup-dotnet@v3
|
2021-10-24 23:25:53 +08:00
|
|
|
with:
|
2022-02-14 21:35:08 +08:00
|
|
|
dotnet-version: "6.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
|
|
|
|
|
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
|