Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Setup CI to run tests on every PR to develop or main #33

Merged
merged 4 commits into from
Dec 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
300 changes: 300 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,300 @@
name: CI - Run Tests + Build Sample App

on:
pull_request:
branches: [ main, develop ]
push:
branches: [ main, develop ]

workflow_dispatch:

concurrency:
group: ${{ github.ref }}
cancel-in-progress: true

env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}

jobs:
testRunner:
strategy:
fail-fast: false
matrix:
os: [macos-latest]
unity_version: [2021.3.27, 2022.3.4]
dotnet_version: [NET_4_x, STANDARD_2_x]
compiler: [il2cpp]
target_platform: [standalone, mobile]
name: Run tests + Build Sample APp
runs-on: ${{ matrix.os }}
timeout-minutes: 600
steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Print chipset
shell: bash
run: uname -m
continue-on-error: true

- name: Set up Node.js 16
uses: actions/setup-node@v1
with:
node-version: 16

- uses: actions/setup-python@v4
with:
python-version: '3.x'

- name: Print python version
shell: bash
run: python --version
continue-on-error: true

- name: Install node package, `unity-license-activate`
run: npm install --global https://github.com/sierpinskid/unity-license-activate

- name: Install node package, `unity-verify-code`
run: npm install --global https://github.com/sierpinskid/unity-verify-code

- name: Download Unity & Modules
if: ${{ matrix.os }} == 'macos-latest'
shell: bash
run: |
if [[ ${{ matrix.unity_version }} == '2021.3.27' ]]
then
curl -L -o ~/Unity.pkg https://download.unity3d.com/download_unity/ca3ffb99bcc6/MacEditorInstaller/Unity.pkg

if [[ ${{ matrix.compiler }} == 'il2cpp' ]]
then
curl -L -o ~/UnityIL2CPPModule.pkg https://download.unity3d.com/download_unity/ca3ffb99bcc6/MacEditorTargetInstaller/UnitySetup-Mac-IL2CPP-Support-for-Editor-2021.3.27f1.pkg
fi

if [[ ${{ matrix.target_platform }} == 'mobile' ]]
then
curl -L -o ~/UnityIosModule.pkg https://download.unity3d.com/download_unity/ca3ffb99bcc6/MacEditorTargetInstaller/UnitySetup-iOS-Support-for-Editor-2021.3.27f1.pkg
fi
elif [[ ${{ matrix.unity_version }} == '2022.3.4' ]]
then
curl -L -o ~/Unity.pkg https://download.unity3d.com/download_unity/35713cd46cd7/MacEditorInstaller/Unity.pkg

if [[ ${{ matrix.compiler }} == 'il2cpp' ]]
then
curl -L -o ~/UnityIL2CPPModule.pkg https://download.unity3d.com/download_unity/35713cd46cd7/MacEditorTargetInstaller/UnitySetup-Mac-IL2CPP-Support-for-Editor-2022.3.4f1.pkg
fi

if [[ ${{ matrix.target_platform }} == 'mobile' ]]
then
curl -L -o ~/UnityIosModule.pkg https://download.unity3d.com/download_unity/35713cd46cd7/MacEditorTargetInstaller/UnitySetup-iOS-Support-for-Editor-2022.3.4f1.pkg
fi
fi

- name: Install Unity
uses: nick-fields/retry@v2
with:
timeout_minutes: 15
max_attempts: 3
shell: bash
command: sudo installer -package ~/Unity.pkg -target /

- name: Instal IL2CPP Module
if: matrix.compiler == 'il2cpp'
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 3
shell: bash
command: sudo installer -package ~/UnityIL2CPPModule.pkg -target /

- name: Instal Mobile Module
if: matrix.target_platform == 'mobile'
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 3
shell: bash
command: sudo installer -package ~/UnityIosModule.pkg -target /

- name: Create Test Results dir
shell: bash
run: mkdir test_results

- name: Generate .ALF license file
shell: bash
run: sudo /Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -nographics -createManualActivationFile -quit
continue-on-error: true #Unity return exit code 1 even if successfully creating license file

- name: List dir
shell: bash
run: |
ls
grep ".alf$"
ULF_FILE_PATH=$(ls | grep ".alf$")
echo $ULF_FILE_PATH
continue-on-error: true

- name: Ensure code file exists
shell: bash
run: touch ./code.txt
continue-on-error: true

