Run Tests and Package SDK on main because of push with commit 9d7527ca7a736912c40e82a893183106036b21fc #602
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 | |
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 |