Audita automáticamente tu repositorio en busca de vulnerabilidades de seguridad y exposición de secretos usando Cursor CLI. Este workflow escanea posibles secretos, detecta patrones de workflow riesgosos y propone correcciones de seguridad.
name: Auto Secrets Audit

on:
  schedule:
    - cron: "0 4 * * *"
  workflow_dispatch:

permissions:
  contents: write
  pull-requests: write
  actions: read

jobs:
  secrets-audit:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install Cursor CLI
        run: |
          curl https://cursor.com/install -fsS | bash
          echo "$HOME/.cursor/bin" >> $GITHUB_PATH

      - name: Configure git identity
        run: |
          git config user.name "Cursor Agent"
          git config user.email "cursoragent@cursor.com"

      - name: Scan and propose hardening
        env:
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          MODEL: gpt-5
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH_PREFIX: audit
        run: |
          cursor-agent -p "Estás ejecutándote en un runner de GitHub Actions.

          El CLI de GitHub está disponible como `gh` y autenticado mediante `GH_TOKEN`. Git está disponible. Tienes acceso de escritura al contenido del repositorio y puedes comentar en pull requests, pero no debes crear o editar PRs directamente.

          # Contexto:
          - Repo: ${{ github.repository }}
           - Prefijo de Rama de Hardening: ${{ env.BRANCH_PREFIX }}

          # Objetivo:
          - Realizar una auditoría programada de exposición de secretos del repositorio y hardening de workflows, y proponer correcciones mínimas seguras.

          # Requisitos:
          1) Escanear posibles secretos en archivos rastreados e historial reciente; soportar patrones de allowlist si están presentes (ej., .gitleaks.toml).
          2) Detectar patrones de workflow riesgosos: actions sin pinear, permisos excesivamente amplios, uso inseguro de pull_request_target, secretos en contextos de PR forkeados, comandos inseguros deprecados, bloques de permisos faltantes.
          3) Mantener una rama persistente para esta ejecución usando el Prefijo de Rama de Hardening del Contexto. Crearla si no existe, actualizarla en caso contrario, y hacer push de los cambios al origin.
          4) Proponer ediciones mínimas: redactar literales donde sea seguro, agregar reglas de ignore, pinear actions a SHA, reducir permisos, agregar guardrails a workflows, y agregar un SECURITY_LOG.md resumiendo cambios y guía de remediación.
          5) Hacer push al origin.
          6) Si hay al menos un PR abierto en el repo, publicar o actualizar un solo comentario en lenguaje natural (1–2 oraciones) en el PR abierto actualizado más recientemente que explique brevemente los cambios de hardening e incluya un enlace de comparación inline para crear rápidamente un PR.
          7) Evitar comentarios duplicados; actualizar un comentario de bot existente si está presente. Si no hay cambios o no hay PRs abiertos, no publicar nada.

          # Inputs y convenciones:
          - Usar `gh` para listar PRs y para publicar comentarios. Evitar comentarios duplicados.

          # Entregables cuando ocurren actualizaciones:
           - Commits pusheados a la rama de hardening persistente para esta ejecución.
          - Un solo comentario de PR en lenguaje natural con el enlace de comparación de arriba (solo si existe un PR abierto).
          " --force --model "$MODEL" --output-format=text