DEV: Add progress output in CI during ember-cli build (#17977)

By default, in CI environments, Ember CLI does not output anything between "building..." and "cleaning up". Depending on configuration and hardware, Discourse asset builds can take upwards of 60s, and so this lack of output can make the build feel 'stuck'.

This commit introduces an addon which checks for CI mode, and then outputs status information periodically. The logic is very similar to Ember CLI's non-CI progress output implementation (https://github.com/ember-cli/ember-cli/blob/04a38fda2c/lib/models/builder.js#L183-L185).
This commit is contained in:
David Taylor 2022-08-17 22:39:52 +01:00 committed by GitHub
parent e70bab16e0
commit 72ea00d0cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 66 additions and 0 deletions

View File

@ -51,6 +51,7 @@
"ember-cli-deprecation-workflow": "^2.1.0",
"ember-cli-htmlbars": "^6.1.0",
"ember-cli-inject-live-reload": "^2.1.0",
"ember-cli-progress-ci": "1.0.0",
"ember-cli-sri": "^2.1.1",
"ember-cli-terser": "^4.0.2",
"ember-exam": "^7.0.1",

View File

@ -0,0 +1,54 @@
"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);
},
};

View File

@ -0,0 +1,10 @@
{
"name": "ember-cli-progress-ci",
"version": "1.0.0",
"description": "Provides output during the ember-cli build process for CI environments",
"author": "Discourse",
"license": "GPL-2.0-only",
"keywords": [
"ember-addon"
]
}

View File

@ -7,6 +7,7 @@
"discourse-ensure-deprecation-order",
"discourse-hbr",
"discourse-widget-hbs",
"ember-cli-progress-ci",
"pretty-text",
"select-kit",
"truth-helpers",