Skip to main content

automatically generates your project's coverage badge using the shields.io service, and then updates your README

Project description

Welcome to README Coverage Badger 👋

PyPi PyPI - Python Version Build Status codecov pre-commit.ci status Updates PyPI - Downloads GitHub commits since latest release (by SemVer)

License Code style: black Conventional Commits Commitizen friendly

Generates a coverage badge using coverage.py and the shields.io service. Your README file is then updated with the generated badge.

demo.gif

Source Code: github.com/engineervix/readme-coverage-badger

Contents generated with DocToc

Why this project?

There are so many excellent coverage badge generation tools out there, why do we need another one? Well, at the time of writing this package (circa early 2021), all the existing tools (for example, coverage-badge) I had come across ended at generating SVG/PNG files/strings/Base64 images. What you do with this remains entirely up to you.

Now, it is often much easier to simply use online services such as codecov.io and coveralls.io. These services are free for open source projects, but require a monthly subscription for private repos. Many times, we work on private repos, and we wanna be able to automatically have coverage badges in our READMEs. What if you are unable to pay such subscription fees, or maybe you don't want to use a SaaS? Your solution becomes to generate your own badge!

This is where this project comes in. It automatically generates your project's coverage badge using the shields.io service, and then updates your README accordingly, in just one command! That's all it does, resonating with the Unix philosophy of doing one thing and doing it well. The main idea for this came from istanbul-badges-readme, which does exactly the same thing for JavaScript projects. You will see that these two projects have quite a lot in common.

After using istanbul-badges-readme, I searched for a python alternative but couldn't find anything suitable. The closest I found was coverage-badge, and if you look at this project's code, you will see a lot of similarities with coverage-badge!

If what you're looking for is a powerful, general purpose badge generation tool for your projects, then you should probably check out projects like anybadge and genbadge.

Features

  • automatically generates your project's coverage badge using the shields.io service, and then updates your project's README with the newly generated badge
  • simple CLI tool (readme-cov) with helpful messages
  • tested on python 3.8 to 3.12 with coverage ≥ 84%
  • free software: BSD-3-Clause license
  • generates different colours depending on the coverage percentage. Optionally generate plain colour (green) regardless of percentage
  • minimal external dependencies – this tool only has 2 external dependencies; Coverage.py (obviously!) and colorama (for cross-platform coloured terminal output)

The table below shows the coverage thresholds, associated colours and examples of generated badges:

Coverage Colour Example
0 ≤ coverage < 40 red Code Coverage Red
40 ≤ coverage < 60 orange Code Coverage Orange
60 ≤ coverage < 75 yellow Code Coverage Yellow
75 ≤ coverage < 90 yellowgreen Code Coverage Yellow Green
90 ≤ coverage < 95 green Code Coverage Green
95 ≤ coverage ≤ 100 brightgreen Code Coverage Bright Green

Installation

pip install readme-coverage-badger

Usage

Note: Before using the tool, ensure that you insert a string of the form ![Code Coverage]() or ![Code Coverage](anything here) in your project's README.

readme-cov [-h] [-v] [-p]

optional arguments:
  -h, --help     show the help message and exit
  -v, --version  show program's version number and exit
  -p, --plain    Plain colour mode. Standard green badge.

The tool operates on the basis of the following assumptions:

  • you have a README.md or README file at the root of your project
  • your README file is in markdown format. I know, some Pythonistas prefer restructuredtext! Sadly, this isn't supported (yet)
  • Somewhere in your your README is a string in the form: ![Code Coverage]() or ![Code Coverage](anything here). This is what gets updated in-place (using re.sub()) when the script runs.
  • the script is called from the root of your project repo, which has coverage.py already configured, and the coverage already updated (you have already run your tests prior to running the script)
  • If the coverage badge in your README file is already up to date, your README file won't be updated, you will only be notified

💻 Development

First things first

Getting Started

First, fork this repository, then fire up your command prompt and ...

  1. Clone the forked repository
  2. Navigate to the cloned project directory: cd readme_coverage_badger
  3. activate your python virtual environment and pip install --upgrade pip
  4. Install dependencies: pip install -r requirements_dev.txt
  5. Setup pre-commit by running pre-commit install followed by pre-commit install --hook-type commit-msg. Optionally run pre-commit run --all-files to make sure your pre-commit setup is okay.

