Skip to content

Commit ff8a418

Browse files
authored
feat: update badge alias from coverage/coverage-summary.json (#5)
Badge format ``` ![code coverage](https://img.shields.io/badge/code--coverage-80-brightgreen) ```
1 parent 8f6d88f commit ff8a418

File tree

5 files changed

+56
-2
lines changed

5 files changed

+56
-2
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ jobs:
1919
- name: Check totals 🛡
2020
run: node bin/check-total --min 90
2121

22+
- name: Update code coverage badge 🥇
23+
run: node bin/update-badge
24+
2225
- name: Semantic Release 🚀
2326
uses: cycjimmy/semantic-release-action@v2
2427
env:

README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# check-code-coverage [![ci status][ci image]][ci url]
1+
# check-code-coverage [![ci status][ci image]][ci url] ![mock coverage](https://img.shields.io/badge/code--coverage-100-brightgreen)
22
> Utilities for checking the coverage produced by NYC against extra or missing files
33
44
## Use
@@ -30,5 +30,19 @@ check-total
3030
check-total --from coverage/coverage-summary.json --min 80
3131
```
3232

33+
## update-badge
34+
35+
If your README.md includes Shields.io badge, like this
36+
37+
![code coverage](https://img.shields.io/badge/code--coverage-80-brightgreen)
38+
39+
You can update it using statements covered percentage from `coverage/coverage-summary.json` by running
40+
41+
```shell
42+
update-badge
43+
```
44+
45+
Related project: [dependency-version-badge](https://github.com/bahmutov/dependency-version-badge)
46+
3347
[ci image]: https://github.com/bahmutov/check-code-coverage/workflows/ci/badge.svg?branch=master
3448
[ci url]: https://github.com/bahmutov/check-code-coverage/actions

bin/check-total.js

100644100755
File mode changed.

bin/update-badge.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/env node
2+
// @ts-check
3+
4+
const path = require('path')
5+
const fs = require('fs')
6+
7+
function updateBadge() {
8+
const coverageFilename = path.join(process.cwd(), 'coverage', 'coverage-summary.json')
9+
const coverage = require(coverageFilename)
10+
const pct = coverage.total.statements.pct
11+
12+
const readmeFilename = path.join(process.cwd(), 'README.md')
13+
const readmeText = fs.readFileSync(readmeFilename, 'utf8')
14+
15+
function replaceShield() {
16+
// note, Shields.io escaped '-' with '--'
17+
const coverageRe = new RegExp(
18+
'https://img\\.shields\\.io/badge/code--coverage-(\\d+)-brightgreen',
19+
)
20+
const coverageBadge = `https://img.shields.io/badge/code--coverage-${pct}-brightgreen`
21+
22+
const updatedReadmeText = readmeText.replace(
23+
coverageRe,
24+
coverageBadge,
25+
)
26+
return updatedReadmeText
27+
}
28+
29+
const maybeChangedText = replaceShield()
30+
if (maybeChangedText !== readmeText) {
31+
console.log('saving updated readme with coverage %d%%', pct)
32+
fs.writeFileSync(readmeFilename, maybeChangedText, 'utf8')
33+
}
34+
}
35+
36+
updateBadge()

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"bin": {
77
"check-coverage": "bin/check-coverage.js",
88
"only-covered": "bin/only-covered.js",
9-
"check-total": "bin/check-total.js"
9+
"check-total": "bin/check-total.js",
10+
"update-badge": "bin/update-badge.js"
1011
},
1112
"files": [
1213
"bin"

0 commit comments

Comments
 (0)