Skip to content

⚗️ Test for CI System (#12) #17

⚗️ Test for CI System (#12)

⚗️ Test for CI System (#12) #17

name: Unit Tests And Code Coverage
on:
pull_request:
branches:
- main
jobs:
testAllModes:
name: Test in ${{ matrix.testMode }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
projectPath:
- temp_package
unityVersion: [2022.3.21f1]
testMode:
- playmode
- editmode
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Create temp_package directory
run: mkdir temp_package
- name: Move package to temp_package directory
run: |
shopt -s extglob
mv !(temp_package|.github) temp_package/
mv .github temp_package/.github
- name: Verify package.json existence
run: |
if [ ! -f temp_package/package.json ]; then
echo "package.json not found in temp_package"
exit 1
fi
- name: Get runner's uid and gid
id: runner-info
run: |
echo "uid=$(id -u)" >> $GITHUB_ENV
echo "gid=$(id -g)" >> $GITHUB_ENV
- name: Run Unity Tests
uses: game-ci/unity-test-runner@v4
id: tests
env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
with:
packageMode: true
projectPath: ${{ matrix.projectPath }}
unityVersion: ${{ matrix.unityVersion }}
testMode: ${{ matrix.testMode }}
artifactsPath: ${{ matrix.testMode }}-artifacts
githubToken: ${{ secrets.GITHUB_TOKEN }}
checkName: ${{ matrix.testMode }} Test Results
coverageOptions: 'generateAdditionalMetrics;generateHtmlReport;generateBadgeReport;assemblyFilters:+Soobak.SoobakUnityLibrary.*'
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: Test results for ${{ matrix.testMode }}
path: ${{ matrix.testMode }}-artifacts
- name: Upload Coverage Results
uses: actions/upload-artifact@v4
if: always()
with:
name: Coverage results for ${{ matrix.testMode }}
path: CodeCoverage/
- name: Upload Badge Coverage Report
uses: actions/upload-artifact@v4
if: always()
with:
name: Badge coverage report for ${{ matrix.testMode }}
path: CodeCoverage/Report/badge_linecoverage.svg
- name: Check if Summary.xml Exists
id: check_summary
run: |
if [ -f CodeCoverage/Report/Summary.xml ]; then
echo "SUMMARY_EXISTS=true" >> $GITHUB_ENV
else
echo "SUMMARY_EXISTS=false" >> $GITHUB_ENV
fi
- name: Setup Node.js
if: env.SUMMARY_EXISTS == 'true'
uses: actions/setup-node@v2
with:
node-version: '18'
- name: Install Dependencies
if: env.SUMMARY_EXISTS == 'true'
run: npm install xml2js @actions/github@latest
- name: Create Node.js Script
if: env.SUMMARY_EXISTS == 'true'
run: |
cat << EOF > script.js
const fs = require('fs');
const xml2js = require('xml2js');
const parser = new xml2js.Parser();
const xml = fs.readFileSync('CodeCoverage/Report/Summary.xml', 'utf8');
const { context, getOctokit } = require('@actions/github');
const github = getOctokit(process.env.GITHUB_TOKEN);
parser.parseString(xml, (err, result) => {
if (err) throw err;
const summary = result.CoverageReport.Summary[0];
const commentBody = \`
## Code Coverage Summary
- **Generated on**: \${summary.Generatedon[0]}
- **Parser**: \${summary.Parser[0]}
- **Assemblies**: \${summary.Assemblies[0]}
- **Classes**: \${summary.Classes[0]}
- **Files**: \${summary.Files[0]}
- **Covered Lines**: \${summary.Coveredlines[0]}
- **Uncovered Lines**: \${summary.Uncoveredlines[0]}
- **Coverable Lines**: \${summary.Coverablelines[0]}
- **Total Lines**: \${summary.Totallines[0]}
- **Line Coverage**: \${summary.Linecoverage[0]}%
- **Covered Branches**: \${summary.Coveredbranches[0]}
- **Total Branches**: \${summary.Totalbranches[0]}
- **Covered Methods**: \${summary.Coveredmethods[0]}
- **Total Methods**: \${summary.Totalmethods[0]}
- **Method Coverage**: \${summary.Methodcoverage[0]}%
\`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: commentBody
});
});
EOF
- name: Run Node.js Script
if: env.SUMMARY_EXISTS == 'true'
run: node script.js
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}