-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsiteglide-cli-archive.js
executable file
·99 lines (85 loc) · 2.99 KB
/
siteglide-cli-archive.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
#!/usr/bin/env node
const program = require('commander'),
fs = require('fs'),
prepareArchive = require('./lib/prepareArchive'),
logger = require('./lib/logger'),
assets = require('./lib/assets/deploy'),
glob = require('glob'),
settings = require('./lib/settings'),
templates = require('./lib/templates'),
version = require('./package.json').version,
dir = require('./lib/directories'),
files = require('./lib/assets/files'),
Gateway = require('./lib/proxy');
const availableDirectories = () => dir.ALLOWED.filter(fs.existsSync);
const addModulesToArchive = (archive, withImages) => {
if (!fs.existsSync(dir.MODULES)) return Promise.resolve(true);
return Promise.all(
glob.sync('*/', { cwd: dir.MODULES }).map(
module => ( addModuleToArchive(module, archive, withImages))
)
);
};
const addModuleToArchive = (module, archive, withImages, pattern = '?(public|private)/**') => {
module = module.replace('/','');
return new Promise((resolve, reject) => {
glob(pattern, { cwd: `${dir.MODULES}/${module}` }, (err, files) => {
if (err) throw reject(err);
const moduleTemplateData = templateData();
return Promise.all(
files
.filter(file => {
return !withImages || !(file.startsWith('public/assets/') || file.startsWith('private/assets'));
})
.map(f => {
const path = `${dir.MODULES}/${module}/${f}`;
return new Promise((resolve, reject) => {
fs.lstat(path, (err, stat) => {
if (!stat.isDirectory()) {
archive.append(templates.fillInTemplateValues(path, moduleTemplateData), {
name: path
});
}
resolve();
});
});
})
).then(r => {
resolve();
})
});
});
};
const makeArchive = (path, directory, program) => {
if (availableDirectories().length === 0) {
logger.Error(`At least one of ${dir.ALLOWED} directories is needed to deploy`, { hideTimestamp: true });
}
const releaseArchive = prepareArchive(path);
releaseArchive.glob('**/*', { cwd: directory, ignore: ['assets/**']}, { prefix: directory });
addModulesToArchive(releaseArchive).then(r => {
releaseArchive.finalize();
});
if(program.opts().withImages===true){
deployAssets(program.opts());
}
};
const deployAssets = async(env) => {
const assetsToDeploy = await files.getAssets();
if (assetsToDeploy.length === 0) {
logger.Warn('There are no assets to deploy, skipping.');
return;
}
await assets.deployAssets(new Gateway(env));
};
const templateData = (module) => {
return settings.loadSettingsFileForModule(module);
};
program
.version(version)
.option('--with-images', 'With images, also deploys the assets/images folder')
.option('--target <target>', 'path to archive', process.env.TARGET || '.tmp/marketplace-release.zip')
.option('--email <email>', 'developer email', process.env.SITEGLIDE_EMAIL)
.option('--token <token>', 'authentication token', process.env.SITEGLIDE_TOKEN)
.option('--url <url>', 'site url', process.env.SITEGLIDE_URL)
.parse(process.argv);
makeArchive(program.opts().target, dir.LEGACY_APP, program);