name: unity-project-cached-artifacts description: "Run a Unity command using a project's version and a build target. Cache the library folder. Upload artifacts after the build." 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 skipRestore: description: "Whether or not to skip restoring the cache. Default: false" required: false default: "false" compressionLevel: description: "Compression level for the artifacts." required: false default: "9" artifactSuffix: description: "Suffix for the artifact name." required: false default: build outputs: cacheChanged: description: "Whether or not the cache was changed." value: ${{ steps.check-cache.outputs.cache-hit != 'true' }} artifactName: description: "Name of the uploaded artifact." value: "${{ steps.get_product_name.outputs.nameShort }}_${{ inputs.artifactSuffix }}" artifactPath: description: "Path to the uploaded artifact." value: "${{ steps.find_output_dir.outputs.fullPath }}" runs: using: "composite" steps: - name: "Build Unity Project." uses: act/unity/unity-project-cached@master with: projectPath: ${{ inputs.projectPath }} platform: ${{ inputs.platform }} serial: ${{ inputs.serial }} email: ${{ inputs.email }} password: ${{ inputs.password }} executeMethod: ${{ inputs.executeMethod }} command: ${{ inputs.command }} noGraphics: ${{ inputs.noGraphics }} buildOnCacheHit: ${{ inputs.buildOnCacheHit }} unityBuilder: ${{ inputs.unityBuilder }} sshPublicKey: ${{ inputs.sshPublicKey }} sshPrivateKey: ${{ inputs.sshPrivateKey }} cacheSuffix: ${{ inputs.cacheSuffix }} cachePrefix: ${{ inputs.cachePrefix }} releaseBranch: ${{ inputs.releaseBranch }} cachePath: ${{ inputs.cachePath }} skipRestore: ${{ inputs.skipRestore }} - name: "Get product name." id: get_product_name uses: act/unity/unity-get-product-name@master - name: "Configure find parameters." id: configure_find run: | # Configure the pattern and type based on the platform. Android is case insensitive. shopt -s nocasematch if [[ "${{ inputs.platform }}" = "android" ]]; then echo "pattern=*.apk" >> "$GITHUB_OUTPUT" echo "type=f" >> "$GITHUB_OUTPUT" else echo "pattern=*" >> "$GITHUB_OUTPUT" echo "type=d" >> "$GITHUB_OUTPUT" fi shopt -u nocasematch shell: bash - name: "Find Output Directory." id: find_output_dir uses: act/common/utils/find-first@master with: path: Build pattern: "${{ steps.configure_find.outputs.pattern }}" type: "${{ steps.configure_find.outputs.type }}" minDepth: 1 maxDepth: 2 - name: "Clean DoNotShip folders." if: ${{ steps.configure_find.outputs.type == 'd' }} run: | # Remove folders containing "DoNotShip" or "DontShip" from the output directory OUTPUT_DIR="${{ steps.find_output_dir.outputs.fullPath }}" if [[ -d "$OUTPUT_DIR" ]]; then find "$OUTPUT_DIR" -type d \( -name "*DoNotShip*" -o -name "*DontShip*" \) -exec rm -rf {} + 2>/dev/null || true fi shell: bash - name: "Upload Artifacts." uses: https://github.com/ChristopherHX/gitea-upload-artifact@v4 with: name: "${{ steps.get_product_name.outputs.nameShort }}_${{ inputs.artifactSuffix }}" path: "${{ steps.find_output_dir.outputs.fullPath }}" if-no-files-found: error compression-level: ${{ inputs.compressionLevel }}