Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat: enable citgm run comparisons
  • Loading branch information
codebytere committed Jul 22, 2020
commit 08b01adead389ece3deea32c6e2cb9cb4df0cb1a
21 changes: 19 additions & 2 deletions bin/ncu-ci
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const {
CommitBuild,
CITGMBuild,
DailyBuild,
CITGMComparisonBuild,
HealthBuild,
listBuilds,
FailureAggregator,
Expand Down Expand Up @@ -132,13 +133,17 @@ const argv = yargs
handler
})
.command({
command: 'citgm <jobid>',
command: 'citgm <jobid> [jobid2]',
desc: 'Show results of a citgm-smoker CI job',
builder: (yargs) => {
yargs
.positional('jobid', {
describe: 'id of the job',
type: 'number'
})
.positional('jobid2', {
describe: 'id of the second job, if doing a comparison',
type: 'number'
});
},
handler
Expand Down Expand Up @@ -241,7 +246,12 @@ class CICommand {
break;
case CITGM:
case CITGM_NOBUILD:
build = new CITGMBuild(cli, request, job);
if (job.jobid2) {
const ids = [job.jobid, job.jobid2];
build = new CITGMComparisonBuild(cli, request, ids);
} else {
build = new CITGMBuild(cli, request, job.jobid);
}
break;
case BENCHMARK:
build = new BenchmarkRun(cli, request, job.jobid);
Expand Down Expand Up @@ -365,6 +375,7 @@ class JobCommand extends CICommand {

queue.push({
type: commandToType[this.command],
<<<<<<< HEAD
<<<<<<< HEAD
jobid: this.argv.jobid,
noBuild: this.argv.nobuild || false
Expand All @@ -373,6 +384,12 @@ class JobCommand extends CICommand {
=======
jobid: argv.jobid
>>>>>>> refactor: pull some builds into own files
||||||| merged common ancestors
jobid: argv.jobid
=======
jobid: argv.jobid,
jobid2: argv.jobid2
>>>>>>> feat: enable citgm run comparisons
});
}
}
Expand Down
2 changes: 1 addition & 1 deletion lib/ci/build-types/citgm_build.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const {
FAILURE_CONSTRUCTORS: {
[NCU_FAILURE]: NCUFailure
}
} = require('./ci_failure_parser');
} = require('../ci_failure_parser');

class CITGMBuild extends TestBuild {
constructor(cli, request, id) {
Expand Down
138 changes: 138 additions & 0 deletions lib/ci/build-types/citgm_comparison_build.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
'use strict';

const { statusType } = require('../ci_utils');
const { CITGMBuild } = require('./citgm_build');

class CITGMComparisonBuild {
constructor(cli, request, ids) {
const baseBuild = new CITGMBuild(cli, request, ids[0]);
const comparisonBuild = new CITGMBuild(cli, request, ids[1]);

this.cli = cli;
this.builds = { baseBuild, comparisonBuild };
this.results = {};
this.ids = ids;
}

async getResults() {
const { builds } = this;
const { baseBuild, comparisonBuild } = builds;

// Result in a comparison context reflects
// whether or not there were failures in
// comparisonBuild not present in baseBuild,
// e.g if there were new failures.
let result = statusType.SUCCESS;

await baseBuild.getResults();
await comparisonBuild.getResults();

const { failures: baseFailures } = baseBuild.results;
const { failures: comparisonFailures } = comparisonBuild.results;

const failures = {};
for (const platform in baseFailures) {
const { modules: baseModules } = comparisonFailures[platform];
Comment thread
codebytere marked this conversation as resolved.
Outdated
const { modules: comparisonModules } = comparisonFailures[platform];

const newFailures = comparisonModules.filter(f => {
return !baseModules.includes(f.name);
});

if (newFailures.length !== 0) {
result = statusType.FAILURE;
}

failures[platform] = newFailures;
}

this.results.failures = failures;
this.result = result;

return result;
}

display() {
const { builds } = this;

// Display header for both CITGM runs.
builds.baseBuild.displayHeader();
builds.comparisonBuild.displayHeader();

this.displayBuilds();
}

displayBuilds() {
const { builds, cli, results, result } = this;

const baseID = builds.baseBuild.id;
const comparisonID = builds.comparisonBuild.id;

cli.separator('Results');

if (result === statusType.SUCCESS) {
cli.log('\n\n');
const str = `No new failures in ${baseID} compared to ${comparisonID}`;
cli.log(`${statusType.SUCCESS}: ${str}\n\n`);
return;
}

const output = {};
for (const platform in results.failures) {
const modules = results.failures[platform];
const failures = modules.map(f => f.name);

output[platform] = failures;
}

console.table(output);
}

formatAsJson() {
const { builds, results } = this;
const { baseBuild, comparisonBuild } = builds;

const result = {
baseBuild: {
source: baseBuild.sourceURL,
upstream: comparisonBuild.jobUrl
},
comparisonBuild: {
source: comparisonBuild.sourceURL,
upstream: baseBuild.jobUrl
},
...results.failures
};

return JSON.parse(JSON.stringify(result));
}

formatAsMarkdown() {
const { builds, result, results } = this;
const { baseBuild, comparisonBuild } = builds;

const bLink = `[#${baseBuild.id}](${baseBuild.jobUrl})`;
const cLink = `[#${comparisonBuild.id}](${comparisonBuild.jobUrl})`;

let output = `# CITGM Data for ${bLink} - ${cLink}\n\n`;

if (result === 'success') {
const bID = baseBuild.id;
const cID = comparisonBuild.id;
output += `No new failures in ${cID} compared to ${bID}`;
return output;
}

output += `## New Failures in job ${cLink}\n\n`;
for (const failure in results.failures) {
const data = results.failures[failure];
output += `### ${failure}\n\n`;

const failures = data.map(f => `* ${f.name}`);
output += failures.length ? `${failures.join('\n')}\n\n` : 'None.\n\n';
}
return output;
}
}

module.exports = { CITGMComparisonBuild };
4 changes: 4 additions & 0 deletions lib/ci/ci_result_parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ const { fold, statusType, pad } = require('./ci_utils');
const { Job, jobCache } = require('./build-types/job');
const { TestBuild } = require('./build-types/test_build');
const { CITGMBuild } = require('./build-types/citgm_build');
const {
CITGMComparisonBuild
} = require('./build-types/citgm_comparison_build');
const { flatten } = require('../utils');
const qs = require('querystring');
const _ = require('lodash');
Expand Down Expand Up @@ -775,6 +778,7 @@ module.exports = {
CommitBuild,
CITGMBuild,
DailyBuild,
CITGMComparisonBuild,
HealthBuild,
jobCache,
parseJobFromURL,
Expand Down