DC007: ReadmeBadges
Overview
| Property | Value |
|---|---|
| ID | DC007 |
| Name | ReadmeBadges |
| Group | documentation |
| Severity | NOTE |
Description
Checks that the README file includes status badges for CI, coverage, or package version.
Badges provide quick visual indicators of project health and status.
What it checks
The check looks for common badge patterns in your README:
- CI status badges (GitHub Actions, Travis, CircleCI, etc.)
- Coverage badges (Codecov, Coveralls)
- PyPI version badges
- Documentation status badges (Read the Docs)
- License badges
It detects badges by looking for:
- Image URLs from badge services (shields.io, img.shields.io, badge.fury.io)
- Common badge markdown/RST patterns
- CI status image URLs
Why it matters
- Project Health - Shows users if tests are passing
- Quality Indicators - Coverage badges show test coverage
- Version Info - PyPI badges show current version
- Professionalism - Well-maintained projects typically have badges
- Trust - Passing CI badges build user confidence
How to fix
Add badges to the top of your README:
Markdown
# My Package
[](https://github.com/username/my-package/actions/workflows/ci.yml)
[](https://codecov.io/gh/username/my-package)
[](https://badge.fury.io/py/my-package)
[](https://opensource.org/licenses/MIT)
[](https://pypi.org/project/my-package)
A brief description of what your package does.reStructuredText
My Package
==========
|CI| |codecov| |PyPI|
.. |CI| image:: https://github.com/username/my-package/actions/workflows/ci.yml/badge.svg
:target: https://github.com/username/my-package/actions/workflows/ci.yml
.. |codecov| image:: https://codecov.io/gh/username/my-package/branch/main/graph/badge.svg
:target: https://codecov.io/gh/username/my-package
.. |PyPI| image:: https://badge.fury.io/py/my-package.svg
:target: https://badge.fury.io/py/my-packageUseful badge services
- Shields.io - Customizable badges for any service
- Badge Fury - PyPI version badges
- Codecov - Coverage badges
- GitHub Actions - Workflow status badges
Configuration
Skip this check
[tool.pycmdcheck]
skip = ["DC007"]CLI
pycmdcheck --skip DC007