-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbuild.js
113 lines (100 loc) · 3.68 KB
/
build.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/* eslint no-console: ["off"] */
const addonsLinter = require('addons-linter');
const archiver = require('archiver');
const copydir = require('copy-dir');
const { ESLint } = require('eslint');
const fs = require('fs');
const rimraf = require('rimraf');
const copyDir = (src, dest) => {
console.log(`created: ${dest}`);
copydir.sync(`${__dirname}/${src}`, `${__dirname}/${dest}`, {
utimes: true,
mode: true,
cover: true,
});
};
const copyFile = (src, dest) => {
console.log(`created: ${dest}`);
fs.copyFileSync(`${__dirname}/${src}`, `${__dirname}/${dest}`);
};
const cleanupDistributionFolder = () => {
// delete dist/ folder
rimraf.sync(`${__dirname}/dist/`);
fs.mkdirSync(`${__dirname}/dist/`);
};
const eslint = async () => {
console.log(`
┌───────────────────────┐
│ ESLint │
└───────────────────────┘`);
const linter = new ESLint({ fix: true });
const results = await linter.lintFiles(['src/']);
await ESLint.outputFixes(results);
const formatter = await linter.loadFormatter('stylish');
const resultText = formatter.format(results);
console.log(resultText);
if (ESLint.getErrorResults(results).length > 0) {
process.exit(1);
}
console.log(`ESLint: ${results.length} files checked`);
};
const makeChromeVersion = () => {
console.log(`
┌───────────────────────┐
│ Chrome extension │
└───────────────────────┘`);
fs.mkdirSync(`${__dirname}/dist/chrome/`);
console.log('created: dist/chrome/');
copyDir('img/', 'dist/chrome/img/');
copyDir('src/', 'dist/chrome/src/');
copyFile('manifest.chrome.json', 'dist/chrome/manifest.json');
const archive = archiver('zip', { zlib: { level: 9 } });
const stream = fs.createWriteStream(`${__dirname}/dist/chrome.zip`);
archive.pipe(stream);
archive.directory(`${__dirname}/dist/chrome/img/`, 'img');
archive.directory(`${__dirname}/dist/chrome/src/`, 'src');
archive.file(`${__dirname}/dist/chrome/manifest.json`, { name: 'manifest.json' });
archive.finalize();
console.log('created: dist/chrome.zip');
};
const makeFirefoxVersion = () => {
console.log(`
┌───────────────────────┐
│ Firefox add-on │
└───────────────────────┘`);
fs.mkdirSync(`${__dirname}/dist/firefox/`);
console.log('created: dist/firefox/');
copyDir('img/', 'dist/firefox/img/');
copyDir('src/', 'dist/firefox/src/');
copyFile('manifest.firefox.json', 'dist/firefox/manifest.json');
const archive = archiver('zip', { zlib: { level: 9 } });
const stream = fs.createWriteStream(`${__dirname}/dist/firefox.zip`);
archive.pipe(stream);
archive.directory(`${__dirname}/dist/firefox/img/`, 'img');
archive.directory(`${__dirname}/dist/firefox/src/`, 'src');
archive.file(`${__dirname}/dist/firefox/manifest.json`, { name: 'manifest.json' });
archive.finalize();
console.log('created: dist/firefox.zip');
};
const addonLint = async () => {
console.log(`
┌───────────────────────┐
│ Add-ons lint │
└───────────────────────┘`);
const linter = addonsLinter.createInstance({
config: {
_: [`${process.cwd()}/dist/firefox`],
logLevel: 'fatal',
stack: Boolean(process.env.VERBOSE),
},
});
await linter.run();
};
const main = async () => {
cleanupDistributionFolder();
await eslint();
makeChromeVersion();
makeFirefoxVersion();
await addonLint();
};
main();