# Required secrets # UNITY_LICENSE: The contents of Unity license file # UNITY_EMAIL: Unity user email to login # UNITY_PASSWORD: Unity user password to login name: ๐Ÿงช Test run-name: ๐Ÿงช Test (${{ github.event.pull_request.title || github.ref_name }}) env: # MINIMUM_VERSION: The minimum version of Unity. MINIMUM_VERSION: 2020.3 # EXCLUDE_FILTER: The excluded versions of Unity. EXCLUDE_FILTER: "(2017|2018|2023.3)" PROJECT_PATH: . on: workflow_dispatch: inputs: usePeriodVersions: description: "Use the period versions (.0f1, .10f1, 20f1, ...)." required: false default: "true" push: branches: - develop - "develop-*" tags: - "!*" paths-ignore: - "**.md" pull_request: types: - opened - reopened - synchronize paths-ignore: - "**.md" jobs: setup: name: โš™๏ธ Setup runs-on: ubuntu-latest permissions: {} # No permissions needed for setup job outputs: unityVersions: ${{ steps.setup.outputs.unityVersions }} steps: - name: ๐Ÿ”‘ Secrets check run: | if [ -z "$UNITY_EMAIL" ] || [ -z "$UNITY_PASSWORD" ] || [ -z "UNITY_LICENSE" ]; then echo "Error: UNITY_EMAIL, UNITY_PASSWORD, and UNITY_LICENSE secrets must be set." | tee -a $GITHUB_STEP_SUMMARY >&2 echo "Error: See https://game.ci/docs/github/test-runner#basic-setup" | tee -a $GITHUB_STEP_SUMMARY >&2 echo "Error: Set the secrets at ${{ github.server_url }}/${{ github.repository }}/settings/secrets/actions" | tee -a $GITHUB_STEP_SUMMARY >&2 exit 1 fi env: UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} - name: โš™๏ธ Find target Unity versions id: setup run: | echo "==== Target Unity Versions ====" LATEST_VERSIONS=`npx -y unity-changeset@latest list --json --versions --all --latest-patch --ignore-alpha --min ${MINIMUM_VERSION}` if [ "${{ inputs.usePeriodVersions }}" = "true" ]; then ADDITIONAL_VERSIONS=`npx -y unity-changeset@latest list --json --versions --ignore-alpha --min ${MINIMUM_VERSION} --grep '0f'` else ADDITIONAL_VERSIONS=[] fi VERSIONS=`echo "[${LATEST_VERSIONS}, ${ADDITIONAL_VERSIONS}]" \ | jq -c '[ flatten | sort | unique | .[] | select( test("${{ env.EXCLUDE_FILTER }}") | not ) ]'` echo "unityVersions=${VERSIONS}" | tee $GITHUB_OUTPUT test: name: ๐Ÿงช Run tests runs-on: ubuntu-latest permissions: checks: write contents: read needs: setup strategy: fail-fast: false max-parallel: 8 matrix: unityVersion: ${{ fromJson(needs.setup.outputs.unityVersions) }} steps: - name: ๐Ÿšš Checkout ($${{ github.ref }}) uses: actions/checkout@v6 - name: ๐Ÿ“ฅ Cache library uses: actions/cache@v5 with: path: ${{ env.PROJECT_PATH }}/Library key: ${{ env.PROJECT_PATH }}-Library-${{ matrix.unityVersion }}-${{ github.event.pull_request.head.sha || github.sha }} restore-keys: | ${{ env.PROJECT_PATH }}-Library-${{ matrix.unityVersion }}- ${{ env.PROJECT_PATH }}-Library- - name: ๐Ÿ› ๏ธ Build Unity Project (Test) uses: game-ci/unity-builder@v5 timeout-minutes: 45 with: customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }} targetPlatform: StandaloneLinux64 allowDirtyBuild: true customParameters: -nographics projectPath: ${{ env.PROJECT_PATH }} env: UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} - name: ๐Ÿงช Run tests uses: game-ci/unity-test-runner@v4 timeout-minutes: 45 with: customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }} # unityVersion: ${{ matrix.unityVersion }} customParameters: -nographics checkName: ${{ matrix.unityVersion }} Test Results githubToken: ${{ github.token }} projectPath: ${{ env.PROJECT_PATH }} env: UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}