Skip to main content

Рассмотрение оповещений проверки кода в запросах на вытягивание

Если code scanning выявляет проблему в запросе на вытягивание, вы можете просмотреть выделенный код и разрешить оповещение.

Кто может использовать эту функцию?

Пользователи с доступом на чтение

Сведения о результатах функции code scanning для запросов на вытягивание

В репозиториях можно настроить code scanning как проверку запросов на вытягивание, при этом code scanning будет проверять код в запросах на вытягивание. По умолчанию проверка осуществляется только для запросов на вытягивание, предназначенных для ветви по умолчанию, но при необходимости это поведение можно настроить в GitHub Actions или в сторонней системе непрерывной интеграции и поставки (CI/CD).

Если строки кода, измененные в запросе на вытягивание, создают оповещения code scanning, оповещения передаются в следующих местах в запросе на вытягивание.

  • Проверка результатов запроса на вытягивание
  • Вкладка "Беседа" запроса на вытягивание в рамках проверка запроса на вытягивание
  • Вкладка Измененные файлы запроса на вытягивание.

Примечание. Code scanning отображает оповещения в запросах на вытягивание, только если все строки кода, идентифицированные оповещением, существуют в диффе запроса на вытягивание. Дополнительные сведения см. в разделе Поддержка SARIF для проверки кода.

