aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-vsts/scripts
diff options
context:
space:
mode:
authorGrégoire Aubert <gregoire.aubert@sonarsource.com>2019-03-25 16:30:58 +0100
committersonartech <sonartech@sonarsource.com>2019-03-29 09:44:59 +0100
commit0c5b4644cf0ca5487516c581530c67a86bc0342f (patch)
tree7fe5894ed1610053a2108f69de58fe61f5cfb7f7 /server/sonar-vsts/scripts
parent1355d080cfa97eadfde70e6945e30f49a38ac28e (diff)
downloadsonarqube-0c5b4644cf0ca5487516c581530c67a86bc0342f.tar.gz
sonarqube-0c5b4644cf0ca5487516c581530c67a86bc0342f.zip
Use same build stats reporter for all modules
Diffstat (limited to 'server/sonar-vsts/scripts')
-rw-r--r--server/sonar-vsts/scripts/build.js15
-rw-r--r--server/sonar-vsts/scripts/utils/reportBuildStats.js55
2 files changed, 57 insertions, 13 deletions
diff --git a/server/sonar-vsts/scripts/build.js b/server/sonar-vsts/scripts/build.js
index e9bff3f1e35..f1f106107d5 100644
--- a/server/sonar-vsts/scripts/build.js
+++ b/server/sonar-vsts/scripts/build.js
@@ -22,7 +22,7 @@ process.env.NODE_ENV = 'production';
const chalk = require('chalk');
const webpack = require('webpack');
-const sortBy = require('lodash/sortBy');
+const reportBuildStats = require('./utils/reportBuildStats');
const getConfig = require('../config/webpack.config');
const config = getConfig({ production: true });
@@ -37,18 +37,7 @@ function build() {
console.log(chalk.red(err.message || err));
process.exit(1);
}
-
- if (stats.compilation.errors && stats.compilation.errors.length) {
- console.log(chalk.red.bold('Failed to create a production build!'));
- stats.compilation.errors.forEach(err => console.log(chalk.red(err.message || err)));
- process.exit(1);
- }
-
- const jsonStats = stats.toJson();
- const seconds = jsonStats.time / 1000;
- console.log('Duration: ' + seconds.toFixed(2) + 's');
- console.log();
-
+ reportBuildStats(stats);
console.log(chalk.green.bold('Compiled successfully!'));
});
}
diff --git a/server/sonar-vsts/scripts/utils/reportBuildStats.js b/server/sonar-vsts/scripts/utils/reportBuildStats.js
new file mode 100644
index 00000000000..cd01610cc39
--- /dev/null
+++ b/server/sonar-vsts/scripts/utils/reportBuildStats.js
@@ -0,0 +1,55 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+/* eslint-disable no-console*/
+const chalk = require('chalk');
+const sortBy = require('lodash/sortBy');
+
+function formatSize(bytes) {
+ if (bytes === 0) {
+ return '0';
+ }
+ const k = 1000; // or 1024 for binary
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(0)) + ' ' + sizes[i];
+}
+
+module.exports = (stats, bundleName = '', filesLimit = 10) => {
+ if (stats.compilation.errors && stats.compilation.errors.length) {
+ console.log(chalk.red.bold('Failed to create a production build!'));
+ stats.compilation.errors.forEach(err => console.log(chalk.red(err.message || err)));
+ process.exit(1);
+ }
+ const jsonStats = stats.toJson();
+ const onlyJS = jsonStats.assets.filter(asset => asset.name.endsWith('.js'));
+ console.log(`Biggest js chunks (${onlyJS.length} total) ${bundleName && `[${bundleName}]`}:`);
+ sortBy(onlyJS, asset => -asset.size)
+ .slice(0, filesLimit)
+ .forEach(asset => {
+ let sizeLabel = formatSize(asset.size);
+ const leftPadding = ' '.repeat(Math.max(0, 8 - sizeLabel.length));
+ sizeLabel = leftPadding + sizeLabel;
+ console.log('', chalk.yellow(sizeLabel), asset.name);
+ });
+ console.log();
+ const seconds = jsonStats.time / 1000;
+ console.log('Duration: ' + seconds.toFixed(2) + 's');
+ console.log();
+};