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

267 lines
7.6 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."
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")
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"
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"
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
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"
chmod -R a+r "$FULL_COVERAGE_RESULTS_PATH"