-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathbuild.js
106 lines (92 loc) · 3.53 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
const fs = require('fs')
const fse = require('fs-extra')
const path = require('path')
const {zip} = require('zip-a-folder')
const VERSION_FILE = path.join(__dirname, 'VERSION.txt')
const SRC_DIR = path.join(__dirname, 'src')
const DIST_DIR = path.join(__dirname, 'dist')
const REFERENCES_DIR = path.join(SRC_DIR,'references')
const SCRIPT_DIR = path.join(SRC_DIR, 'ressources', 'scripts')
const TEST_DIR = path.join(SCRIPT_DIR, 'tests')
function clean(){
if (fs.existsSync(DIST_DIR)) {
console.log('Clean dist directory : ' + DIST_DIR)
fs.rmdirSync(DIST_DIR, {recursive: true})
}
fs.mkdirSync(DIST_DIR)
}
function buildManifest(manifest, version, reference){
console.log('Build manifest')
manifest.version = version
manifest.short_name = "Tanaguru webext " + reference.toUpperCase()
return JSON.stringify(manifest)
}
function copySources(dir){
console.log('Copy sources in ' + dir)
fse.copySync(
SRC_DIR,
dir,
{
recursive: true,
filter: (src, dest) => {
return !src.includes(REFERENCES_DIR) && !src.includes(TEST_DIR) && !src.includes("manifest.js");
}
}
)
}
function buildScripts(refName){
let testFolder = fs.readdirSync(path.join(REFERENCES_DIR, refName));
let functionsFolder = fs.readdirSync(path.join(TEST_DIR, 'functions'));
let datasFolder = fs.readdirSync(path.join(TEST_DIR, 'datas'));
let script = ""
if(fs.existsSync(path.join(REFERENCES_DIR, refName))){
script = fs.readFileSync(path.join(TEST_DIR, 'contrasts.js'));
script += '\n';
datasFolder.forEach(datasFile => {
script+= fs.readFileSync(path.join(TEST_DIR, 'datas', datasFile));
script += '\n';
});
functionsFolder.forEach(functionFile => {
script+= fs.readFileSync(path.join(TEST_DIR, 'functions', functionFile));
script += '\n';
});
script += fs.readFileSync(path.join(TEST_DIR, 'content.js'));
script += '\n';
script+= fs.readFileSync(path.join(REFERENCES_DIR, refName, refName+'-init.js'));
script += '\n';
testFolder.forEach(testFile => {
if(testFile != refName+'-init.js') {
script+= fs.readFileSync(path.join(REFERENCES_DIR, refName, testFile));
script += '\n';
}
});
script += fs.readFileSync(path.join(TEST_DIR, 'init-tests.js'))
}else{
console.error("Test file ", refName, ' does not exist')
}
return script
}
console.log('Start build')
clean();
// build manifests
let version = fs.readFileSync(VERSION_FILE).toString().trim();
let manifest = Object.assign({}, require(path.join(SRC_DIR, 'manifest.json')));
let references = fs.readdirSync(REFERENCES_DIR);
let test_contents = {}
for(const reference of references){
console.log("Create script for reference " + reference)
test_contents[reference] = buildScripts(reference);
}
for(const reference of references){
let manifestContent = buildManifest(manifest, version, reference);
let dir = path.join(DIST_DIR, 'tanaguru-' + reference + '-' + version)
fs.mkdirSync(dir, { recursive: true })
fs.writeFileSync(
path.join(dir, 'manifest.json'),
manifestContent);
copySources(dir);
fs.mkdirSync(path.join(dir, 'ressources', 'scripts', 'tests'), { recursive: true });
fs.writeFileSync(path.join(dir, 'ressources', 'scripts', 'tests', 'tests.js'), test_contents[reference]);
zip(dir, dir + ".zip");
}
console.log('Build finished')