From 9b4a0f446adcb3c0fa606e96d1052cca2a35e722 Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Thu, 9 Apr 2020 17:41:53 -0400 Subject: [PATCH 1/2] feat: automatically try to resolve relative paths to files --- .circleci/config.yml | 6 +++--- task.js | 27 ++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ee5db147..96b131a3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -130,9 +130,9 @@ workflows: - run: name: Check code coverage 📈 command: | - node ../../scripts/check-coverage server.js - node ../../scripts/check-coverage main.js - node ../../scripts/check-coverage string-utils.js + node ../../scripts/check-coverage fullstack/server/server.js + node ../../scripts/check-coverage fullstack/main.js + node ../../scripts/check-coverage fullstack/string-utils.js node ../../scripts/only-covered server.js main.js string-utils.js working_directory: examples/fullstack diff --git a/task.js b/task.js index 206548c3..e45d4def 100644 --- a/task.js +++ b/task.js @@ -1,6 +1,6 @@ // @ts-check const istanbul = require('istanbul-lib-coverage') -const { join, resolve } = require('path') +const { join, resolve, isAbsolute } = require('path') const { existsSync, mkdirSync, readFileSync, writeFileSync } = require('fs') const execa = require('execa') const fs = require('fs') @@ -37,6 +37,29 @@ function saveCoverage(coverage) { writeFileSync(nycFilename, JSON.stringify(coverage, null, 2)) } +/** + * Looks at all coverage objects in the given JSON coverage file + * and if the file is relative, and exists, changes its path to + * be absolute. + */ +function resolvePaths(nycFilename) { + const nycCoverage = JSON.parse(readFileSync(nycFilename, 'utf8')) + Object.keys(nycCoverage).forEach(key => { + const coverage = nycCoverage[key] + if (coverage.path && !isAbsolute(coverage.path)) { + if (existsSync(coverage.path)) { + debug('resolving path %s', coverage.path) + coverage.path = resolve(coverage.path) + } + } + }) + writeFileSync( + nycFilename, + JSON.stringify(nycCoverage, null, 2) + '\n', + 'utf8' + ) +} + const tasks = { /** * Clears accumulated code coverage information. @@ -97,6 +120,8 @@ const tasks = { return null } + resolvePaths(nycFilename) + if (customNycReportScript) { debug( 'saving coverage report using script "%s" from package.json, command: %s', From 77012944d6b45985a654bbfb30d1a365f7e627a0 Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Thu, 9 Apr 2020 17:42:39 -0400 Subject: [PATCH 2/2] only save coverage file if it has been updated --- task.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/task.js b/task.js index e45d4def..f5621960 100644 --- a/task.js +++ b/task.js @@ -44,20 +44,26 @@ function saveCoverage(coverage) { */ function resolvePaths(nycFilename) { const nycCoverage = JSON.parse(readFileSync(nycFilename, 'utf8')) + let changed Object.keys(nycCoverage).forEach(key => { const coverage = nycCoverage[key] if (coverage.path && !isAbsolute(coverage.path)) { if (existsSync(coverage.path)) { debug('resolving path %s', coverage.path) coverage.path = resolve(coverage.path) + changed = true } } }) - writeFileSync( - nycFilename, - JSON.stringify(nycCoverage, null, 2) + '\n', - 'utf8' - ) + + if (changed) { + debug('saving updated file %s', nycFilename) + writeFileSync( + nycFilename, + JSON.stringify(nycCoverage, null, 2) + '\n', + 'utf8' + ) + } } const tasks = {