name: 'openpilot env setup, with retry on failure'

inputs:
  docker_hub_pat:
    description: 'Auth token for Docker Hub, required for BuildJet jobs'
    required: false
    default: ''
  sleep_time:
    description: 'Time to sleep between retries'
    required: false
    default: 30

outputs:
  duration:
    description: 'Duration of the setup process in seconds'
    value: ${{ steps.get_duration.outputs.duration }}

runs:
  using: "composite"
  steps:
    - id: start_time
      shell: bash
      run: echo "START_TIME=$(date +%s)" >> $GITHUB_ENV
    - id: setup1
      uses: ./.github/workflows/setup
      continue-on-error: true
      with:
        is_retried: true
    - if: steps.setup1.outcome == 'failure'
      shell: bash
      run: sleep ${{ inputs.sleep_time }}
    - id: setup2
      if: steps.setup1.outcome == 'failure'
      uses: ./.github/workflows/setup
      continue-on-error: true
      with:
        is_retried: true
    - if: steps.setup2.outcome == 'failure'
      shell: bash
      run: sleep ${{ inputs.sleep_time }}
    - id: setup3
      if: steps.setup2.outcome == 'failure'
      uses: ./.github/workflows/setup
      with:
        is_retried: true
    - id: get_duration
      shell: bash
      run: |
        END_TIME=$(date +%s)
        DURATION=$((END_TIME - START_TIME))
        echo "Total duration: $DURATION seconds"
        echo "duration=$DURATION" >> $GITHUB_OUTPUT
