Files
libloot/scripts/archive.js
T

169 lines
4.8 KiB
JavaScript
Raw Permalink Normal View History

2015-08-27 12:41:58 +01:00
#!/usr/bin/env node
// Archive packaging script. Takes one argument, which is the path to the
// repository's root. Requires 7-zip and Git to be installed, and Git to be
// available on the system path.
var child_process = require('child_process');
var path = require('path');
var fs = require('fs-extra');
function vulcanize() {
return child_process.execFileSync('node', [
'scripts/vulcanize.js',
root_path
]);
}
function getGitDescription() {
return String(child_process.execFileSync('git', [
'describe',
'--tags',
'--long'
])).slice(0, -1);
}
function compress(source_path, dest_path) {
var sevenzip_path = path.join('C:\\', 'Program Files', '7-Zip', '7z.exe');
// First remove any existing archive.
fs.removeSync(dest_path);
// The last argument must have a leading dot for the subdirectory not to
// be present in the archive, but path.join removes it, so it's prefixed.
return child_process.execFileSync(sevenzip_path, [
'a',
'-r',
dest_path,
'.' + path.sep + path.join(source_path, '*')
]);
}
function createAppArchive(dest_path) {
// Ensure that the output directory is empty.
fs.emptyDirSync(temp_path);
// Copy LOOT exectuable and CEF files.
[
'LOOT.exe',
'd3dcompiler_47.dll',
'libEGL.dll',
'libGLESv2.dll',
'libcef.dll',
'wow_helper.exe',
'natives_blob.bin',
'snapshot_blob.bin',
'cef.pak',
'cef_100_percent.pak',
'cef_200_percent.pak',
'devtools_resources.pak',
'icudtl.dat'
].forEach(function(file){
fs.copySync(
path.join(root_path, 'build', 'Release', file),
path.join(temp_path, file)
);
});
// CEF locale file.
fs.mkdirsSync(path.join(temp_path, 'resources', 'l10n'));
fs.copySync(
path.join(root_path, 'build', 'Release', 'resources', 'l10n', 'en-US.pak'),
path.join(temp_path, 'resources', 'l10n', 'en-US.pak')
);
// Translation files.
[
'es', 'ru', 'fr', 'zh_CN', 'pl',
'pt_BR', 'fi', 'de', 'da', 'ko'
].forEach(function(lang){
fs.mkdirsSync(path.join(temp_path, 'resources', 'l10n', lang, 'LC_MESSAGES'));
fs.copySync(
path.join(root_path, 'resources', 'l10n', lang, 'LC_MESSAGES', 'loot.mo'),
path.join(temp_path, 'resources', 'l10n', lang, 'LC_MESSAGES', 'loot.mo')
);
});
// UI files.
fs.mkdirsSync(path.join(temp_path, 'resources', 'ui', 'css'));
fs.copySync(
path.join(root_path, 'build', 'Release', 'resources', 'ui', 'index.html'),
path.join(temp_path, 'resources', 'ui', 'index.html')
);
fs.copySync(
path.join(root_path, 'resources', 'ui', 'css', 'dark-theme.css'),
path.join(temp_path, 'resources', 'ui', 'css', 'dark-theme.css')
);
fs.copySync(
path.join(root_path, 'resources', 'ui', 'fonts'),
path.join(temp_path, 'resources', 'ui', 'fonts')
);
// Docs.
fs.mkdirsSync(path.join(temp_path, 'docs'));
[
'images',
'licenses',
'LOOT Metadata Syntax.html',
'LOOT Readme.html'
].forEach(function(item){
fs.copySync(
path.join(root_path, 'docs', item),
path.join(temp_path, 'docs', item)
);
});
// Now compress the folder to a 7-zip archive.
compress(temp_path, dest_path);
// Finally, delete the temporary folder.
fs.removeSync(temp_path);
}
function createApiArchive(dest_path) {
// Ensure that the output directory is empty.
fs.emptyDirSync(temp_path);
// API binary.
fs.copySync(
path.join(root_path, 'build', 'Release', 'loot32.dll'),
path.join(temp_path, 'loot32.dll')
);
// API header file.
fs.mkdirsSync(path.join(temp_path, 'include', 'loot'));
fs.copySync(
path.join(root_path, 'src', 'api', 'api.h'),
path.join(temp_path, 'include', 'loot', 'api.h')
);
// Docs.
fs.mkdirsSync(path.join(temp_path, 'docs'));
fs.copySync(
path.join(root_path, 'docs', 'latex', 'refman.pdf'),
path.join(temp_path, 'docs', 'readme.pdf')
);
fs.copySync(
path.join(root_path, 'docs', 'licenses'),
path.join(temp_path, 'docs', 'licenses')
);
// Now compress the folder to a 7-zip archive.
compress(temp_path, dest_path);
// Finally, delete the temporary folder.
fs.removeSync(temp_path);
}
2015-08-27 15:47:01 +01:00
if (process.argv.length < 3) {
var root_path = '.';
} else {
var root_path = process.argv[2];
}
var temp_path = path.join(root_path, 'build', 'archive.tmp');
2015-08-27 12:41:58 +01:00
var git_desc = getGitDescription();
vulcanize();
createAppArchive(path.join(root_path, 'build', 'LOOT ' + git_desc + '.7z'));
createApiArchive(path.join(root_path, 'build', 'LOOT API ' + git_desc + '.7z'));