Cómo ver hermosos informes de errores en GitHub con SARIF

Usas GitHub, escribes código y haces otras cosas divertidas. Para mejorar la calidad de su trabajo y optimizar su tiempo, utilice un analizador estático. Y luego tienes una idea: ¿por qué no mirar los errores generados por el analizador directamente en GitHub? Y también para que luzca hermosa. ¿Qué hacer en este caso? La respuesta es muy simple. Tu elección es SARIF. Qué es, cómo configurarlo y se discutirá en este artículo. Disfruta leyendo.





¿Qué es SARIF?

SARIF (Static Analysis Results Interchange Format) – JSON . , , - , GitHub Visual Studio Code.





- , . , (, JSON), . .





(SARIF) , . . , , SARIF . , . , , \, . !





GitHub

GitHub SARIF , . .





, "Security".





"Code scanning alerts" "Set up code scanning".





"Set up this workflow".





yml ( upload-sarif.yml) :





name: "Upload SARIF"

# Run workflow each time code is pushed to your repository and on a schedule.
# The scheduled workflow runs every at 00:00 on Sunday UTC time.
on:
  push:
  schedule:
  - cron: '0 0 * * 0'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    # This step checks out a copy of your repository.
    - name: Checkout repository
      uses: actions/checkout@v2
    - name: Upload SARIF file
      uses: github/codeql-action/upload-sarif@v1
      with:
        # Path to SARIF file relative to the root of the repository
        sarif_file: results.sarif

      
      



:





"Start commit", - ( "Create upload-sarif.yml") .





, ! SARIF .





SARIF

, SARIF – , . PVS-Studio PlogConverter. – .





SARIF , . ++ . - ? :) :





#include <iostream>
void f(unsigned int ch) 
{
  unsigned int chx = -1;
  if (ch >= 0x0fff0)
  {
    if ( !((ch >= 0x0FF10) && (ch <= 0x0FF19)) 
       || ((ch >= 0x0FF21) && (ch <= 0x0FF3A)) 
       || ((ch >= 0x0FF41) && (ch <= 0x0FF5A)))
    {
      ch = chx;
    }
  }
}
int main()
{
  std::cout << "error" << std::endl;
}

      
      



, , " PVS-Studio , ".





, PVS-Studio. - "PVS-Studio_Cmd.exe". C++, C# MSBuild- Windows. "C:\Program Files (x86)\PVS-Studio". .





, . , , , .





, . :





PVS-Studio_Cmd.exe -t "D:\Use_SARIF_Example\BestProjectCpp.sln" \
-o "D:\Use_SARIF_Example\results.plog" -e "D:\Use_SARIF_Example\"

      
      



. "-t" . (sln csproj/vcxproj ). "-o" , . "-e" - , PVS-Studio . , .





, plog SARIF . PlogConverter.





Plog SARIF

PlogConverter, . PlogConverter – , PVS-Studio . .





, PlogConverter.exe . PVS-Studio "PVS-Studio_Cmd.exe". , :





PlogConverter.exe "D:\Use_SARIF_Example\results.plog" \
-o "D:\Use_SARIF_Example" -t sarif -n results

      
      



. .





,

, , SARIF . "Add file -> Upload files".





SARIF , . , , "Actions" .





, "Security". "Code scanning alerts -> PVS-Studio".





. - :





:





  1. ;





  2. . , ;





  3. .





SARIF GitHub

, . , , - , SARIF . , , . C++ :





#include <iostream>
void f(unsigned int ch) 
{
  unsigned int chx = -1;
  if (ch >= 0x0fff0)
  {
    if (!((ch >= 0x0FF10) && (ch <= 0x0FF19)) 
      || ((ch >= 0x0FF21) && (ch <= 0x0FF3A)) 
      || ((ch >= 0x0FF41) && (ch <= 0x0FF5A)))
    {
      ch = chx;
    }
  }
}

int ComputeProjectionMatrixFOV(float fov)
{
  float yScale = 1.0 / tan((3.141592538 / 180.0) * fov / 2);
  return yScale;
}

int main()
{
  std::cout << "error" << std::endl;
}

      
      



, , SARIF ( ) . , . .





. "Security" -> "Code scanning alerts" -> "PVS-Studio" "Branch" . :





, . , . , , bat , , SARIF SARIF .





?

, . ? , , — , . "Open" "Closed". "Open" — , . "Closed" – , .





— (, ).





. , .





GitHub "false positive", "used in tests", "won't fix" :). , ( checkbox) "Dismiss".





, , SARIF .





"Open", . "Closed", , , "Reopen".





, , . , "Open", , "Closed". SARIF . pull request, . , . SARIF pull request .





C++?

, . , – , SARIF . , PVS-Studio C++, C#, Java. C#, . , , C# . , :





using System;
using System.Collections.Generic;
using System.Linq;

namespace TestSarif
{
  class Program
  {
    static void Main()
    {
      var result = Formula42(3, 5);
    }

    static int Formula42(int? coefficientA, int? coefficientB)
    {
      var data = new List<int>();
      if (coefficientA != null)
        data.Add(Formula42(coefficientA.Value));
      else if (coefficientB != null)
        data.Add(Formula42(coefficientA.Value));
      return data.SingleOrDefault();
    }

    static private int Formula42(int coefficient)
    {
      return coefficient;
    }
  }
}

      
      



:





.





, , SARIF — , . SARIF . , VS Code . , , , . , - , .





. .





, : Nikolay Mironov, Evgeniy Ovsannikov. How to Get Nice Error Reports Using SARIF.








All Articles