{"id":32892309,"url":"https://github.com/coveragepy/coveragepy","last_synced_at":"2026-01-25T15:00:32.912Z","repository":{"id":37251767,"uuid":"138421996","full_name":"coveragepy/coveragepy","owner":"coveragepy","description":"The code coverage tool for Python","archived":false,"fork":false,"pushed_at":"2026-01-21T14:15:15.000Z","size":21517,"stargazers_count":3308,"open_issues_count":260,"forks_count":466,"subscribers_count":35,"default_branch":"main","last_synced_at":"2026-01-22T01:29:33.505Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://coverage.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coveragepy.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.rst","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE.txt","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"nedbat","tidelift":"pypi/coverage"}},"created_at":"2018-06-23T17:44:53.000Z","updated_at":"2026-01-20T13:59:47.000Z","dependencies_parsed_at":"2022-07-14T05:40:32.667Z","dependency_job_id":"3d1cea3d-3446-40dc-9e41-75cb4d5db134","html_url":"https://github.com/coveragepy/coveragepy","commit_stats":{"total_commits":6501,"total_committers":181,"mean_commits":35.9171270718232,"dds":0.06891247500384556,"last_synced_commit":"80a479de0530534a11c196d32c8933dca1990f5e"},"previous_names":["coveragepy/coveragepy"],"tags_count":176,"template":false,"template_full_name":null,"purl":"pkg:github/coveragepy/coveragepy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coveragepy%2Fcoveragepy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coveragepy%2Fcoveragepy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coveragepy%2Fcoveragepy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coveragepy%2Fcoveragepy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coveragepy","download_url":"https://codeload.github.com/coveragepy/coveragepy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coveragepy%2Fcoveragepy/sbom","scorecard":{"id":54655,"data":{"date":"2025-08-04","repo":{"name":"github.com/nedbat/coveragepy","commit":"aaa65e8cafaa8b1a36ddc0b07dcce982fcf5d2ba"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":8.5,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: .github/SECURITY.md:1","Info: Found linked content: .github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: .github/SECURITY.md:1","Info: Found text in security policy: .github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 24 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 1/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":5,"reason":"badge detected: Passing","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:33","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:34","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/coverage.yml:36","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/quality.yml:33","Info: jobLevel 'contents' permission set to 'read': .github/workflows/quality.yml:163","Info: jobLevel 'actions' permission set to 'read': .github/workflows/quality.yml:164","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/testsuite.yml:35","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:26","Info: topLevel 'contents' permission set to 'read': .github/workflows/coverage.yml:25","Info: topLevel 'contents' permission set to 'read': .github/workflows/dependency-review.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/kit.yml:42","Info: topLevel 'contents' permission set to 'read': .github/workflows/publish.yml:23","Info: topLevel 'contents' permission set to 'read': .github/workflows/python-nightly.yml:26","Info: topLevel 'contents' permission set to 'read': .github/workflows/quality.yml:22","Info: topLevel 'contents' permission set to 'read': .github/workflows/testsuite.yml:24","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Fuzzing","score":10,"reason":"project is fuzzed","details":["Info: OSSFuzz integration found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}},{"name":"Pinned-Dependencies","score":5,"reason":"dependency not pinned by hash detected -- score normalized to 5","details":["Warn: pipCommand not pinned by hash: lab/compare_times.sh:35","Warn: pipCommand not pinned by hash: lab/compare_times.sh:42","Warn: pipCommand not pinned by hash: .github/workflows/coverage.yml:210","Warn: pipCommand not pinned by hash: .github/workflows/coverage.yml:151","Warn: pipCommand not pinned by hash: .github/workflows/kit.yml:195","Warn: pipCommand not pinned by hash: .github/workflows/kit.yml:240","Warn: downloadThenRun not pinned by hash: .github/workflows/python-nightly.yml:74","Warn: pipCommand not pinned by hash: .github/workflows/python-nightly.yml:111","Warn: pipCommand not pinned by hash: .github/workflows/quality.yml:117","Warn: pipCommand not pinned by hash: .github/workflows/quality.yml:153","Warn: pipCommand not pinned by hash: .github/workflows/quality.yml:89","Warn: pipCommand not pinned by hash: .github/workflows/testsuite.yml:145","Info:  39 out of  39 GitHub-owned GitHubAction dependencies pinned","Info:  10 out of  10 third-party GitHubAction dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned","Info:   0 out of  11 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/publish.yml:53"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (2) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-15T00:26:13.894Z","repository_id":37251767,"created_at":"2025-08-15T00:26:13.894Z","updated_at":"2025-08-15T00:26:13.894Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28659859,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-11-10T05:01:10.300Z","updated_at":"2026-01-25T15:00:32.886Z","avatar_url":"https://github.com/coveragepy.png","language":"Python","readme":".. Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0\n.. For details: https://github.com/coveragepy/coveragepy/blob/main/NOTICE.txt\n\n===========\nCoverage.py\n===========\n\nCode coverage measurement for Python.\n\n.. image:: https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg\n    :target: https://vshymanskyy.github.io/StandWithUkraine\n    :alt: Stand with Ukraine\n\n-------------\n\n|  |kit| |license| |versions|\n|  |test-status| |quality-status| |docs| |metacov|\n|  |tidelift| |sponsor| |stars| |mastodon-coveragepy| |mastodon-nedbat|\n   |bluesky-nedbat|\n\nCoverage.py measures code coverage, typically during test execution. It uses\nthe code analysis tools and tracing hooks provided in the Python standard\nlibrary to determine which lines are executable, and which have been executed.\n\nCoverage.py runs on these versions of Python:\n\n.. PYVERSIONS\n\n* Python 3.10 through 3.15 alpha, including free-threading.\n* PyPy3 versions 3.10 and 3.11.\n\nDocumentation is on `Read the Docs`_.  Code repository and issue tracker are on\n`GitHub`_.\n\n.. _Read the Docs: https://coverage.readthedocs.io/\n.. _GitHub: https://github.com/coveragepy/coveragepy\n\n\nFor Enterprise\n--------------\n\n.. |tideliftlogo| image:: https://nedbatchelder.com/pix/Tidelift_Logo_small.png\n   :alt: Tidelift\n   :target: https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage\u0026utm_medium=referral\u0026utm_campaign=readme\n\n.. list-table::\n   :widths: 10 100\n\n   * - |tideliftlogo|\n     - `Available as part of the Tidelift Subscription. \u003chttps://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage\u0026utm_medium=referral\u0026utm_campaign=readme\u003e`_\n       Coverage and thousands of other packages are working with\n       Tidelift to deliver one enterprise subscription that covers all of the open\n       source you use.  If you want the flexibility of open source and the confidence\n       of commercial-grade software, this is for you.\n       `Learn more. \u003chttps://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage\u0026utm_medium=referral\u0026utm_campaign=readme\u003e`_\n\n\nGetting Started\n---------------\n\nLooking to run ``coverage`` on your test suite? See the `Quick Start section`_\nof the docs.\n\n.. _Quick Start section: https://coverage.readthedocs.io/#quick-start\n\n\nChange history\n--------------\n\nThe complete history of changes is on the `change history page`_.\n\n.. _change history page: https://coverage.readthedocs.io/en/latest/changes.html\n\n\nCode of Conduct\n---------------\n\nEveryone participating in the coverage.py project is expected to treat other\npeople with respect and to follow the guidelines articulated in the `Python\nCommunity Code of Conduct`_.\n\n.. _Python Community Code of Conduct: https://www.python.org/psf/codeofconduct/\n\n\nContributing\n------------\n\nFound a bug? Want to help improve the code or documentation? See the\n`Contributing section`_ of the docs.\n\n.. _Contributing section: https://coverage.readthedocs.io/en/latest/contributing.html\n\n\nSecurity\n--------\n\nTo report a security vulnerability, please use the `Tidelift security\ncontact`_.  Tidelift will coordinate the fix and disclosure.\n\n.. _Tidelift security contact: https://tidelift.com/security\n\n\nLicense\n-------\n\nLicensed under the `Apache 2.0 License`_.  For details, see `NOTICE.txt`_.\n\n.. _Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0\n.. _NOTICE.txt: https://github.com/coveragepy/coveragepy/blob/main/NOTICE.txt\n\n\n.. |test-status| image:: https://github.com/coveragepy/coveragepy/actions/workflows/testsuite.yml/badge.svg?branch=main\u0026event=push\n    :target: https://github.com/coveragepy/coveragepy/actions/workflows/testsuite.yml\n    :alt: Test suite status\n.. |quality-status| image:: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml/badge.svg?branch=main\u0026event=push\n    :target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml\n    :alt: Quality check status\n.. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest\u0026style=flat\n    :target: https://coverage.readthedocs.io/\n    :alt: Documentation\n.. |kit| image:: https://img.shields.io/pypi/v/coverage\n    :target: https://pypi.org/project/coverage/\n    :alt: PyPI status\n.. |versions| image:: https://img.shields.io/pypi/pyversions/coverage.svg?logo=python\u0026logoColor=FBE072\n    :target: https://pypi.org/project/coverage/\n    :alt: Python versions supported\n.. |license| image:: https://img.shields.io/pypi/l/coverage.svg\n    :target: https://github.com/coveragepy/coveragepy/blob/main/LICENSE.txt\n    :alt: License\n.. |metacov| image:: https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/nedbat/8c6980f77988a327348f9b02bbaf67f5/raw/metacov.json\n    :target: https://coveragepy.github.io/metacov-reports/latest.html\n    :alt: Coverage reports\n.. |tidelift| image:: https://tidelift.com/badges/package/pypi/coverage\n    :target: https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage\u0026utm_medium=referral\u0026utm_campaign=readme\n    :alt: Tidelift\n.. |stars| image:: https://img.shields.io/github/stars/coveragepy/coveragepy.svg?logo=github\u0026style=flat\n    :target: https://github.com/coveragepy/coveragepy/stargazers\n    :alt: GitHub stars\n.. |mastodon-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat\u0026labelColor=450657\u0026logo=mastodon\u0026logoColor=ffffff\u0026label=@nedbat\u0026query=followers_count\u0026url=https%3A%2F%2Fhachyderm.io%2Fapi%2Fv1%2Faccounts%2Flookup%3Facct=nedbat\n    :target: https://hachyderm.io/@nedbat\n    :alt: nedbat on Mastodon\n.. |mastodon-coveragepy| image:: https://img.shields.io/badge/dynamic/json?style=flat\u0026labelColor=450657\u0026logo=mastodon\u0026logoColor=ffffff\u0026label=@coveragepy\u0026query=followers_count\u0026url=https%3A%2F%2Fhachyderm.io%2Fapi%2Fv1%2Faccounts%2Flookup%3Facct=coveragepy\n    :target: https://hachyderm.io/@coveragepy\n    :alt: coveragepy on Mastodon\n.. |bluesky-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat\u0026color=96a3b0\u0026labelColor=3686f7\u0026logo=icloud\u0026logoColor=white\u0026label=@nedbat\u0026url=https%3A%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%3Factor=nedbat.com\u0026query=followersCount\n    :target: https://bsky.app/profile/nedbat.com\n    :alt: nedbat on Bluesky\n.. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat\u0026logo=GitHub\n    :target: https://github.com/sponsors/nedbat\n    :alt: Sponsor me on GitHub\n","funding_links":["https://github.com/sponsors/nedbat","https://tidelift.com/funding/github/pypi/coverage","https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage\u0026utm_medium=referral\u0026utm_campaign=readme","https://tidelift.com/security","https://tidelift.com/badges/package/pypi/coverage"],"categories":["Testing","Python Packages","Web Testing","Python"],"sub_categories":["Templates"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoveragepy%2Fcoveragepy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoveragepy%2Fcoveragepy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoveragepy%2Fcoveragepy/lists"}