unity-test-runner/dist/platforms/ubuntu/run_tests.sh

289 lines
8.3 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
2020-01-29 22:42:41 +00:00
#
# Set and display project path
#
UNITY_PROJECT_PATH="$GITHUB_WORKSPACE/$PROJECT_PATH"
echo "Using project path \"$UNITY_PROJECT_PATH\"."
2020-01-29 22:42:41 +00:00
#
# Set and display the artifacts path
#
2020-01-30 23:35:41 +00:00
echo "Using artifacts path \"$ARTIFACTS_PATH\" to save test results."
FULL_ARTIFACTS_PATH=$GITHUB_WORKSPACE/$ARTIFACTS_PATH
#
# Set and display the coverage results path
#
echo "Using coverage results path \"$COVERAGE_RESULTS_PATH\" to save test coverage results."
FULL_COVERAGE_RESULTS_PATH=$GITHUB_WORKSPACE/$COVERAGE_RESULTS_PATH
2020-01-29 22:54:44 +00:00
#
# Display custom parameters
#
echo "Using custom parameters $CUSTOM_PARAMETERS."
# The following tests are 2019 mode (requires Unity 2019.2.11f1 or later)
# Reference: https://docs.unity3d.com/2019.3/Documentation/Manual/CommandLineArguments.html
#
# Display the unity version
#
echo "Using Unity version \"$UNITY_VERSION\" to test."
#
# Setup token for private package registry.
#
if [ -n "$PRIVATE_REGISTRY_TOKEN" ]; then
echo "Private registry token detected, creating .upmconfig.toml"
UPM_CONFIG_TOML_PATH="$HOME/.upmconfig.toml"
echo "Creating toml at path: $UPM_CONFIG_TOML_PATH"
touch $UPM_CONFIG_TOML_PATH
cat > "$UPM_CONFIG_TOML_PATH" <<EOF
[npmAuth."$SCOPED_REGISTRY_URL"]
token = "$PRIVATE_REGISTRY_TOKEN"
alwaysAuth = true
EOF
fi
Add Feature to test Unity Packages (#164) * (should fail) add jq install to docker image * (might fail) remove rm rf call * move things around to try to fix test * Revert "(might fail) remove rm rf call" This reverts commit 22f74ebca711c6c66d7b9d217954a19edc7db5fb. * remove silent setting from docker test * Fix failing test's Docker image * Add new input and basic test * Add test package; start using jq cli * Use test package in test workflow * Create temporary Unity Project and run tests * Test removing jq install from Dockerfile * Revert "Test removing jq install from Dockerfile" This reverts commit 6aa7a6f44365495960f1e470e9fcf90f369683f0. * Remove mkdir call * remove duplicate command * add packageMode option back in * build changes * check for apt-get before installing jq * change apt-get version check message * spelling and documentation fixes * add working example unity package with tests * add temp pwd call to help figure out absolute pathing * fix workflow package location * add jq to add package to temp project packages * try fixing jq calls * clean up jq calls, fix variable expansion * try renaming jq args * try using different arg syntax for jq * try wrapping args in parentheses * try using double quotes only * try changing up quoting * try properly using string interpolation * try removing colon * add string interpolation to key * omit double quotes from jq call to retrieve package name * clean up logging * add rest of workflow tests * Revert "add rest of workflow tests" This reverts commit c0bb008b2c9740559dec0fb7374428d45ff46df8. * add play mode test without cache * add package mode all mode workflow step * add consecutive ppackage mode workflow step * add package mode "like in the readme" test * fix workflow syntax error * try to fix syntax error again * use correct folder * *hopefully actually* use correct package path * try adding caching to "readme" test * remove caching/mentions of caching from package mode tests * fix artifacts paths * fix artifacts pathing and names * fix combined artifacts for package mode * clean up documentation and exit code * clarify allowed docker images for packageMode * update README to mention Unity packages * move package name validation to TS part of action * improve logging for temp project creation failure * make husky hook executable * add error for missing tests folder * update docs to reflect unsupported packages * remove jq install * Revert "remove jq install" This reverts commit bd35ac8f6f48c7c01456e70855d4109dba8cffdf. * TEMP log image in use * Revert "TEMP log image in use" This reverts commit 95722dcab432168201bf69e20ad7bf8b8a48d3fa. * Revert "Revert "remove jq install"" This reverts commit e3bac048b1dfb51270b469c0a5e649e9c7a8acce. * TEMP list installed packages * Revert "TEMP list installed packages" This reverts commit db9c07da38fd4cdf1f738696766fda1706e8e8e9. * TEMP log project's manifest * add code coverage package to generated project * remove temp project manifest log * add coverage to package mode tests * update name of package coverage steps * add codecoverage dependency to test package * Revert "add codecoverage dependency to test package" This reverts commit 4b2c03069d3aacf4b3fc683b70dcd5019778a5c7. * add assembly filters for coverage * TEMP console log project folder * Revert "TEMP console log project folder" This reverts commit 411ec51817f805f1177681a619e51384ff66e808. * add logic to copy package to folder without activation file * fix false positive activation file detection * fix improper bash "if" formatting * TEMP remove conditional for package copying * Revert "TEMP remove conditional for package copying" This reverts commit 4f12d83889dbbfe24d1c13ba2e1d95e3aaff9693. * Revert "fix improper bash "if" formatting" This reverts commit acb975bcea47fc55f2cb6192b0adfc8640379143. * Revert "fix false positive activation file detection" This reverts commit 580c9c14a019bc4a16ca265af7be75cb04102b8f. * Revert "add logic to copy package to folder without activation file" This reverts commit b20d994b5d0c745b58c3a22c92fb757211591f6f. * run yarn build * move package mode check lower in the file * throw error if unity version is auto in package mode * fix unity version error wording * try deleting activate license file * try logging hidden package files * try deleting all non-package files * fix license activation files deletion * scrap file removals and print dir permissions * log permissions for package folder * Add packageMode inputs to main * fix fs mocks and run yarn build * fix documentation and add error message for missing jq * add clarification on package mode caveats * fix line endings problem (?) * Revert "fix line endings problem (?)" This reverts commit 1cba302bc47081c4958c01bcf13092517679b7af. * Revert "add clarification on package mode caveats" This reverts commit fb62d36ba1cfebaabfa9eced695a203c68a0662c. * Revert "fix documentation and add error message for missing jq" This reverts commit 0df3ab6b88fe7f787c692d1b3f3f857636e166be. * Redo the input docs fixes * Redo the jq presence test * update readme to indicate package mode caveats * fix wording on coverageOptions * one more wording fix on coverageOptions * move sample package to example.com domain --------- Co-authored-by: Aaron Trudeau <120415438+trudeaua-vividream-software@users.noreply.github.com>
2023-07-03 15:09:20 +00:00
#
# Create an empty project for testing if in package mode
#
if [ "$PACKAGE_MODE" = "true" ]; then
echo "Running tests on a Unity package rather than a Unity project."
if ! command -v jq &> /dev/null
then
echo "jq could not be found. This is required for package mode, and is likely the result of using a custom Docker image. Please use the default image or install jq to your custom image."
exit 1
fi
echo ""
echo "###########################"
echo "# Package Folder #"
echo "###########################"
echo ""
ls -la "$UNITY_PROJECT_PATH"
echo ""
echo "Creating an empty Unity project to add the package $PACKAGE_NAME to."
TEMP_PROJECT_PATH="./TempProject"
unity-editor \
-batchmode \
-createProject "$TEMP_PROJECT_PATH" \
-quit
# use jq to add the package to the temp project through manually modifying Packages/manifest.json
echo "Adding package to the temporary project's dependencies and testables..."
echo ""
PACKAGE_MANIFEST_PATH="$TEMP_PROJECT_PATH/Packages/manifest.json"
if [ ! -f "$PACKAGE_MANIFEST_PATH" ]; then
echo "Packages/mainfest.json was not created properly. This indicates a problem with the Action, not with your package. Logging directories and aborting..."
echo ""
echo "###########################"
echo "# Temp Project Folder #"
echo "###########################"
echo ""
ls -a "$TEMP_PROJECT_PATH"
echo ""
echo "################################"
echo "# Temp Project Packages Folder #"
echo "################################"
echo ""
ls -a "$TEMP_PROJECT_PATH/Packages"
exit 1
fi
PACKAGE_MANIFEST_JSON=$(cat "$PACKAGE_MANIFEST_PATH")
if [ -z "$SCOPED_REGISTRY_URL" ] || [ -z "$REGISTRY_SCOPES" ]; then
echo "$PACKAGE_MANIFEST_JSON" | \
jq \
--arg packageName "$PACKAGE_NAME" \
--arg projectPath "$UNITY_PROJECT_PATH" \
'.dependencies += {"com.unity.testtools.codecoverage": "1.1.1"} | .dependencies += {"\($packageName)": "file:\($projectPath)"} | . += {testables: ["\($packageName)"]}' \
> "$PACKAGE_MANIFEST_PATH"
else
echo "$PACKAGE_MANIFEST_JSON" | \
jq \
--arg packageName "$PACKAGE_NAME" \
--arg projectPath "$UNITY_PROJECT_PATH" \
--arg scopedRegistryUrl "$SCOPED_REGISTRY_URL" \
--argjson registryScopes "$(echo "[\"$REGISTRY_SCOPES\"]" | sed 's/,/","/g')" \
'.dependencies += {"com.unity.testtools.codecoverage": "1.1.1"} |
.dependencies += {"\($packageName)": "file:\($projectPath)"} |
. += {testables: ["\($packageName)"]} |
. += {scopedRegistries: [{"name":"dependency", "url":"\($scopedRegistryUrl)", scopes: $registryScopes}] }' \
> "$PACKAGE_MANIFEST_PATH"
fi
Add Feature to test Unity Packages (#164) * (should fail) add jq install to docker image * (might fail) remove rm rf call * move things around to try to fix test * Revert "(might fail) remove rm rf call" This reverts commit 22f74ebca711c6c66d7b9d217954a19edc7db5fb. * remove silent setting from docker test * Fix failing test's Docker image * Add new input and basic test * Add test package; start using jq cli * Use test package in test workflow * Create temporary Unity Project and run tests * Test removing jq install from Dockerfile * Revert "Test removing jq install from Dockerfile" This reverts commit 6aa7a6f44365495960f1e470e9fcf90f369683f0. * Remove mkdir call * remove duplicate command * add packageMode option back in * build changes * check for apt-get before installing jq * change apt-get version check message * spelling and documentation fixes * add working example unity package with tests * add temp pwd call to help figure out absolute pathing * fix workflow package location * add jq to add package to temp project packages * try fixing jq calls * clean up jq calls, fix variable expansion * try renaming jq args * try using different arg syntax for jq * try wrapping args in parentheses * try using double quotes only * try changing up quoting * try properly using string interpolation * try removing colon * add string interpolation to key * omit double quotes from jq call to retrieve package name * clean up logging * add rest of workflow tests * Revert "add rest of workflow tests" This reverts commit c0bb008b2c9740559dec0fb7374428d45ff46df8. * add play mode test without cache * add package mode all mode workflow step * add consecutive ppackage mode workflow step * add package mode "like in the readme" test * fix workflow syntax error * try to fix syntax error again * use correct folder * *hopefully actually* use correct package path * try adding caching to "readme" test * remove caching/mentions of caching from package mode tests * fix artifacts paths * fix artifacts pathing and names * fix combined artifacts for package mode * clean up documentation and exit code * clarify allowed docker images for packageMode * update README to mention Unity packages * move package name validation to TS part of action * improve logging for temp project creation failure * make husky hook executable * add error for missing tests folder * update docs to reflect unsupported packages * remove jq install * Revert "remove jq install" This reverts commit bd35ac8f6f48c7c01456e70855d4109dba8cffdf. * TEMP log image in use * Revert "TEMP log image in use" This reverts commit 95722dcab432168201bf69e20ad7bf8b8a48d3fa. * Revert "Revert "remove jq install"" This reverts commit e3bac048b1dfb51270b469c0a5e649e9c7a8acce. * TEMP list installed packages * Revert "TEMP list installed packages" This reverts commit db9c07da38fd4cdf1f738696766fda1706e8e8e9. * TEMP log project's manifest * add code coverage package to generated project * remove temp project manifest log * add coverage to package mode tests * update name of package coverage steps * add codecoverage dependency to test package * Revert "add codecoverage dependency to test package" This reverts commit 4b2c03069d3aacf4b3fc683b70dcd5019778a5c7. * add assembly filters for coverage * TEMP console log project folder * Revert "TEMP console log project folder" This reverts commit 411ec51817f805f1177681a619e51384ff66e808. * add logic to copy package to folder without activation file * fix false positive activation file detection * fix improper bash "if" formatting * TEMP remove conditional for package copying * Revert "TEMP remove conditional for package copying" This reverts commit 4f12d83889dbbfe24d1c13ba2e1d95e3aaff9693. * Revert "fix improper bash "if" formatting" This reverts commit acb975bcea47fc55f2cb6192b0adfc8640379143. * Revert "fix false positive activation file detection" This reverts commit 580c9c14a019bc4a16ca265af7be75cb04102b8f. * Revert "add logic to copy package to folder without activation file" This reverts commit b20d994b5d0c745b58c3a22c92fb757211591f6f. * run yarn build * move package mode check lower in the file * throw error if unity version is auto in package mode * fix unity version error wording * try deleting activate license file * try logging hidden package files * try deleting all non-package files * fix license activation files deletion * scrap file removals and print dir permissions * log permissions for package folder * Add packageMode inputs to main * fix fs mocks and run yarn build * fix documentation and add error message for missing jq * add clarification on package mode caveats * fix line endings problem (?) * Revert "fix line endings problem (?)" This reverts commit 1cba302bc47081c4958c01bcf13092517679b7af. * Revert "add clarification on package mode caveats" This reverts commit fb62d36ba1cfebaabfa9eced695a203c68a0662c. * Revert "fix documentation and add error message for missing jq" This reverts commit 0df3ab6b88fe7f787c692d1b3f3f857636e166be. * Redo the input docs fixes * Redo the jq presence test * update readme to indicate package mode caveats * fix wording on coverageOptions * one more wording fix on coverageOptions * move sample package to example.com domain --------- Co-authored-by: Aaron Trudeau <120415438+trudeaua-vividream-software@users.noreply.github.com>
2023-07-03 15:09:20 +00:00
UNITY_PROJECT_PATH="$TEMP_PROJECT_PATH"
Add Feature to test Unity Packages (#164) * (should fail) add jq install to docker image * (might fail) remove rm rf call * move things around to try to fix test * Revert "(might fail) remove rm rf call" This reverts commit 22f74ebca711c6c66d7b9d217954a19edc7db5fb. * remove silent setting from docker test * Fix failing test's Docker image * Add new input and basic test * Add test package; start using jq cli * Use test package in test workflow * Create temporary Unity Project and run tests * Test removing jq install from Dockerfile * Revert "Test removing jq install from Dockerfile" This reverts commit 6aa7a6f44365495960f1e470e9fcf90f369683f0. * Remove mkdir call * remove duplicate command * add packageMode option back in * build changes * check for apt-get before installing jq * change apt-get version check message * spelling and documentation fixes * add working example unity package with tests * add temp pwd call to help figure out absolute pathing * fix workflow package location * add jq to add package to temp project packages * try fixing jq calls * clean up jq calls, fix variable expansion * try renaming jq args * try using different arg syntax for jq * try wrapping args in parentheses * try using double quotes only * try changing up quoting * try properly using string interpolation * try removing colon * add string interpolation to key * omit double quotes from jq call to retrieve package name * clean up logging * add rest of workflow tests * Revert "add rest of workflow tests" This reverts commit c0bb008b2c9740559dec0fb7374428d45ff46df8. * add play mode test without cache * add package mode all mode workflow step * add consecutive ppackage mode workflow step * add package mode "like in the readme" test * fix workflow syntax error * try to fix syntax error again * use correct folder * *hopefully actually* use correct package path * try adding caching to "readme" test * remove caching/mentions of caching from package mode tests * fix artifacts paths * fix artifacts pathing and names * fix combined artifacts for package mode * clean up documentation and exit code * clarify allowed docker images for packageMode * update README to mention Unity packages * move package name validation to TS part of action * improve logging for temp project creation failure * make husky hook executable * add error for missing tests folder * update docs to reflect unsupported packages * remove jq install * Revert "remove jq install" This reverts commit bd35ac8f6f48c7c01456e70855d4109dba8cffdf. * TEMP log image in use * Revert "TEMP log image in use" This reverts commit 95722dcab432168201bf69e20ad7bf8b8a48d3fa. * Revert "Revert "remove jq install"" This reverts commit e3bac048b1dfb51270b469c0a5e649e9c7a8acce. * TEMP list installed packages * Revert "TEMP list installed packages" This reverts commit db9c07da38fd4cdf1f738696766fda1706e8e8e9. * TEMP log project's manifest * add code coverage package to generated project * remove temp project manifest log * add coverage to package mode tests * update name of package coverage steps * add codecoverage dependency to test package * Revert "add codecoverage dependency to test package" This reverts commit 4b2c03069d3aacf4b3fc683b70dcd5019778a5c7. * add assembly filters for coverage * TEMP console log project folder * Revert "TEMP console log project folder" This reverts commit 411ec51817f805f1177681a619e51384ff66e808. * add logic to copy package to folder without activation file * fix false positive activation file detection * fix improper bash "if" formatting * TEMP remove conditional for package copying * Revert "TEMP remove conditional for package copying" This reverts commit 4f12d83889dbbfe24d1c13ba2e1d95e3aaff9693. * Revert "fix improper bash "if" formatting" This reverts commit acb975bcea47fc55f2cb6192b0adfc8640379143. * Revert "fix false positive activation file detection" This reverts commit 580c9c14a019bc4a16ca265af7be75cb04102b8f. * Revert "add logic to copy package to folder without activation file" This reverts commit b20d994b5d0c745b58c3a22c92fb757211591f6f. * run yarn build * move package mode check lower in the file * throw error if unity version is auto in package mode * fix unity version error wording * try deleting activate license file * try logging hidden package files * try deleting all non-package files * fix license activation files deletion * scrap file removals and print dir permissions * log permissions for package folder * Add packageMode inputs to main * fix fs mocks and run yarn build * fix documentation and add error message for missing jq * add clarification on package mode caveats * fix line endings problem (?) * Revert "fix line endings problem (?)" This reverts commit 1cba302bc47081c4958c01bcf13092517679b7af. * Revert "add clarification on package mode caveats" This reverts commit fb62d36ba1cfebaabfa9eced695a203c68a0662c. * Revert "fix documentation and add error message for missing jq" This reverts commit 0df3ab6b88fe7f787c692d1b3f3f857636e166be. * Redo the input docs fixes * Redo the jq presence test * update readme to indicate package mode caveats * fix wording on coverageOptions * one more wording fix on coverageOptions * move sample package to example.com domain --------- Co-authored-by: Aaron Trudeau <120415438+trudeaua-vividream-software@users.noreply.github.com>
2023-07-03 15:09:20 +00:00
fi
#
# Overall info
#
echo ""
echo "###########################"
echo "# Artifacts folder #"
echo "###########################"
echo ""
echo "Creating \"$FULL_ARTIFACTS_PATH\" if it does not exist."
mkdir -p $FULL_ARTIFACTS_PATH
echo ""
echo "###########################"
echo "# Project directory #"
echo "###########################"
echo ""
ls -alh "$UNITY_PROJECT_PATH"
#
# Testing for each platform
#
for platform in ${TEST_PLATFORMS//;/ }; do
if [[ "$platform" == "standalone" ]]; then
echo ""
echo "###########################"
echo "# Building Standalone #"
echo "###########################"
echo ""
# Create directories if they do not exist
mkdir -p "$UNITY_PROJECT_PATH/Assets/Editor/"
mkdir -p "$UNITY_PROJECT_PATH/Assets/Player/"
# Copy the scripts
cp -R "$ACTION_FOLDER/UnityStandaloneScripts/Assets/Editor/" "$UNITY_PROJECT_PATH/Assets/Editor/"
cp -R "$ACTION_FOLDER/UnityStandaloneScripts/Assets/Player/" "$UNITY_PROJECT_PATH/Assets/Player/"
# Verify recursive paths
ls -Ralph "$UNITY_PROJECT_PATH/Assets/Editor/"
ls -Ralph "$UNITY_PROJECT_PATH/Assets/Player/"
runTests="-runTests -testPlatform StandaloneLinux64 -builtTestRunnerPath $UNITY_PROJECT_PATH/Build/UnityTestRunner-Standalone"
else
echo ""
echo "###########################"
echo "# Testing in $platform #"
echo "###########################"
echo ""
if [[ "$platform" != "COMBINE_RESULTS" ]]; then
runTests="-runTests -testPlatform $platform -testResults $FULL_ARTIFACTS_PATH/$platform-results.xml"
else
runTests="-quit"
fi
fi
2020-11-26 17:19:17 +00:00
unity-editor \
-batchmode \
-logFile "$FULL_ARTIFACTS_PATH/$platform.log" \
2020-11-26 17:19:17 +00:00
-projectPath "$UNITY_PROJECT_PATH" \
-coverageResultsPath "$FULL_COVERAGE_RESULTS_PATH" \
$runTests \
-enableCodeCoverage \
-debugCodeOptimization \
-coverageOptions "$COVERAGE_OPTIONS" \
2020-11-26 17:19:17 +00:00
$CUSTOM_PARAMETERS
2020-02-14 21:26:26 +00:00
# Catch exit code
TEST_EXIT_CODE=$?
# Print unity log output
cat "$FULL_ARTIFACTS_PATH/$platform.log"
if [[ $TEST_EXIT_CODE -eq 0 && "$platform" == "standalone" ]]; then
echo ""
echo "###########################"
echo "# Testing Standalone #"
echo "###########################"
echo ""
# Code Coverage currently only supports code ran in the Editor and not in Standalone/Player.
# https://docs.unity3d.com/Packages/com.unity.testtools.codecoverage@1.2/manual/TechnicalDetails.html#how-it-works
xvfb-run -a -e /dev/stdout "$UNITY_PROJECT_PATH/Build/UnityTestRunner-Standalone" \
-batchmode \
-nographics \
-logFile "$FULL_ARTIFACTS_PATH/$platform-player.log" \
-testResults "$FULL_ARTIFACTS_PATH/$platform-results.xml"
# Catch exit code
TEST_EXIT_CODE=$?
# Print player log output
cat "$FULL_ARTIFACTS_PATH/$platform-player.log"
fi
# Display results
if [ $TEST_EXIT_CODE -eq 0 ]; then
echo "Run succeeded, no failures occurred";
elif [ $TEST_EXIT_CODE -eq 2 ]; then
echo "Run succeeded, some tests failed";
elif [ $TEST_EXIT_CODE -eq 3 ]; then
echo "Run failure (other failure)";
else
echo "Unexpected exit code $TEST_EXIT_CODE";
fi
if [ $TEST_EXIT_CODE -ne 0 ]; then
TEST_RUNNER_EXIT_CODE=$TEST_EXIT_CODE
fi
echo ""
echo "###########################"
echo "# $platform Results #"
echo "###########################"
echo ""
if [[ "$platform" != "COMBINE_RESULTS" ]]; then
cat "$FULL_ARTIFACTS_PATH/$platform-results.xml"
cat "$FULL_ARTIFACTS_PATH/$platform-results.xml" | grep test-run | grep Passed
fi
done
#
# Permissions
#
# Make a given user owner of all artifacts
if [[ -n "$CHOWN_FILES_TO" ]]; then
chown -R "$CHOWN_FILES_TO" "$UNITY_PROJECT_PATH"
chown -R "$CHOWN_FILES_TO" "$FULL_ARTIFACTS_PATH"
chown -R "$CHOWN_FILES_TO" "$FULL_COVERAGE_RESULTS_PATH"
fi
# Add read permissions for everyone to all artifacts
chmod -R a+r "$UNITY_PROJECT_PATH"
chmod -R a+r "$FULL_ARTIFACTS_PATH"
# Check if coverage results directory exists
if [ -d "$FULL_COVERAGE_RESULTS_PATH" ]; then
chmod -R a+r "$FULL_COVERAGE_RESULTS_PATH"
else
echo "Coverage results directory does not exist. If you are expecting coverage results, please make sure the Code Coverage package is installed in your unity project and that it is set up correctly."
fi