name: TheHarvester Python CI

on:
  push:
    branches:
      - '*'

  pull_request:
    branches:
      - '*'

jobs:
  Python:
    runs-on: ${{ matrix.os }}
    strategy:
      max-parallel: 10
      matrix:
        os: [ ubuntu-latest ]
        python-version: [ '3.12', '3.13', '3.14' ]

    steps:
      - uses: actions/checkout@v6
      - name: Install uv
        uses: astral-sh/setup-uv@v7
        with:
          python-version: ${{ matrix.python-version }}
          enable-cache: true
          cache-dependency-glob: "uv.lock"

      - name: Install dependencies
        run: |
          sudo mkdir -p /usr/local/etc/theHarvester
          sudo cp theHarvester/data/*.yaml /usr/local/etc/theHarvester/
          sudo chown -R runner:runner /usr/local/etc/theHarvester/
          uv sync --all-groups --frozen
          echo "$GITHUB_WORKSPACE/.venv/bin" >> $GITHUB_PATH

      - name: Lint with ruff
        run: |
          ruff check --fix

      - name: Format with ruff
        run: |
          ruff format

      - name: Commit changes for ruff formating and linting
        if: github.event_name == 'push'
        run: |
          git config user.name github-actions
          git config user.email github-actions@github.com
          git add .
          git commit -m "Apply ruff fixes and formatting" || true # Use || true to prevent failure if no changes
          git push origin HEAD:${{ github.ref_name }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Test with pytest
        run: |
          pytest tests/**

      - name: Run theHarvester module Baidu
        run: |
          theHarvester -d yale.edu -b baidu

      - name: Run theHarvester module CertSpotter
        run: |
          theHarvester -d yale.edu -b certspotter

      - name: Run theHarvester module Crtsh
        run: |
          theHarvester -d hcl.com -b crtsh

      - name: Run theHarvester module DuckDuckGo
        run: |
          theHarvester -d yale.edu -b duckduckgo

      - name: Run theHarvester module HackerTarget
        run: |
          theHarvester -d yale.edu -b hackertarget

      - name: Run theHarvester module Otx
        run: |
          theHarvester -d yale.edu -b otx

      - name: Run theHarvester module RapidDns
        run: |
          theHarvester -d yale.edu -b rapiddns

      - name: Run theHarvester module Urlscan
        run: |
          theHarvester -d yale.edu -b urlscan

      - name: Run theHarvester module Yahoo
        run: |
          theHarvester -d yale.edu -b yahoo

      - name: Run theHarvester module DNS brute force
        run: |
          theHarvester -d yale.edu -c
