Skip to content

Commit

Permalink
Add verbose logging (#96)
Browse files Browse the repository at this point in the history
* chore: remove hosted-git-info

* feat: create logger and tests

* test(logger): add test case for default log level

* chore: convert console.log calls to log()

* chore: add directory logging to files helper

* test: add debug log lines and mock log

* test: remove html reporter
  • Loading branch information
drazisil-codecov authored May 21, 2021
1 parent 758ff37 commit deb081a
Show file tree
Hide file tree
Showing 8 changed files with 139 additions and 56 deletions.
33 changes: 11 additions & 22 deletions npm-shrinkwrap.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 14 additions & 11 deletions src/helpers/files.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ const childProcess = require('child_process')
const fs = require('fs')
const path = require('path')
const glob = require('glob')
const { log } = require('./logger')

/**
*
* @param {string} projectRoot
* @returns Promise<string>
*/
async function getFileListing (projectRoot) {
return getAllFiles(projectRoot, projectRoot).join('')
async function getFileListing (projectRoot, args) {
return getAllFiles(projectRoot, projectRoot, args).join('')
}

function manualBlacklist () {
Expand Down Expand Up @@ -121,7 +122,7 @@ function globBlacklist () {
'remapInstanbul.coverage*.json',
'scoverage.measurements.*',
'test_*_coverage.txt',
'testrunner-coverage*',
'testrunner-coverage*'
]
}

Expand Down Expand Up @@ -224,28 +225,30 @@ function parseGitIgnore (projectRoot) {
* @param {string[]} arrayOfFiles
* @returns {string[]}
*/
function getAllFiles (projectRoot, dirPath, arrayOfFiles = []) {
function getAllFiles (projectRoot, dirPath, args, arrayOfFiles = []) {
log(`Searching for files in ${dirPath}`, { level: 'debug', args })
const files = fs.readdirSync(dirPath)

files.forEach(function (file) {
if (isBlacklisted(projectRoot, file, manualBlacklist())) {
return
}
if (
fs.statSync(path.join(dirPath, file)).isDirectory() &&
!isBlacklisted(projectRoot, file, manualBlacklist())
fs.statSync(path.join(dirPath, file)).isDirectory()
) {
arrayOfFiles = getAllFiles(
projectRoot,
path.join(dirPath, file),
args,
arrayOfFiles
)
} else {
if (!isBlacklisted(projectRoot, file, manualBlacklist())) {
arrayOfFiles.push(
arrayOfFiles.push(
`${path.join(dirPath.replace(projectRoot, '.'), file)}\n`
)
}
)
}
})

log(`Search complete for files in ${dirPath}`, { level: 'debug', args })
return arrayOfFiles
}

Expand Down
33 changes: 33 additions & 0 deletions src/helpers/logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// @ts-check

/**
*
* @param {string} message
* @param {Object} options
* @param {string} options.level
* @param {Object} options.args
* @returns void
*/
function log (message, options) {
if (!options || !options.level) {
return console.log(message)
}
switch (options.level) {
case 'debug':
if (options.args && options.args.verbose) {
console.debug(message)
}

break
case 'error':
console.error(message)
break
default:
console.log(message)
break
}
}

module.exports = {
log
}
3 changes: 2 additions & 1 deletion src/helpers/web.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const superagent = require('superagent')
const validateHelpers = require('./validate')
const { log } = require('./logger')

/**
*
Expand All @@ -26,7 +27,7 @@ function populateBuildParams (inputs, serviceParams) {
* @returns {Promise<{ status: string, resultURL: string }>}
*/
async function uploadToCodecovPUT (uploadURL, uploadFile) {
console.log('Uploading...')
log('Uploading...')

const parts = uploadURL.split('\n')
const putURL = parts[1]
Expand Down
51 changes: 32 additions & 19 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const { version } = require('../package.json')
const fileHelpers = require('./helpers/files')
const validateHelpers = require('./helpers/validate')
const webHelpers = require('./helpers/web')
const { log } = require('./helpers/logger')
const providers = require('./ci_providers')

/**
Expand All @@ -12,13 +13,17 @@ const providers = require('./ci_providers')
* @param {string} token
* @param {string} query
* @param {string} uploadFile
* @param {Object} args
* @param {Date} start
*/
function dryRun (uploadHost, token, query, uploadFile) {
console.log('==> Dumping upload file (no upload)')
console.log(
function dryRun (uploadHost, token, query, uploadFile, args, start) {
log('==> Dumping upload file (no upload)')
log(
`${uploadHost}/upload/v4?package=uploader-${version}&token=${token}&${query}`
)
console.log(uploadFile)
log(uploadFile)
const end = Date.now()
log(`End of uploader: ${end - start} milliseconds`, { level: 'debug', args })
process.exit()
}

Expand All @@ -45,6 +50,8 @@ function dryRun (uploadHost, token, query, uploadFile) {
* @param {string} args.url Change the upload host (Enterprise use)
*/
async function main (args) {
const start = Date.now()
log(`Start of uploader: ${start}...`, { level: 'debug', args })
try {
/*
Step 1: validate and sanitize inputs
Expand All @@ -70,20 +77,21 @@ async function main (args) {
token = process.env.CODECOV_TOKEN || ''
}
token = args.token || process.env.CODECOV_TOKEN || ''
console.log(generateHeader(getVersion()))
log(generateHeader(getVersion()))

// == Step 2: detect if we are in a git repo
const projectRoot = args.rootDir || fileHelpers.fetchGitRoot()
if (projectRoot === '') {
console.log(
log(
'=> No git repo detected. Please use the -R flag if the below detected directory is not correct.'
)
}

console.log(`=> Project root located at: ${projectRoot}`)
log(`=> Project root located at: ${projectRoot}`)

// == Step 3: get network
const fileListing = await fileHelpers.getFileListing(projectRoot)
log('Start of network processing...', { level: 'debug', args })
const fileListing = await fileHelpers.getFileListing(projectRoot, args)

// == Step 4: select coverage files (search or specify)

Expand All @@ -96,13 +104,13 @@ async function main (args) {
fileHelpers.coverageFilePatterns()
)
if (coverageFilePaths.length > 0) {
console.log(
log(
`=> Found ${coverageFilePaths.length} possible coverage files:`
)
console.log(coverageFilePaths.join('\n'))
log(coverageFilePaths.join('\n'))
} else {
console.error(
'No coverage files located, please try use `-f`, or change the project root with `-R`'
log(
'No coverage files located, please try use `-f`, or change the project root with `-R`', { level: 'error' }
)
process.exit(args.nonZero ? -1 : 0)
}
Expand All @@ -111,10 +119,11 @@ async function main (args) {
? args.file
: ''
if (coverageFilePaths.length === 0) {
console.error('Not coverage file found, exiting.')
log('Not coverage file found, exiting.', { level: 'error' })
process.exit(args.nonZero ? -1 : 0)
}
}
log('End of network processing', { level: 'debug', args })

// == Step 5: generate upload file
// TODO: capture envs
Expand Down Expand Up @@ -154,7 +163,7 @@ async function main (args) {
let serviceParams
for (const provider of providers) {
if (provider.detect(envs)) {
console.log(
log(
`Detected ${provider.getServiceName()} as the CI provider.`
)
serviceParams = provider.getServiceParams(inputs)
Expand All @@ -163,7 +172,7 @@ async function main (args) {
}

if (serviceParams === undefined) {
console.error('Unable to detect service, please specify manually.')
log('Unable to detect service, please specify manually.', { level: 'error' })
process.exit(args.nonZero ? -1 : 0)
}

Expand All @@ -174,9 +183,9 @@ async function main (args) {
)

if (args.dryRun) {
dryRun(uploadHost, token, query, uploadFile)
dryRun(uploadHost, token, query, uploadFile, args, start)
} else {
console.log(
log(
`Pinging Codecov: ${uploadHost}/v4?package=uploader-${version}&token=*******&${query}`
)
const uploadURL = await webHelpers.uploadToCodecov(
Expand All @@ -190,14 +199,18 @@ async function main (args) {
uploadURL,
gzippedFile
)
console.log(result)
log(result)
return result
}
} catch (error) {
// Output any exceptions and exit
console.error(error.message)
log(error.message, { level: 'error' })
const end = Date.now()
log(`End of uploader: ${end - start} milliseconds`, { level: 'debug', args })
process.exit(args.nonZero ? -1 : 0)
}
const end = Date.now()
log(`End of uploader: ${end - start} milliseconds`, { level: 'debug', args })
}

/**
Expand Down
Loading

0 comments on commit deb081a

Please sign in to comment.