mlx.coverity


Namemlx.coverity JSON
Version 1.0.1 PyPI version JSON
download
home_pagehttps://github.com/melexis/sphinx-coverity-extension
SummarySphinx coverity extension from Melexis
upload_time2023-04-27 08:40:51
maintainer
docs_urlNone
authorCrt Mori
requires_python
licenseGNU General Public License v3 (GPLv3)
keywords coverity reporting restructuredtext coverity report sphinx aspice iso26262 asil
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. image:: https://img.shields.io/badge/License-GPL%20v3-blue.svg
    :target: https://www.gnu.org/licenses/gpl-3.0
    :alt: GPL3 License

.. image:: https://badge.fury.io/py/mlx.coverity.svg
    :target: https://badge.fury.io/py/mlx.coverity
    :alt: Pypi packaged release

.. image:: https://github.com/melexis/sphinx-coverity-extension/actions/workflows/python-package.yml/badge.svg?branch=master
    :target: https://github.com/melexis/sphinx-coverity-extension/actions/workflows/python-package.yml
    :alt: Build status

.. image:: https://img.shields.io/badge/Documentation-published-brightgreen.svg
    :target: https://melexis.github.io/sphinx-coverity-extension/
    :alt: Documentation

.. image:: https://codecov.io/gh/melexis/sphinx-coverity-extension/branch/master/graph/badge.svg
    :target: https://codecov.io/gh/melexis/sphinx-coverity-extension
    :alt: Code Coverage

.. image:: https://codeclimate.com/github/melexis/sphinx-coverity-extension/badges/gpa.svg
    :target: https://codeclimate.com/github/melexis/sphinx-coverity-extension
    :alt: Code Climate Status

.. image:: https://codeclimate.com/github/melexis/sphinx-coverity-extension/badges/issue_count.svg
    :target: https://codeclimate.com/github/melexis/sphinx-coverity-extension
    :alt: Issue Count

.. image:: https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat
    :target: https://github.com/melexis/sphinx-coverity-extension/issues
    :alt: Contributions welcome

======================
Sphinx Coverity plugin
======================

Publish Coverity report along your documentation - up-to-date at every build. Include comments and other special data
in the same table and draw some nice graphs to showcase the quality.

----
Goal
----

Coverity's reporting capabilities enable you to export data into separate documentation. While this might be preferred,
it is also detached from your software documentation. Another lack is that it does not include comments or any
other special fields. That means you can end up with a huge amount of intentionally triaged defects, without any
explanation why they are intentional. Because of that, you cannot link your explanations for actions to that report and
numbers could mean just anything. This plugin should enable simple and seamless Coverity reporting integration into
existing Sphinx documentation. Generating a reStructuredText table of defects was one option, but that allows changing
before it is rendered, so to provide a more trustworthy path, this plugin retrieves the data through Coverity API and
generates/renders documentation via Sphinx without intermediate (editable) artifacts.

.. _coverity_installing:

----------
Installing
----------

.. code-block::

    pip install mlx.coverity

.. _coverity_config:

-------------
Configuration
-------------

The *conf.py* file contains the documentation configuration for your project. This file needs to be equipped in order
to configure the Coverity plugin.

First, the plugin needs to be enabled in the *extensions* variable:

.. code-block::

    extensions = [
        'mlx.coverity',
        ...
    ]

.. _coverity_credentials:

Credentials
===========

Python variable *coverity_credentials* should be defined in order to override the default configuration of the Coverity
plugin.

Example of custom credentials for the plugin:

.. code-block:: python

    coverity_credentials = {
        'hostname': 'scan.coverity.com',
        'port': '8080',
        'transport': 'http',
        'username': 'reporter',
        'password': 'coverity',
        'stream': 'some_coverity_stream',
    }

Link to traceability items
==========================

The plugin can be linked to `Traceability extension`_. This means that this plugin can link to traceability items in the
description of Coverity defects by creating a reference in the docnode. Python variable *TRACEABILITY_ITEM_ID_REGEX*
should be defined in order to override the default regular expression below. An empty string as regex will disable this
feature.

.. code-block:: python

    TRACEABILITY_ITEM_ID_REGEX = r"([A-Z_]+-[A-Z0-9_]+)"

Alter links to traceability items
=================================

If the item ID matched by *TRACEABILITY_ITEM_ID_REGEX* is incorrect, e.g. it does not exist in the collection of
traceability items, you can configure the plugin to link to the desired item ID instead.
Add the item ID returned by Coverity as a key to the Python dictionary *TRACEABILITY_ITEM_ID_REGEX* and the desired
item ID as value.

