Skip to content

Instantly share code, notes, and snippets.

@dipernaa
Last active June 2, 2017 15:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dipernaa/d5579ec5784d6623b8026e2bdb48cb1c to your computer and use it in GitHub Desktop.
Save dipernaa/d5579ec5784d6623b8026e2bdb48cb1c to your computer and use it in GitHub Desktop.
Gets coverage from a salesforce sandbox and sends it to coveralls
const fs = require('fs');
const md5 = require('md5');
const colors = require('colors');
const jsforce = require('jsforce');
const request = require('request');
const program = require('commander');
const conn = new jsforce.Connection();
program
.option('-u, --username [value]', 'Sandbox username')
.option('-p, --password [value]', 'Sandbox password')
.parse(process.argv);
if (!program.username || !program.password) {
program.help(colors.red);
} else {
conn.login(program.username, program.password, (err, res) => {
if (err) throw err;
conn.tooling.query('SELECT ApexClassOrTrigger.Name, Coverage FROM ApexCodeCoverageAggregate', (err, res) => {
if (err) throw err;
const recordCoverage = res.records.map(record => {
const name = record.ApexClassOrTrigger.Name.indexOf('Trigger') > -1 ?
`src/triggers/${record.ApexClassOrTrigger.Name}.trigger` :
`src/classes/${record.ApexClassOrTrigger.Name}.cls`;
const source_digest = md5(fs.readFileSync(`./${name}`));
const coverage = [];
const coverageMap = {};
record.Coverage.coveredLines.forEach(val => coverageMap[val] = true);
record.Coverage.uncoveredLines.forEach(val => coverageMap[val] = false);
const sortedKeys = Object.keys(coverageMap).sort((a, b) => {
if (parseInt(a) < parseInt(b)) {
return -1;
} else if (parseInt(a) > parseInt(b)) {
return 1;
}
return 0;
});
for (let i = 1; i <= parseInt(sortedKeys[sortedKeys.length - 1]); i += 1) {
let val = null;
if (coverageMap[i] !== undefined) {
val = coverageMap[i] ? 1 : 0;
}
coverage.push(val);
}
return {
name,
source_digest,
coverage
};
});
const result = {
service_job_id: process.env.TRAVIS_JOB_ID,
service_name: 'travis-pro',
repo_token: process.env.coveralls_repo_token,
source_files: recordCoverage
};
request.post({
url: 'https://coveralls.io/api/v1/jobs',
form: { json: JSON.stringify(result) }
}, (err, response, body) => {
if (err) throw err;
console.log(body);
console.log('Coveralls successfully uploaded!');
});
});
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment