diff --git a/app/assets/javascripts/discourse/package.json b/app/assets/javascripts/discourse/package.json index 2679a8e4232..e618e95b9b2 100644 --- a/app/assets/javascripts/discourse/package.json +++ b/app/assets/javascripts/discourse/package.json @@ -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", diff --git a/app/assets/javascripts/ember-cli-progress-ci/index.js b/app/assets/javascripts/ember-cli-progress-ci/index.js new file mode 100644 index 00000000000..1c30a7e5c85 --- /dev/null +++ b/app/assets/javascripts/ember-cli-progress-ci/index.js @@ -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); + }, +}; diff --git a/app/assets/javascripts/ember-cli-progress-ci/package.json b/app/assets/javascripts/ember-cli-progress-ci/package.json new file mode 100644 index 00000000000..34ae814729c --- /dev/null +++ b/app/assets/javascripts/ember-cli-progress-ci/package.json @@ -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" + ] +} diff --git a/app/assets/javascripts/package.json b/app/assets/javascripts/package.json index 52efea876e3..43154f4212c 100644 --- a/app/assets/javascripts/package.json +++ b/app/assets/javascripts/package.json @@ -7,6 +7,7 @@ "discourse-ensure-deprecation-order", "discourse-hbr", "discourse-widget-hbs", + "ember-cli-progress-ci", "pretty-text", "select-kit", "truth-helpers",