At this stage, hopefully everything should be working fine, and you should be able to start hacking on the project.

You can run the application via invoke run or

python readme_coverage_badger/__main__.py

Tests

Simply run pytest or invoke test to run tests in your virtual environment.

Test other Python versions by running tox.

Code Formatting

  • Run invoke lint to run flake8, black, isort and mypy on the code.
  • If you get any errors from black and/or isort, run invoke lint --fix or invoke lint -f so that black and isort can format your files. Alternatively, just run pre-commit. You can take a look at .pre-commit-config.yaml.

Author

👤 Victor Miti

🤝 Contributing

Contributions, issues and feature requests are most welcome! A good place to start is by helping out with the unchecked items in the TODO section of this README!

Feel free to check the issues page and take a look at the contributing guide before you get started. In addition, please note the following:

  • if you're making code contributions, please try and write some tests to accompany your code, and ensure that the tests pass. Also, were necessary, update the docs so that they reflect your changes.
  • commit your changes via cz commit. Follow the prompts. When you're done, pre-commit will be invoked to ensure that your contributions and commits follow defined conventions. See pre-commit-config.yaml for more details.
  • your commit messages should follow the conventions described here. Write your commit message in the imperative: "Fix bug" and not "Fixed bug" or "Fixes bug." This convention matches up with commit messages generated by commands like git merge and git revert. Once you are done, please create a pull request.

Show your support

Please give a ⭐️ if this project helped you!

✅ TODO

core

  • Cater for not only markdown but also restructuredtext, and automatically detect if a file's syntax is markdown or restructuredtext if no extension given
  • Provide option to generate badge in HTML format
  • Provide option to generate to stdout and skip substitution in a README file. This could be useful if you're using the tool in a script and you just want the result so that you can use it elsewhere.
  • Allow for flexibility in choosing whatever colours one wants
  • Allow for specifying Alt Text on the badge URL, for example ![Alt Text]() or ![Alt Text](anything here)
  • Make the codebase fully typed
  • Improve the Tests by parametrizing fixtures and test functions
  • improve CI/CD to cater for GNU/Linux, Mac OS X and Windows
  • Create pre-commit hook

docs

  • Add a screenshot / demo in this README
  • Create standalone documentation for hosting either on Github Pages or readthedocs. This README is already detailed enough to serve as documentation!

other

  • It would be fun if we had some kind of a badger logo!

📝 License

Copyright © 2021 - present Victor Miti.

This project is licensed under the terms of the BSD-3-Clause license.


This README was generated with ❤️ by readme-md-generator


Changelog

All notable changes to this project will be documented here.

The format is based on Keep a Changelog, and this project attempts to adhere to Semantic Versioning.

v1.0.1 (2024-07-05)

🐛 Bug Fixes

  • broken logger configuration introduced in 1.0.0 (7e27daa)

v1.0.0 (2024-07-05)

⚠ BREAKING CHANGES

  • Python <3.8 no longer supported

⚙️ Build System

  • bump outdated dependencies to latest versions (63a5f78)
  • update outdated pre-commit hooks (775fe7e)

🚀 Features

  • add support for Python 3.11, 3.12 & drop Python 3.6 and 3.7 (e30c803)

📝 Docs

💄 Styling

  • update Black's target versions (52ee283)

♻️ Code Refactoring

  • update logging configuration (89c8276)

👷 CI/CD

  • add manually triggered workflow (aac0ae3)
  • bump codecov/codecov-action from v2 to v4 (fece05b)
  • disable publishing to testPyPI (ebe85af)
  • update CI to use latest actions and OSes (f0a92d3)
  • you need an upload token from codecov.io (806eeb9)

v0.1.2 (2022-01-21)

📝 Docs

  • changelog: add note on version 0.1.0 (7e7b8a6)
  • changelog: regenerate using standard-version (90da4da)
  • readme: add a GIF to demonstrate the tool (82afdbe)
  • readme: general reorganisation of the docs – centre the badges, categorize the TODOs and add some minor improvements (d46fcbb)

💄 Styling

  • changelog: move
    to the end of the file (aa9b442)
  • update changelog configuration (0e0fd06)

