Run Tests and Package SDK on 475/merge because of pull_request with commit f34d1d127f46912a7cfdf1b53992c93c90a45cdb #1108
Workflow file for this run
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: Run Tests and Package SDK | |
| run-name: Run Tests and Package SDK on ${{ github.ref_name }} because of ${{ github.event_name }} with commit ${{ github.sha }} | |
| on: | |
| pull_request: | |
| branches: # Made towards the following | |
| - main | |
| - dev* | |
| types: # Only on the following activity | |
| - opened | |
| - synchronize # Changes to the branch like new commits, ammends, etc. | |
| push: | |
| branches: # Made towards the following | |
| - main | |
| - ci/* | |
| workflow_dispatch: | |
| inputs: | |
| LL_URL: | |
| description: Use a custom url for tests | |
| type: string | |
| default: "localhost:8080" | |
| concurrency: | |
| group: run-tests-and-package-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| editor-smoke-test: | |
| name: Test SDK in Editor | |
| runs-on: [ubuntu-latest] | |
| needs: [] | |
| timeout-minutes: 10 | |
| env: | |
| LL_USE_STAGE: false | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| testMode: | |
| - playmode | |
| unityVersion: ${{ fromJson(VARS.CI_UNITY_VERSIONS) }} | |
| steps: | |
| - name: Setup commandline dependencies (if on self-hosted runner) | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| apt update | |
| apt-get install -y git | |
| git config --global --add safe.directory unity-sdk | |
| git config --global --add safe.directory unity-sdk-smoketest-project | |
| apt-get install -y jq | |
| apt-get install -y sed | |
| apt-get install -y docker | |
| apt-get install -y curl | |
| apt-get update | |
| apt-get install ca-certificates curl gnupg | |
| install -m 0755 -d /etc/apt/keyrings | |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg | |
| chmod a+r /etc/apt/keyrings/docker.gpg | |
| echo \ | |
| "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ | |
| $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ | |
| tee /etc/apt/sources.list.d/docker.list > /dev/null | |
| apt-get update | |
| apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | |
| - name: Select stage keys | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| echo "JOB_API_KEY=${{ SECRETS.SMOKE_TEST_LL_API_KEY }}" >> $GITHUB_ENV | |
| echo "JOB_DOMAIN_KEY=${{ SECRETS.SMOKE_TEST_LL_DOMAIN_KEY }}" >> $GITHUB_ENV | |
| - name: Select prod keys | |
| if: ${{ env.LL_USE_STAGE == 'false' }} | |
| run: | | |
| echo "JOB_API_KEY=${{ SECRETS.LOOTLOCKER_API_KEY }}" >> $GITHUB_ENV | |
| echo "JOB_DOMAIN_KEY=${{ SECRETS.LOOTLOCKER_DOMAIN_KEY }}" >> $GITHUB_ENV | |
| - name: Checkout unity-sdk repository | |
| uses: actions/checkout@v5 | |
| with: | |
| path: unity-sdk | |
| - name: Checkout unity-sdk-smoketest-project repository | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: lootlocker/unity-sdk-smoketest-project | |
| path: unity-sdk-smoketest-project | |
| token: ${{ SECRETS.LL_PERSONAL_ACCESS_TOKEN }} | |
| - name: Set package reference to local unity-sdk | |
| run: | | |
| echo "Updating unity-sdk-smoketest-project/Packages/manifest.json to use lootlocker sdk at relative path (from manifest) ../../unity-sdk" | |
| jq ".\"dependencies\".\"com.lootlocker.lootlockersdk\"=\"file:../../unity-sdk\"" "unity-sdk-smoketest-project/Packages/manifest.json" > "unity-sdk-smoketest-project/Packages/tempmanifest.json" | |
| rm "unity-sdk-smoketest-project/Packages/manifest.json" | |
| mv "unity-sdk-smoketest-project/Packages/tempmanifest.json" "unity-sdk-smoketest-project/Packages/manifest.json" | |
| - name: Configure LootLocker to take keys by commandline | |
| run: | | |
| sed -i 's/NO_LOOTLOCKER_COMMANDLINE_SETTINGS/LOOTLOCKER_COMMANDLINE_SETTINGS/' unity-sdk-smoketest-project/ProjectSettings/ProjectSettings.asset | |
| - uses: actions/cache@v4 | |
| with: | |
| path: unity-sdk-smoketest-project/Library | |
| key: ${{ matrix.targetPlatform }}-Library-unity-sdk-smoketest-project | |
| restore-keys: | | |
| ${{ matrix.targetPlatform }}-Library-unity-sdk-smoketest-project | |
| Library- | |
| - name: Run Smoke Tests ${{ matrix.unityVersion }}-${{ matrix.testMode }} | |
| id: editor-smoke-tests-gameci | |
| uses: game-ci/unity-test-runner@v4.3.1 | |
| env: | |
| UNITY_LICENSE: ${{ SECRETS.UNITY_LICENSE }} | |
| UNITY_EMAIL: ${{ SECRETS.UNITY_EMAIL }} | |
| UNITY_PASSWORD: ${{ SECRETS.UNITY_PASSWORD }} | |
| with: | |
| testMode: ${{ matrix.testMode }} | |
| checkName: Smoke Test (${{ matrix.unityVersion }}-${{ matrix.testMode }}) Test Results | |
| artifactsPath: editor-smoke-tests-gameci-${{ matrix.unityVersion }}-${{ matrix.testMode }}-artifacts | |
| projectPath: unity-sdk-smoketest-project | |
| unityVersion: ${{ matrix.unityVersion }} | |
| githubToken: ${{ SECRETS.GITHUB_TOKEN }} | |
| customParameters: -apikey ${{ ENV.JOB_API_KEY }} -domainkey ${{ ENV.JOB_DOMAIN_KEY }} | |
| linux-build-smoke-test: | |
| name: Test SDK in StandaloneLinux64 build | |
| runs-on: [ubuntu-latest] | |
| needs: [editor-smoke-test] | |
| timeout-minutes: 10 | |
| env: | |
| LL_USE_STAGE: false | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| testMode: | |
| - playmode | |
| unityVersion: ${{ fromJson(VARS.CI_UNITY_VERSIONS) }} | |
| targetPlatform: | |
| - StandaloneLinux64 | |
| steps: | |
| - name: Setup commandline dependencies (if on self-hosted runner) | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| apt update | |
| apt-get install -y git | |
| git config --global --add safe.directory unity-sdk | |
| git config --global --add safe.directory unity-sdk-smoketest-project | |
| apt-get install -y jq | |
| apt-get install -y sed | |
| apt-get install -y docker | |
| apt-get install -y curl | |
| apt-get update | |
| apt-get install ca-certificates curl gnupg | |
| install -m 0755 -d /etc/apt/keyrings | |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg | |
| chmod a+r /etc/apt/keyrings/docker.gpg | |
| echo \ | |
| "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ | |
| $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ | |
| tee /etc/apt/sources.list.d/docker.list > /dev/null | |
| apt-get update | |
| apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | |
| - name: Select stage keys | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| echo "JOB_API_KEY=${{ SECRETS.SMOKE_TEST_LL_API_KEY }}" >> $GITHUB_ENV | |
| echo "JOB_DOMAIN_KEY=${{ SECRETS.SMOKE_TEST_LL_DOMAIN_KEY }}" >> $GITHUB_ENV | |
| - name: Select prod keys | |
| if: ${{ env.LL_USE_STAGE == 'false' }} | |
| run: | | |
| echo "JOB_API_KEY=${{ SECRETS.LOOTLOCKER_API_KEY }}" >> $GITHUB_ENV | |
| echo "JOB_DOMAIN_KEY=${{ SECRETS.LOOTLOCKER_DOMAIN_KEY }}" >> $GITHUB_ENV | |
| - name: Checkout unity-sdk repository | |
| uses: actions/checkout@v5 | |
| with: | |
| path: unity-sdk | |
| - name: Checkout unity-sdk-smoketest-project repository | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: lootlocker/unity-sdk-smoketest-project | |
| path: unity-sdk-smoketest-project | |
| token: ${{ SECRETS.LL_PERSONAL_ACCESS_TOKEN }} | |
| - name: Set package reference to local unity-sdk | |
| run: | | |
| echo "Updating unity-sdk-smoketest-project/Packages/manifest.json to use lootlocker sdk at relative path (from manifest) ../../unity-sdk" | |
| jq ".\"dependencies\".\"com.lootlocker.lootlockersdk\"=\"file:../../unity-sdk\"" "unity-sdk-smoketest-project/Packages/manifest.json" > "unity-sdk-smoketest-project/Packages/tempmanifest.json" | |
| rm "unity-sdk-smoketest-project/Packages/manifest.json" | |
| mv "unity-sdk-smoketest-project/Packages/tempmanifest.json" "unity-sdk-smoketest-project/Packages/manifest.json" | |
| - name: Configure LootLocker to take keys by commandline | |
| run: | | |
| sed -i 's/NO_LOOTLOCKER_COMMANDLINE_SETTINGS/LOOTLOCKER_COMMANDLINE_SETTINGS/' unity-sdk-smoketest-project/ProjectSettings/ProjectSettings.asset | |
| - name: Configure LootLocker to target stage environment | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| sed -i 's/NO_LOOTLOCKER_TARGET_STAGE_ENV/LOOTLOCKER_TARGET_STAGE_ENV/' unity-sdk-smoketest-project/ProjectSettings/ProjectSettings.asset | |
| - name: Commit all changes to allow building | |
| run: | | |
| git config --global user.email "fake@email.com" | |
| git config --global user.name "Fake Name" | |
| cd unity-sdk-smoketest-project | |
| git add -A | |
| git commit -m "Temporary changes for build" | |
| - uses: actions/cache@v4 | |
| with: | |
| path: unity-sdk-smoketest-project/Library | |
| key: ${{ matrix.targetPlatform }}-Library-unity-sdk-smoketest-project | |
| restore-keys: | | |
| ${{ matrix.targetPlatform }}-Library-unity-sdk-smoketest-project | |
| Library- | |
| - name: Run Smoke Tests ${{ matrix.unityVersion }}-${{ matrix.testMode }}-${{ matrix.targetPlatform }} | |
| id: build-smoke-tests-gameci | |
| uses: game-ci/unity-builder@v4.8.1 | |
| if: ${{ matrix.unityVersion != '6000.3.10f1' }} | |
| env: | |
| UNITY_LICENSE: ${{ SECRETS.UNITY_LICENSE }} | |
| UNITY_EMAIL: ${{ SECRETS.UNITY_EMAIL }} | |
| UNITY_PASSWORD: ${{ SECRETS.UNITY_PASSWORD }} | |
| with: | |
| unityVersion: ${{ matrix.unityVersion }} | |
| targetPlatform: ${{ matrix.targetPlatform }} | |
| buildsPath: builds | |
| buildName: smokeTest | |
| projectPath: unity-sdk-smoketest-project | |
| customParameters: -apikey ${{ ENV.JOB_API_KEY }} -domainkey ${{ ENV.JOB_DOMAIN_KEY }} | |
| - name: Run the built game | |
| if: ${{ matrix.unityVersion != '6000.3.10f1' }} | |
| run: | | |
| sudo chmod 777 ./builds | |
| sudo chmod 777 ./builds/${{ matrix.targetPlatform }}/ | |
| sudo chmod 777 ./builds/${{ matrix.targetPlatform }}/* | |
| ./builds/${{ matrix.targetPlatform }}/smokeTest -batchmode -nographics -apikey ${{ ENV.JOB_API_KEY }} -domainkey ${{ ENV.JOB_DOMAIN_KEY }} | |
| while [ ! -f "./builds/${{ matrix.targetPlatform }}/smokeTest_Data/LLActorOutput.txt" ]; do sleep 10; ls -als ./builds/${{ matrix.targetPlatform }}/smokeTest_Data/; done | |
| - name: Test the output of the run | |
| if: ${{ matrix.unityVersion != '6000.3.10f1' }} | |
| run: | | |
| cat ./builds/${{ matrix.targetPlatform }}/smokeTest_Data/LLActorOutput.txt | |
| grep -q "Run Succeeded" ./builds/${{ matrix.targetPlatform }}/smokeTest_Data/LLActorOutput.txt | |
| exit $? | |
| - name: Upload the run log | |
| if: failure() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: smoke-test-log-${{ matrix.targetPlatform }} | |
| path: ./builds/${{ matrix.targetPlatform }}/smokeTest_Data/LLActorOutput.txt | |
| webgl-build-smoke-test: | |
| name: Test SDK in WebGL build | |
| runs-on: [ubuntu-latest] | |
| needs: [editor-smoke-test] | |
| timeout-minutes: 20 | |
| if: ((startsWith(github.ref, 'refs/pull') && endsWith(github.base_ref, 'main')) || startsWith(github.ref, 'refs/tags/v') || (startsWith(github.ref, 'refs/heads') && endsWith(github.ref, 'main'))) | |
| env: | |
| LL_USE_STAGE: false | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| testMode: | |
| - playmode | |
| unityVersion: ${{ fromJson(VARS.CI_UNITY_VERSIONS) }} | |
| targetPlatform: | |
| - WebGL | |
| steps: | |
| - name: Setup commandline dependencies (if on self-hosted runner) | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| apt update | |
| apt-get install -y git | |
| git config --global --add safe.directory unity-sdk | |
| git config --global --add safe.directory unity-sdk-smoketest-project | |
| apt-get install -y jq | |
| apt-get install -y sed | |
| apt-get install -y docker | |
| apt-get install -y curl | |
| apt-get update | |
| apt-get install ca-certificates curl gnupg | |
| install -m 0755 -d /etc/apt/keyrings | |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg | |
| chmod a+r /etc/apt/keyrings/docker.gpg | |
| echo \ | |
| "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ | |
| $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ | |
| tee /etc/apt/sources.list.d/docker.list > /dev/null | |
| apt-get update | |
| apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | |
| - name: Select stage keys | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| echo "JOB_API_KEY=${{ SECRETS.SMOKE_TEST_LL_API_KEY }}" >> $GITHUB_ENV | |
| echo "JOB_DOMAIN_KEY=${{ SECRETS.SMOKE_TEST_LL_DOMAIN_KEY }}" >> $GITHUB_ENV | |
| - name: Select prod keys | |
| if: ${{ env.LL_USE_STAGE == 'false' }} | |
| run: | | |
| echo "JOB_API_KEY=${{ SECRETS.LOOTLOCKER_API_KEY }}" >> $GITHUB_ENV | |
| echo "JOB_DOMAIN_KEY=${{ SECRETS.LOOTLOCKER_DOMAIN_KEY }}" >> $GITHUB_ENV | |
| - name: Checkout unity-sdk repository | |
| uses: actions/checkout@v5 | |
| with: | |
| path: unity-sdk | |
| - name: Checkout unity-sdk-smoketest-project repository | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: lootlocker/unity-sdk-smoketest-project | |
| path: unity-sdk-smoketest-project | |
| token: ${{ SECRETS.LL_PERSONAL_ACCESS_TOKEN }} | |
| - name: Set package reference to local unity-sdk | |
| run: | | |
| echo "Updating unity-sdk-smoketest-project/Packages/manifest.json to use lootlocker sdk at relative path (from manifest) ../../unity-sdk" | |
| jq ".\"dependencies\".\"com.lootlocker.lootlockersdk\"=\"file:../../unity-sdk\"" "unity-sdk-smoketest-project/Packages/manifest.json" > "unity-sdk-smoketest-project/Packages/tempmanifest.json" | |
| rm "unity-sdk-smoketest-project/Packages/manifest.json" | |
| mv "unity-sdk-smoketest-project/Packages/tempmanifest.json" "unity-sdk-smoketest-project/Packages/manifest.json" | |
| - name: Configure LootLocker to take keys by commandline | |
| run: | | |
| sed -i 's/NO_LOOTLOCKER_COMMANDLINE_SETTINGS/LOOTLOCKER_COMMANDLINE_SETTINGS/' unity-sdk-smoketest-project/ProjectSettings/ProjectSettings.asset | |
| - name: Configure LootLocker to target stage environment | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| sed -i 's/NO_LOOTLOCKER_TARGET_STAGE_ENV/LOOTLOCKER_TARGET_STAGE_ENV/' unity-sdk-smoketest-project/ProjectSettings/ProjectSettings.asset | |
| - name: Commit all changes to allow building | |
| run: | | |
| git config --global user.email "fake@email.com" | |
| git config --global user.name "Fake Name" | |
| cd unity-sdk-smoketest-project | |
| git add -A | |
| git commit -m "Temporary changes for build" | |
| - uses: actions/cache@v4 | |
| with: | |
| path: unity-sdk-smoketest-project/Library | |
| key: ${{ matrix.targetPlatform }}-Library-unity-sdk-smoketest-project | |
| restore-keys: | | |
| ${{ matrix.targetPlatform }}-Library-unity-sdk-smoketest-project | |
| Library- | |
| - name: Run Smoke Tests ${{ matrix.unityVersion }}-${{ matrix.testMode }}-${{ matrix.targetPlatform }} | |
| id: build-smoke-tests-gameci | |
| uses: game-ci/unity-builder@v4.8.1 | |
| env: | |
| UNITY_LICENSE: ${{ SECRETS.UNITY_LICENSE }} | |
| UNITY_EMAIL: ${{ SECRETS.UNITY_EMAIL }} | |
| UNITY_PASSWORD: ${{ SECRETS.UNITY_PASSWORD }} | |
| with: | |
| unityVersion: ${{ matrix.unityVersion }} | |
| targetPlatform: ${{ matrix.targetPlatform }} | |
| buildsPath: builds | |
| buildName: smokeTest | |
| projectPath: unity-sdk-smoketest-project | |
| customParameters: -apikey ${{ ENV.JOB_API_KEY }} -domainkey ${{ ENV.JOB_DOMAIN_KEY }} | |
| run-integration-tests: | |
| name: Run the integration tests | |
| runs-on: ubuntu-latest | |
| if: ${{ vars.ENABLE_INTEGRATION_TESTS == 'true' }} | |
| needs: [editor-smoke-test] | |
| timeout-minutes: ${{ (github.event_name == 'pull_request' && github.base_ref == 'main') && 120 || 60 }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unityVersion: ${{ fromJson(VARS.CI_UNITY_VERSIONS) }} | |
| steps: | |
| ####### RUN LOCAL BACKEND ENVIRONMENT ########### | |
| - name: Checkout devenv repository | |
| uses: actions/checkout@v5 | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| with: | |
| repository: lootlocker/devenv | |
| path: devenv | |
| token: ${{ SECRETS.LL_CI_BACKEND_REPO_ACCESS_TOKEN }} | |
| - name: Checkout php-backend repository | |
| uses: actions/checkout@v5 | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| with: | |
| repository: lootlocker/php-backend | |
| path: php-backend | |
| token: ${{ SECRETS.LL_CI_BACKEND_REPO_ACCESS_TOKEN }} | |
| - name: Checkout gitops-lootlocker repository | |
| uses: actions/checkout@v5 | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| with: | |
| repository: lootlocker/gitops-lootlocker | |
| path: gitops-lootlocker | |
| token: ${{ SECRETS.LL_CI_BACKEND_REPO_ACCESS_TOKEN }} | |
| - name: Checkout go-backend repository | |
| uses: actions/checkout@v5 | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| with: | |
| repository: lootlocker/go-backend | |
| path: go-backend | |
| token: ${{ SECRETS.LL_CI_BACKEND_REPO_ACCESS_TOKEN }} | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| with: | |
| cache: false | |
| - name: Setup Tailscale | |
| uses: tailscale/github-action@v4 | |
| with: | |
| oauth-client-id: ${{ SECRETS.CI_TS_OAUTH_CLIENT_ID }} | |
| oauth-secret: ${{ SECRETS.CI_TS_OAUTH_SECRET }} | |
| tags: tag:ci | |
| - name: Download schema | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| run: | | |
| wget https://ddl.deer-mermaid.ts.net -O devenv/tables/schema.sql | |
| - name: Configure devenv | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| env: | |
| PHP_BACKEND_CONF_FILE: ${{ secrets.PHP_BACKEND_CONF_FILE }} | |
| run: | | |
| echo "DEV_ENV_BACKEND_NEW_PHP_PLATFORM=linux/amd64" >> $GITHUB_ENV | |
| echo "DEV_ENV_PHP_BACKEND_PLATFORM=linux/amd64" >> $GITHUB_ENV | |
| echo "DEV_ENV_REDIS_PLATFORM=linux/amd64" >> $GITHUB_ENV | |
| echo "DEV_ENV_NATS_PLATFORM=linux/amd64" >> $GITHUB_ENV | |
| printf '%s' "$PHP_BACKEND_CONF_FILE" > php-backend/.env | |
| - name: Create laravel log file | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| run: | | |
| cd php-backend | |
| touch storage/logs/laravel.log | |
| chmod -R 777 storage/logs/laravel.log | |
| - name: Launch devenv | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| uses: nick-fields/retry@v3 | |
| with: | |
| timeout_minutes: 12 | |
| max_attempts: 5 | |
| retry_on: timeout | |
| command: | | |
| cd devenv | |
| docker compose -f docker-compose.yml up -d --wait mysql valkey nats php-backend | |
| - name: Smoke test MySQL | |
| run: mysql -h 127.0.0.1 -P 3306 -u root -e 'USE game_backend; SHOW TABLES;' | head -20 | |
| - name: Verify php-backend HTTP | |
| run: | | |
| for i in $(seq 1 10); do | |
| status=$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8585/node/health || true) | |
| echo "Attempt $i: HTTP $status" | |
| if [ "$status" = "200" ]; then | |
| echo "php-backend health check passed" | |
| exit 0 | |
| fi | |
| sleep 3 | |
| done | |
| echo "::error::php-backend health check failed after 10 attempts (last HTTP $status)" | |
| docker logs ci-php-backend | |
| exit 1 | |
| - name: Setup Go to use access token for private repos | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| env: | |
| GH_ACCESS_TOKEN: ${{ SECRETS.LL_CI_BACKEND_REPO_ACCESS_TOKEN }} | |
| run: | | |
| git config --global url."https://${GH_ACCESS_TOKEN}:x-oauth-basic@github.com/".insteadOf "https://github.com/" | |
| export GOPRIVATE=github.com/lootlocker/* | |
| export GONOPROXY=localhost | |
| export GITHUB_ACCESS_TOKEN=${{ SECRETS.LL_CI_BACKEND_REPO_ACCESS_TOKEN }} | |
| - name: Configure Go backend | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| env: | |
| GO_BACKEND_CONF_FILE: ${{ secrets.GO_BACKEND_CONF_FILE }} | |
| run: | | |
| cd go-backend | |
| printf '%s' "$GO_BACKEND_CONF_FILE" > infrastructure/dev.local.env | |
| - name: Build Go Backend | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| run: | | |
| cd go-backend | |
| go build -o go-backend . | |
| - name: Run Go Backend | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| run: | | |
| mkdir logs | |
| cd go-backend | |
| ./go-backend > ../logs/go-backend.log 2>&1 & | |
| - name: Wait for Go backend ready healthcheck | |
| if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }} | |
| run: | | |
| curl --get http://localhost:9999/__/ready --retry 60 --retry-delay 2 --retry-all-errors --fail-with-body --verbose 2>&1 | |
| ####### CONFIGURE TESTS ########### | |
| - name: Configure variables | |
| run: | | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "LOOTLOCKER_URL=${{ inputs.LL_URL }}" | sed -e 's/https:\/\///g' >> $GITHUB_ENV; elif [ "${{ vars.LL_USE_STAGE }}" = "true" ]; then echo "LOOTLOCKER_URL=${{ secrets.LOOTLOCKER_API_STAGE_URL }}" | sed -e 's/https:\/\///g' >> $GITHUB_ENV; elif [ "${{ vars.LL_USE_LOCAL_BACKEND }}" = "true" ]; then echo "LOOTLOCKER_URL=localhost:8080" >> $GITHUB_ENV; else echo "LOOTLOCKER_URL=${{ secrets.LOOTLOCKER_API_PRODUCTION_URL }}" | sed -e 's/https:\/\///g' >> $GITHUB_ENV; fi | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then if [ "localhost:8080" = "${{ inputs.LL_URL }}" ]; then echo "TARGET_ENVIRONMENT=LOCAL" >> $GITHUB_ENV; else echo "TARGET_ENVIRONMENT=CUSTOM" >> $GITHUB_ENV; fi; elif [ "${{ vars.LL_USE_STAGE }}" = "true" ]; then echo "TARGET_ENVIRONMENT=STAGE" >> $GITHUB_ENV; elif [ "${{ vars.LL_USE_LOCAL_BACKEND }}" = "true" ]; then echo "TARGET_ENVIRONMENT=LOCAL" >> $GITHUB_ENV; else echo "TARGET_ENVIRONMENT=PRODUCTION" >> $GITHUB_ENV; fi | |
| COINFLIP=$(($RANDOM%2)) | |
| echo "Coinflip resulted in $COINFLIP" | |
| if [ "$COINFLIP" -lt 1 ]; then echo "JSON_LIBRARY=newtonsoft" >> $GITHUB_ENV; else echo "JSON_LIBRARY=zerodep" >> $GITHUB_ENV; fi | |
| - name: Checkout this repository | |
| uses: actions/checkout@v5 | |
| with: | |
| path: ./sdk | |
| - name: Create Test Project | |
| run: | | |
| mkdir TestProject | |
| mkdir TestProject/Packages | |
| DEPENDENCY_STRING=$'{\n "dependencies": {\n "com.lootlocker.lootlockersdk": "file:../../sdk"' | |
| if [[ ${{ ENV.JSON_LIBRARY == 'newtonsoft' }} ]]; then DEPENDENCY_STRING=$DEPENDENCY_STRING$',\n "com.unity.nuget.newtonsoft-json": "3.2.1"'; fi | |
| DEPENDENCY_STRING=$DEPENDENCY_STRING$'\n },\n "testables": ["com.lootlocker.lootlockersdk"]\n}' | |
| echo $DEPENDENCY_STRING >> TestProject/Packages/manifest.json | |
| mkdir TestProject/Assets/ | |
| cp -r sdk/Samples~/LootLockerExamples TestProject/Assets/ | |
| - name: Can reach ${{ ENV.TARGET_ENVIRONMENT }} environment | |
| if: ${{ ENV.TARGET_ENVIRONMENT == 'LOCAL' }} | |
| run: | | |
| curl -X POST "http://${{ ENV.LOOTLOCKER_URL }}/game/v2/session/guest" -H "Content-Type: application/json" -d "{\"game_key\": \"request_will_fail_but_will_tell_us_if_we_have_a_connection\", \"game_version\": \"0.10.0.0\" }" | |
| - name: Can reach ${{ ENV.TARGET_ENVIRONMENT }} environment | |
| if: ${{ ENV.TARGET_ENVIRONMENT != 'LOCAL' }} | |
| run: | | |
| curl -X POST "https://${{ ENV.LOOTLOCKER_URL }}/game/v2/session/guest" -H "Content-Type: application/json" -d "{\"game_key\": \"request_will_fail_but_will_tell_us_if_we_have_a_connection\", \"game_version\": \"0.10.0.0\" }" | |
| - name: Create Project Settings file and enable LootLocker commandline settings | |
| run: | | |
| mkdir TestProject/ProjectSettings | |
| echo $'%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!129 &1\nPlayerSettings:\n scriptingDefineSymbols:\n 1: LOOTLOCKER_COMMANDLINE_SETTINGS' >> TestProject/ProjectSettings/ProjectSettings.asset | |
| - name: Disable domain reload between tests to speed up play mode test execution | |
| run: | | |
| echo $'%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!159 &1\nEditorSettings:\n m_ObjectHideFlags: 0\n serializedVersion: 11\n m_EnterPlayModeOptionsEnabled: 1\n m_EnterPlayModeOptions: 1' >> TestProject/ProjectSettings/EditorSettings.asset | |
| - name: Enable beta features | |
| run: | | |
| sed -i -e 's/1: LOOTLOCKER_COMMANDLINE_SETTINGS/1: LOOTLOCKER_COMMANDLINE_SETTINGS;${{ VARS.CURRENT_BETA_FEATURES }}/g' TestProject/ProjectSettings/ProjectSettings.asset | |
| - name: Set presence to disabled | |
| run: | | |
| echo "PRESENCE_CONFIG=-enablepresence false -enablepresenceautoconnect false -enablepresenceautodisconnectonfocuschange false" >> $GITHUB_ENV | |
| - name: Set the project to use Newtonsoft json | |
| if: ${{ ENV.JSON_LIBRARY == 'newtonsoft' }} | |
| run: | | |
| sed -i -e 's/1: LOOTLOCKER_COMMANDLINE_SETTINGS/1: LOOTLOCKER_COMMANDLINE_SETTINGS;LOOTLOCKER_USE_NEWTONSOFTJSON/g' TestProject/ProjectSettings/ProjectSettings.asset | |
| sed -i -e 's/"nunit.framework.dll"/"nunit.framework.dll",\n\t\t"Newtonsoft.Json.dll"/g' sdk/Tests/LootLockerTests/PlayMode/PlayModeTests.asmdef | |
| - name: Set LootLocker to target stage environment | |
| if: ${{ ENV.TARGET_ENVIRONMENT == 'STAGE' }} | |
| run: | | |
| sed -i -e 's/1: LOOTLOCKER_COMMANDLINE_SETTINGS/1: LOOTLOCKER_COMMANDLINE_SETTINGS;LOOTLOCKER_TARGET_STAGE_ENV/g' TestProject/ProjectSettings/ProjectSettings.asset | |
| - name: Set project to allow for http request | |
| if: ${{ ENV.TARGET_ENVIRONMENT == 'LOCAL' }} | |
| run: | | |
| echo $' insecureHttpOption: 2' >> TestProject/ProjectSettings/ProjectSettings.asset | |
| - name: Set user information command line arguments | |
| if: ${{ ENV.TARGET_ENVIRONMENT == 'PRODUCTION' }} | |
| run: | | |
| echo "USER_COMMANDLINE_ARGUMENTS=-adminemail ${{ SECRETS.UNITY_CI_ADMIN_EMAIL }} -adminpassword ${{ SECRETS.UNITY_CI_ADMIN_PASSWORD }}" >> $GITHUB_ENV | |
| - name: Cat projects settings file | |
| run: | | |
| cat TestProject/ProjectSettings/ProjectSettings.asset | |
| - name: Set test category to full ci when PR to main | |
| if: ${{ github.event_name == 'pull_request' && github.base_ref == 'main' }} | |
| run: | | |
| echo 'TEST_CATEGORY=-testCategory "LootLockerCI"' >> $GITHUB_ENV | |
| - name: Set test category to minimal ci | |
| if: ${{ github.event_name != 'pull_request' || github.base_ref != 'main' }} | |
| run: | | |
| echo 'TEST_CATEGORY=-testCategory "LootLockerCIFast"' >> $GITHUB_ENV | |
| ####### RUN TESTS ########### | |
| - name: Cache Libraries | |
| if: ${{ vars.ENABLE_INTEGRATION_TESTS == 'true' }} | |
| uses: actions/cache@v4 | |
| with: | |
| path: tests~/Library | |
| key: Library-${{ matrix.unityVersion }}-${{ ENV.JSON_LIBRARY }} | |
| restore-keys: Library- | |
| - name: Run tests in ${{ matrix.unityVersion }} towards ${{ ENV.TARGET_ENVIRONMENT }} environment with json library ${{ ENV.JSON_LIBRARY }} | |
| uses: game-ci/unity-test-runner@v4.3.1 | |
| if: ${{ vars.ENABLE_INTEGRATION_TESTS == 'true' }} | |
| id: tests | |
| env: | |
| UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} | |
| UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} | |
| UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} | |
| with: | |
| projectPath: TestProject/ | |
| testMode: playmode | |
| unityVersion: ${{ matrix.unityVersion }} | |
| checkName: Integration tests (${{ matrix.unityVersion }}-${{ ENV.JSON_LIBRARY }}) Test Results | |
| artifactsPath: ${{ matrix.unityVersion }}-${{ ENV.JSON_LIBRARY }}-artifacts | |
| githubToken: ${{ secrets.GITHUB_TOKEN }} | |
| customParameters: -lootlockerurl ${{ ENV.LOOTLOCKER_URL }} ${{ ENV.USER_COMMANDLINE_ARGUMENTS }} ${{ ENV.TEST_CATEGORY }} ${{ ENV.PRESENCE_CONFIG }} | |
| useHostNetwork: true | |
| ####### CLEANUP ########### | |
| - name: Bring down Go Backend | |
| if: always() | |
| run: | | |
| kill $(ps aux | grep '[g]o-backend' | grep -v grep | awk '{print $2}') || true | |
| - name: Extract docker logs on failure | |
| if: failure() && vars.LL_USE_LOCAL_BACKEND == 'true' | |
| run: | | |
| mkdir -p logs | |
| docker compose -f devenv/docker-compose.yml logs php-backend > logs/php-backend.log 2>&1 || true | |
| docker compose -f devenv/docker-compose.yml logs valkey > logs/valkey.log 2>&1 || true | |
| docker compose -f devenv/docker-compose.yml logs nats > logs/nats.log 2>&1 || true | |
| docker compose -f devenv/docker-compose.yml logs mysql > logs/mysql.log 2>&1 || true | |
| docker compose -f devenv/docker-compose.yml logs > logs/devenv-compose.log 2>&1 || true | |
| docker compose -f devenv/docker-compose.yml exec -T php-backend sh -c 'find / -name laravel.log 2>/dev/null | head -5 && find / -name laravel.log 2>/dev/null | xargs cat 2>/dev/null' > logs/laravel.log 2>&1 || true | |
| - name: Bring down devenv | |
| if: always() | |
| run: | | |
| cd devenv | |
| docker compose -f docker-compose.yml down -v | |
| - name: Upload logs | |
| uses: actions/upload-artifact@v7 | |
| if: always() | |
| with: | |
| name: Integration tests (${{ matrix.unityVersion }}-${{ ENV.JSON_LIBRARY }}) Logs | |
| path: logs | |
| - name: Upload test results | |
| uses: actions/upload-artifact@v7 | |
| if: always() | |
| with: | |
| name: Integration tests (${{ matrix.unityVersion }}-${{ ENV.JSON_LIBRARY }}) Test Results | |
| path: ${{ matrix.unityVersion }}-${{ ENV.JSON_LIBRARY }}-artifacts | |
| test-samples: | |
| name: Test Samples | |
| runs-on: [ubuntu-latest] | |
| needs: [editor-smoke-test] | |
| timeout-minutes: 12 | |
| env: | |
| LL_USE_STAGE: false | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unityVersion: ${{ fromJson(VARS.CI_UNITY_VERSIONS) }} | |
| steps: | |
| - name: Setup commandline dependencies (if on self-hosted runner) | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| apt update | |
| apt-get install -y git | |
| git config --global --add safe.directory unity-sdk | |
| git config --global --add safe.directory unity-sdk-packager | |
| apt-get install -y jq | |
| apt-get install -y sed | |
| apt-get install -y docker | |
| apt-get install -y curl | |
| apt-get update | |
| apt-get install ca-certificates curl gnupg | |
| install -m 0755 -d /etc/apt/keyrings | |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg | |
| chmod a+r /etc/apt/keyrings/docker.gpg | |
| echo \ | |
| "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ | |
| $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ | |
| tee /etc/apt/sources.list.d/docker.list > /dev/null | |
| apt-get update | |
| apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | |
| - name: Checkout unity-sdk repository | |
| uses: actions/checkout@v5 | |
| with: | |
| path: unity-sdk | |
| - name: Checkout unity-sdk-sample-tester repository | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: lootlocker/unity-sdk-sample-tester | |
| path: unity-sdk-sample-tester | |
| token: ${{ SECRETS.LL_PERSONAL_ACCESS_TOKEN }} | |
| - name: Add LootLockerSDK as asset folder | |
| run: | | |
| cp -r unity-sdk unity-sdk-sample-tester/Assets/LootLockerSDK | |
| - uses: actions/cache@v4 | |
| with: | |
| path: unity-sdk-sample-tester/Library | |
| key: ${{ matrix.targetPlatform }}-Library-unity-sdk-sample-tester | |
| restore-keys: | | |
| ${{ matrix.targetPlatform }}-Library-unity-sdk-sample-tester | |
| Library- | |
| - name: Compile and run all sample scenes ${{ matrix.unityVersion }} | |
| id: test-samples | |
| uses: game-ci/unity-test-runner@v4.3.1 | |
| env: | |
| UNITY_LICENSE: ${{ SECRETS.UNITY_LICENSE }} | |
| UNITY_EMAIL: ${{ SECRETS.UNITY_EMAIL }} | |
| UNITY_PASSWORD: ${{ SECRETS.UNITY_PASSWORD }} | |
| with: | |
| testMode: editmode | |
| checkName: Sample Scene ${{ matrix.unityVersion }} Test Results | |
| artifactsPath: test-samples-${{ matrix.unityVersion }}-artifacts | |
| projectPath: unity-sdk-sample-tester | |
| unityVersion: ${{ matrix.unityVersion }} | |
| githubToken: ${{ SECRETS.GITHUB_TOKEN }} | |
| validate-sdk: | |
| name: Validate SDK | |
| runs-on: [ubuntu-latest] | |
| needs: [editor-smoke-test] | |
| timeout-minutes: 8 | |
| env: | |
| LL_USE_STAGE: false | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unityVersion: ${{ fromJson(VARS.CI_UNITY_VERSIONS) }} | |
| steps: | |
| - name: Setup commandline dependencies (if on self-hosted runner) | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| apt update | |
| apt-get install -y git | |
| git config --global --add safe.directory unity-sdk | |
| git config --global --add safe.directory unity-sdk-packager | |
| apt-get install -y jq | |
| apt-get install -y sed | |
| apt-get install -y docker | |
| apt-get install -y curl | |
| apt-get update | |
| apt-get install ca-certificates curl gnupg | |
| install -m 0755 -d /etc/apt/keyrings | |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg | |
| chmod a+r /etc/apt/keyrings/docker.gpg | |
| echo \ | |
| "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ | |
| $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ | |
| tee /etc/apt/sources.list.d/docker.list > /dev/null | |
| apt-get update | |
| apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | |
| - name: Checkout unity-sdk repository | |
| uses: actions/checkout@v5 | |
| with: | |
| path: unity-sdk | |
| - name: Checkout unity-sdk-package-validator repository | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: lootlocker/unity-sdk-package-validator | |
| path: unity-sdk-package-validator | |
| token: ${{ SECRETS.LL_PERSONAL_ACCESS_TOKEN }} | |
| - name: Add LootLockerSDK as asset folder | |
| run: | | |
| cp -r unity-sdk unity-sdk-package-validator/Assets/LootLockerSDK | |
| - uses: actions/cache@v4 | |
| with: | |
| path: unity-sdk-package-validator/Library | |
| key: ${{ matrix.targetPlatform }}-Library-unity-sdk-package-validator | |
| restore-keys: | | |
| ${{ matrix.targetPlatform }}-Library-unity-sdk-package-validator | |
| Library- | |
| - name: Validate SDK using asset store tools | |
| id: validate-sdk | |
| uses: game-ci/unity-test-runner@v4.3.1 | |
| env: | |
| UNITY_LICENSE: ${{ SECRETS.UNITY_LICENSE }} | |
| UNITY_EMAIL: ${{ SECRETS.UNITY_EMAIL }} | |
| UNITY_PASSWORD: ${{ SECRETS.UNITY_PASSWORD }} | |
| with: | |
| testMode: editmode | |
| checkName: Validate SDK ${{ matrix.unityVersion }} Test Results | |
| artifactsPath: validate-sdk-${{ matrix.unityVersion }}-artifacts | |
| projectPath: unity-sdk-package-validator | |
| unityVersion: ${{ matrix.unityVersion }} | |
| githubToken: ${{ SECRETS.GITHUB_TOKEN }} | |
| package-sdk: | |
| name: Package SDK | |
| runs-on: [ubuntu-latest] | |
| needs: [test-samples, run-integration-tests] | |
| timeout-minutes: 5 | |
| if: (startsWith(github.ref, 'refs/pull') && endsWith(github.base_ref, 'main')) || (startsWith(github.ref, 'refs/heads') && endsWith(github.ref, 'main')) || startsWith(github.ref, 'refs/tags/v') | |
| env: | |
| LL_USE_STAGE: false | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| unityVersion: ${{ fromJson(VARS.CI_UNITY_VERSIONS) }} | |
| steps: | |
| - name: Setup commandline dependencies (if on self-hosted runner) | |
| if: ${{ env.LL_USE_STAGE == 'true' }} | |
| run: | | |
| apt update | |
| apt-get install -y git | |
| git config --global --add safe.directory unity-sdk | |
| git config --global --add safe.directory unity-sdk-packager | |
| apt-get install -y jq | |
| apt-get install -y sed | |
| apt-get install -y docker | |
| apt-get install -y curl | |
| apt-get update | |
| apt-get install ca-certificates curl gnupg | |
| install -m 0755 -d /etc/apt/keyrings | |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg | |
| chmod a+r /etc/apt/keyrings/docker.gpg | |
| echo \ | |
| "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ | |
| $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ | |
| tee /etc/apt/sources.list.d/docker.list > /dev/null | |
| apt-get update | |
| apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | |
| - name: Checkout unity-sdk repository | |
| uses: actions/checkout@v5 | |
| with: | |
| path: unity-sdk | |
| - name: Checkout unity-sdk-packager-project repository | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: lootlocker/unity-sdk-packager | |
| path: unity-sdk-packager | |
| token: ${{ SECRETS.LL_PERSONAL_ACCESS_TOKEN }} | |
| - name: Add LootLockerSDK as asset folder | |
| run: | | |
| cp -r unity-sdk unity-sdk-packager/Assets/LootLockerSDK | |
| - uses: actions/cache@v4 | |
| with: | |
| path: unity-sdk-packager/Library | |
| key: ${{ matrix.targetPlatform }}-Library-unity-sdk-packager | |
| restore-keys: | | |
| ${{ matrix.targetPlatform }}-Library-unity-sdk-packager | |
| Library- | |
| - name: Package SDK for ${{ matrix.unityVersion }} | |
| id: package-sdk-gameci | |
| uses: game-ci/unity-test-runner@v4.3.1 | |
| env: | |
| UNITY_LICENSE: ${{ SECRETS.UNITY_LICENSE }} | |
| UNITY_EMAIL: ${{ SECRETS.UNITY_EMAIL }} | |
| UNITY_PASSWORD: ${{ SECRETS.UNITY_PASSWORD }} | |
| with: | |
| testMode: editmode | |
| checkName: SDK Packaging ${{ matrix.unityVersion }} Results | |
| artifactsPath: package-sdk-${{ matrix.unityVersion }}-artifacts | |
| projectPath: unity-sdk-packager | |
| unityVersion: ${{ matrix.unityVersion }} | |
| githubToken: ${{ SECRETS.GITHUB_TOKEN }} | |
| - name: Expose packaged SDK as artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: LootLockerSDK-${{ matrix.unityVersion }}.zip | |
| path: unity-sdk-packager/LootLockerSDK*.unitypackage |