chore: Utilize app-runner for WebGL #8714
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "CI" | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - release/* | |
| pull_request: | |
| paths-ignore: | |
| - "**.md" | |
| - "**.txt" | |
| workflow_dispatch: # e.g. to manually trigger on foreign PRs | |
| env: | |
| DOTNET_CLI_TELEMETRY_OPTOUT: 1 | |
| DOTNET_NOLOGO: 1 | |
| defaults: | |
| run: | |
| shell: pwsh | |
| jobs: | |
| cancel-previous-workflow: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Cancel Previous Runs | |
| uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 # pin@0.11.0 | |
| with: | |
| access_token: ${{ github.token }} | |
| create-unity-matrix: | |
| uses: ./.github/workflows/create-unity-matrix.yml | |
| with: | |
| event-name: ${{ github.event_name }} | |
| sdk: | |
| strategy: | |
| matrix: | |
| include: | |
| - target: Android | |
| host: ubuntu-latest | |
| - target: Linux | |
| host: ubuntu-latest | |
| - target: Windows | |
| host: windows-latest | |
| - target: Cocoa | |
| host: macos-latest | |
| uses: ./.github/workflows/sdk.yml | |
| with: | |
| target: ${{ matrix.target }} | |
| runsOn: ${{ matrix.host }} | |
| build-unity-sdk: | |
| name: Build Unity SDK | |
| secrets: inherit | |
| permissions: | |
| checks: write | |
| statuses: write | |
| contents: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # Building the SDK with Unity 2022 and newer requires ns2.1 - skipping for now | |
| unity-version: ["2021.3"] | |
| uses: ./.github/workflows/build.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| package-validation: | |
| name: UPM Package validation | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v3 | |
| - name: Download UPM package | |
| uses: vaind/download-artifact@e7141b6a94ef28aa3d828b52830cfa1f406a1848 # v4-with-wait-timeout | |
| with: | |
| name: package-release | |
| wait-timeout: 3600 | |
| - name: Verify package content against snapshot | |
| # If this step fails, you can accept the new file content by | |
| # running the following script locally with 'accept' as an argument | |
| # and committing the new snapshot file to your branch. i.e: | |
| # ./test/Scripts.Tests/test-pack-contents.ps1 accept | |
| run: ./test/Scripts.Tests/test-pack-contents.ps1 | |
| # This produces the `samples/IntegrationTest` as `smoke-test-${{ matrix.unity-version }}`. | |
| smoke-test-create: | |
| name: Create ${{ matrix.unity-version }} Smoke Test Project | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [create-unity-matrix] | |
| secrets: inherit | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix) }} | |
| uses: ./.github/workflows/smoke-test-create.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| # A Linux, docker-based build to prepare a WebGL player. The tests run in `smoke-test-run`. | |
| smoke-test-build-webgl: | |
| name: Build ${{ matrix.platform }} ${{ matrix.unity-version }} Smoke Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-create, create-unity-matrix] | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unity-version: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix).unity-version }} | |
| platform: ["WebGL"] | |
| include: | |
| - platform: WebGL | |
| check_symbols: true | |
| build_platform: WebGL | |
| env: | |
| UNITY_PATH: docker exec unity unity-editor | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v3 | |
| - name: Free Disk Space (Ubuntu) | |
| uses: jlumbroso/free-disk-space@f68fdb76e2ea636224182cfb7377ff9a1708f9b8 # v1.3.0 | |
| with: | |
| android: true | |
| dotnet: false | |
| haskell: true | |
| large-packages: false | |
| docker-images: false | |
| swap-storage: true | |
| - name: Docker Login | |
| uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # pinned v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Start the Unity docker container | |
| run: ./scripts/ci-docker.sh "$UNITY_VERSION" "$PLATFORM_WITH_SUFFIX" "$UNITY_LICENSE_SERVER_CONFIG" | |
| shell: bash | |
| env: | |
| UNITY_VERSION: ${{ matrix.unity-version }} | |
| PLATFORM: ${{ matrix.platform }} | |
| IMAGE_SUFFIX: ${{ matrix.image-suffix }} | |
| PLATFORM_WITH_SUFFIX: ${{ matrix.platform }}${{ matrix.image-suffix }} | |
| UNITY_LICENSE_SERVER_CONFIG: ${{ secrets.UNITY_LICENSE_SERVER_CONFIG }} | |
| - name: Download IntegrationTest project | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 | |
| with: | |
| name: smoke-test-${{ matrix.unity-version }} | |
| - name: Extract project archive | |
| run: tar -xvzf test-project.tar.gz | |
| - name: Cache Unity Library | |
| uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2 | |
| with: | |
| path: samples/IntegrationTest/Library | |
| key: Library-IntegrationTest-${{ matrix.platform }}-${{ matrix.unity-version }}-v1 | |
| restore-keys: | | |
| Library-IntegrationTest-${{ matrix.platform }}-${{ matrix.unity-version }}- | |
| Library-IntegrationTest-${{ matrix.platform }}- | |
| - name: Restore cached build without Sentry | |
| id: cache-build-nosentry | |
| uses: actions/cache@v4 | |
| with: | |
| path: samples/IntegrationTest/Build-NoSentry | |
| key: build-nosentry-${{ matrix.build_platform }}-${{ matrix.unity-version }} | |
| - name: Build without Sentry SDK | |
| if: steps.cache-build-nosentry.outputs.cache-hit != 'true' | |
| run: ./test/Scripts.Integration.Test/build-project.ps1 -UnityPath "$env:UNITY_PATH" -Platform "$env:BUILD_PLATFORM" -CheckSymbols:$false -BuildDirName "Build-NoSentry" | |
| env: | |
| BUILD_PLATFORM: ${{ matrix.build_platform }} | |
| - name: Download UPM package | |
| uses: vaind/download-artifact@e7141b6a94ef28aa3d828b52830cfa1f406a1848 # v4-with-wait-timeout | |
| with: | |
| name: package-release | |
| wait-timeout: 3600 | |
| - name: Extract UPM package | |
| run: ./test/Scripts.Integration.Test/extract-package.ps1 | |
| - name: Add Sentry to the project | |
| run: ./test/Scripts.Integration.Test/add-sentry.ps1 -UnityPath "$env:UNITY_PATH" -PackagePath "test-package-release" | |
| - name: Configure Sentry | |
| run: ./test/Scripts.Integration.Test/configure-sentry.ps1 -UnityPath "$env:UNITY_PATH" -Platform "$env:BUILD_PLATFORM" -CheckSymbols -TestMode "integration" | |
| env: | |
| BUILD_PLATFORM: ${{ matrix.build_platform }} | |
| SENTRY_DSN: ${{ secrets.SENTRY_TEST_DSN }} | |
| - name: Build Project | |
| run: ./test/Scripts.Integration.Test/build-project.ps1 -UnityPath "$env:UNITY_PATH" -Platform "$env:BUILD_PLATFORM" -CheckSymbols:$([System.Convert]::ToBoolean($env:CHECK_SYMBOLS)) -UnityVersion "$env:UNITY_VERSION" | |
| env: | |
| BUILD_PLATFORM: ${{ matrix.build_platform }} | |
| CHECK_SYMBOLS: ${{ matrix.check_symbols }} | |
| UNITY_VERSION: ${{ matrix.unity-version }} | |
| - name: Compare build sizes | |
| run: ./test/Scripts.Integration.Test/measure-build-size.ps1 -Path1 "samples/IntegrationTest/Build-NoSentry" -Path2 "samples/IntegrationTest/Build" -Platform "$env:BUILD_PLATFORM" -UnityVersion "$env:UNITY_VERSION" | |
| env: | |
| BUILD_PLATFORM: ${{ matrix.build_platform }} | |
| UNITY_VERSION: ${{ matrix.unity-version }} | |
| - name: Upload build size measurement | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: build-size-${{ matrix.platform }}-${{ matrix.unity-version }} | |
| path: build-size-measurements/*.json | |
| retention-days: 1 | |
| # We create tar explicitly because upload-artifact is slow for many files. | |
| - name: Create archive | |
| shell: bash | |
| run: | | |
| # Note: remove local.properties file that contains Android SDK & NDK paths in the Unity installation. | |
| rm -rf samples/IntegrationTest/Build/*_BackUpThisFolder_ButDontShipItWithYourGame | |
| tar -cvzf test-app-webgl.tar.gz samples/IntegrationTest/Build | |
| - name: Upload test app | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: testapp-webgl-compiled-${{ matrix.unity-version }} | |
| if-no-files-found: error | |
| path: test-app-webgl.tar.gz | |
| retention-days: 14 | |
| - name: Upload IntegrationTest project on failure | |
| if: ${{ failure() }} | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: failed-project-${{ matrix.platform }}-${{ matrix.unity-version }} | |
| path: | | |
| samples/IntegrationTest | |
| !samples/IntegrationTest/Build/*_BackUpThisFolder_ButDontShipItWithYourGame | |
| # Lower retention period - we only need this to retry CI. | |
| retention-days: 14 | |
| smoke-test-build-android: | |
| name: Build Android ${{ matrix.unity-version }} Smoke Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-create, create-unity-matrix] | |
| secrets: inherit | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix) }} | |
| uses: ./.github/workflows/smoke-test-build-android.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| smoke-test-run-android: | |
| name: Run Android ${{ matrix.unity-version }} Integration Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-build-android, create-unity-matrix] | |
| secrets: inherit | |
| uses: ./.github/workflows/smoke-test-run-android.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| api-level: ${{ matrix.api-level }} | |
| init-type: ${{ matrix.init-type }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unity-version: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix).unity-version }} | |
| # api-level: [30, 31, 34] | |
| api-level: [30] | |
| init-type: ["runtime", "buildtime"] | |
| smoke-test-build-ios: | |
| name: Build iOS ${{ matrix.unity-version }} Smoke Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-create, create-unity-matrix] | |
| secrets: inherit | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix) }} | |
| uses: ./.github/workflows/smoke-test-build-ios.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| smoke-test-compile-ios: | |
| name: Compile iOS ${{ matrix.unity-version }} Smoke Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-build-ios, create-unity-matrix] | |
| secrets: inherit | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unity-version: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix).unity-version }} | |
| init-type: ["runtime", "buildtime"] | |
| uses: ./.github/workflows/smoke-test-compile-ios.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| init-type: ${{ matrix.init-type }} | |
| smoke-test-run-ios: | |
| name: Run iOS ${{ matrix.unity-version }} Integration Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-compile-ios, create-unity-matrix] | |
| uses: ./.github/workflows/smoke-test-run-ios.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| ios-version: ${{ matrix.ios-version }} | |
| init-type: ${{ matrix.init-type }} | |
| secrets: inherit | |
| strategy: | |
| fail-fast: false | |
| max-parallel: 2 | |
| matrix: | |
| unity-version: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix).unity-version }} | |
| ios-version: ["17.0", "latest"] | |
| init-type: ["runtime", "buildtime"] | |
| # Check https://support.apple.com/en-us/HT201222 for the latest minor version for a given major one. | |
| # https://developer.apple.com/support/app-store/ shows that of all iOS devices | |
| # - `iOS 18`: 88 % | |
| # - `iOS 17`: 17 % | |
| # - the rest: 4 % | |
| # as of August, 2025. Therefore, let's stick to testing iOS 17 and `latest` for now. | |
| # Numbers as string otherwise GH will reformat the runtime numbers removing the fractions. | |
| # Also make sure to match the versions available here: | |
| # - https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md | |
| smoke-test-run-webgl: | |
| name: Run WebGL ${{ matrix.unity-version }} Integration Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-build-webgl, create-unity-matrix] | |
| secrets: inherit | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unity-version: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix).unity-version }} | |
| uses: ./.github/workflows/smoke-test-run-webgl.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| smoke-test-build-linux: | |
| name: Build Linux ${{ matrix.unity-version }} Integration Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-create, create-unity-matrix] | |
| secrets: inherit | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unity-version: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix).unity-version }} | |
| uses: ./.github/workflows/smoke-test-build-linux.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| smoke-test-build-windows: | |
| name: Build Windows ${{ matrix.unity-version }} Integration Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-create, create-unity-matrix] | |
| secrets: inherit | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unity-version: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix).unity-version }} | |
| uses: ./.github/workflows/smoke-test-build-windows.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| smoke-test-run-linux: | |
| name: Run Linux ${{ matrix.unity-version }} Integration Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-build-linux, create-unity-matrix] | |
| secrets: inherit | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unity-version: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix).unity-version }} | |
| uses: ./.github/workflows/smoke-test-run-desktop.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| platform: linux | |
| smoke-test-run-windows: | |
| name: Run Windows ${{ matrix.unity-version }} Integration Test | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-build-windows, create-unity-matrix] | |
| secrets: inherit | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unity-version: ${{ fromJSON(needs.create-unity-matrix.outputs.unity-matrix).unity-version }} | |
| uses: ./.github/workflows/smoke-test-run-desktop.yml | |
| with: | |
| unity-version: ${{ matrix.unity-version }} | |
| platform: windows | |
| build-size-summary: | |
| name: Build Size | |
| runs-on: ubuntu-latest | |
| if: ${{ !startsWith(github.ref, 'refs/heads/release/') }} | |
| needs: [smoke-test-build-webgl, smoke-test-build-android, smoke-test-compile-ios, smoke-test-build-linux, smoke-test-build-windows] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v3 | |
| - name: Download all build size measurements | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 | |
| with: | |
| pattern: build-size-* | |
| path: build-size-measurements | |
| - name: Create consolidated summary | |
| shell: pwsh | |
| run: ./scripts/create-build-size-summary.ps1 |