⚙️ Build System

  • deps-dev: bump faker from 8.9.1 to 8.10.0 (#3) (63c50d9)
  • deps-dev: bump invoke from 1.5.0 to 1.6.0 (#5) (f62aa4e)
  • deps-dev: bump isort from 5.9.1 to 5.9.2 (#4) (81837d2)
  • deps-dev: update outdated packages (45bd516)
  • deps-dev: update precommit hook commitizen-tools/commitizen to v2.17.12 (63cf405)
  • deps-dev: update precommit hook commitizen-tools/commitizen to v2.17.13 (69b65cc)
  • deps-dev: update precommit hook commitizen-tools/commitizen to v2.18.0 (50a946f)
  • deps-dev: update precommit hook pre-commit/mirrors-isort to v5.9.2 (922f932)
  • deps-dev: update precommit hook pycqa/isort to v5.9.3 (300dd31)

🐛 Bug Fixes

  • enforce coverage<6 and ensure python 3.10 support (e2c2f92)

👷 CI/CD

  • add renovate.json (#6) (194b29e)
  • add GH action to greet first-time contributors (8085515)
  • add manually triggered workflow (c8b3e66)
  • add the lint job to python 3.8 on TRavis CI (0d20cbf)
  • correct the Travis CI config to support PEP 517 builds (9e476a1)
  • customize renovate config to allow automatic dependency management (8fcc766)
  • disable publishing to testPyPI (00c8783)
  • improved release workfow through some custom hacks (ee12b8e)
  • pre-commit autoupdate (#10) (c4a52df)
  • pre-commit.ci: pre-commit autoupdate (#12) (94c2929)
  • remove dependabot.yml configuration file (bc0568b)
  • renovate.json: fix configuration (#9) (14dd8b3)
  • run tests on GNU/Linux, Mac OS X and Windows (2a2b446)
  • run tests on Python 3.10 (6e93962)
  • switch from Travis CI to GitHub Actions (ba1b1fb)
  • travis: revert to the initial setup defined in f53d6a (4db1f32)

v0.1.1 (2021-07-07)

📝 Docs

  • readme: additional badges showing PyPi download stats, supported Python versions and commit activity (5c735b2)
  • readme: correct the Travis CI Badge URL to point to the master branch (275443e)
  • readme: fix typo in opening paragraph of "Why this Project?" (118f9ba)
  • readme: minor grammar improvements (ad63721)

⚙️ Build System / Dependencies

  • deps-dev: bump commitizen from 2.17.11 to 2.17.12 (#2) (9e769fd)

🛠 Miscellaneous

  • deploy on PyPi only when you create (and push) new tags on master (c34224f)
  • pyproject.toml: make isort compatible with black, just like the pre-commit configuration (ba0a438)

🪠 Maintenance

  • travis: replace token with actual username (87fddc2)

🐛 Bug Fixes

v0.1.0 (2021-07-06)

🪠 Maintenance

  • automatic deployment on PyPi (f53d6ae)

🛠 Miscellaneous

  • fix typo in repo name (6d9cb11)
  • fix typos on badge URLs (d8b32ac)
  • only install codecov on travis (8a3bd55)
  • remove detect-aws-credentials hook (4b571d8)
  • simplify travis setup, for now (958aa6d)
  • use focal instead of default bionic (5116bd6)

BSD 3-Clause License

Copyright (c) 2021 - present, Victor Miti All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

readme_coverage_badger-1.0.1.tar.gz (31.2 kB view details)

Uploaded Source

Built Distribution

readme_coverage_badger-1.0.1-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

Details for the file readme_coverage_badger-1.0.1.tar.gz.

File metadata

File hashes

Hashes for readme_coverage_badger-1.0.1.tar.gz
Algorithm Hash digest
SHA256 a025df71f794dbe45ec241950c14271ad4c46f5bd316f0356bdc352ea19af2b5
MD5 3ce19ca77e5bf5fdb48d49ede6bf9390
BLAKE2b-256 0c89ad9e466878cd009df78845cd178d4353866260cd2864475947434c402c84

See more details on using hashes here.

File details

Details for the file readme_coverage_badger-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for readme_coverage_badger-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 31f7e20ef2f59c3ad2f45ab152caf8b270cec503c3345d0a29fac92f31e6c646
MD5 cb72c4f7297578dfb58e4e69e12b431b
BLAKE2b-256 52721e4a0466af47b6c292ee85bf3d21bac842074d56b0380431cc5552fb49b9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page