GitHub Copilot Autofix предлагает исправления для оповещений из анализа code scanning (включая анализ CodeQL в частных репозиториях. Дополнительные сведения о работе с предложениями из Copilot Autofix в запросах на вытягивание см. в статье "Работа с предложениями Copilot Autofix для оповещений по запросу на вытягивание".

Если у вас есть разрешение на запись для репозитория, на вкладке "Безопасность " отображаются все существующие оповещения code scanning. Сведения о оповещениях репозитория см. в разделе "Оценка оповещений сканирования кода для репозитория".

В репозиториях, где code scanning настроено для сканирования при отправке кода, code scanning также сопоставляет результаты с любыми открытыми запросами на вытягивание и добавляет оповещения в виде заметок в тех же местах, что и другие проверки запроса на вытягивание. Дополнительные сведения см. в разделе Настройка расширенной настройки для сканирования кода.

Если запрос на вытягивание предназначен для защищенная ветвь, использующего code scanning, и владелец репозитория настроил обязательная проверка состояния, перед слиянием запроса на вытягивание необходимо пройти проверку "Code scanning". Дополнительные сведения см. в разделе Сведения о защищенных ветвях.

Сведения об использовании функции code scanning в качестве проверки запроса на вытягивание

Существует множество вариантов настройки code scanning в качестве проверки запроса на вытягивание, поэтому точную конфигурацию каждого репозитория будет отличаться, и некоторые из них будут иметь несколько проверок.

Проверка результатов Code scanning

Для всех конфигураций code scanningпроверка, содержащая результаты code scanning — Code scanning. Результаты для каждого используемого средства анализа отображаются отдельно. Все новые оповещения в строках кода, измененных в запросе на вытягивание, отображаются как заметки.

Чтобы просмотреть полный набор оповещений для проанализированной ветви, нажмите кнопку Просмотреть все оповещения ветви. Откроется полное представление оповещений, где можно фильтровать все оповещения в ветви по типам, серьезности, тегу и т. д. Дополнительные сведения см. в разделе "Оценка оповещений сканирования кода для репозитория".

Снимок экрана: проверка результатов Code scanning по запросу на вытягивание. Ссылка "Просмотр всех оповещений ветви" выделена темно-оранжевым контуром.

Сбои проверки результатов Code scanning

Если проверка результатов code scanning выявит какие-либо проблемы с уровнем серьезности error, critical или high, она завершается сбоем, а в ее результатах отображается ошибка. Если все найденные функцией code scanning результаты имеют более низкий уровень серьезности, оповещения обрабатываются как предупреждения или заметки, а проверка завершается успешно.

Снимок экрана: поле слияния для запроса на вытягивание. Проверка "Результаты сканирования кода / CodeQL" содержит "1 новое оповещение, включая 1 высокий уровень безопасности v..."

Вы можете переопределить поведение по умолчанию в параметрах репозитория, указав уровень серьезности и условия уровней безопасности, которые приведут к сбою проверки запроса на вытягивание. Дополнительные сведения см. в разделе "Настройка расширенной настройки для сканирования кода".

Другие проверки code scanning

В разных конфигурациях могут быть настроены дополнительные проверки, выполняемые для запросов на вытягивание с помощью функции code scanning. Как правило, это рабочие процессы, которые анализируют код или отправляют результаты функции code scanning. Эти проверки могут выполняться для устранения неполадок при возникновении проблем с анализом.

Например, если репозиторий использует Рабочий процесс анализа CodeQL проверку CodeQL / Анализ (ЯЗЫК) выполняется перед выполнением проверки результатов. Проверка анализа может завершиться ошибкой, если возникают проблемы с конфигурацией или если запрос на вытягивание прерывает сборку для языка, который компилируется анализ (например, C/C++, C#, Go, Java, Kotlin и Swift).

Как и в случае с другими проверками запроса на вытягивание, вы можете просмотреть полные сведения о сбое проверки на вкладке "Проверки". Дополнительные сведения о настройке и устранении неполадок см. в разделе[ "AUTOTITLE" илиНастройка расширенной настройки для сканирования кода](/code-security/code-scanning/troubleshooting-code-scanning)".

Просмотр оповещения по запросу на вытягивание

Вы можете увидеть любые оповещения code scanning, которые находятся внутри диффа изменений, введенных в запросе на вытягивание, просмотрев вкладку "Беседа". Code scanning публикует проверка запроса на вытягивание, отображающую каждое оповещение как заметку в строках кода, активировав оповещение. Вы можете прокомментировать оповещения, закрыть оповещения и просмотреть пути для оповещений непосредственно из заметок. Вы можете просмотреть полные сведения об оповещении, щелкнув ссылку "Подробнее", чтобы перейти на страницу сведений об оповещении.

Снимок экрана: заметка оповещения на вкладке "Беседы" запроса на вытягивание. Ссылка "Показать дополнительные сведения" описана в темно-оранжевый цвет.

Вы также можете просмотреть все оповещения code scanning, которые находятся внутри диффа изменений, представленных в запросе на вытягивание на вкладке "Измененные файлы".

Если добавить новую конфигурацию сканирования кода в запрос на вытягивание, вы увидите комментарий к запросу на вытягивание, направляя вас на вкладку "Безопасность " репозитория, чтобы просмотреть все оповещения в ветви запроса на вытягивание. Дополнительные сведения о просмотре оповещений для репозитория см. в разделе "Оценка оповещений сканирования кода для репозитория".

Если у вас есть разрешение на запись для репозитория, в некоторых заметках будут содержаться ссылки с дополнительным контекстом для оповещения. В приведенном выше примере из анализа CodeQL с помощью ссылки Предоставленное пользователем значение можно просмотреть, на каком этапе в поток данных поступают ненадежные данные (источник данных). В этом случае также можно просмотреть полный путь из источника в использующий данные код (приемник) с помощью кнопки Показать пути. Так можно проверить, являются ли данные ненадежными или анализу не удалось распознать шаг очистки данных между источником и приемником. Дополнительные сведения об анализе потока данных с помощью CodeQL см. в разделе Сведения об анализе потока данных.

Дополнительные сведения об оповещении пользователь с разрешением на запись может просмотреть по ссылке Показать подробности, представленной в заметке. С ее помощью можно в полном объеме просмотреть контекст и метаданные, выводимые средством в представлении оповещения. В приведенном ниже примере можно увидеть теги, показывающие уровень серьезности, тип и соответствующие распространенные уязвимости (CWE) для проблемы. В этом представлении также показана фиксация, в связи с которой возникла проблема.

Состояние и сведения на странице оповещений отражают состояние оповещения только в ветви репозитория по умолчанию, даже если это оповещение существует в других ветвях. Состояние оповещения в ветвях, не являющихся ветвью по умолчанию, отображается в разделе Затронутые ветви в правой части страницы оповещений. Если оповещение не существует в ветви по умолчанию, его состояние оповещения отображается как "в запросе на вытягивание" или "в ветки" и выделяется серым цветом.

В подробном представлении оповещения некоторые средства code scanning, например анализ CodeQL, также выводят описание проблемы и ссылку Показать больше для просмотра указаний по исправлению кода.

Снимок экрана: описание оповещения code scanning. Ссылка с меткой "Показать больше" выделена темно-оранжевым контуром.

Комментарий к оповещению в запросе на вытягивание

Вы можете закомментировать любое оповещение code scanning, которое отображается в запросе на вытягивание. Оповещения отображаются как заметки на вкладке "Беседа" запроса на вытягивание, как часть проверка запроса на вытягивание, а также отображаются на вкладке "Измененные файлы".

Вы можете выбрать, чтобы все сообщения в запросе на вытягивание (в том числе для оповещений code scanning), разрешались до слияния запроса на вытягивание. Дополнительные сведения см. в разделе Сведения о защищенных ветвях.

Исправление оповещения по запросу на вытягивание

Любой пользователь с доступом на отправку к запросу на вытягивание может исправить оповещение code scanning, указанное в этом запросе. После фиксации изменений в запросе на вытягивание будут заново выполнены его проверки. Если в результате внесения изменений проблема исправлена, оповещение закрывается, а заметка удаляется.

Работа с предложениями Copilot Autofix для оповещений по запросу на вытягивание

GitHub Copilot Autofix — это расширение code scanning с целевыми рекомендациями по устранению оповещений code scanning (включая оповещения CodeQL в запросах на вытягивание. Потенциальные исправления создаются автоматически большими языковыми моделями (LLM) с помощью данных из базы кода, запроса на вытягивание и из анализа code scanning.

Note

Подписка на GitHub Copilot не требуется для использования GitHub Copilot Autofix. Copilot Autofix доступен для всех общедоступных репозиториев на GitHub.com, а также частные репозитории в GitHub Enterprise Cloud предприятия, имеющие лицензию на GitHub Advanced Security.

Снимок экрана: сбой проверки для оповещения code scanning в запросе на вытягивание. Часть предложения autofix описана в темно-оранжевый цвет.

Создание предложений Copilot Autofix и публикация в запросе на вытягивание

Если для репозитория включен параметр Copilot Autofix, оповещения отображаются в запросах на вытягивание как обычные, а сведения от любых оповещений, обнаруженных code scanning, автоматически отправляются в LLM для обработки. После завершения анализа LLM все результаты публикуются в виде комментариев о соответствующих оповещениях. Дополнительные сведения см. в разделе Ответственное использование Автофикса Copilot для сканирования кода.

Примечания:

  • Copilot Autofix поддерживает подмножество запросов CodeQL . Сведения о доступности Copilot Autofixсм. в таблицах запросов, связанных с autoTITLE.
  • После завершения анализа все соответствующие результаты публикуются в запросе на вытягивание одновременно. Если в запросе на вытягивание по крайней мере один оповещение содержит предложение Copilot Autofix, следует предположить, что LLM завершил определение потенциальных исправлений для кода.
  • В оповещениях, созданных из запросов, которые не поддерживаются Copilot Autofix, вы увидите заметку о том, что запрос не поддерживается. Если не удается создать предложение для поддерживаемого запроса, появится примечание в оповещении, предлагающее отправить другую фиксацию или обратиться в службу поддержки.

Как правило, при внесении изменений в запрос на вытягивание комментарий содержит изменения для одного файла, который изменяется в запросе на вытягивание. На следующем снимку экрана показан комментарий Copilot Autofix, который предлагает изменения index.js в файле, в котором отображается оповещение. Так как потенциальное исправление требует новой зависимости, комментарий также предлагает добавить эту зависимость escape-htmlв package.json файл, даже если исходный запрос на вытягивание не вносит изменений в этот файл.

Снимок экрана: предложение Copilot Autofix с объяснением и изменением текущего файла. Предлагаемое изменение в "package.json" описано в темно-оранжевый цвет.

Оценка и фиксация предложения Copilot Autofix

Каждое предложение Copilot Autofix демонстрирует потенциальное решение для оповещения code scanning в базе кода. Чтобы определить, являются ли они хорошим решением для базы кода, необходимо оценить предлагаемые изменения, чтобы убедиться, что они поддерживают предполагаемое поведение. Сведения об ограничениях предложений Copilot Autofix см. в разделе "Ограничения предложений" и "Устранение ограничений предложений" в разделе "Ответственное использование Copilot Autofix для code scanning".

  1. Нажмите кнопку "Изменить", чтобы отобразить параметры редактирования и выбрать предпочтительный метод.

    • В разделе "Изменение с помощью GitHub CLI" следуйте инструкциям по извлечению запроса на вытягивание локально и применению предлагаемого исправления.

    • Выберите "Изменить FILENAME" , чтобы изменить файл непосредственно на GitHub с примененным исправлением.

    Note

    Если вы являетесь частью public preview Copilot Workspace for PRs, можно щелкнуть "Открыть в рабочей области " предложение Copilot Autofix для открытия Copilot Workspace непосредственно на GitHub. Copilot Workspace for PRs позволяет просматривать и изменять все предложения Copilot Autofix и другие варианты проверки запроса на вытягивание, запускать тесты CI, чтобы подтвердить их передачу, а затем применить несколько изменений в одной фиксации. Дополнительные сведения см. в разделе Использование Copilot для работы с запросом на вытягивание.

  2. При необходимости, если вы предпочитаете применить исправление к локальному репозиторию или ветви, выберите раскрывающееся меню в предложении.

    • Выберите "Просмотреть исправление автофикса", чтобы отобразить инструкции по применению предлагаемого исправления к любому локальному репозиторию или ветви.
    • Выберите "Копировать измененную строку" LINE_NUMBER , чтобы скопировать определенную строку предложения.
  3. Проверьте и измените предлагаемое исправление по мере необходимости.

  4. Завершив тестирование изменений, зафиксируйте изменения и отправьте их в ветвь.

  5. При отправке изменений в ветвь будут запускаться все обычные тесты для запроса на вытягивание. Убедитесь, что модульные тесты по-прежнему проходят и что оповещение code scanning теперь исправлено.

Отклонение предложения Copilot Autofix

Если вы решили отклонить предложение Copilot Autofix, нажмите кнопку "Закрыть предложение " в комментарии, чтобы закрыть предлагаемое исправление.

Отклонение оповещения по запросу на вытягивание

Оповещение также можно закрыть, отклонив его. Если вы не считаете, что оповещение требуется исправлять, его можно отклонить. Например, когда есть ошибка в коде, который используется только для тестирования, или когда усилия по исправлению ошибки больше потенциального преимущества улучшения кода. Если у вас есть разрешение на запись для репозитория, кнопка "Закрыть оповещение " доступна в заметках кода и в сводке оповещений. При нажатии кнопки "Закрыть оповещение " вам будет предложено выбрать причину закрытия оповещения.

Снимок экрана: сбой проверки для сканирования кода. Кнопка "Закрыть оповещение" выделена темно-оранжевым цветом. Отображается раскрывающийся список "Закрыть оповещение".

Важно выбрать соответствующую причину в раскрывающемся меню, так как это может влиять на то, будет ли запрос включен в будущий анализ. При необходимости можно закомментировать увольнение, чтобы записать контекст увольнения оповещения. Комментарий о закрытии добавляется на временную шкалу оповещений и может использоваться в качестве обоснования для аудита или отчетов. Вы можете получить или сохранить комментарий с помощью REST API сканирования кода. Комментарий содержится в dismissed_comment для конечной точки alerts/{alert_number}. Дополнительные сведения см. в разделе Конечные точки REST API для сканирования кода.

Если вы закрываете оповещение CodeQL как ложное срабатывание, например, поскольку в коде используется библиотека очистки, которая не поддерживается, рассмотрите возможность добавления CodeQL в репозиторий и улучшение анализа. Дополнительные сведения о CodeQL см. в разделе "Участие в улучшении CodeQL."

Дополнительные сведения об увольнении оповещений см. в разделе "Разрешение оповещений сканирования кода".