Qodana es una herramienta de monitoreo de calidad de código que identifica y sugiere correcciones de errores, vulnerabilidades de seguridad, duplicaciones e imperfecciones.
Tabla de contenido
La acción GitHub de Qodana Scan le permite ejecutar Qodana en un repositorio de GitHub.
Para configurar Qodana Scan, guarde el archivo .github/workflows/code_quality.yml que contiene la configuración de flujo de trabajo:
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 Para establecer la variable de entorno QODANA_TOKEN en la configuración de compilación:
QODANA_TOKEN y guarde el token del proyecto como su valor.QODANA_TOKEN a la sección env del paso Qodana Scan :Usando este flujo de trabajo, Qodana se ejecutará en la rama principal, las ramas de lanzamiento y las solicitudes de extracción que llegan a su repositorio.
Nota: fetch-depth: 0 es necesario para el pago en caso de que Qodana funcione en el modo de solicitud de extracción (informa los problemas que aparecieron solo en esa solicitud de extracción).
Le recomendamos que tenga un archivo de flujo de trabajo separado para Qodana porque diferentes trabajos se ejecutan en paralelo

Para hacer que Qodana solucione automáticamente problemas encontrados y presione los cambios en su repositorio, debe
fixesStrategy en el archivo qodana.yaml en su repositorio rootargs con la estrategia de fijación rápida para usar: --apply-fixes o --cleanuppush-fixes apull-request : cree una nueva rama con correcciones y cree una solicitud de extracción de la rama originalbranch : empuje correcciones a la rama original. Además, establezca pr-mode en false : Actualmente, este modo no es compatible para aplicar correcciones.contents: write , pull-requests: write , checks: write )pull-request para la propiedad push-fixes : permita que las acciones de GitHub creen y aprueben las solicitudes de extracciónConfiguración de ejemplo:
- name : Qodana Scan
uses : JetBrains/[email protected]
with :
pr-mode : false
args : --apply-fixes
push-fixes : pull-request
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}Nota Qodana podría modificar automáticamente no solo el código, sino también la configuración en
.idea: si no desea presionar estos cambios, agregue.ideaa su archivo.gitignore.
Si desea realizar operaciones git diferentes en el mismo trabajo, puede deshabilitar push-fixes y hacer las operaciones buscadas manualmente
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 }} Puede configurar el escaneo de código GitHub para su proyecto usando Qodana. Para hacerlo, agregue estas líneas al archivo de flujo de trabajo code_quality.yml justo debajo de la configuración básica de Qodana Scan:
- uses : github/codeql-action/upload-sarif@v2
with :
sarif_file : ${{ runner.temp }}/qodana/results/qodana.sarif.json Esta muestra invoca codeql-action para cargar un informe Qodana con formato SARIF a GitHub, y especifica el archivo de informe utilizando la clave sarif_file .
El escaneo de código GitHub no exporta los resultados de la inspección a herramientas de terceros, lo que significa que no puede usar estos datos para un mayor procesamiento de Qodana. En este caso, debe configurar el procesamiento de la línea de base y de calidad en el lado de Qodana antes de enviar los resultados de la inspección al escaneo de código GitHub, consulte la sección de calidad y la sección de referencia para más detalles.
Puede aplicar GitHub para bloquear la fusión de las solicitudes de extracción si la puerta de calidad Qodana ha fallado. Para hacerlo, cree una regla de protección de ramas como se describe a continuación:
pull_request que se dirigen a la rama main . on :
pull_request :
branches :
- main En lugar de main , puede especificar su rama aquí.
fail-threshold de acción Qodana.main a la rama.Qodana , luego verifíquela.Puede combinar la puerta de calidad y las funciones de línea de base para administrar su deuda técnica, informar solo nuevos problemas y bloquear las solicitudes de extracción que contienen demasiados problemas.
Siga estos pasos para establecer una línea de base para su proyecto:
cd project
qodana scan --show-report Abra su informe en http://localhost:8080/ , agregue problemas detectados a la línea de base y descargue el archivo qodana.sarif.json .
Cargue el archivo qodana.sarif.json en la carpeta raíz de su proyecto en GitHub.
Append --baseline,qodana.sarif.json argumento al parámetro de configuración de acción Qodana Scan args en el archivo code_quality.yml :
- name : Qodana Scan
uses : JetBrains/qodana-action@main
with :
args : --baseline,qodana.sarif.jsonSi desea actualizar la línea de base, debe repetir estos pasos una vez más.
A partir de esto, GitHub generará alters solo para los problemas que no se agregaron a la línea de base como nueva.
Para establecer una puerta de calidad adicionalmente a la línea de base, agregue esta línea a code_quality.yml justo después de la línea de la línea baseline-path :
fail-threshold : <number-of-accepted-problems> Según esto, podrá detectar solo nuevos problemas en las solicitudes de extracción que caen más allá de la línea de base. Al mismo tiempo, se bloqueará las solicitudes de extracción con nuevos problemas que exceden el límite fail-threshold , y el flujo de trabajo fallará.
Puede configurar una insignia de flujo de trabajo Qodana en su repositorio, para hacerlo, siga estos pasos:

Lo más probable es que no necesitará otras opciones que args : todas las demás opciones pueden ser útiles si está configurando múltiples trabajos de escaneo Qodana en un flujo de trabajo.
with para definir cualquier parámetro de acción:
with :
args : --baseline,qodana.sarif.json
cache-default-branch-only : true| Nombre | Descripción | Valor predeterminado |
|---|---|---|
args | Argumentos adicionales del comando scan de CLI Qodana, dividen los argumentos con comas ( , ), por ejemplo -i,frontend,--print-problems . Opcional. | - |
results-dir | Directorio para almacenar los resultados del análisis. Opcional. | ${{ runner.temp }}/qodana/results |
upload-result | Cargue los resultados de Qodana (SARIF, otros artefactos, registros) como un artefacto para el trabajo. Opcional. | false |
artifact-name | Especifique el nombre del artefacto de los resultados de Qodana, utilizado para la carga de resultados. Opcional. | qodana-report |
cache-dir | Directorio para almacenar Qodana Cache. Opcional. | ${{ runner.temp }}/qodana/caches |
use-caches | Utilice los cachés de Github para carreras Qodana. Opcional. | true |
primary-cache-key | Establezca la tecla de caché primaria. Opcional. | qodana-2024.3-${{ github.ref }}-${{ github.sha }} |
additional-cache-key | Establezca la tecla de caché adicional. Opcional. | qodana-2024.3-${{ github.ref }} |
cache-default-branch-only | Sube caché solo para la rama predeterminada. Opcional. | false |
use-annotations | Use la anotación para marcar los resultados en la interfaz de usuario de GitHub. Opcional. | true |
pr-mode | Analice solo los archivos cambiados en una solicitud de extracción. Opcional. | true |
post-pr-comment | Publique un comentario con el resumen de resultados de Qodana a la solicitud de extracción. Opcional. | true |
github-token | Token de GitHub para acceder al repositorio: anotaciones post, comentarios. Opcional. | ${{ github.token }} |
push-fixes | Push Qodana corrige al repositorio, puede ser none , branch a la rama actual o pull-request . Opcional. | none |
Todos los problemas, solicitudes de funciones y soporte relacionados con Qodana se manejan en yoTrack.
Si desea presentar un nuevo problema, use el enlace yotrack | Nuevo problema.