1 | const bytes = require('bytes')
|
2 | const { error, warn, info } = require('prettycli')
|
3 | const { event, branch } = require('ci-env')
|
4 | const build = require('./build')
|
5 | const api = require('./api')
|
6 | const debug = require('./debug')
|
7 |
|
8 | const compare = (files, masterValues = {}) => {
|
9 | let fail = false
|
10 | let globalMessage
|
11 |
|
12 | files.map(file => (file.master = masterValues[file.path]))
|
13 |
|
14 | files.map(file => {
|
15 | const { path, size, master, maxSize } = file
|
16 |
|
17 | let message = `${path}: ${bytes(size)} `
|
18 |
|
19 | |
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | if (size > maxSize) {
|
26 | fail = true
|
27 | message += `> maxSize ${bytes(maxSize)} gzip`
|
28 | error(message, { fail: false, label: 'FAIL' })
|
29 | } else if (!master) {
|
30 | message += `< maxSize ${bytes(maxSize)} gzip`
|
31 | info('PASS', message)
|
32 | } else {
|
33 | message += `< maxSize ${bytes(maxSize)} gzip `
|
34 | const diff = size - master
|
35 |
|
36 | if (diff < 0) {
|
37 | message += `(${bytes(Math.abs(diff))} smaller than master, good job!)`
|
38 | info('PASS', message)
|
39 | } else if (diff > 0) {
|
40 | message += `(${bytes(diff)} larger than master, careful!)`
|
41 | warn(message)
|
42 | } else {
|
43 | message += `(same as master)`
|
44 | info('PASS', message)
|
45 | }
|
46 | }
|
47 |
|
48 | if (files.length === 1) globalMessage = message
|
49 | debug('message', message)
|
50 | })
|
51 |
|
52 | if (fail) build.fail(globalMessage || 'bundle size > maxSize')
|
53 | else {
|
54 | if (event === 'push' && branch === 'master') {
|
55 | const values = []
|
56 | files.map(file => values.push({ path: file.path, size: file.size }))
|
57 | api.set(values)
|
58 | }
|
59 | build.pass(globalMessage || 'Good job! bundle size < maxSize')
|
60 | }
|
61 |
|
62 | debug('global message', globalMessage)
|
63 | }
|
64 |
|
65 | const reporter = files => {
|
66 | if (api.enabled) api.get().then(masterValues => compare(files, masterValues))
|
67 | else compare(files)
|
68 | }
|
69 |
|
70 | module.exports = reporter
|