Qodana - это инструмент мониторинга качества кода, который идентифицирует и предлагает исправления ошибок, уязвимостей безопасности, дублирования и несовершенств.
Оглавление
Действие Github Scan Scan Scan позволяет запустить Qodana в репозитории GitHub.
Чтобы настроить сканирование Qodana, сохраните файл .github/workflows/code_quality.yml содержащий конфигурацию рабочего процесса:
name : Qodana
on :
workflow_dispatch :
pull_request :
push :
branches :
- main
- ' releases/* '
jobs :
qodana :
runs-on : ubuntu-latest
permissions :
contents : write
pull-requests : write
checks : write
steps :
- uses : actions/checkout@v3
with :
ref : ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit
fetch-depth : 0 # a full history is required for pull request analysis
- name : ' Qodana Scan '
uses : JetBrains/[email protected]
env :
QODANA_TOKEN : ${{ secrets.QODANA_TOKEN }} # read the steps about it below Чтобы установить переменную среды QODANA_TOKEN в конфигурации сборки:
QODANA_TOKEN и сохраните токен проекта в качестве его значения.QODANA_TOKEN в раздел env на шаге Qodana Scan :Используя этот рабочий процесс, Qodana будет работать на главной ветви, выпустить филиалы и по запросам на притяжение в вашем репозитории.
Примечание: fetch-depth: 0 требуется для оформления заказа в случае, если Qodana работает в режиме запроса на вытягивание (отчеты о проблемах, которые появились только в этом запросе на вытяжение).
Мы рекомендуем, чтобы у вас был отдельный файл рабочего процесса для Qodana, потому что разные задания работают параллельно

Чтобы Qodana автоматически исправить обнаруженные проблемы и подтолкнуть изменения в ваш хранилище, вам нужно
fixesStrategy в файле qodana.yaml в корне репозиторияargs с помощью стратегии быстрого фиксации для использования: --apply-fixes или --cleanuppush-fixes наpull-request : Создайте новую ветку с исправлениями и создайте запрос на тягу в исходную веткуbranch : нажимайте исправления в исходную ветку. Кроме того, установите pr-mode false : В настоящее время этот режим не поддерживается для применения исправлений.contents: write , pull-requests: write , checks: write )pull-request для свойства push-fixes : Разрешите действия GitHub для создания и утверждения запросов на привлечениеПример конфигурации:
- name : Qodana Scan
uses : JetBrains/[email protected]
with :
pr-mode : false
args : --apply-fixes
push-fixes : pull-request
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}Примечание Qodana может автоматически изменять не только код, но и конфигурацию в
.idea: Если вы не хотите нажимать эти изменения, добавьте.ideaв свой файл.gitignore.
Если вы хотите выполнить различные операции git на одной и той же работе, вы можете отключить push-fixes и выполнять разыскиваемые операции вручную
name : Qodana
on :
workflow_dispatch :
pull_request :
push :
branches :
- master
- ' releases/* '
jobs :
qodana :
runs-on : ubuntu-latest
permissions :
contents : write
pull-requests : write
checks : write
steps :
- uses : actions/checkout@v3
with :
ref : ${{ github.event.pull_request.head.sha }}
fetch-depth : 0
- name : ' Qodana Scan '
uses : JetBrains/[email protected]
with :
args : --cleanup
- run : |
git config user.name github-actions
git config user.email [email protected]
git checkout -b quick-fixes-$GITHUB_RUN_ID
git add -- . ':!.idea'
git commit -m "I fixed some issues"
git push origin quick-fixes-$GITHUB_RUN_ID
gh pr create --repo $GITHUB_REPOSITORY --base $GITHUB_REF_NAME --head quick-fixes-$GITHUB_RUN_ID --title "Pull requests" --body "I fixed some issues"
env:
GH_TOKEN: ${{ github.token }} Вы можете настроить сканирование кода GitHub для вашего проекта с помощью Qodana. Чтобы сделать это, добавьте эти строки в файл рабочего процесса code_quality.yml прямо под основной конфигурацией сканирования Qodana:
- uses : github/codeql-action/upload-sarif@v2
with :
sarif_file : ${{ runner.temp }}/qodana/results/qodana.sarif.json Этот образец вызывает codeql-action для загрузки отчета о Qudana, форматированном сариф, в GitHub и указывает файл отчета с помощью ключа sarif_file .
Сканирование кода Github не экспортирует результаты проверки в сторонние инструменты, что означает, что вы не можете использовать эти данные для дальнейшей обработки Qodana. В этом случае вам необходимо настроить базовую и качественную обработку затвора на стороне Qodana перед тем, как представить результаты проверки на сканирование кода GitHub, для получения подробной информации см. Качественные затворы и базовый раздел.
Вы можете обеспечить соблюдение GitHub, чтобы заблокировать слияние запросов на вытягивание, если ворота качества Qodana не удалось. Для этого создайте правило защиты ветви, как описано ниже:
pull_request , которые нацелены на main ветвь. on :
pull_request :
branches :
- main Вместо main вы можете указать свою филиал здесь.
fail-threshold Qodana.main к шаблону названия ветви .Qodana , затем проверьте его.Вы можете объединить качественные ворота и базовые функции для управления вашим техническим долгом, сообщать только о новых проблемах и блокировать запросы на привлечение, которые содержат слишком много проблем.
Следуйте этим шагам, чтобы установить базовую линию для вашего проекта:
cd project
qodana scan --show-report Откройте свой отчет по адресу http://localhost:8080/ , добавьте обнаруженные проблемы в базовую линию и загрузите файл qodana.sarif.json .
Загрузите файл qodana.sarif.json в папку корневой проекта на GitHub.
Append --baseline,qodana.sarif.json Аргумент к параметрам AGRAMES args code_quality.yml PARAMATER.
- name : Qodana Scan
uses : JetBrains/qodana-action@main
with :
args : --baseline,qodana.sarif.jsonЕсли вы хотите обновить базовую линию, вам нужно повторить эти шаги еще раз.
Начиная с этого, GitHub будет генерировать изменение только для проблем, которые не были добавлены в базовый уровень как новый.
Чтобы установить качественный ворот дополнительно к базовой линии, добавьте эту строку в code_quality.yml сразу после линии baseline-path :
fail-threshold : <number-of-accepted-problems> Основываясь на этом, вы сможете обнаружить только новые проблемы в запросах, которые выходят за рамки базовой линии. В то же время, запросы на то, что будут заблокированы с новыми проблемами, превышающими ограничение fail-threshold , и рабочий процесс потерпит неудачу.
Вы можете настроить значок рабочего процесса Qodana в своем хранилище, чтобы сделать это, выполнить эти шаги:

Скорее всего, вам не понадобятся другие варианты, кроме args : все другие варианты могут быть полезны, если вы настраиваете несколько заданий сканирования Qodana в одном рабочем процессе.
with для определения любых параметров действия:
with :
args : --baseline,qodana.sarif.json
cache-default-branch-only : true| Имя | Описание | Значение по умолчанию |
|---|---|---|
args | Дополнительные аргументы команды scan CLI, разделите аргументы с запятыми ( , ), например -i,frontend,--print-problems . Необязательный. | - |
results-dir | Каталог для хранения результатов анализа. Необязательный. | ${{ runner.temp }}/qodana/results |
upload-result | Загрузите результаты Qodana (SARIF, другие артефакты, журналы) в качестве артефакта на работу. Необязательный. | false |
artifact-name | Укажите название артефакта результатов Qodana, используемое для загрузки результатов. Необязательный. | qodana-report |
cache-dir | Справочник для хранения кеша QACHE. Необязательный. | ${{ runner.temp }}/qodana/caches |
use-caches | Используйте кеши GitHub для пробежек Qodana. Необязательный. | true |
primary-cache-key | Установите основной ключ кэша. Необязательный. | qodana-2024.3-${{ github.ref }}-${{ github.sha }} |
additional-cache-key | Установите дополнительный ключ кеша. Необязательный. | qodana-2024.3-${{ github.ref }} |
cache-default-branch-only | Загрузите кэш только для ветви по умолчанию. Необязательный. | false |
use-annotations | Используйте аннотацию, чтобы отметить результаты в пользовательском интерфейсе GitHub. Необязательный. | true |
pr-mode | Проанализируйте только измененные файлы в запросе вытягивания. Необязательный. | true |
post-pr-comment | Разместите комментарий с резюме результатов Qodana к запросу. Необязательный. | true |
github-token | Github токен для доступа к репозитории: Post Annotations, Comments. Необязательный. | ${{ github.token }} |
push-fixes | Нажмите на исправление Qodana в репозиторий, не может быть none , branch в текущую ветвь или pull-request . Необязательный. | none |
Все проблемы, запросы на функции и поддержка, связанные с Qodana, решаются на YouTrack.
Если вы хотите подать новую проблему, используйте ссылку YouTrack | Новый выпуск.