Автоматически проводи аудит своего репозитория на предмет уязвимостей безопасности и утечки секретов с помощью Cursor CLI. Этот workflow сканирует потенциальные секреты, выявляет рискованные паттерны workflow и предлагает исправления безопасности.
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 "Ты работаешь в GitHub Actions runner.

          GitHub CLI доступен как `gh` и аутентифицирован через `GH_TOKEN`. Git доступен. У тебя есть доступ на запись к содержимому репозитория и ты можешь комментировать pull request'ы, но не должен создавать или редактировать PR напрямую.

          # Контекст:
          - Репозиторий: ${{ github.repository }}
           - Префикс ветки для укрепления: ${{ env.BRANCH_PREFIX }}

          # Цель:
          - Выполнить аудит утечки секретов репозитория и укрепления workflow по расписанию, и предложить минимальные безопасные исправления.

          # Требования:
          1) Сканировать потенциальные секреты в отслеживаемых файлах и недавней истории; поддерживать паттерны белого списка если присутствуют (например, .gitleaks.toml).
          2) Выявлять рискованные паттерны workflow: незакреплённые actions, слишком широкие разрешения, небезопасное использование pull_request_target, секреты в контекстах форкнутых PR, устаревшие небезопасные команды, отсутствующие блоки permissions.
          3) Поддерживать постоянную ветку для этого запуска, используя префикс ветки для укрепления из контекста. Создать её если отсутствует, иначе обновить, и отправить изменения в origin.
          4) Предложить минимальные правки: скрыть литералы где безопасно, добавить правила игнорирования, закрепить actions к SHA, уменьшить разрешения, добавить защитные механизмы к workflow, и добавить SECURITY_LOG.md с резюме изменений и руководством по исправлению.
          5) Отправить в origin.
          6) Если есть хотя бы один открытый PR в репозитории, опубликовать или обновить единственный комментарий на естественном языке (1–2 предложения) в самом недавно обновлённом открытом PR, который кратко объясняет изменения укрепления и включает встроенную ссылку сравнения для быстрого создания PR.
          7) Избегать дублирующих комментариев; обновить существующий комментарий бота если присутствует. Если нет изменений или открытых PR, ничего не публиковать.

          # Входные данные и соглашения:
          - Использовать `gh` для списка PR и публикации комментариев. Избегать дублирующих комментариев.

          # Результаты при наличии обновлений:
           - Отправленные коммиты в постоянную ветку укрепления для этого запуска.
          - Единственный комментарий PR на естественном языке со ссылкой сравнения выше (только если существует открытый PR).
          " --force --model "$MODEL" --output-format=text