forked from WikiEducationFoundation/WikiEduDashboard
-
Notifications
You must be signed in to change notification settings - Fork 0
/
prepare.js
115 lines (99 loc) · 4.48 KB
/
prepare.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
114
115
/* eslint no-console: ["error", { allow: ["log"] }] */
function elapsed(hrtime) {
const seconds = (hrtime[0] + (hrtime[1] / 1e9)).toFixed(3);
start = process.hrtime(); // reset the time
return seconds;
}
function getHashOfI18nFiles() {
// we use the sha1sum of the i18n files to determine if we need to rebuild
return execSync('cat config/locales/* | sha1sum').toString().split('-')[0].trim();
}
let start = process.hrtime();
const execSync = require('child_process').execSync;
const exec = require('child_process').exec;
const config = require('./config');
const fs = require('fs');
let fullRebuild = false;
try {
const lastHash = fs.readFileSync(`${config.buildCache}/i18n/hash.txt`).toString();
const currentHash = getHashOfI18nFiles();
// check if the previous hash is the same as the current hash
// if same, we can skip the i18n export
fullRebuild = lastHash.trim() !== currentHash.trim();
} catch (e) {
// if however, the cache files are not found, we need to rebuild
execSync(`mkdir -p ${config.buildCache}/i18n`);
fullRebuild = true;
}
// cleans the stale assets
console.log('Started cleaning stale assets');
execSync(`rm -rf ${config.outputPath}`);
console.log('\x1b[33m%s\x1b[0m', `Finished cleaning stale assets after ${elapsed(process.hrtime(start))} seconds`);
if (fullRebuild) {
// export i18n files
console.log('Started emitting i18n translations');
execSync('bundle exec i18n export -c ./config/i18n-js.yml');
console.log('\x1b[33m%s\x1b[0m', `Finished emitting i18n translations after ${elapsed(process.hrtime(start))} seconds`);
const hash = getHashOfI18nFiles();
// copy i18n files to cache
exec(`cp ${config.outputPath}/${config.jsDirectory}/i18n.js ${config.buildCache}/i18n/i18n.js`);
exec(`cp ${config.outputPath}/${config.jsDirectory}/i18n ${config.buildCache}/i18n/i18n -r`);
// write the hash value
fs.writeFile(`${config.buildCache}/i18n/hash.txt`, hash, () => {
console.log('Updated cache');
});
} else {
console.log('\x1b[33m%s\x1b[0m', 'Skipping i18n export - found cached version');
execSync(`mkdir -p ${config.outputPath}/${config.jsDirectory}`);
}
// copies static assets from the source to assets folder
const copyPaths = [{
from: './node_modules/jquery/dist/jquery.min.js',
to: `${config.outputPath}/${config.jsDirectory}`,
}, {
from: `${config.sourcePath}/${config.imagesDirectory}`,
to: `${config.outputPath}/${config.imagesDirectory}`,
}, {
from: `${config.sourcePath}/${config.fontsDirectory}`,
to: `${config.outputPath}/${config.fontsDirectory}`,
}, {
from: './node_modules/tinymce/skins',
to: `${config.outputPath}/${config.jsDirectory}/skins`,
}];
// if we're not doing a full rebuild, we need to copy the files from the cache to the output folder
if (!fullRebuild) {
copyPaths.push({
from: `${config.buildCache}/i18n/i18n.js`,
to: `${config.outputPath}/${config.jsDirectory}`,
});
copyPaths.push({
from: `${config.buildCache}/i18n/i18n`,
to: `${config.outputPath}/${config.jsDirectory}`,
});
}
copyPaths.forEach((entry, idx) => {
switch (idx) {
case 0: console.log('Started copying jQuery'); break;
case 1: console.log('Started copying images'); break;
case 2: console.log('Started copying fonts'); break;
case 3: console.log('Started copying tinymce skins'); break;
case 4:
console.log('Started copying i18n javascript');
break;
case 5:
console.log('Started copying i18n locales');
break;
default: console.log('Started copying static assets'); break;
}
exec(`cp -r ${entry.from} ${entry.to}`, () => {
switch (idx) {
case 0: console.log('\x1b[33m%s\x1b[0m', `Finished copying jQuery after ${elapsed(process.hrtime(start))} seconds`); break;
case 1: console.log('\x1b[33m%s\x1b[0m', `Finished copying images after ${elapsed(process.hrtime(start))} seconds`); break;
case 2: console.log('\x1b[33m%s\x1b[0m', `Finished copying fonts after ${elapsed(process.hrtime(start))} seconds`); break;
case 3: console.log('\x1b[33m%s\x1b[0m', `Finished copying tinymce skins after ${elapsed(process.hrtime(start))} seconds`); break;
case 4: console.log('\x1b[33m%s\x1b[0m', `Finished copying i18n javascript after ${elapsed(process.hrtime(start))} seconds`); break;
case 5: console.log('\x1b[33m%s\x1b[0m', `Finished copying i18n locales after ${elapsed(process.hrtime(start))} seconds`); break;
default: console.log('\x1b[33m%s\x1b[0m', `Finished copying static assets after ${elapsed(process.hrtime(start))} seconds`); break;
}
});
});