name: Run Tests 🧪 env: ACTIONS_RUNNER_DEBUG: true ACTIONS_STEP_DEBUG: true on: push: branches: - main - "feature/**" - "release/**" paths: - "Editor/**" - "Runtime/**" - "Samples~/**" - "Tests/**" workflow_dispatch: jobs: buildAndTestForSomePlatforms: concurrency: group: ${{ github.workflow }}-${{ matrix.unityVersion }}-${{ matrix.unityLocalisation }}-${{ matrix.uniTask }} cancel-in-progress: true # Cancel other jobs if another one arrives name: ${{ matrix.unityVersion }} (${{ matrix.targetPlatform }}, ${{ matrix.unityLocalisation && 'with unity loc' || 'no unity loc' }}, ${{ matrix.uniTask && 'with unitask' || 'no unitask' }}) runs-on: [self-hosted, linux] strategy: fail-fast: false # max-parallel: 1 # Only run one at a time, to prevent license contention matrix: projectPath: - YarnSpinner unityVersion: - 2022.3.45f1 - 2023.2.12f1 - 6000.0.54f1 - 6000.1.10f1 unityLocalisation: - true - false uniTask: - true - false targetPlatform: # - StandaloneOSX # Build a macOS standalone (Intel 64-bit). # - StandaloneWindows64 # Build a Windows 64-bit standalone. - StandaloneLinux64 # Build a Linux 64-bit standalone. # - iOS # Build an iOS player. # - Android # Build an Android player. # - WebGL # WebGL. steps: - name: Create empty Unity project shell: bash run: | mkdir -p ${{ matrix.projectPath }}/Assets mkdir -p ${{ matrix.projectPath }}/ProjectSettings mkdir -p ${{ matrix.projectPath }}/Packages mkdir -p output # Add the Unity Input System package, and configure the new project to use # both the Input System and the legacy Input Manager. - name: Add Input System package shell: bash run: | cat < ${{ matrix.projectPath }}/ProjectSettings/ProjectSettings.asset %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!129 &1 PlayerSettings: activeInputHandler: 2 EOF cat < ${{ matrix.projectPath }}/Packages/manifest.json { "dependencies": { "com.unity.inputsystem": "1.11.2" } } EOF # Select correct TMP Essentials package if [[ ${{matrix.unityVersion}} == "2022"* ]]; then TMP_VERSION="ugui-1.0.0" else TMP_VERSION="ugui-2.0.0" fi echo "Installing TMP Essentials for $TMP_VERSION" # Add the correct version of the TMP Essentials package to package manifest MANIFEST_PATH=${{ matrix.projectPath }}/Packages/manifest.json jq ".dependencies += {\"dev.yarnspinner.tmp-essentials\": \"https://github.com/desplesda/dev.yarnspinner.tmp-essentials.git#$TMP_VERSION\"}" "$MANIFEST_PATH" > manifest.json mv manifest.json "$MANIFEST_PATH" - name: Add Unity Localisation if: ${{ matrix.unityLocalisation }} run: | # Add Unity Localisation package to package manifest MANIFEST_PATH=${{ matrix.projectPath }}/Packages/manifest.json jq '.dependencies += {"com.unity.localization": "1.3.2"}' "$MANIFEST_PATH" > manifest.json mv manifest.json "$MANIFEST_PATH" - name: Add UniTask Package if: ${{ matrix.uniTask }} run: | # Add UniTask package to package manifest MANIFEST_PATH=${{ matrix.projectPath }}/Packages/manifest.json jq '.dependencies += {"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask"}' "$MANIFEST_PATH" > manifest.json mv manifest.json "$MANIFEST_PATH" - name: Check out to Packages/YarnSpinner uses: actions/checkout@v2 with: fetch-depth: 0 path: ${{ matrix.projectPath }}/Packages/dev.yarnspinner.unity - name: Run edit mode tests run: | docker run \ --rm \ -v ./${{ matrix.projectPath }}:/project \ -v ./output:/output \ -e TEST_MODE=EditMode \ --hostname YS-Linux-Build \ yarnspinner/unity-${{ matrix.unityVersion }} - name: Run play mode tests if: always() run: | docker run \ --rm \ -v ./${{ matrix.projectPath }}:/project \ -v ./output:/output \ -e TEST_MODE=PlayMode \ --hostname YS-Linux-Build \ yarnspinner/unity-${{ matrix.unityVersion }} - name: Generate HTML test report (Play Mode) uses: rjtngit/nunit-html-action@v1 if: always() with: inputXmlPath: output/TestResults-PlayMode.xml outputHtmlPath: output/TestResults-PlayMode.html - name: Generate HTML test report (Edit Mode) uses: rjtngit/nunit-html-action@v1 if: always() with: inputXmlPath: output/TestResults-EditMode.xml outputHtmlPath: output/TestResults-EditMode.html - name: Upload test results uses: actions/upload-artifact@v4 if: always() with: name: Test results (edit + play, ${{ matrix.unityVersion }} ${{ matrix.targetPlatform }} ${{ matrix.unityLocalisation && 'with-unity-loc' || 'no-unity-loc' }} ${{ matrix.uniTask && 'with-unitask' || 'no-unitask' }}) # path: ${{ steps.testRunner.outputs.artifactsPath }} path: ./output