Skip to content

Commit

Permalink
refactor: all exits moved to cli, throw as needed
Browse files Browse the repository at this point in the history
  • Loading branch information
drazisil-codecov committed Jun 22, 2021
1 parent cffff17 commit 8318991
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 133 deletions.
14 changes: 13 additions & 1 deletion bin/codecov
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,16 @@ var argv = require("yargs") // eslint-disable-line
.help("help")
.alias("help", "h").argv;

app.main(argv);
const start = Date.now()

app.log(`Start of uploader: ${start}...`, { level: 'debug', argv })
app.main(argv).then(() => {
const end = Date.now()
app.log(`End of uploader: ${end - start} milliseconds`, { level: 'debug', argv })
}).catch(error => {
app.log(`Error!: ${error}`, { level: 'error', argv })
const end = Date.now()
app.log(`End of uploader: ${end - start} milliseconds`, { level: 'debug', argv })
process.exit(argv.nonZero ? -1 : 0)
})

253 changes: 121 additions & 132 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,12 @@ const providers = require('./ci_providers')
* @param {Object} args
* @param {number} start
*/
function dryRun(uploadHost, token, query, uploadFile, args, start) {
function dryRun(uploadHost, token, query, uploadFile) {
log('==> Dumping upload file (no upload)')
log(
`${uploadHost}/upload/v4?package=uploader-${version}&token=${token}&${query}`,
)
log(uploadFile)
const end = Date.now()
log(`End of uploader: ${end - start} milliseconds`, { level: 'debug', args })
process.exit()
}

/**
Expand Down Expand Up @@ -52,10 +49,7 @@ function dryRun(uploadHost, token, query, uploadFile, args, start) {
* @param {string} args.feature Toggle features
*/
async function main(args) {
const start = Date.now()
log(`Start of uploader: ${start}...`, { level: 'debug', args })
try {
/*
/*
Step 1: validate and sanitize inputs
Step 2: detect if we are in a git repo
Step 3: get network (file listing)
Expand All @@ -65,144 +59,147 @@ async function main(args) {
Step 7: either upload or dry-run
*/

// == Step 1: validate and sanitize inputs
// TODO: clean and sanitize envs and args
const envs = process.env
// args
const inputs = { args, envs }

const uploadHost = validateHelpers.validateURL(args.url)
? args.url
: 'https://codecov.io'
let token = validateHelpers.validateToken(args.token) ? args.token : ''
if (token === '') {
token = process.env.CODECOV_TOKEN || ''
}
token = args.token || process.env.CODECOV_TOKEN || ''
log(generateHeader(getVersion()))

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

log(`=> Project root located at: ${projectRoot}`)
// == Step 1: validate and sanitize inputs
// TODO: clean and sanitize envs and args
const envs = process.env
// args
const inputs = { args, envs }

const uploadHost = validateHelpers.validateURL(args.url)
? args.url
: 'https://codecov.io'
let token = validateHelpers.validateToken(args.token) ? args.token : ''
if (token === '') {
token = process.env.CODECOV_TOKEN || ''
}
token = args.token || process.env.CODECOV_TOKEN || ''
log(generateHeader(getVersion()))

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

// == Step 3: get network
let uploadFile = ''
log(`=> Project root located at: ${projectRoot}`)

if (
!args.feature ||
args.feature.split(',').includes('network') === false
) {
log('Start of network processing...', { level: 'debug', args })
const fileListing = await fileHelpers.getFileListing(projectRoot, args)
// == Step 3: get network
let uploadFile = ''

uploadFile = uploadFile
.concat(fileListing)
.concat(fileHelpers.endNetworkMarker())
if (!args.feature || args.feature.split(',').includes('network') === false) {
log('Start of network processing...', { level: 'debug', args })
let fileListing
try {
fileListing = await fileHelpers.getFileListing(projectRoot, args)
} catch (error) {
throw new Error(`Error getting file listing: ${error}`)
}

// == Step 4: select coverage files (search or specify)
uploadFile = uploadFile
.concat(fileListing)
.concat(fileHelpers.endNetworkMarker())
}

// Look for files
let coverageFilePaths = []
if (!args.file) {
coverageFilePaths = fileHelpers.getCoverageFiles(
args.dir || projectRoot,
// TODO: Determine why this is so slow (I suspect it's walking paths it should not)
fileHelpers.coverageFilePatterns(),
)
if (coverageFilePaths.length > 0) {
log(`=> Found ${coverageFilePaths.length} possible coverage files:`)
log(coverageFilePaths.join('\n'))
} else {
log(
'No coverage files located, please try use `-f`, or change the project root with `-R`',
{ level: 'error' },
)
process.exit(args.nonZero ? -1 : 0)
}
// == Step 4: select coverage files (search or specify)

// Look for files
let coverageFilePaths = []
if (!args.file) {
coverageFilePaths = fileHelpers.getCoverageFiles(
args.dir || projectRoot,
// TODO: Determine why this is so slow (I suspect it's walking paths it should not)
fileHelpers.coverageFilePatterns(),
)
if (coverageFilePaths.length > 0) {
log(`=> Found ${coverageFilePaths.length} possible coverage files:`)
log(coverageFilePaths.join('\n'))
} else {
coverageFilePaths[0] = validateHelpers.validateFileNamePath(args.file)
? args.file
: ''
if (coverageFilePaths.length === 0) {
log('Not coverage file found, exiting.', { level: 'error' })
process.exit(args.nonZero ? -1 : 0)
}
throw new Error(
'No coverage files located, please try use `-f`, or change the project root with `-R`',
)
}
} else {
coverageFilePaths[0] = validateHelpers.validateFileNamePath(args.file)
? args.file
: ''
if (coverageFilePaths.length === 0) {
throw new Error('Not coverage file found, exiting.')
}
log('End of network processing', { level: 'debug', args })
}
log('End of network processing', { level: 'debug', args })

// == Step 5: generate upload file
// TODO: capture envs
// == Step 5: generate upload file
// TODO: capture envs

// Get coverage report contents
for (const coverageFile of coverageFilePaths) {
const fileContents = await fileHelpers.readCoverageFile(
// Get coverage report contents
for (const coverageFile of coverageFilePaths) {
let fileContents
try {
fileContents = await fileHelpers.readCoverageFile(
args.dir || projectRoot,
coverageFile,
)
uploadFile = uploadFile.concat(fileHelpers.fileHeader(coverageFile))
uploadFile = uploadFile.concat(fileContents)
uploadFile = uploadFile.concat(fileHelpers.endFileMarker())
} catch (error) {
throw new Error(`Error reading coverage file (${coverageFile}): ${error}`)
}

// Cleanup
if (args.clean) {
for (const coverageFile of coverageFilePaths) {
fileHelpers.removeFile(args.dir || projectRoot, coverageFile)
}
}
uploadFile = uploadFile.concat(fileHelpers.fileHeader(coverageFile))
uploadFile = uploadFile.concat(fileContents)
uploadFile = uploadFile.concat(fileHelpers.endFileMarker())
}

// Environment variables
if (args.env || envs.CODECOV_ENV) {
const environmentVars = args.env || envs.CODECOV_ENV
const vars = environmentVars
.split(',')
.filter(Boolean)
.map(evar => `${evar}=${process.env[evar] || ''}\n`)
.join('')
uploadFile = uploadFile.concat(vars)
uploadFile = uploadFile.concat(fileHelpers.endEnvironmentMarker())
// Cleanup
if (args.clean) {
for (const coverageFile of coverageFilePaths) {
fileHelpers.removeFile(args.dir || projectRoot, coverageFile)
}
}

const gzippedFile = zlib.gzipSync(uploadFile)
// Environment variables
if (args.env || envs.CODECOV_ENV) {
const environmentVars = args.env || envs.CODECOV_ENV
const vars = environmentVars
.split(',')
.filter(Boolean)
.map(evar => `${evar}=${process.env[evar] || ''}\n`)
.join('')
uploadFile = uploadFile.concat(vars)
uploadFile = uploadFile.concat(fileHelpers.endEnvironmentMarker())
}

// == Step 6: determine CI provider
const gzippedFile = zlib.gzipSync(uploadFile)

// Determine CI provider
let serviceParams
for (const provider of providers) {
if (provider.detect(envs)) {
log(`Detected ${provider.getServiceName()} as the CI provider.`)
serviceParams = provider.getServiceParams(inputs)
break
}
}
// == Step 6: determine CI provider

if (serviceParams === undefined) {
log('Unable to detect service, please specify manually.', {
level: 'error',
})
process.exit(args.nonZero ? -1 : 0)
// Determine CI provider
let serviceParams
for (const provider of providers) {
if (provider.detect(envs)) {
log(`Detected ${provider.getServiceName()} as the CI provider.`)
serviceParams = provider.getServiceParams(inputs)
break
}
}

// == Step 7: either upload or dry-run
if (serviceParams === undefined) {
throw new Error('Unable to detect service, please specify manually.')
}

const query = webHelpers.generateQuery(
webHelpers.populateBuildParams(inputs, serviceParams),
)
// == Step 7: either upload or dry-run

if (args.dryRun) {
dryRun(uploadHost, token, query, uploadFile, args, start)
} else {
log(
`Pinging Codecov: ${uploadHost}/v4?package=uploader-${version}&token=*******&${query}`,
)
const query = webHelpers.generateQuery(
webHelpers.populateBuildParams(inputs, serviceParams),
)

if (args.dryRun) {
return dryRun(uploadHost, token, query, uploadFile)
} else {
log(
`Pinging Codecov: ${uploadHost}/v4?package=uploader-${version}&token=*******&${query}`,
)
try {
const uploadURL = await webHelpers.uploadToCodecov(
uploadHost,
token,
Expand All @@ -213,19 +210,10 @@ async function main(args) {
const result = await webHelpers.uploadToCodecovPUT(uploadURL, gzippedFile)
log(result)
return result
} catch (error) {
throw new Error(`Error uploading to ${uploadHost}: ${error}`)
}
} catch (error) {
// Output any exceptions and exit
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 All @@ -250,6 +238,7 @@ function getVersion() {
}

module.exports = {
log,
main,
getVersion,
generateHeader,
Expand Down

0 comments on commit 8318991

Please sign in to comment.