name: Generate Linux patches

on:
  workflow_dispatch:
    inputs:
      version:
        description: 'Driver Version'
        required: true
        type: string
      old_version:
        description: 'Old Driver Version'
        required: false
        type: string
      driver_url:
        description: 'Driver URL'
        required: false
        type: string
      mode:
        description: 'Mode'
        required: true
        type: choice
        default: search
        options:
          - copy
          - search
      description:
        description: 'Commit description'
        required: false
        type: string

permissions:
  contents: write

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - name: Check Input
        id: check_input
        run: |
          version="${{ inputs.version }}"
          mode="${{ inputs.mode }}"
          driver_url="${{ inputs.driver_url }}"

          echo "Version: $version"
          echo "Mode: $mode"

          if [[ $version =~ ([0-9]+\.[0-9]+(-[a-zA-Z]+)?)(-.+)? ]]; then
            echo "Valid version"
          else
            echo "Invalid driver version."
            exit 1
          fi

          if [[ ! -n $driver_url ]]; then
            driver_url="http://international.download.nvidia.com/XFree86/Linux-x86_64/$version/NVIDIA-Linux-x86_64-$version.run"
          fi
          echo "Driver URL: $driver_url"

          echo "DRIVER_URL=$driver_url" >> $GITHUB_ENV
          echo "VERSION=$version" >> $GITHUB_ENV


      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          ref: master

      - name: Find Bytecode
        if: ${{ inputs.mode == 'search' }}
        run: |

          echo "Running find_bytecode.sh for version ${{ env.VERSION }}"

          cd "${{ github.workspace }}/tools/autopatch"
          ./find_bytecode.sh ${{ env.VERSION }} ${{ env.DRIVER_URL }}

          echo "find_bytecode.sh executed successfully"

      - name: Update NVENC
        run: |

          echo "Running update_patch.sh for version ${{ env.VERSION }}"
          cd "${{ github.workspace }}/tools/autopatch"

          old_version="${{ inputs.old_version }}"

          case "${{ inputs.mode }}" in
            search)
              if [[ -z $old_version ]]; then
                ./update_patch.sh -f ../../patch.sh -b $(./find_bytecode.sh ${{ env.VERSION }} ${{ env.DRIVER_URL }})
              else
                ./update_patch.sh -f ../../patch.sh -b $(./find_bytecode.sh ${{ env.VERSION }} ${{ env.DRIVER_URL }}) -o $old_version
              fi
              ;;
            copy)
              if [[ -z $old_version ]]; then
                ./update_patch.sh -f ../../patch.sh -v ${{ env.VERSION }}
              else
                ./update_patch.sh -f ../../patch.sh -v ${{ env.VERSION }} -o $old_version
              fi
              ;;
            *)
              echo "ERROR: Wrong mode"
              ;;
          esac

          echo "update_patch.sh executed successfully"

      - name: Update NVFBC
        run: |

          echo "Running update_patch.sh for FBC for version ${{ env.VERSION }}"
          cd "${{ github.workspace }}/tools/autopatch"

          old_version="${{ inputs.old_version }}"

          if [[ -z $old_version ]]; then
            ./update_patch.sh -f ../../patch-fbc.sh -v ${{ env.VERSION }}
          else
            ./update_patch.sh -f ../../patch-fbc.sh -v ${{ env.VERSION }} -o $old_version
          fi

          echo "update_patch.sh for FBC executed successfully"

      - name: Run add_driver.py
        run: |
          echo "Running add_driver.py with version ${{ env.VERSION }}"
          cd "${{ github.workspace }}/tools/readme-autogen"
          python add_driver.py -L -U ${{ env.DRIVER_URL }} ${{ env.VERSION }}
          echo "add_driver.py executed successfully"

      - name: Run readme_autogen.py
        run: |
          echo "Running readme_autogen.py"
          cd "${{ github.workspace }}/tools/readme-autogen"
          python readme_autogen.py
          echo "readme_autogen.py executed successfully"

      - name: Commit and push changes
        run: |
          echo "Committing and pushing changes"
          branch=autopatch_${{ env.VERSION }}
          cd "${{ github.workspace }}"
          git config --local user.email "action@github.com"
          git config --local user.name "GitHub Action"
          git checkout -b $branch
          git add -A
          git diff --quiet --exit-code --cached || git commit -m "linux: add support for driver ${{ env.VERSION }}" -m "${{ inputs.description }}"
          git push origin $branch
          echo "Committed and pushed changes"