name: data-proxy-code-tests

on:
  pull_request:
    branches:
      - main
      - staging
      - master

jobs:
  check:
    name: check for changes in data-proxy
    outputs:
      run_data-proxy_tests: ${{ steps.check_files.outputs.run_data-proxy_tests }}

    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 2

      - name: check modified app folder
        id: check_files
        run: |
          echo "=============== list modified files ==============="
          git diff --name-only HEAD^ HEAD
          
          echo "========== check paths of modified files =========="
          git diff --name-only HEAD^ HEAD > files.txt

          echo "run_data-proxy_tests=false" >>$GITHUB_OUTPUT 

          while IFS= read -r file
          do
            echo $file
            if [[ $file == src/data-proxy/* ]]; then
              echo "run_data-proxy_tests=true" >>$GITHUB_OUTPUT
            fi

          done < files.txt

  drive:
    name: data-proxy code tests
    needs: [check]
    if: needs.check.outputs.run_data-proxy_tests == 'true'
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: src/data-proxy
    
    steps:
      - name: Checkout
        uses: actions/checkout@v3.5.2

      - name: Authenticate to Google Cloud
        uses: google-github-actions/auth@v1.1.0
        with:
          credentials_json: ${{ secrets.GCP_SA_CREDENTIALS }}

      - name: Set up gcloud Cloud SDK environment
        uses: google-github-actions/setup-gcloud@v1.1.0

      - name: Add .env files
        run: |
          gcloud secrets versions access latest --secret="sta-env-data-proxy" > .env
          gcloud secrets versions access latest --secret="prod-env-data-proxy" > .env

      - name: Node setup
        uses: actions/setup-node@v2
        with:
          node-version: '14'

      - name: Install requirements
        run: npm install

      - name: Run tests and collect coverage
        run: npm run test-coverage
        continue-on-error: true

      - name: Upload coverage reports to Codecov
        uses: codecov/codecov-action@v3
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}