157 lines
5.5 KiB
JavaScript
157 lines
5.5 KiB
JavaScript
const args = process.argv;
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const archiver = require('archiver');
|
|
const hashfiles = require('hash-files');
|
|
|
|
const releaseStub = require('./releasestub.json');
|
|
const mainpkg = require('../package.json');
|
|
const corepkg = require('../release/core/package.json');
|
|
const clientpkg = require('../release/client/package.json');
|
|
const editorpkg = require('../release/editor/package.json');
|
|
|
|
const tag = args.length > 2 ? args[2] : mainpkg.version;
|
|
|
|
releaseStub.files = releaseStub.files.map(file => {
|
|
file.remote = file.remote.replace(':rel', tag);
|
|
return file;
|
|
});
|
|
|
|
const createArchiver = (level = 1) => {
|
|
return archiver('tar', {
|
|
gzip: true,
|
|
gzipOptions: {
|
|
level
|
|
}
|
|
});
|
|
};
|
|
|
|
async function hashFile(fn) {
|
|
return new Promise((resolve, reject) => {
|
|
hashfiles({ files: [fn], algorithm: 'sha256' }, (error, hash) => {
|
|
if (error) return reject();
|
|
resolve(hash);
|
|
});
|
|
});
|
|
}
|
|
|
|
async function fileSize(fn) {
|
|
return new Promise((resolve, reject) => {
|
|
fs.stat(fn, (err, stats) => {
|
|
if (err) return reject();
|
|
resolve(stats['size']);
|
|
});
|
|
});
|
|
}
|
|
|
|
// Core
|
|
async function archiveCore(out = './release/core.tar.gz') {
|
|
return new Promise((resolve, reject) => {
|
|
console.log('packaging core');
|
|
const mainFn = `core.${corepkg.version}.js`;
|
|
const coreArchive = createArchiver(6);
|
|
coreArchive.file('./release/core/package.json', { name: 'core/package.json' });
|
|
coreArchive.file('./release/core/index.js', { name: 'core/index.js' });
|
|
coreArchive.file(`./release/core/${mainFn}`, { name: `core/${mainFn}` });
|
|
coreArchive.file('./release/core/csp.json', { name: 'core/csp.json' });
|
|
coreArchive.file('./release/core/sparkplug.js', { name: 'core/sparkplug.js' });
|
|
coreArchive.directory('./release/core/modules', 'core/modules');
|
|
coreArchive.directory('./release/core/node_modules', 'core/node_modules');
|
|
|
|
const coreZipStream = fs.createWriteStream(out);
|
|
coreArchive.pipe(coreZipStream);
|
|
|
|
coreArchive.on('end', () => resolve(out));
|
|
coreArchive.on('error', reject);
|
|
coreArchive.finalize();
|
|
});
|
|
}
|
|
|
|
// Client
|
|
async function archiveClient(out = './release/client.tar.gz') {
|
|
return new Promise((resolve, reject) => {
|
|
console.log('packaging client');
|
|
const mainFn = `client.${clientpkg.version}.js`;
|
|
const clientArchive = createArchiver();
|
|
clientArchive.file('./release/client/package.json', { name: 'client/package.json' });
|
|
clientArchive.file('./release/core/sparkplug.js', { name: 'client/sparkplug.js' });
|
|
clientArchive.file(`./release/client/${mainFn}`, { name: `client/${mainFn}` });
|
|
|
|
const clientZipStream = fs.createWriteStream(out);
|
|
clientArchive.pipe(clientZipStream);
|
|
|
|
clientArchive.on('end', () => resolve(out));
|
|
clientArchive.on('error', reject);
|
|
clientArchive.finalize();
|
|
});
|
|
}
|
|
|
|
// Editor
|
|
async function archiveEditor(out = './release/editor.tar.gz') {
|
|
return new Promise((resolve, reject) => {
|
|
console.log('packaging editor');
|
|
const mainFn = `editor.${editorpkg.version}.js`;
|
|
const editorArchive = createArchiver();
|
|
editorArchive.directory('./release/editor', 'editor');
|
|
|
|
const editorZipStream = fs.createWriteStream(out);
|
|
editorArchive.pipe(editorZipStream);
|
|
|
|
editorArchive.on('end', () => resolve(out));
|
|
editorArchive.on('error', reject);
|
|
editorArchive.finalize();
|
|
});
|
|
}
|
|
|
|
async function pack() {
|
|
const coreArchive = await archiveCore();
|
|
const coreHash = await hashFile(coreArchive);
|
|
const coreSize = await fileSize(coreArchive);
|
|
console.log(`${coreArchive} ${coreSize} | ${coreHash}`);
|
|
|
|
const coreStub = releaseStub.files.find(f => f.id === 'core');
|
|
coreStub.name = 'core.tar.gz';
|
|
coreStub.version = corepkg.version;
|
|
coreStub.hash = coreHash;
|
|
coreStub.size = coreSize;
|
|
coreStub.remote = coreStub.remote.replace(':fn', 'core.tar.gz');
|
|
|
|
const clientArchive = await archiveClient();
|
|
const clientHash = await hashFile(clientArchive);
|
|
const clientSize = await fileSize(clientArchive);
|
|
console.log(`${clientArchive} ${clientSize} | ${clientHash}`);
|
|
|
|
const clientStub = releaseStub.files.find(f => f.id === 'client');
|
|
clientStub.name = 'client.tar.gz';
|
|
clientStub.version = clientpkg.version;
|
|
clientStub.hash = clientHash;
|
|
clientStub.size = clientSize;
|
|
clientStub.remote = clientStub.remote.replace(':fn', 'client.tar.gz');
|
|
|
|
const editorArchive = await archiveEditor();
|
|
const editorHash = await hashFile(editorArchive);
|
|
const editorSize = await fileSize(editorArchive);
|
|
console.log(`${editorArchive} ${editorSize} | ${editorHash}`);
|
|
|
|
const editorStub = releaseStub.files.find(f => f.id === 'editor');
|
|
editorStub.name = 'editor.tar.gz';
|
|
editorStub.version = editorpkg.version;
|
|
editorStub.hash = editorHash;
|
|
editorStub.size = editorSize;
|
|
editorStub.remote = editorStub.remote.replace(':fn', 'editor.tar.gz');
|
|
|
|
releaseStub.mver = mainpkg.version;
|
|
releaseStub.files = [
|
|
releaseStub.files.find(f => f.id === 'stub'),
|
|
coreStub,
|
|
clientStub,
|
|
editorStub
|
|
];
|
|
|
|
fs.writeFile('./release/releaseinfo.json', JSON.stringify(releaseStub, null, 4), (err) => {
|
|
console.log(`all done! ${tag === ':rel' ? `Don't forget to update :rel` : ''}`);
|
|
});
|
|
}
|
|
|
|
pack();
|