From 0232664b0588fd243823fc0f7d222b370aaae2d4 Mon Sep 17 00:00:00 2001 From: Scion Date: Fri, 27 Jun 2025 22:44:07 -0700 Subject: [PATCH] Updated unity actions. --- unity-command/action.yaml | 13 ++++ unity-command/entrypoint.sh | 8 ++- unity-get-container/action.yaml | 2 +- unity-project-cached/action.yaml | 109 +++++++++++++++++++++++++++++++ unity-project/action.yaml | 44 ++++++------- 5 files changed, 149 insertions(+), 27 deletions(-) create mode 100644 unity-project-cached/action.yaml diff --git a/unity-command/action.yaml b/unity-command/action.yaml index 99e8e26..8c6ffda 100644 --- a/unity-command/action.yaml +++ b/unity-command/action.yaml @@ -28,6 +28,15 @@ inputs: description: "Whether or not to use the graphics device when running Unity." required: false default: "true" + catchErrors: + description: "Whether or not errors should be handled." + required: false + sshPublicKey: + description: "Public SSH key to use for git package restoration." + required: false + sshPrivateKey: + description: "Private SSH key to use for git package restoration." + required: false unityBuilder: description: "Whether or not to use the UnityBuilder instead of a Unity command." required: false @@ -71,6 +80,10 @@ runs: shell: bash - name: "Run Unity command." uses: act/unity/unity@master + env: + SSH_PUBLIC_KEY: ${{ inputs.sshPublicKey }} + SSH_PRIVATE_KEY: ${{ inputs.sshPrivateKey }} + CATCH_ERRORS: ${{ inputs.catchErrors }} with: serial: ${{ inputs.serial }} # serial: "activated" diff --git a/unity-command/entrypoint.sh b/unity-command/entrypoint.sh index f44a250..89a722e 100644 --- a/unity-command/entrypoint.sh +++ b/unity-command/entrypoint.sh @@ -21,4 +21,10 @@ if [[ -n "$UNITY_BUILDER" ]]; then else unity-editor $DEFAULT_ARGS $COMMAND fi -echo "::endgroup::" \ No newline at end of file +echo "::endgroup::" + +echo "exitCode=$RESULT" >> "$GITHUB_OUTPUT" + +if [[ "$CATCH_ERRORS" != "true" ]]; then + exit $RESULT +fi diff --git a/unity-get-container/action.yaml b/unity-get-container/action.yaml index ee1e5a6..933a20e 100644 --- a/unity-get-container/action.yaml +++ b/unity-get-container/action.yaml @@ -20,4 +20,4 @@ runs: #Choose the appropriate container from: https://hub.docker.com/r/unityci/editor bash ${{ github.action_path }}/get_container.sh "${{ inputs.platform }}" "${{ inputs.version }}" - shell: bash \ No newline at end of file + shell: bash diff --git a/unity-project-cached/action.yaml b/unity-project-cached/action.yaml new file mode 100644 index 0000000..6d32124 --- /dev/null +++ b/unity-project-cached/action.yaml @@ -0,0 +1,109 @@ +name: unity-project-cached +description: "Run a Unity command using a project's version and a build target. Cache the library folder." +inputs: + projectPath: + description: "Path to the Unity project." + required: true + default: "." + platform: + description: "Unity Platform. Options: windows, windows32bit, mac, linux, android" + required: true + serial: + description: "Unity license serial number." + required: false + email: + description: "Unity email." + required: true + password: + description: "Unity password." + required: true + executeMethod: + description: "Unity method to call." + required: false + command: + description: "Additional unity commands." + required: false + noGraphics: + description: "Whether or not to use the graphics device when running Unity." + required: false + default: "true" + buildOnCacheHit: + description: "Whether or not to build if a cache was found. Default: true" + required: false + default: "true" + sshPublicKey: + description: "Public SSH key to use for git package restoration." + required: false + sshPrivateKey: + description: "Private SSH key to use for git package restoration." + required: false + cacheSuffix: + description: "Suffix or hash to use for the cache key." + required: false + default: ${{ github.sha }} + cachePrefix: + description: "Prefix to use for the cache key." + required: false + default: unity-library + releaseBranch: + description: "Release name to use for the middle of the cache key if an exact release match was not found." + required: false + default: release + cachePath: + description: "Cache path. Default: Library" + required: false + default: Library +outputs: + cacheChanged: + description: "Whether or not the cache was changed." + value: ${{ steps.check-cache.outputs.cache-hit != 'true' }} +runs: + using: "composite" + steps: + - name: "Get full cache key and build command." + id: command + run: | + # Get the full cache id. + echo "key=${{ inputs.cachePrefix }}-${{ github.ref_name }}-${{ inputs.cacheSuffix }}" >> "$GITHUB_OUTPUT" + # Get the build command. + COMMAND="${{ inputs.command }}" + if [[ -n "${{ inputs.executeMethod }}" ]]; then + COMMAND="$COMMAND -executeMethod ${{ inputs.executeMethod }}" + fi + echo "command=$COMMAND" >> "$GITHUB_OUTPUT" + shell: bash + - name: "Check if cache exists." + id: check-cache + uses: https://github.com/actions/cache/restore@v3 + with: + path: ${{ inputs.cachePath }} + key: ${{ steps.command.outputs.key }} + lookup-only: true + - name: "Restore Library from Cache." + if: ${{ ( inputs.buildOnCacheHit == 'true' || steps.check-cache.outputs.cache-hit != 'true' ) }} + uses: https://github.com/actions/cache/restore@v3 + with: + path: ${{ inputs.cachePath }} + key: ${{ steps.command.outputs.key }} + restore-keys: | + ${{ inputs.cachePrefix }}-${{ github.ref_name }} + ${{ inputs.cachePrefix }}-${{ inputs.releaseBranch }} + ${{ inputs.cachePrefix }} + - name: "Build project." + if: ${{ inputs.buildOnCacheHit == 'true' || steps.check-cache.outputs.cache-hit != 'true' }} + uses: act/unity/unity-project@master + with: + platform: ${{ inputs.platform }} + serial: ${{ inputs.serial }} + email: ${{ inputs.email }} + password: ${{ inputs.password }} + sshPublicKey: ${{ inputs.sshPublicKey }} + sshPrivateKey: ${{ inputs.sshPrivateKey }} + command: ${{ steps.command.outputs.command }} + noGraphics: ${{ inputs.noGraphics }} + - name: "Upload Library to Cache." + if: ${{ steps.check-cache.outputs.cache-hit != 'true' }} + uses: https://github.com/actions/cache/save@v3 + with: + path: ${{ inputs.cachePath }} + key: ${{ steps.command.outputs.key }} diff --git a/unity-project/action.yaml b/unity-project/action.yaml index 04d68ee..3dae506 100644 --- a/unity-project/action.yaml +++ b/unity-project/action.yaml @@ -9,9 +9,8 @@ inputs: description: "Unity Platform. Options: windows, windows32bit, mac, linux, android" required: true serial: - description: "Unity license serial number. Or 'personal' for a personal license." + description: "Unity license serial number." required: true - default: personal email: description: "Unity email." required: true @@ -21,39 +20,40 @@ inputs: command: description: "Unity command to run." required: false - unityBuilder: - description: "Whether or not to use the UnityBuilder instead of a Unity command." - required: false noGraphics: description: "Whether or not to use the graphics device when running Unity." required: false default: "true" - cacheVolume: - description: "Name of the volume to cache the Library folder to." + sshPublicKey: + description: "Public SSH key to use for git package restoration." required: false - removeContainer: - description: "Remove the mock container after building." + sshPrivateKey: + description: "Private SSH key to use for git package restoration." required: false - default: "false" runs: using: "composite" steps: + - name: "Replace spaces in project path." + id: path + run: | + PROJECT_PATH=${{ inputs.projectPath }} + PROJECT_PATH=${PROJECT_PATH// /\\ } + echo "projectPath=$PROJECT_PATH" >> "$GITHUB_OUTPUT" + shell: bash - name: "Get Unity Version." id: getVersion uses: act/unity/unity-get-version@master with: - projectPath: ${{ inputs.projectPath }} + projectPath: ${{ steps.path.outputs.projectPath }} - name: "Get Unity buildTarget." id: getTarget uses: act/unity/unity-get-buildtarget@master with: platform: ${{ inputs.platform }} - - name: "Restore the cached Library folder." - if: inputs.cacheVolume != null - uses: act/common/docker/docker-cp@master + - name: "Restore NugetForUnity packages if they exist." + uses: act/dotnet/dotnet-nugetforunity-restore@master with: - volume: ${{ inputs.cacheVolume }} - toPath: . + projectPath: ${{ steps.path.outputs.projectPath }} - name: "Run Unity command." uses: act/unity/unity-command@master with: @@ -62,13 +62,7 @@ runs: serial: ${{ inputs.serial }} email: ${{ inputs.email }} password: ${{ inputs.password }} - command: -projectPath ${{ inputs.projectPath }} -buildTarget ${{ steps.getTarget.outputs.buildTarget }} ${{ inputs.command }} - removeContainer: ${{ inputs.removeContainer }} + sshPublicKey: ${{ inputs.sshPublicKey }} + sshPrivateKey: ${{ inputs.sshPrivateKey }} noGraphics: ${{ inputs.noGraphics }} - - name: "Cache the Library folder." - if: inputs.cacheVolume != null - uses: act/common/docker/docker-cp@master - with: - recreateVolume: true - volume: ${{ inputs.cacheVolume }} - fromPath: Library + command: -projectPath ${{ steps.path.outputs.projectPath }} -buildTarget ${{ steps.getTarget.outputs.buildTarget }} ${{ inputs.command }}