- name: Activate .ALF License - Get .ULF file
id: generate_ulf_license_attempt_1
shell: bash
run: sudo unity-license-activate "${{ secrets.UNITY_ACCOUNT_USER }}" "${{ secrets.UNITY_ACCOUNT_PASS }}" "$(ls | grep ".alf$")" --password "${{ secrets.EMAIL_PASS }}" --host "imap.gmail.com"
timeout-minutes: 25
continue-on-error: true

- name: Activate .ALF License - Get .ULF file - Attempt 2
if: steps.generate_ulf_license_attempt_1.outcome == 'failure'
id: generate_ulf_license_attempt_2
shell: bash
run: sudo unity-license-activate "${{ secrets.UNITY_ACCOUNT_USER }}" "${{ secrets.UNITY_ACCOUNT_PASS }}" "$(ls | grep ".alf$")" --password "${{ secrets.EMAIL_PASS }}" --host "imap.gmail.com"
timeout-minutes: 25
continue-on-error: true

- name: Activate .ALF License - Get .ULF file - Attempt 3
if: steps.generate_ulf_license_attempt_2.outcome == 'failure'
id: generate_ulf_license_attempt_3
shell: bash
run: sudo unity-license-activate "${{ secrets.UNITY_ACCOUNT_USER }}" "${{ secrets.UNITY_ACCOUNT_PASS }}" "$(ls | grep ".alf$")" --password "${{ secrets.EMAIL_PASS }}" --host "imap.gmail.com"
timeout-minutes: 25
continue-on-error: true

- name: 🩺 Upload error screenshot
if: steps.generate_ulf_license_attempt_1.outcome == 'failure'
uses: actions/upload-artifact@v1
continue-on-error: true
with:
name: screenshot_error_1
path: error.png

- name: 🩺 Upload error screenshot 2
if: steps.generate_ulf_license_attempt_2.outcome == 'failure'
uses: actions/upload-artifact@v1
continue-on-error: true
with:
name: screenshot_error_2
path: error.png

- name: 🩺 Upload error screenshot 3
if: steps.generate_ulf_license_attempt_3.outcome == 'failure'
uses: actions/upload-artifact@v1
continue-on-error: true
with:
name: screenshot_error_3
path: error.png

- name: Activate Unity with .ULF license file
shell: bash
run: sudo /Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -nographics -manualLicenseFile "$(ls | grep ".ulf$")" -quit
continue-on-error: true #Unity return exit code 1 even if successfully activating with license file

- name: LS Unity Logs dir
shell: bash
run: ls ~/Library/Logs/Unity/
continue-on-error: true

- name: Print Audit Unity Logs
shell: bash
run: cat ~/Library/Logs/Unity/Unity.Entitlements.Audit.log
continue-on-error: true

- name: Print Client Unity Logs
shell: bash
run: cat ~/Library/Logs/Unity/Unity.Licensing.Client.log
continue-on-error: true

- name: Print Unity Editor Logs
shell: bash
run: cat ~/Library/Logs/Unity/Editor.log
continue-on-error: true

- name: Enable Stream Tests in Unity
shell: bash
run: sudo /Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -nographics -projectPath "$GITHUB_WORKSPACE" -executeMethod StreamVideo.EditorTools.StreamEditorTools.EnableStreamTestsEnabledCompilerFlag -quit

#skip -quit due to not working with async tests
- name: Run Unity Tests
id: run_unity_tests
shell: bash
run: sudo /Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -nographics -projectPath "$GITHUB_WORKSPACE" -runTests -testResults ~/test_results/results.xml -streamBase64TestDataSet ${{ secrets.STREAM_AUTH_TEST_DATA_BASE64 }}
continue-on-error: true

#due to skipped -quit
- name: Force Close Unity
shell: bash
run: sudo pkill -x Unity
continue-on-error: true

- name: Print Test Results
if: always()
shell: bash
run: cat ~/test_results/results.xml

- name: Print Unity Logs
shell: bash
run: cat ~/Library/Logs/Unity/Editor.log
continue-on-error: true

- name: Generate HTML test report
uses: rempelj/[email protected]
if: always()
with:
inputXmlPath: ~/test_results/results.xml
outputHtmlPath: ~/test_results/results.html

