name: "Bootstrap"
description: "Bootstrap all syft tools and dependencies on top of go-make's setup action"

# This action is a thin wrapper around anchore/go-make/.github/actions/setup which
# already handles checkout, setup-go, restore-only build/mod cache, and tool cache.
# We add the syft-specific extras here: apt packages and the test fixture cache.

inputs:
  go-version:
    description: "Go version to install (passed to go-make/setup)"
    required: true
    default: "1.26.2"
  cache-key-prefix:
    description: "Prefix all cache keys with this value (passed to go-make/setup)"
    required: true
    default: "v1"
  cache-enabled:
    description: "Enable build/mod and tool caching (passed to go-make/setup)"
    required: true
    default: "true"
  download-test-fixture-cache:
    description: "Download test fixture cache from OCI and github actions"
    required: true
    default: "false"
  bootstrap-apt-packages:
    description: "Space delimited list of tools to install via apt"
    default: "libxml2-utils"

runs:
  using: "composite"
  steps:
    - name: Setup go + go-make tooling
      uses: anchore/go-make/.github/actions/setup@9de27be11ed73e2f9d5406a836a492b7d8aa1225 # v0.5.0
      with:
        go-version: ${{ inputs.go-version }}
        cache-key-prefix: ${{ inputs.cache-key-prefix }}
        cache-enabled: ${{ inputs.cache-enabled }}

    - name: Install binny-managed tools
      shell: bash
      run: make binny:install

    - name: Install apt packages
      if: inputs.bootstrap-apt-packages != ''
      shell: bash
      env:
        APT_PACKAGES: ${{ inputs.bootstrap-apt-packages }}
      run: |
        IFS=' ' read -ra packages <<< "$APT_PACKAGES"
        DEBIAN_FRONTEND=noninteractive sudo apt update && sudo -E apt install -y "${packages[@]}"

    # ORAS cache: restore-only on non-default branches / forks
    - name: Restore ORAS cache from github actions
      if: ${{ inputs.download-test-fixture-cache == 'true' && (github.ref != format('refs/heads/{0}', github.event.repository.default_branch) || github.event.repository.fork == true) }}
      uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
      with:
        path: ${{ github.workspace }}/.tmp/oras-cache
        key: ${{ inputs.cache-key-prefix }}-oras-cache

    # ORAS cache: restore + save on the default branch of the canonical repo only.
    - name: Restore and save ORAS cache from github actions
      if: ${{ inputs.download-test-fixture-cache == 'true' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && github.event.repository.fork == false }}
      uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
      with:
        path: ${{ github.workspace }}/.tmp/oras-cache
        key: ${{ inputs.cache-key-prefix }}-oras-cache

    - name: Download test fixture cache
      if: inputs.download-test-fixture-cache == 'true'
      shell: bash
      run: make download-test-fixture-cache
