Mod run tests as embedded package on CI #63
Workflow file for this run
This file contains 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
# Copyright (c) 2020-2024 Koji Hasegawa. | |
# This software is released under the MIT License. | |
name: Test | |
on: | |
push: | |
branches: | |
- master | |
paths-ignore: | |
- '**.md' | |
- '.github/**' | |
- '!.github/workflows/test.yml' | |
pull_request: | |
types: [ opened, synchronize, reopened ] # Same as default | |
paths-ignore: | |
- '**.md' | |
- '.github/**' | |
- '!.github/workflows/test.yml' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
test: | |
if: github.event.pull_request.head.repo.fork == false # Skip on public fork, because can not read secrets. | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
checks: write | |
pull-requests: write | |
strategy: | |
fail-fast: false | |
matrix: | |
unityVersion: # Available versions see: https://game.ci/docs/docker/versions | |
- 2019.4.40f1 | |
- 2022.3.29f1 | |
- 2023.2.20f1 | |
include: | |
- unityVersion: 2019.4.40f1 | |
octocov: true | |
steps: | |
- name: Crete project for tests | |
uses: nowsprinting/create-unity-project-action@v3 | |
with: | |
project-path: UnityProject~ | |
- uses: actions/cache@v4 | |
with: | |
path: ${{ env.CREATED_PROJECT_PATH }}/Library | |
key: Library-${{ matrix.unityVersion }} | |
restore-keys: | | |
Library- | |
- name: Get package checkout path | |
run: | | |
name="$(jq -r '.name' < package.json)" | |
echo "PACKAGE_PATH=env.CREATED_PROJECT_PATH/Packages/$name" >> "$GITHUB_ENV" | |
- name: Checkout repository as embedded package | |
uses: actions/checkout@v4 | |
with: | |
submodules: false | |
lfs: false | |
path: ${{ env.PACKAGE_PATH }} | |
# In Linux editor, there is a problem that assets in local packages cannot be found with `AssetDatabase.FindAssets`. | |
# As a workaround, I have made it into an embedded package. | |
- name: Install dependencies | |
run: | | |
npm install -g openupm-cli | |
openupm add -f com.unity.test-framework | |
openupm add -f com.unity.testtools.codecoverage | |
working-directory: ${{ env.CREATED_PROJECT_PATH }} | |
- name: Set coverage assembly filters | |
run: | | |
assemblies=$(find ${{ env.PACKAGE_PATH }} -name "*.asmdef" | sed -e s/.*\\//\+/ | sed -e s/\\.asmdef// | sed -e s/^.*\\.Tests//) | |
# shellcheck disable=SC2001,SC2048,SC2086 | |
echo "assembly_filters=$(echo ${assemblies[*]} | sed -e s/\ /,/g),+<assets>,-*.Tests" >> "$GITHUB_ENV" | |
- name: Set license secret key | |
run: echo "secret_key=UNITY_LICENSE_$(echo ${{ matrix.unityVersion }} | cut -c 1-4)" >> "$GITHUB_ENV" | |
- name: Run tests | |
uses: game-ci/unity-test-runner@v4 | |
with: | |
githubToken: ${{ secrets.GITHUB_TOKEN }} | |
unityVersion: ${{ matrix.unityVersion }} # Default is `auto` | |
checkName: test result (${{ matrix.unityVersion }}) | |
projectPath: ${{ env.CREATED_PROJECT_PATH }} | |
customParameters: -testCategory "!IgnoreCI" -testHelperScreenshotDirectory /github/workspace/artifacts/Screenshots | |
coverageOptions: generateAdditionalMetrics;generateTestReferences;generateHtmlReport;generateAdditionalReports;dontClear;assemblyFilters:${{ env.assembly_filters }} | |
# see: https://docs.unity3d.com/Packages/[email protected]/manual/CoverageBatchmode.html | |
env: | |
UNITY_LICENSE: ${{ secrets[env.secret_key] }} | |
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} | |
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} | |
id: test | |
- name: Set coverage path for octocov | |
run: | | |
mv ${{ env.PACKAGE_PATH }}/.octocov.yml . | |
sed -i -r 's/UnityProject~\/Logs/${{ steps.test.outputs.coveragePath }}/' .octocov.yml | |
if: ${{ matrix.octocov }} | |
- name: Run octocov | |
uses: k1LoW/octocov-action@v1 | |
if: ${{ matrix.octocov }} | |
- name: Upload test results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: TestResults-Unity${{ matrix.unityVersion }} | |
path: | | |
${{ steps.test.outputs.artifactsPath }} | |
${{ steps.test.outputs.coveragePath }} | |
if: always() | |
notify: | |
needs: test | |
if: github.event.pull_request.head.repo.fork == false # Skip on public fork, because can not read secrets. | |
runs-on: ubuntu-latest | |
permissions: | |
actions: read | |
steps: | |
- uses: Gamesight/[email protected] | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
slack_webhook_url: ${{ secrets.SLACK_WEBHOOK_URL }} |