name: Pull Request Pipeline

on:
  pull_request:

jobs:
  generate_licenses:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Set up Flutter
      uses: subosito/flutter-action@v2.21.0
      with: 
        flutter-version: '3.32.1'
        channel: "stable"

    - name: Get dependencies
      run: flutter pub get

    - name: Generate oss_licenses.dart
      run: flutter pub run flutter_oss_licenses:generate -o lib/presentation/views/about/licenses/oss_licenses.dart

    - name: Escape dollar signs in licenses
      run: |
        sed -i 's/\$/\\$/g' lib/presentation/views/about/licenses/oss_licenses.dart
  
    - name: Check for changes
      id: check_changes
      run: |
        if [[ $(git status --porcelain) ]]; then
          echo "changes_detected=true" >> $GITHUB_OUTPUT
        else
          echo "changes_detected=false" >> $GITHUB_OUTPUT
        fi
    
    - name: Checkout PR branch
      if: steps.check_changes.outputs.changes_detected == 'true'
      run: |
        git fetch origin pull/${{ github.event.pull_request.number }}/head:${{ github.event.pull_request.head.ref }}
        git checkout ${{ github.event.pull_request.head.ref }}
    
    - name: Commit Changes
      if: steps.check_changes.outputs.changes_detected == 'true'
      run: |
        git config --global user.name "GitHub Actions"
        git config --global user.email "actions@github.com"
        git add .
        git commit -m "Actions: Licenses updated [skip ci]"
        git push origin HEAD:${{ github.event.pull_request.head.ref }}

  lint:
    runs-on: ubuntu-latest
    needs:  generate_licenses
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      
      - name: Set Up Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: '3.32.1'
          channel: 'stable'
          
      - name: Check Formatting
        run: flutter analyze
          
  test:
    runs-on: ubuntu-latest
    if: always()
    needs: lint

    steps:
      - uses: actions/checkout@v4
      
      - name: Set Up Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: '3.32.1'
          channel: 'stable'

      - name: Get dependencies
        run: flutter pub get
          
      - name: Run Tests
        run: flutter test
