name: Check Cache

on:
  workflow_call:
    inputs:
      os:
        required: true
        type: string
      arch:
        required: false
        type: string
      build-deps-only:
        required: false
        type: boolean
      force-build:
        required: false
        type: boolean
  
jobs:
  check_cache: # determines if there is a cache and outputs variables used in caching process
    name: Check Cache
    runs-on: ${{ inputs.os }}
    outputs:
      cache-key: ${{ steps.set_outputs.outputs.cache-key }}
      cache-path: ${{ steps.set_outputs.outputs.cache-path }}
      valid-cache: ${{ steps.cache_deps.outputs.cache-hit }}
    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          lfs: 'false'
        
      - name: set outputs
        id: set_outputs
        env:
          # Keep macOS cache keys and paths architecture-specific.
          cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && 'windows' || 'linux-clang') }}
          dep-folder-name: ${{ runner.os == 'macOS' && format('/{0}', inputs.arch) || '/OrcaSlicer_dep' }}
          output-cmd: ${{ runner.os == 'Windows' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}}
        run: |
          echo cache-key=${{ env.cache-os }}-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} >> ${{ env.output-cmd }}
          echo cache-path=${{ github.workspace }}/deps/build${{ env.dep-folder-name }} >> ${{ env.output-cmd }}
            
      - name: load cache
        id: cache_deps
        uses: actions/cache@v5
        with:
          path: ${{ steps.set_outputs.outputs.cache-path }}
          key: ${{ steps.set_outputs.outputs.cache-key }}
          lookup-only: true
        
  build_deps: # call next step
    name: Build Deps
    needs: [check_cache]
    uses: ./.github/workflows/build_deps.yml
    with:
      cache-key: ${{ needs.check_cache.outputs.cache-key }}
      cache-path: ${{ needs.check_cache.outputs.cache-path }}
      valid-cache: ${{ needs.check_cache.outputs.valid-cache == 'true' }}
      os: ${{ inputs.os }}
      arch: ${{ inputs.arch }}
      build-deps-only: ${{ inputs.build-deps-only }}
      force-build: ${{ inputs.force-build }}
    secrets: inherit