- name: Upload tests results XML Artifact
uses: actions/upload-artifact@v3
if: always()
with:
name: ${{ matrix.os }}_${{ matrix.unity_version }}_${{ matrix.compiler }}_${{ matrix.dotnet_version }}_${{ matrix.target_platform }}_test_results.xml
path: ~/test_results/results.xml

- name: Upload tests results Html Artifact
uses: actions/upload-artifact@v3
if: always()
with:
name: ${{ matrix.os }}_${{ matrix.unity_version }}_${{ matrix.compiler }}_${{ matrix.dotnet_version }}_${{ matrix.target_platform }}_test_results.html
path: ~/test_results/results.html

- name: Validate All Tests Passed
if: steps.run_unity_tests.outcome == 'failure'
run: exit 1

- name: Generate GH Summary Comment
uses: sierpinskid/nunit-github-comment@v1
if: github.event_name == 'pull_request'
with:
inputXmlPath: ~/test_results/results.xml
outputFilePath: ~/test_results/gh_comment.txt

- name: Set GH Comment as variable
if: github.event_name == 'pull_request'
id: generate_gh_comment
run: echo "::set-output name=gh_comment::$(cat ~/test_results/gh_comment.txt)"

- name: Build Sample App
shell: bash
run: sudo /Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -nographics -projectPath "$GITHUB_WORKSPACE" -executeMethod "StreamVideo.EditorTools.StreamEditorTools.BuildSampleApp" -streamBase64TestDataSet ${{ secrets.STREAM_AUTH_TEST_DATA_BASE64 }} -apiCompatibility ${{ matrix.dotnet_version }} -scriptingBackend ${{ matrix.compiler }} -buildTargetPlatform ${{ matrix.target_platform }} -buildTargetPath "~/SampleAppBuild/App" -quit

- name: LS
shell: bash
run: |
ls
echo '----'
ls ~
echo '----'
ls "~/SampleAppBuild/"
echo '----'
ls "~/SampleAppBuild/App/"
echo '----'
continue-on-error: true

- name: Upload Sample App
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}_${{ matrix.unity_version }}_${{ matrix.compiler }}_${{ matrix.dotnet_version }}_${{ matrix.target_platform }}_sample_app
path: ~/SampleAppBuild/App/


8 changes: 8 additions & 0 deletions Packages/StreamVideo/Editor/Builders.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Packages/StreamVideo/Editor/Builders/ApiCompatibility.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace StreamVideo.EditorTools.Builders
{
public enum ApiCompatibility
{
NET_4_x,
STANDARD_2_x
}
}
3 changes: 3 additions & 0 deletions Packages/StreamVideo/Editor/Builders/ApiCompatibility.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions Packages/StreamVideo/Editor/Builders/BuildSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using UnityEditor;

namespace StreamVideo.EditorTools.Builders
{
public readonly struct BuildSettings
{
public BuildTargetGroup BuildTargetGroup { get; }
public ApiCompatibilityLevel ApiCompatibilityLevel { get; }
public ScriptingImplementation ScriptingImplementation { get; }
public string TargetPath { get; }

public BuildSettings(BuildTargetGroup buildTargetGroup, ApiCompatibilityLevel apiCompatibilityLevel,
ScriptingImplementation scriptingImplementation, string targetPath)
{
BuildTargetGroup = buildTargetGroup;
ApiCompatibilityLevel = apiCompatibilityLevel;
ScriptingImplementation = scriptingImplementation;
TargetPath = targetPath;
}

public override string ToString() =>
$"{nameof(BuildSettings)} - {nameof(BuildTargetGroup)}: {BuildTargetGroup}, {nameof(ApiCompatibilityLevel)}: {ApiCompatibilityLevel}, " +
$"{nameof(ScriptingImplementation)}: {ScriptingImplementation}, {nameof(TargetPath)}: {TargetPath}";
}
}
3 changes: 3 additions & 0 deletions Packages/StreamVideo/Editor/Builders/BuildSettings.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Packages/StreamVideo/Editor/Builders/BuildTargetPlatform.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace StreamVideo.EditorTools.Builders
{
public enum BuildTargetPlatform
{
Standalone,
Mobile
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions Packages/StreamVideo/Editor/Builders/ScriptingBackend.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace StreamVideo.EditorTools.Builders
{
public enum ScriptingBackend
{
IL2CPP
}
}
3 changes: 3 additions & 0 deletions Packages/StreamVideo/Editor/Builders/ScriptingBackend.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading