{"id":32180546,"url":"https://github.com/cloverage/cloverage","last_synced_at":"2025-12-12T01:18:34.613Z","repository":{"id":5659888,"uuid":"6869137","full_name":"cloverage/cloverage","owner":"cloverage","description":"Clojure test coverage tool","archived":false,"fork":false,"pushed_at":"2024-11-06T00:42:28.000Z","size":772,"stargazers_count":520,"open_issues_count":70,"forks_count":101,"subscribers_count":25,"default_branch":"master","last_synced_at":"2025-10-21T22:01:31.390Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloverage.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-11-26T17:09:25.000Z","updated_at":"2025-10-19T15:46:42.000Z","dependencies_parsed_at":"2024-05-01T13:20:42.282Z","dependency_job_id":"3eea5fdb-0dfb-4bdf-b11e-83565a905a52","html_url":"https://github.com/cloverage/cloverage","commit_stats":{"total_commits":548,"total_committers":68,"mean_commits":8.058823529411764,"dds":0.8211678832116789,"last_synced_commit":"87fd10f82ea7c0f47c03354105e513b160d1e047"},"previous_names":["lshift/cloverage"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/cloverage/cloverage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloverage%2Fcloverage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloverage%2Fcloverage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloverage%2Fcloverage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloverage%2Fcloverage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloverage","download_url":"https://codeload.github.com/cloverage/cloverage/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloverage%2Fcloverage/sbom","scorecard":{"id":293460,"data":{"date":"2025-08-11","repo":{"name":"github.com/cloverage/cloverage","commit":"9534a51da4a0bd778b7f3fbcb3c4ce83361d3e55"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":5,"reason":"Found 7/12 approved changesets -- score normalized to 5","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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Eclipse Public License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T18:53:48.218Z","repository_id":5659888,"created_at":"2025-08-17T18:53:48.218Z","updated_at":"2025-08-17T18:53:48.218Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280341244,"owners_count":26314177,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"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-10-21T22:01:26.101Z","updated_at":"2025-12-12T01:18:34.586Z","avatar_url":"https://github.com/cloverage.png","language":"Clojure","funding_links":[],"categories":["Code Analysis and Linter"],"sub_categories":[],"readme":"cloverage\n=========\n\nSimple clojure coverage tool.\n\nTravis: [![Build Status](https://travis-ci.org/cloverage/cloverage.svg?branch=master)](https://travis-ci.org/cloverage/cloverage)\n\nCircleCI: [![CircleCI](https://circleci.com/gh/cloverage/cloverage.svg?style=shield)](https://circleci.com/gh/cloverage/cloverage)\n\n[![Clojars Project](http://clojars.org/lein-cloverage/latest-version.svg)](http://clojars.org/lein-cloverage)\n\n## Installation\n\nCloverage can be included into specific projects as a plugin and also be installed user-wide in your `~/.lein/profiles.clj` file. A user-wide installation will make it available to any projects being managed by Leiningen.\n\n### Install Cloverage into a specific project\n\nAdd the following to your `project.clj` metadata:\n\n``` clojure\n:plugins [[lein-cloverage \"1.2.2\"]]\n```\n\n### Install Cloverage to all Leiningen managed projects\n\nAdd the following to your user-wide Leiningen profiles file `~/.lein/profiles.clj`:\n\n``` clojure\n{:user {:plugins [[lein-cloverage \"1.2.2\"]]}}\n```\n\n## Testing frameworks support\n\nCloverage uses `clojure.test` by default. If you prefer use `midje`, pass the `--runner :midje` flag. (In older versions of Cloverage, you had to wrap your midje tests in clojure.test's deftest. This is no longer necessary.) For using `eftest`, pass the `--runner :eftest` flag. Optionally you could configure a runner passing `:runner-opts` with a map in project settings. Other test libraries may ship with their own support for Cloverage external to this library; see their documentation for details.\n\n## Usage\n\n### lein\nRun `lein cloverage` in your project. See cloverage/coverage.clj for more\noptions.\n\nTo specify the version of cloverage manually, set the `CLOVERAGE_VERSION`\nto desired value, for example `CLOVERAGE_VERSION=1.0.4-SNAPSHOT lein cloverage`\n\nBy default, the plugin will use the latest release version of cloverage.\n\n#### Leiningen project options\nYou can set project default settings for Cloverage in your\nproject. Command line arguments can still be used and will be merged\nin. List options are merged by concatenation, for other options the\nproject value is used.\n\nNote about the three different threshold flags: sometimes, line coverage is high while form coverage isn't as high, so setting a high line coverage requirement can help maintaining an existing standard.\n\nAvailable options and command-line arguments:\n```\n Project                Switches                     Default          Desc\n -------                --------                     -------          ----\n :output                -o, --output                 target/coverage  Output directory.\n :text?                 --no-text, --text            false            Produce a text report.\n :html?                 --no-html, --html            true             Produce an HTML report.\n :emma-xml?             --no-emma-xml, --emma-xml    false            Produce an EMMA XML report. [emma.sourceforge.net]\n :lcov?                 --no-lcov, --lcov            false            Produce a lcov/gcov report.\n :codecov?              --no-codecov, --codecov      false            Generate a JSON report for Codecov.io\n :coveralls?            --no-coveralls, --coveralls  false            Send a JSON report to Coveralls if on a CI server\n :junit?                --no-junit, --junit          false            Output test results as junit xml file. Supported in :clojure.test runner\n :raw?                  --no-raw, --raw              false            Output raw coverage data (for debugging).\n :summary?              --no-summary, --summary      true             Prints a summary\n :fail-threshold        --fail-threshold             0                Sets the percentage threshold for both line and form coverage at which cloverage will abort the build. Default: 0%\n :line-fail-threshold   --line-fail-threshold        0                Sets the percentage threshold for line coverage at which cloverage will abort the build. Ignored if --fail-threshold is non-zero. Default: 0%\n :form-fail-threshold   --form-fail-threshold        0                Sets the percentage threshold for form coverage at which cloverage will abort the build. Ignored if --fail-threshold is non-zero. Default: 0%\n :low-watermark    --low-watermark              50               Sets the low watermark percentage (valid values 0..100). Default: 50%\n :high-watermark   --high-watermark             80               Sets the high watermark percentage (valid values 0..100). Default: 80%\n :debug?           -d, --no-debug, --debug      false            Output debugging information to stdout.\n :runner           -r, --runner                 :clojure.test    Specify which test runner to use. Built-in runners are `clojure.test`, `midje` and `eftest`.\n :runner-opts      (not allowed as a cli arg)   {}               Configure specified runner with any options map.\n :nop?             --no-nop, --nop              false            Instrument with noops.\n :ns-regex         -n, --ns-regex               []               Regex for instrumented namespaces (can be repeated).\n :ns-exclude-regex -e, --ns-exclude-regex       []               Regex for namespaces not to be instrumented (can be repeated).\n :exclude-call     --exclude-call               []               Name of fn/macro whose call sites are not to be instrumented (can be repeated).\n :test-ns-regex    -t, --test-ns-regex          []               Regex for test namespaces (can be repeated).\n :src-ns-path      -p, --src-ns-path            []               Path (string) to directory containing source code namespaces (can be repeated).\n :test-ns-path     -s, --test-ns-path           []               Path (string) to directory containing test namespaces (can be repeated).\n :extra-test-ns    -x, --extra-test-ns          []               Additional test namespace (string) to add (can be repeated).\n :selector         --selector                   []               Apply test selector (can be repeated).\n :custom-report    -c, --custom-report                           Load and run a custom report writer. Should be a namespaced symbol. The function is passed\n    project-options args-map output-directory forms\n :help?            -h, --no-help, --help        false            Show help.\n```\n\n### mvn\n\nThere is no maven plugin right now. A workaround is to import this library in the\nproject being tested, then run:\n`mvn exec:java -Dexec.classpathScope=test -Dexec.mainClass='clojure.main' -Dexec.args='--main cloverage.coverage *args-to-coverage*'`\n\nWhere *args-to-coverage* will usually be something like \"-n 'ns.regex.*' -t 'text.ns.regex.*'\"\n\n### Clojure CLI Tool\n\nTo use cloverage in a Clojure CLI Project,\n`clj -Sdeps '{:deps {cloverage {:mvn/version \"RELEASE\"}}}' -m cloverage.coverage *args-to-coverage*`\n\nWhere *args-to-coverage* will usually be something like \"-p src -s test\"\n\n\n## Troubleshooting\n\n### IllegalArgumentException No matching field found: foo for class user.Bar\n\n    IllegalArgumentException No matching field found: foo for class user.Bar  clojure.lang.Reflector.getInstanceField (Reflector.java:271)\n\nThis is usually caused by protocols with methods starting with -. Before clojure 1.6:\n```\nuser=\u003e (defprotocol Foo (-foo [x] x))\nFoo\nuser=\u003e (deftype Bar [] Foo (-foo [_] \"foo\"))\nuser.Bar\nuser=\u003e (-foo (Bar.))\n\"foo\"\nuser=\u003e ((do -foo) (Bar.))\n\nIllegalArgumentException No matching field found: foo for class user.Bar  clojure.lang.Reflector.getInstanceField (Reflector.java:271)\n```\n\nSince cloverage *will* wrap the -foo symbol to track whether it's accessed, you will get this error. Upgrade to clojure 1.6.\n\n### Coverage reports 0% coverage after running tests\n\nThis happens if there is a namespace in your project that requires itself, for example:\n\n```clojure\n(ns foo.bar\n  (:require [foo.bar :as bar]))\n```\n\nRemove the self-reference and the test coverage report should report correctly again.\n\n## License\n\nDistributed under the Eclipse Public License, the same as Clojure.\n\n### Contributors\n\n* 2015 LShift, Tom Parker\n* 2012 LShift, Jacek Lach, Alexander Schmolck, Frank Shearar\n* 2010 Michael Delaurentis\n\n### Mentions\n\nSome code was taken from\n* Java IO interop (clojure-contrib/duck-streams) by Alessandra Sierra (see cloverage/source.clj)\n* Topological sort (https://gist.github.com/1263783) by Alan Dipert (see cloverage/kahn.clj)\n* clojure.spec.alpha (for `cloverage.args/fn-sym`)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloverage%2Fcloverage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloverage%2Fcloverage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloverage%2Fcloverage/lists"}