Sonarqube unable to parse version 2 xml coverage report

Team,
error: Unknown report version: 2.0.3. This parser only handles version 1.

step 1 : we have bazel setup for repo that generates .dat file in lcov format but sonarqube does not accept this.

./bazel coverage --config=gocov //src/services/guava/... --collect_code_coverage   --combined_report=lcov

Command> cat bazel-out/_coverage/_coverage_report.dat

TN:
SF:src/services/guava/keys/keys.go
DA:16,1
DA:17,1

step 2: so I converted this .dat file to .xml using the python

#pip install lcov_cobertura
#lcov_cobertura bazel-out/_coverage/_coverage_report.dat
coverage.xml

cat coverage.xml

<?xml version="1.0" ?>
<!DOCTYPE coverage
  SYSTEM 'http://cobertura.sourceforge.net/xml/coverage-04.dtd'>
<coverage branch-rate="0.0" branches-covered="0" branches-valid="0" complexity="0" line-rate="0.5936254980079682" lines-covered="447" lines-valid="753" timestamp="1672173715" version="2.0.3">
    <sources>
        <source>.</source>
    </sources>
    <packages>
        <package line-rate="0.7614678899082569" branch-rate="0.0" name="src.services.guava.keys" complexity="0">
            <classes>
                <class branch-rate="0.0" complexity="0" filename="src/services/guava/keys/keys.go" line-rate="0.7614678899082569" name="src.services.guava.keys.keys.go">
                    <methods/>
                    <lines>
                        <line branch="false" hits="1" number="16"/>
                    </lines>
                </class>
            </classes>
        </package>
        <package line-rate="0.744" branch-rate="0.0" name="src.services.guava.server" complexity="0">
            <classes>
                <class branch-rate="0.0" complexity="0" filename="src/services/guava/server/server.go" line-rate="0.744" name="src.services.guava.server.server.go">
                    <methods/>
                    <lines>
                        <line branch="false" hits="1" number="56"/>
                        <line branch="false" hits="1" number="349"/>
                        <line branch="false" hits="1" number="350"/>
                        <line branch="false" hits="1" number="352"/>
                    </lines>
                </class>
            </classes>
        </package>
        <package line-rate="0.5816326530612245" branch-rate="0.0" name="src.services.guava.store.postgres" complexity="0">
            <classes>
                <class branch-rate="0.0" complexity="0" filename="src/services/guava/store/postgres/transaction.go" line-rate="0.5816326530612245" name="src.services.guava.store.postgres.transaction.go">
                    <methods/>
                    <lines>
                        <line branch="false" hits="1" number="19"/>
                        <line branch="false" hits="1" number="152"/>
                        <line branch="false" hits="1" number="153"/>
                    </lines>
                </class>
            </classes>
        </package>
        <package line-rate="0.23529411764705882" branch-rate="0.0" name="src.services.guava.tools.keyrotate" complexity="0">
            <classes>
                <class branch-rate="0.0" complexity="0" filename="src/services/guava/tools/keyrotate/cmd_get.go" line-rate="0.0" name="src.services.guava.tools.keyrotate.cmd_get.go">
                    <methods/>
                    <lines>
                        <line branch="false" hits="0" number="16"/>
                        <line branch="false" hits="0" number="17"/>
                    </lines>
                </class>
                <class branch-rate="0.0" complexity="0" filename="src/services/guava/tools/keyrotate/cmd_rotate.go" line-rate="0.72" name="src.services.guava.tools.keyrotate.cmd_rotate.go">
                    <methods/>
                    <lines>
                        <line branch="false" hits="1" number="16"/>
                        <line branch="false" hits="1" number="75"/>
                    </lines>
                </class>
                <class branch-rate="0.0" complexity="0" filename="src/services/guava/tools/keyrotate/main.go" line-rate="0.0" name="src.services.guava.tools.keyrotate.main.go">
                    <methods/>
                    <lines>
                        <line branch="false" hits="0" number="35"/>
                        <line branch="false" hits="0" number="123"/>
                    </lines>
                </class>
            </classes>
        </package>
        <package line-rate="0.5944055944055944" branch-rate="0.0" name="src.services.guava.vault" complexity="0">
            <classes>
                <class branch-rate="0.0" complexity="0" filename="src/services/guava/vault/vault.go" line-rate="0.5944055944055944" name="src.services.guava.vault.vault.go">
                    <methods/>
                    <lines>                        <line branch="false" hits="1" number="252"/>
                        <line branch="false" hits="1" number="253"/>
                    </lines>
                </class>
            </classes>
        </package>
    </packages>
</coverage>

step 3 : Run scan with this coverage report and scanner complains

INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 19.665s
INFO: Final Memory: 33M/124M
INFO: ------------------------------------------------------------------------
ERROR: Error during SonarScanner execution
ERROR: Error during parsing of the generic coverage report '/Users/coverage.xml'. Look at SonarQube documentation to know the expected XML format.
ERROR: Caused by: Unknown report version: 2.0.3. This parser only handles version 1.

Hey there.

Based on the logs, it appears you’re trying to pass the data to the generic coverage parameter, which isn’t going to be able to read lcov or cobertura reports.

What language(s) are you trying to report coverage on? Only Go?

I have GO, Python, Scala, JS.

Thanks.

Each language that is supported by SonarQube permits a specific report format for importing coverage data – those are documented here alongside some specific documentation to guide you in creating coverage reports for some of the most popular languages.

Cobertura is only supported for Python and Flex.

There is also a generic coverage format that all languages support, and require the coverage format to be produced/transformed into that exact format. It seems that some xslt is available on GitHub for converting Cobertura to the generic coverage format (I have never tried them).