Running Analysis Commands

Analysis commands run in our regular build environment and are just regular commands that produce one of our supported output formats like checkstyle. A command can either be some script you have written or a Scrutinizer analysis or another open-source analysis tool.

For some analysis tools (Scrutinizer's own analysis and some open-source tools), we provide lightweight shell script wrappers that wrap the real analysis command and automatically set-up its output format and result file options.

If your analysis tool is not among these analysis tools, it is still fully supported on Scrutinizer except that you need to manually define the file and format options for the command below.

Configuration

The analysis command is run just like any other command except that a new key analysis is added to your command hash. Under that analysis key, we define where the platform should look for the output of the tool and what format the output has. Once, the command has been run, the platform will automatically pick up the output at this location and then process it further.

build:
  nodes:
    analysis:
      tests:
        override:
          - command: ./run-my-analysis --result-file=output.xml
            analysis:
              file: output.xml                 # Where the output is written
              format: 'general-checkstyle'     # The format that this file has. Currently
                                               # the common checkstyle format is supported.

If a tool pipes output to STDOUT, you can redirect the output to file like this:

build:
  nodes:
    analysis:
      tests:
        override:
          - command: ./run-my-analysis > analysis-output.xml
            analysis:
              file: analysis-output.xml
              format: 'general-checkstyle'

Output

The output of the command is expected to be a checkstyle XML file. The structure should roughly look as follows:

<?xml version="1.0" encoding="UTF-8"?>
<checkstyle version="1.0.0">
    <file name="/path/to/code/myfile.php">
        <error line="2"  message="msg1" source="Ruleset.RuleName"/>
        <error line="20"  message="msg2" source="Generic.Constant"/>
        <error line="47"  message="msg3" source="ScopeIndent"/>
        <error line="47" message="msg4" source="Format.MultipleAlignment"/>
        <error line="51" message="msg5" source="Comment.FunctionComment"/>
    </file>
</checkstyle>