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. Or 'personal' for a personal license." required: true default: personal 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" unityBuilder: description: "Whether or not to use the UnityBuilder instead of a Unity command." 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 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 }} unityBuilder: ${{ inputs.unityBuilder }} - 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 }}