.. code-block:: python

    TRACEABILITY_ITEM_RELINK = {
        "STATIC_DEVIATE-MISRA_RULE_1_0": "STATIC_DEVIATE-MISRA_1_0",
    }

Default config
==============

The plugin itself holds a default config that can be used for any Coverity project:

.. code-block:: python

    coverity_credentials = {
        'hostname': 'scan.coverity.com',
        'port': '8080',
        'transport': 'http',
        'username': 'reporter',
        'password': 'coverity',
        'stream': 'some_coverity_stream',
    }

    TRACEABILITY_ITEM_ID_REGEX = r"([A-Z_]+-[A-Z0-9_]+)"
    TRACEABILITY_ITEM_RELINK = {}

This default configuration, which is built into the plugin, can be overridden through the *conf.py* of your project.


-----
Usage
-----

Inside your reStructuredText file you can call a block `.. coverity-list:`, which will generate the table
with title and defined columns. For example, to display CID, Classification, Action and Comment columns, while
filtering classification items with value `Bug`, you should use the following snippet:

.. code-block:: python

    .. coverity-list:: Custom table title
        :col: CID,Classification,Action,Comment
        :widths: 10 20 20 50
        :classification: Bug

The plugin will then automatically replace this block with the table queried from the Coverity server.

You can also call this block `.. coverity-list:` to generate a pie chart. For example, to label the amount of items
classified as Intentional and the amount of items classified as Pending or Unclassified, while filtering classification
items, you should use the following snippet:

.. code-block:: python

    .. coverity-list:: Custom chart title
        :chart: classification:Intentional,Pending+Unclassified
        :classification: Bug,Intentional,Pending,Unclassified

The plugin allows the use of both display options, `col`and `chart`, at the same time as well. In that case, they share
all filtering options.

Attributes to coverity-list
===========================

Block `coverity-list` takes below attributes to provide better granularity and filtering of the displayed information.
Keep in mind that all the attributes are to be encapsulated by `:`. Almost all parameters are passed in CSV format
(comma-separated without any spaces).

col
---

List column names of the table. They should match the columns inside Coverity. The list is comma-separated without
any spaces. Possible Keywords are (but not limited, since Coverity has option to create custom names):

    - `CID`: Coverity defect ID
    - `Location`: Coverity defect location consisting of file path and line number
    - `Classification`: Coverity defect Classification column
    - `Action`: Coverity defect Action information
    - `Checker`: Coverity defect Checker
    - `Status`: Coverity defect Triage status
    - `Comment`: Coverity defect last Comment
    - `Reference`: Coverity defect external references
    - ...

This `col` option is optional. If the `chart` option is used, the table won't be generated. If the `chart` option is not
used, default columns are used to generate the table, i.e. `CID,Classification,Action,Comment`.

widths
------

Optional attribute that provides possibility to set each column width to a predefined percentage. This makes it nicer
for the pdf builders that are able to fit the table to the printable page width and, because of longtable, also provide
nice table continuation through multiple pages. Its parameters must be a space-separated list of integers.

classification
--------------

Filtering by classification based on the text following the attribute. The text can be anything you desire, but the
default list includes:

    - `Unclassified`
    - `Pending`
    - `False Positive`
    - `Intentional`
    - `Bug`

checker
-------

Filtering by checker based on the text following the attribute. The text can be anything you desire. Regular expressions
work for this attribute, e.g. `MISRA`.

chart
-----

This optional, second display option will draw a pie chart that visualizes the amount of results for each allowed
`<<attribute>>` option. Firstly, the attribute can be specified, followed by a colon `:`. The default attribute is
`classification`. Secondly, you have two optoins. Either you specify a list of attribue values, comma-separated or even
plus-sign-separated for a merge into the same slice, or else you define the minimum threshold of defects with the same
attribute value that needs to be reached for them to be grouped together into a slice. All other defects get labeled as
Other. For example, to visualize the most prevalent MISRA violations with a grouping threshold of 50 items, you should
use the following code snippet:

.. code-block:: python

    .. coverity-list:: Chart of the most prevalent MISRA violations
        :chart: checker:50
        :checker: MISRA

-------------
Contributions
-------------

We welcome any contributions to this plugin. Do not be shy and open a pull request. We will try to do our best to help
you include your contribution to our repository. Keep in mind that reporting a bug or requesting a feature is also a
nice gesture and considered as contribution, even if you do not have development skills to implement it.

