# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: fabric-tests
description: Set up Fabric testing environment
inputs:
  PYTHON_VERSION:
    required: true
  TERRAFORM_VERSION:
    required: true
  TERRAFORM_FLAVOUR:
    required: true
runs:
  using: composite
  steps:
    - name: Config auth
      shell: bash
      run: |
        echo '{"type": "service_account", "project_id": "test-only"}' \
          | tee -a $GOOGLE_APPLICATION_CREDENTIALS
    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: ${{ inputs.PYTHON_VERSION }}
        cache: 'pip'
        cache-dependency-path: 'tests/requirements.txt'

    - name: Set up Terraform
      uses: hashicorp/setup-terraform@v3
      if: ${{ inputs.TERRAFORM_FLAVOUR == 'terraform' }}
      with:
        terraform_version: ${{ inputs.TERRAFORM_VERSION }}
        terraform_wrapper: false

    - uses: opentofu/setup-opentofu@v1
      if: ${{ inputs.TERRAFORM_FLAVOUR == 'tofu' }}
      with:
        tofu_version: ${{ inputs.TERRAFORM_VERSION }}
        tofu_wrapper: false

    - name: Configure provider cache
      shell: bash
      run: |
        echo 'plugin_cache_dir = "${TF_PLUGIN_CACHE_DIR}"' \
          | tee -a /home/runner/.terraformrc
        echo 'disable_checkpoint = true' \
          | tee -a /home/runner/.terraformrc
        mkdir -p ${TF_PLUGIN_CACHE_DIR}
    - name: Download lockfile
      uses: actions/download-artifact@v4
      with:
        name: lockfile-${{ runner.os }}-${{ inputs.TERRAFORM_FLAVOUR  }}-${{ inputs.TERRAFORM_VERSION }}
        path: tools/lockfile
    - name: Download Terraform provider cache
      uses: actions/cache@v4
      with:
        path: ${{ env.TF_PLUGIN_CACHE_DIR }}
        # yamllint disable-line rule:line-length
        key: ${{ runner.os }}-${{ inputs.TERRAFORM_FLAVOUR  }}-${{ inputs.TERRAFORM_VERSION }}-${{ hashFiles('tools/lockfile/.terraform.lock.hcl') }}
    # avoid conflicts with user-installed providers on local machines
    - name: Pin provider versions
      shell: bash
      run: |
        for f in $(find . -name versions.tf  -o -name versions.tofu); do
          sed -i 's/>=\(.*# tftest\)/=\1/g' $f;
        done
    - name: Install Python Dependencies
      shell: bash
      run: |
        pip install -r tests/requirements.txt
