Skip to content

Add public API for MonoMod switches configuration #464

Add public API for MonoMod switches configuration

Add public API for MonoMod switches configuration #464

Workflow file for this run

name: Platform Tests
on:
push:
branches:
- main
- master
paths-ignore:
- '.github/workflows/docs.yml'
- 'Harmony/Documentation/*'
pull_request:
branches:
- '**'
paths-ignore:
- '.github/workflows/docs.yml'
- 'Harmony/Documentation/*'
workflow_dispatch:
concurrency:
group: ${{github.workflow}}-${{github.event.pull_request.number || github.ref}}
cancel-in-progress: true
env:
# Right now we can't run experimental tests that can fail, since it will affect the PR
# We could potentially exclude experimental build on PR and only run it on master push
EXPERIMENTAL: false
# If set true, each target framework will be tested in it's own job instead of a single job
# NOTE: At some point when we'll have more target frameworks, parallelization should be more efficient
# It also will be more efficient once the `windows` workers will have a faster startup time
# METRICS:
# PARALLEL: true & PREBUILD: true ~ 15 minutes
# PARALLEL: false ~ 7 minutes
PARALLEL: false
# Whether we should build the binaries before running the tests
# Use with `PARALLEL: true` to reduce the execution time of test jobs, this increasing the throughput
PREBUILD: false
# You are interested in changing these values
BUILD_CONFIGURATIONS: "['Debug', 'Release']"
BUILD_CONFIGURATIONS_WITH_REF: "['Debug', 'Release']"
DOTNET_TARGET_FRAMEWORKS: "['netcoreapp3.0', 'netcoreapp3.1', 'net5.0', 'net6.0', 'net7.0', 'net8.0', 'net9.0']"
DOTNET_TARGET_FRAMEWORKS_MACOS_ARM64: "['net6.0', 'net7.0', 'net8.0', 'net9.0']"
FRAMEWORK_TARGET_FRAMEWORKS: "['net35', 'net452', 'net472', 'net48']"
jobs:
# https://stackoverflow.com/a/77549656
variables:
name: Preparing # variable accessibility workaround for jobs
runs-on: ubuntu-22.04
outputs:
EXPERIMENTAL: ${{env.EXPERIMENTAL}}
PARALLEL: ${{env.PARALLEL}}
PREBUILD: ${{env.PREBUILD}}
BUILD_CONFIGURATIONS: ${{env.BUILD_CONFIGURATIONS}}
BUILD_CONFIGURATIONS_WITH_REF: ${{env.BUILD_CONFIGURATIONS_WITH_REF}}
DOTNET_TARGET_FRAMEWORKS: ${{env.DOTNET_TARGET_FRAMEWORKS}}
DOTNET_TARGET_FRAMEWORKS_MACOS_ARM64: ${{env.DOTNET_TARGET_FRAMEWORKS_MACOS_ARM64}}
FRAMEWORK_TARGET_FRAMEWORKS: ${{env.FRAMEWORK_TARGET_FRAMEWORKS}}
steps:
- name: Compute outputs
run: |
echo "EXPERIMENTAL=${{env.EXPERIMENTAL}}" >> $GITHUB_OUTPUT
echo "PARALLEL=${{env.PARALLEL}}" >> $GITHUB_OUTPUT
echo "PREBUILD=${{env.PREBUILD}}" >> $GITHUB_OUTPUT
echo "BUILD_CONFIGURATIONS=${{env.BUILD_CONFIGURATIONS}}" >> $GITHUB_OUTPUT
echo "BUILD_CONFIGURATIONS_WITH_REF=${{env.BUILD_CONFIGURATIONS_WITH_REF}}" >> $GITHUB_OUTPUT
echo "DOTNET_TARGET_FRAMEWORKS=${{env.DOTNET_TARGET_FRAMEWORKS}}" >> $GITHUB_OUTPUT
echo "DOTNET_TARGET_FRAMEWORKS_MACOS_ARM64=${{env.DOTNET_TARGET_FRAMEWORKS_MACOS_ARM64}}" >> $GITHUB_OUTPUT
echo "FRAMEWORK_TARGET_FRAMEWORKS=${{env.FRAMEWORK_TARGET_FRAMEWORKS}}" >> $GITHUB_OUTPUT
# Ideally we should be able to build binaries on Ubuntu to all platforms to test
# and have a job that will create binaries on each platform and compare the output dll's
build-binaries:
name: Build ${{ matrix.build_configuration }}
needs: variables
strategy:
matrix:
image: [ { os: 'ubuntu', code: 'ubuntu-22.04' } ]
build_configuration: ${{fromJson(needs.variables.outputs.BUILD_CONFIGURATIONS_WITH_REF)}}
uses: ./.github/workflows/test-build.yml
with:
os: ${{matrix.image.os}}
image: ${{matrix.image.code}}
build_configuration: ${{matrix.build_configuration}}
publish: ${{matrix.image.os == 'ubuntu'}}
manual_build: ${{needs.variables.outputs.PREBUILD != 'true'}}
windows-dotnet:
name: Win .NET ${{matrix.architecture}}${{matrix.build_configuration && ''}}
needs: [variables, build-binaries]
strategy:
fail-fast: false
matrix:
architecture: ['x86', 'x64']
target_framework: ${{fromJson((needs.variables.outputs.PARALLEL == 'true' && needs.variables.outputs.DOTNET_TARGET_FRAMEWORKS) || '[""]')}}
build_configuration: ${{fromJson(needs.variables.outputs.BUILD_CONFIGURATIONS)}}
uses: ./.github/workflows/test-windows-dotnet.yml
with:
architecture: ${{matrix.architecture}}
target_framework: ${{matrix.target_framework}}
target_framework_array: ${{needs.variables.outputs.DOTNET_TARGET_FRAMEWORKS}}
build_configuration: ${{matrix.build_configuration}}
manual_build: ${{needs.variables.outputs.PREBUILD != 'true'}}
windows-framework:
name: Win Fwk ${{matrix.architecture}}${{matrix.build_configuration && ''}}
needs: [variables, build-binaries]
strategy:
fail-fast: false
matrix:
architecture: ['x86', 'x64']
target_framework: ${{fromJson((needs.variables.outputs.PARALLEL == 'true' && needs.variables.outputs.FRAMEWORK_TARGET_FRAMEWORKS) || '[""]')}}
build_configuration: ${{fromJson(needs.variables.outputs.BUILD_CONFIGURATIONS)}}
uses: ./.github/workflows/test-windows-framework.yml
with:
architecture: ${{matrix.architecture}}
target_framework: ${{matrix.target_framework}}
target_framework_array: ${{needs.variables.outputs.FRAMEWORK_TARGET_FRAMEWORKS}}
build_configuration: ${{matrix.build_configuration}}
manual_build: ${{needs.variables.outputs.PREBUILD != 'true'}}
windows-mono:
name: Win Mono ${{matrix.architecture}}${{matrix.build_configuration && ''}}
needs: [variables, build-binaries]
strategy:
fail-fast: false
matrix:
architecture: ['x86', 'x64']
target_framework: ${{fromJson((needs.variables.outputs.PARALLEL == 'true' && needs.variables.outputs.FRAMEWORK_TARGET_FRAMEWORKS) || '[""]')}}
build_configuration: ${{fromJson(needs.variables.outputs.BUILD_CONFIGURATIONS)}}
uses: ./.github/workflows/test-windows-mono.yml
with:
architecture: ${{matrix.architecture}}
target_framework: ${{matrix.target_framework}}
target_framework_array: ${{needs.variables.outputs.FRAMEWORK_TARGET_FRAMEWORKS}}
build_configuration: ${{matrix.build_configuration}}
manual_build: ${{needs.variables.outputs.PREBUILD != 'true'}}
ubuntu-macos-x64-dotnet:
name: ${{ matrix.image.os == 'ubuntu' && 'Ubuntu' || 'macOS' }} .NET ${{ matrix.architecture }}${{ matrix.build_configuration && '' }}
needs: [variables, build-binaries]
strategy:
fail-fast: false
matrix:
image: [ { os: 'ubuntu', code: 'ubuntu-22.04' }, { os: 'macos', code: 'macos-14-large' } ]
architecture: ['x64']
target_framework: ${{fromJson((needs.variables.outputs.PARALLEL == 'true' && needs.variables.outputs.DOTNET_TARGET_FRAMEWORKS) || '[""]')}}
build_configuration: ${{fromJson(needs.variables.outputs.BUILD_CONFIGURATIONS)}}
uses: ./.github/workflows/test-unix-dotnet.yml
with:
os: ${{matrix.image.os}}
image: ${{matrix.image.code}}
architecture: ${{matrix.architecture}}
target_framework: ${{matrix.target_framework }}
target_framework_array: ${{needs.variables.outputs.DOTNET_TARGET_FRAMEWORKS}}
build_configuration: ${{matrix.build_configuration}}
manual_build: ${{needs.variables.outputs.PREBUILD != 'true'}}
ubuntu-macos-x64-mono:
name: ${{ matrix.image.os == 'ubuntu' && 'Ubuntu' || 'macOS' }} Mono ${{ matrix.architecture }}${{ matrix.build_configuration && '' }}
needs: [variables, build-binaries]
strategy:
fail-fast: false
matrix:
image: [ { os: 'ubuntu', code: 'ubuntu-22.04' }, { os: 'macos', code: 'macos-14-large' } ]
architecture: ['x64']
target_framework: ${{fromJson((needs.variables.outputs.PARALLEL == 'true' && needs.variables.outputs.FRAMEWORK_TARGET_FRAMEWORKS) || '[""]')}}
build_configuration: ${{fromJson(needs.variables.outputs.BUILD_CONFIGURATIONS)}}
uses: ./.github/workflows/test-unix-mono.yml
with:
os: ${{matrix.image.os}}
image: ${{matrix.image.code}}
architecture: ${{matrix.architecture}}
target_framework: ${{matrix.target_framework}}
target_framework_array: ${{needs.variables.outputs.FRAMEWORK_TARGET_FRAMEWORKS}}
build_configuration: ${{matrix.build_configuration}}
manual_build: ${{needs.variables.outputs.PREBUILD != 'true'}}
ubuntu-macos-arm64-mono:
name: ${{ matrix.image.os == 'ubuntu' && 'Ubuntu' || 'macOS' }} Mono ${{ matrix.architecture }}${{ matrix.build_configuration && '' }}
needs: [variables, build-binaries]
strategy:
fail-fast: false
matrix:
image: [ { os: 'ubuntu', code: 'ubuntu-22.04' }, { os: 'macos', code: 'macos-14' } ]
architecture: ['arm64']
target_framework: ${{fromJson((needs.variables.outputs.PARALLEL == 'true' && needs.variables.outputs.FRAMEWORK_TARGET_FRAMEWORKS) || '[""]')}}
build_configuration: ${{fromJson(needs.variables.outputs.BUILD_CONFIGURATIONS)}}
uses: ./.github/workflows/test-unix-mono.yml
with:
os: ${{matrix.image.os}}
image: ${{matrix.image.code}}
architecture: ${{matrix.architecture}}
target_framework: ${{matrix.target_framework}}
target_framework_array: ${{needs.variables.outputs.FRAMEWORK_TARGET_FRAMEWORKS}}
build_configuration: ${{matrix.build_configuration}}
manual_build: ${{needs.variables.outputs.PREBUILD != 'true'}}
test-results:
name: Test Results
needs: [variables, windows-dotnet, windows-framework, windows-mono, ubuntu-macos-x64-dotnet, ubuntu-macos-x64-mono, ubuntu-macos-arm64-mono]
if: always()
uses: ./.github/workflows/test-result-upload.yml
with:
experimental: ${{needs.variables.outputs.EXPERIMENTAL == 'true'}}
cleanup-build-output:
name: Cleanup Build Output
needs: [test-results]
runs-on: ubuntu-22.04
if: always()
steps:
# Delete build output artifacts
- uses: joutvhu/delete-artifact@v2
with:
pattern: build-output-*
# Delete test result artifacts
- uses: joutvhu/delete-artifact@v2
with:
pattern: test-results-*