name: Build-Debug

on:
  push:
    branches:
      - "master"
  pull_request:
    branches:
      - "master"

jobs:
  build-dotnet:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v4
      - uses: Cysharp/Actions/.github/actions/setup-dotnet@main
      - run: dotnet build -c Debug
      - run: dotnet test -c Debug

  build-unity:
    if: ${{ ((github.event_name == 'push' && github.repository_owner == 'Cysharp') || startsWith(github.event.pull_request.head.label, 'Cysharp:')) && github.triggering_actor != 'dependabot[bot]' }}
    strategy:
      fail-fast: false
      max-parallel: 2
      matrix:
        unity: ["2022.3.39f1", "6000.0.12f1"] # Test with LTS
    runs-on: ubuntu-latest
    timeout-minutes: 30 # Unity build takes more than 20min.
    steps:
      - name: Load secrets
        id: op-load-secret
        uses: 1password/load-secrets-action@v2
        with:
          export-env: false
        env:
          OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN_PUBLIC }}
          UNITY_EMAIL: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/username"
          UNITY_PASSWORD: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/credential"
          UNITY_SERIAL: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/serial"

      - uses: actions/checkout@v4

      # Execute scripts: Export Package
      #  /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -logFile -projectPath . -executeMethod PackageExporter.Export
      - name: Build Unity (.unitypacakge)
        if: ${{ startsWith(matrix.unity, '2022') }} # only execute once
        uses: Cysharp/Actions/.github/actions/unity-builder@main
        env:
          UNITY_EMAIL: ${{ steps.op-load-secret.outputs.UNITY_EMAIL }}
          UNITY_PASSWORD: ${{ steps.op-load-secret.outputs.UNITY_PASSWORD }}
          UNITY_SERIAL: ${{ steps.op-load-secret.outputs.UNITY_SERIAL }}
        with:
          projectPath: src/UniTask
          unityVersion: ${{ matrix.unity }}
          targetPlatform: StandaloneLinux64
          buildMethod: PackageExporter.Export

      # Execute UnitTest
      # /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -logFile -projectPath . -executeMethod UnitTestBuilder.BuildUnitTest /headless /ScriptBackend IL2CPP /BuildTarget StandaloneLinux64
      - name: Build UnitTest (IL2CPP)
        uses: Cysharp/Actions/.github/actions/unity-builder@main
        env:
          UNITY_EMAIL: ${{ steps.op-load-secret.outputs.UNITY_EMAIL }}
          UNITY_PASSWORD: ${{ steps.op-load-secret.outputs.UNITY_PASSWORD }}
          UNITY_SERIAL: ${{ steps.op-load-secret.outputs.UNITY_SERIAL }}
        with:
          projectPath: src/UniTask
          unityVersion: ${{ matrix.unity }}
          targetPlatform: StandaloneLinux64
          buildMethod: UnitTestBuilder.BuildUnitTest
          customParameters: "/headless /ScriptBackend IL2CPP"
      - name: Check UnitTest file is generated
        run: ls -lR ./src/UniTask/bin/UnitTest
      - name: Execute UnitTest
        run: ./src/UniTask/bin/UnitTest/StandaloneLinux64_IL2CPP/test

      - uses: Cysharp/Actions/.github/actions/check-metas@main # check meta files
        with:
          directory: src/UniTask

      # Store artifacts.
      - uses: Cysharp/Actions/.github/actions/upload-artifact@main
        if: ${{ startsWith(matrix.unity, '2021') }} # only execute 2021
        with:
          name: UniTask.unitypackage-${{ matrix.unity }}.zip
          path: ./src/UniTask/*.unitypackage
          retention-days: 1