-----------------
Development setup
-----------------

To run tests and checks we use tox.

.. code-block:: bash

    # to install tox
    pip3 install tox

    # to run tests
    tox

To build example locally you will need to install some dependencies and set your environment.

.. code-block:: bash

    # install current package locally and its dependencies
    pip3 install -e .

    # copy example .env to your .env
    cp example/.env.example .env

    # add env variables, adjust the values in .env
    # build
    make -C example/ html

.. _`Traceability extension`: https://github.com/melexis/sphinx-traceability-extension/



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/melexis/sphinx-coverity-extension",
    "name": "mlx.coverity",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "coverity,reporting,reStructuredText coverity report,sphinx,ASPICE,ISO26262,ASIL",
    "author": "Crt Mori",
    "author_email": "cmo@melexis.com",
    "download_url": "https://files.pythonhosted.org/packages/b5/bf/2810d27c41bc246c7eacca6ad1a9c7432a3a2f9aab00a174a6a9c62a0f97/mlx.coverity-1.0.1.tar.gz",
    "platform": "any",
    "description": ".. image:: https://img.shields.io/badge/License-GPL%20v3-blue.svg\n    :target: https://www.gnu.org/licenses/gpl-3.0\n    :alt: GPL3 License\n\n.. image:: https://badge.fury.io/py/mlx.coverity.svg\n    :target: https://badge.fury.io/py/mlx.coverity\n    :alt: Pypi packaged release\n\n.. image:: https://github.com/melexis/sphinx-coverity-extension/actions/workflows/python-package.yml/badge.svg?branch=master\n    :target: https://github.com/melexis/sphinx-coverity-extension/actions/workflows/python-package.yml\n    :alt: Build status\n\n.. image:: https://img.shields.io/badge/Documentation-published-brightgreen.svg\n    :target: https://melexis.github.io/sphinx-coverity-extension/\n    :alt: Documentation\n\n.. image:: https://codecov.io/gh/melexis/sphinx-coverity-extension/branch/master/graph/badge.svg\n    :target: https://codecov.io/gh/melexis/sphinx-coverity-extension\n    :alt: Code Coverage\n\n.. image:: https://codeclimate.com/github/melexis/sphinx-coverity-extension/badges/gpa.svg\n    :target: https://codeclimate.com/github/melexis/sphinx-coverity-extension\n    :alt: Code Climate Status\n\n.. image:: https://codeclimate.com/github/melexis/sphinx-coverity-extension/badges/issue_count.svg\n    :target: https://codeclimate.com/github/melexis/sphinx-coverity-extension\n    :alt: Issue Count\n\n.. image:: https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat\n    :target: https://github.com/melexis/sphinx-coverity-extension/issues\n    :alt: Contributions welcome\n\n======================\nSphinx Coverity plugin\n======================\n\nPublish Coverity report along your documentation - up-to-date at every build. Include comments and other special data\nin the same table and draw some nice graphs to showcase the quality.\n\n----\nGoal\n----\n\nCoverity's reporting capabilities enable you to export data into separate documentation. While this might be preferred,\nit is also detached from your software documentation. Another lack is that it does not include comments or any\nother special fields. That means you can end up with a huge amount of intentionally triaged defects, without any\nexplanation why they are intentional. Because of that, you cannot link your explanations for actions to that report and\nnumbers could mean just anything. This plugin should enable simple and seamless Coverity reporting integration into\nexisting Sphinx documentation. Generating a reStructuredText table of defects was one option, but that allows changing\nbefore it is rendered, so to provide a more trustworthy path, this plugin retrieves the data through Coverity API and\ngenerates/renders documentation via Sphinx without intermediate (editable) artifacts.\n\n.. _coverity_installing:\n\n----------\nInstalling\n----------\n\n.. code-block::\n\n    pip install mlx.coverity\n\n.. _coverity_config:\n\n-------------\nConfiguration\n-------------\n\nThe *conf.py* file contains the documentation configuration for your project. This file needs to be equipped in order\nto configure the Coverity plugin.\n\nFirst, the plugin needs to be enabled in the *extensions* variable:\n\n.. code-block::\n\n    extensions = [\n        'mlx.coverity',\n        ...\n    ]\n\n.. _coverity_credentials:\n\nCredentials\n===========\n\nPython variable *coverity_credentials* should be defined in order to override the default configuration of the Coverity\nplugin.\n\nExample of custom credentials for the plugin:\n\n.. code-block:: python\n\n    coverity_credentials = {\n        'hostname': 'scan.coverity.com',\n        'port': '8080',\n        'transport': 'http',\n        'username': 'reporter',\n        'password': 'coverity',\n        'stream': 'some_coverity_stream',\n    }\n\nLink to traceability items\n==========================\n\nThe plugin can be linked to `Traceability extension`_. This means that this plugin can link to traceability items in the\ndescription of Coverity defects by creating a reference in the docnode. Python variable *TRACEABILITY_ITEM_ID_REGEX*\nshould be defined in order to override the default regular expression below. An empty string as regex will disable this\nfeature.\n\n.. code-block:: python\n\n    TRACEABILITY_ITEM_ID_REGEX = r\"([A-Z_]+-[A-Z0-9_]+)\"\n\nAlter links to traceability items\n=================================\n\nIf the item ID matched by *TRACEABILITY_ITEM_ID_REGEX* is incorrect, e.g. it does not exist in the collection of\ntraceability items, you can configure the plugin to link to the desired item ID instead.\nAdd the item ID returned by Coverity as a key to the Python dictionary *TRACEABILITY_ITEM_ID_REGEX* and the desired\nitem ID as value.\n\n.. code-block:: python\n\n    TRACEABILITY_ITEM_RELINK = {\n        \"STATIC_DEVIATE-MISRA_RULE_1_0\": \"STATIC_DEVIATE-MISRA_1_0\",\n    }\n\nDefault config\n==============\n\nThe plugin itself holds a default config that can be used for any Coverity project:\n\n.. code-block:: python\n\n    coverity_credentials = {\n        'hostname': 'scan.coverity.com',\n        'port': '8080',\n        'transport': 'http',\n        'username': 'reporter',\n        'password': 'coverity',\n        'stream': 'some_coverity_stream',\n    }\n\n    TRACEABILITY_ITEM_ID_REGEX = r\"([A-Z_]+-[A-Z0-9_]+)\"\n    TRACEABILITY_ITEM_RELINK = {}\n\nThis default configuration, which is built into the plugin, can be overridden through the *conf.py* of your project.\n\n\n-----\nUsage\n-----\n\nInside your reStructuredText file you can call a block `.. coverity-list:`, which will generate the table\nwith title and defined columns. For example, to display CID, Classification, Action and Comment columns, while\nfiltering classification items with value `Bug`, you should use the following snippet:\n\n.. code-block:: python\n\n    .. coverity-list:: Custom table title\n        :col: CID,Classification,Action,Comment\n        :widths: 10 20 20 50\n        :classification: Bug\n\nThe plugin will then automatically replace this block with the table queried from the Coverity server.\n\nYou can also call this block `.. coverity-list:` to generate a pie chart. For example, to label the amount of items\nclassified as Intentional and the amount of items classified as Pending or Unclassified, while filtering classification\nitems, you should use the following snippet:\n\n.. code-block:: python\n\n    .. coverity-list:: Custom chart title\n        :chart: classification:Intentional,Pending+Unclassified\n        :classification: Bug,Intentional,Pending,Unclassified\n\nThe plugin allows the use of both display options, `col`and `chart`, at the same time as well. In that case, they share\nall filtering options.\n\nAttributes to coverity-list\n===========================\n\nBlock `coverity-list` takes below attributes to provide better granularity and filtering of the displayed information.\nKeep in mind that all the attributes are to be encapsulated by `:`. Almost all parameters are passed in CSV format\n(comma-separated without any spaces).\n\ncol\n---\n\nList column names of the table. They should match the columns inside Coverity. The list is comma-separated without\nany spaces. Possible Keywords are (but not limited, since Coverity has option to create custom names):\n\n    - `CID`: Coverity defect ID\n    - `Location`: Coverity defect location consisting of file path and line number\n    - `Classification`: Coverity defect Classification column\n    - `Action`: Coverity defect Action information\n    - `Checker`: Coverity defect Checker\n    - `Status`: Coverity defect Triage status\n    - `Comment`: Coverity defect last Comment\n    - `Reference`: Coverity defect external references\n    - ...\n\nThis `col` option is optional. If the `chart` option is used, the table won't be generated. If the `chart` option is not\nused, default columns are used to generate the table, i.e. `CID,Classification,Action,Comment`.\n\nwidths\n------\n\nOptional attribute that provides possibility to set each column width to a predefined percentage. This makes it nicer\nfor the pdf builders that are able to fit the table to the printable page width and, because of longtable, also provide\nnice table continuation through multiple pages. Its parameters must be a space-separated list of integers.\n\nclassification\n--------------\n\nFiltering by classification based on the text following the attribute. The text can be anything you desire, but the\ndefault list includes:\n\n    - `Unclassified`\n    - `Pending`\n    - `False Positive`\n    - `Intentional`\n    - `Bug`\n\nchecker\n-------\n\nFiltering by checker based on the text following the attribute. The text can be anything you desire. Regular expressions\nwork for this attribute, e.g. `MISRA`.\n\nchart\n-----\n\nThis optional, second display option will draw a pie chart that visualizes the amount of results for each allowed\n`<<attribute>>` option. Firstly, the attribute can be specified, followed by a colon `:`. The default attribute is\n`classification`. Secondly, you have two optoins. Either you specify a list of attribue values, comma-separated or even\nplus-sign-separated for a merge into the same slice, or else you define the minimum threshold of defects with the same\nattribute value that needs to be reached for them to be grouped together into a slice. All other defects get labeled as\nOther. For example, to visualize the most prevalent MISRA violations with a grouping threshold of 50 items, you should\nuse the following code snippet:\n\n.. code-block:: python\n\n    .. coverity-list:: Chart of the most prevalent MISRA violations\n        :chart: checker:50\n        :checker: MISRA\n\n-------------\nContributions\n-------------\n\nWe welcome any contributions to this plugin. Do not be shy and open a pull request. We will try to do our best to help\nyou include your contribution to our repository. Keep in mind that reporting a bug or requesting a feature is also a\nnice gesture and considered as contribution, even if you do not have development skills to implement it.\n\n-----------------\nDevelopment setup\n-----------------\n\nTo run tests and checks we use tox.\n\n.. code-block:: bash\n\n    # to install tox\n    pip3 install tox\n\n    # to run tests\n    tox\n\nTo build example locally you will need to install some dependencies and set your environment.\n\n.. code-block:: bash\n\n    # install current package locally and its dependencies\n    pip3 install -e .\n\n    # copy example .env to your .env\n    cp example/.env.example .env\n\n    # add env variables, adjust the values in .env\n    # build\n    make -C example/ html\n\n.. _`Traceability extension`: https://github.com/melexis/sphinx-traceability-extension/\n\n\n",
    "bugtrack_url": null,
    "license": "GNU General Public License v3 (GPLv3)",
    "summary": "Sphinx coverity extension from Melexis",
    "version": "1.0.1",
    "split_keywords": [
        "coverity",
        "reporting",
        "restructuredtext coverity report",
        "sphinx",
        "aspice",
        "iso26262",
        "asil"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "311daab9013f77c69867ef55ef6e8e1bcabd432f5dd66fccec3eb2c86777135d",
                "md5": "765f395870392e9d4d9fef47771833aa",
                "sha256": "055d79863d365be84421457aca308d8dc6911f32540c0ab8232ae286cb649066"
            },
            "downloads": -1,
            "filename": "mlx.coverity-1.0.1-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "765f395870392e9d4d9fef47771833aa",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": null,
            "size": 33326,
            "upload_time": "2023-04-27T08:40:49",
            "upload_time_iso_8601": "2023-04-27T08:40:49.497482Z",
            "url": "https://files.pythonhosted.org/packages/31/1d/aab9013f77c69867ef55ef6e8e1bcabd432f5dd66fccec3eb2c86777135d/mlx.coverity-1.0.1-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b5bf2810d27c41bc246c7eacca6ad1a9c7432a3a2f9aab00a174a6a9c62a0f97",
                "md5": "4c20be241b72a290447f032b6d1b75ff",
                "sha256": "008df6884dd84a2ed573982bdb8f6de9e610df1f32fbd70d854f907f55466eeb"
            },
            "downloads": -1,
            "filename": "mlx.coverity-1.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "4c20be241b72a290447f032b6d1b75ff",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 68976,
            "upload_time": "2023-04-27T08:40:51",
            "upload_time_iso_8601": "2023-04-27T08:40:51.506582Z",
            "url": "https://files.pythonhosted.org/packages/b5/bf/2810d27c41bc246c7eacca6ad1a9c7432a3a2f9aab00a174a6a9c62a0f97/mlx.coverity-1.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-04-27 08:40:51",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "melexis",
    "github_project": "sphinx-coverity-extension",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "mlx.coverity"
}
        
Elapsed time: 0.05874s