Skip to content

Run Tests and Package SDK on 353/merge because of pull_request with commit 64ceee8be77ac4b4abef779e5635f16dae57ce22 #601

Run Tests and Package SDK on 353/merge because of pull_request with commit 64ceee8be77ac4b4abef779e5635f16dae57ce22

Run Tests and Package SDK on 353/merge because of pull_request with commit 64ceee8be77ac4b4abef779e5635f16dae57ce22 #601

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
workflow_dispatch:
inputs:
LL_URL:
description: Use a custom url for tests
type: string
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@v4
with:
path: unity-sdk
- name: Checkout unity-sdk-smoketest-project repository
uses: actions/checkout@v4
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
- 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
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@v4
with:
path: unity-sdk
- name: Checkout unity-sdk-smoketest-project repository
uses: actions/checkout@v4
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
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
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
run: |
cat ./builds/${{ matrix.targetPlatform }}/smokeTest_Data/LLActorOutput.txt
grep -q "Run Succeeded" ./builds/${{ matrix.targetPlatform }}/smokeTest_Data/LLActorOutput.txt
exit $?
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@v4
with:
path: unity-sdk
- name: Checkout unity-sdk-smoketest-project repository
uses: actions/checkout@v4
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
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: 15
strategy:
fail-fast: false
matrix:
unityVersion: ${{ fromJson(VARS.CI_UNITY_VERSIONS) }}
steps:
####### RUN LOCAL BACKEND ENVIRONMENT ###########
- name: Checkout devenv repository
uses: actions/checkout@v4
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@v4
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@v4
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@v4
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: Run Mage
uses: magefile/mage-action@v3
if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }}
with:
install-only: true
- name: Configure devenv
if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }}
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
echo ${{ SECRETS.PHP_BACKEND_CONF_FILE }} | base64 --decode > 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' }}
run: |
cd devenv
mage env:setupsilent dev false false
mage env:upsilent dev
mage deps:installsilent dev
- 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' }}
run: |
cd go-backend
echo ${{ SECRETS.GO_BACKEND_CONF_FILE }} | base64 --decode > infrastructure/dev.local.env
go run . jobs migrate
- name: Run Go Backend
if: ${{ VARS.LL_USE_LOCAL_BACKEND == 'true' }}
run: |
mkdir logs
cd go-backend
go run . > ../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 30 --retry-delay 1 --retry-all-errors --fail-with-body --verbose
####### CONFIGURE TESTS ###########
- name: Configure variables
run: |
if [[ ${{ github.event_name == 'workflow_dispatch' }} == true ]]; 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' }} == true ]]; then echo "TARGET_ENVIRONMENT=CUSTOM" >> $GITHUB_ENV; echo "USE_TAILSCALE=true" >> $GITHUB_ENV; elif [ ${{ vars.LL_USE_STAGE }} == 'true' ]; then echo "TARGET_ENVIRONMENT=STAGE" >> $GITHUB_ENV; echo "USE_TAILSCALE=true" >> $GITHUB_ENV; elif [ ${{ vars.LL_USE_LOCAL_BACKEND }} == 'true' ]; then echo "TARGET_ENVIRONMENT=LOCAL" >> $GITHUB_ENV; echo "USE_TAILSCALE=false" >> $GITHUB_ENV; else echo "TARGET_ENVIRONMENT=PRODUCTION" >> $GITHUB_ENV; echo "USE_TAILSCALE=false" >> $GITHUB_ENV; fi
COINFLIP=$(($RANDOM%${{ vars.LL_USE_LEGACY_HTTP_ONE_IN }}))
if [[ $COINFLIP -lt 1 ]]; then echo "USE_HTTP_EXECUTION_QUEUE=false" >> $GITHUB_ENV; else echo "USE_HTTP_EXECUTION_QUEUE=true" >> $GITHUB_ENV; fi
COINFLIP=$(($RANDOM%2))
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@v4
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: Setup Tailscale
if: ${{ ENV.USE_TAILSCALE == 'true' }}
uses: tailscale/github-action@v2
with:
oauth-client-id: ${{ SECRETS.CI_TS_OAUTH_CLIENT_ID }}
oauth-secret: ${{ SECRETS.CI_TS_OAUTH_SECRET }}
tags: tag:ci
- 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: 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 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: Use Legacy HTTP Stack
if: ${{ ENV.USE_HTTP_EXECUTION_QUEUE == 'false' }}
run: |
sed -i -e 's/1: LOOTLOCKER_COMMANDLINE_SETTINGS/1: LOOTLOCKER_COMMANDLINE_SETTINGS;LOOTLOCKER_LEGACY_HTTP_STACK/g' TestProject/ProjectSettings/ProjectSettings.asset
- 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
####### 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
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 }}
useHostNetwork: true
####### CLEANUP ###########
- name: Bring down Go Backend
if: always()
run: |
kill $(ps aux | grep '[g]o run .' | awk '{print $2}')
- name: Bring down devenv
if: always()
run: |
cd devenv
mage env:downsilent dev
- name: Upload test results
uses: actions/upload-artifact@v4
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: 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@v4
with:
path: unity-sdk
- name: Checkout unity-sdk-sample-tester repository
uses: actions/checkout@v4
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
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@v4
with:
path: unity-sdk
- name: Checkout unity-sdk-package-validator repository
uses: actions/checkout@v4
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
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, validate-sdk, 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@v4
with:
path: unity-sdk
- name: Checkout unity-sdk-packager-project repository
uses: actions/checkout@v4
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
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@v4
with:
name: LootLockerSDK-${{ matrix.unityVersion }}.zip
path: unity-sdk-packager/LootLockerSDK*.unitypackage