discourse/app/assets/javascripts/ember-cli-progress-ci/index.js

55 lines
1.2 KiB
JavaScript

"use strict";
const progress = require("ember-cli/lib/utilities/heimdall-progress");
const CHECK_INTERVAL = 100;
const LOG_DUPLICATE_AFTER_DURATION = 5000;
const REPEAT_DUPLICATE_LOG_ITERATIONS =
LOG_DUPLICATE_AFTER_DURATION / CHECK_INTERVAL;
// If running in CI mode, this addon will poll the current build node and log it.
// If the node runs for more than LOG_DUPLICATE_AFTER_DURATION, it will be logged again.
module.exports = {
name: require("./package").name,
preBuild() {
if (this.project.ui.ci) {
this._startOutput();
}
},
outputReady() {
this._stopOutput();
},
buildError() {
this._stopOutput();
},
_startOutput() {
this._discourseProgressLoggerInterval = setInterval(
this._handleProgress.bind(this),
CHECK_INTERVAL
);
},
_handleProgress() {
const text = progress();
if (
text === this._lastText &&
this._sameOutputCount < REPEAT_DUPLICATE_LOG_ITERATIONS
) {
this._sameOutputCount++;
} else {
this.project.ui.writeInfoLine("..." + (text ? `[${text}]` : "."));
this._sameOutputCount = 0;
}
this._lastText = text;
},
_stopOutput() {
clearInterval(this._discourseProgressLoggerInterval);
},
};