|
|
|
@ -217,6 +217,20 @@ module.exports = function(grunt) {
|
|
|
|
|
cmd: 'tx pull'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
release: {
|
|
|
|
|
mac: {
|
|
|
|
|
archive: 'mac/Signal.app/Contents/Resources/app.asar',
|
|
|
|
|
},
|
|
|
|
|
mas: {
|
|
|
|
|
archive: 'mas/Signal.app/Contents/Resources/app.asar',
|
|
|
|
|
},
|
|
|
|
|
linux: {
|
|
|
|
|
archive: 'linux-unpacked/resources/app.asar',
|
|
|
|
|
},
|
|
|
|
|
win: {
|
|
|
|
|
archive: 'win-unpacked/resources/app.asar',
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
gitinfo: {} // to be populated by grunt gitinfo
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
@ -249,6 +263,7 @@ module.exports = function(grunt) {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('getExpireTime', function() {
|
|
|
|
|
grunt.task.requires('gitinfo');
|
|
|
|
|
var gitinfo = grunt.config.get('gitinfo');
|
|
|
|
|
var commited = gitinfo.local.branch.current.lastCommitTime;
|
|
|
|
|
var time = Date.parse(commited) + 1000 * 60 * 60 * 24 * 90;
|
|
|
|
@ -256,11 +271,108 @@ module.exports = function(grunt) {
|
|
|
|
|
JSON.stringify({ buildExpiration: time }) + '\n');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('clean-release', function() {
|
|
|
|
|
require('rimraf').sync('release');
|
|
|
|
|
require('mkdirp').sync('release');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('fetch-release', function() {
|
|
|
|
|
grunt.task.requires('gitinfo');
|
|
|
|
|
require('mkdirp').sync('release');
|
|
|
|
|
var fs = require('fs');
|
|
|
|
|
var done = this.async();
|
|
|
|
|
var package_json = grunt.config.get('pkg');
|
|
|
|
|
var gitinfo = grunt.config.get('gitinfo');
|
|
|
|
|
var https = require('https');
|
|
|
|
|
|
|
|
|
|
var urlBase = "https://s3-us-west-1.amazonaws.com/signal-desktop-builds";
|
|
|
|
|
var keyBase = 'liliakai/textsecure-chrome';
|
|
|
|
|
var sha = gitinfo.local.branch.current.SHA;
|
|
|
|
|
var files = [
|
|
|
|
|
'signal-desktop-' + package_json.version + '.zip',
|
|
|
|
|
'Signal-' + package_json.version + '-win.zip'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
var extract = require('extract-zip');
|
|
|
|
|
var download = function(url, dest, cb) {
|
|
|
|
|
var file = fs.createWriteStream(dest);
|
|
|
|
|
var request = https.get(url, function(response) {
|
|
|
|
|
if (response.statusCode !== 200) {
|
|
|
|
|
cb(response.statusCode);
|
|
|
|
|
} else {
|
|
|
|
|
response.pipe(file);
|
|
|
|
|
file.on('finish', function() {
|
|
|
|
|
file.close(function() {
|
|
|
|
|
extract(dest, {dir: 'release'}, cb);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}).on('error', function(err) { // Handle errors
|
|
|
|
|
fs.unlink(dest); // Delete the file async. (But we don't check the result)
|
|
|
|
|
if (cb) cb(err.message);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Promise.all(files.map(function(fileName) {
|
|
|
|
|
var key = [ keyBase, sha, 'dist', fileName].join('/');
|
|
|
|
|
var url = [urlBase, key].join('/');
|
|
|
|
|
var dest = 'release/' + fileName;
|
|
|
|
|
return new Promise(function(resolve) {
|
|
|
|
|
console.log(url);
|
|
|
|
|
download(url, dest, function(err) {
|
|
|
|
|
if (err) {
|
|
|
|
|
console.log('failed', dest, err);
|
|
|
|
|
resolve(err);
|
|
|
|
|
} else {
|
|
|
|
|
console.log('done', dest);
|
|
|
|
|
resolve();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
})).then(function(results) {
|
|
|
|
|
results.forEach(function(error) {
|
|
|
|
|
if (error) {
|
|
|
|
|
grunt.fail.warn('Failed to fetch some release artifacts');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerMultiTask('test-release', 'Test packaged releases', function() {
|
|
|
|
|
var dir = grunt.option('dir') || 'dist';
|
|
|
|
|
var environment = grunt.option('env') || 'production';
|
|
|
|
|
var asar = require('asar');
|
|
|
|
|
var config = this.data;
|
|
|
|
|
var archive = [dir, config.archive].join('/');
|
|
|
|
|
var files = [
|
|
|
|
|
'config/default.json',
|
|
|
|
|
'config/' + environment + '.json',
|
|
|
|
|
'config/local-' + environment + '.json'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
console.log(this.target, archive);
|
|
|
|
|
var releaseFiles = files.concat(config.files || []);
|
|
|
|
|
releaseFiles.forEach(function(fileName) {
|
|
|
|
|
console.log(fileName);
|
|
|
|
|
try {
|
|
|
|
|
asar.statFile(archive, fileName);
|
|
|
|
|
return true;
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.log(e);
|
|
|
|
|
throw new Error("Missing file " + fileName);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// todo: verify package.json has `environment: <environment>`
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('tx', ['exec:tx-pull', 'locale-patch']);
|
|
|
|
|
grunt.registerTask('dev', ['default', 'connect', 'watch']);
|
|
|
|
|
grunt.registerTask('test', ['jshint', 'jscs' ]);
|
|
|
|
|
grunt.registerTask('copy_dist', ['gitinfo', 'copy']);
|
|
|
|
|
grunt.registerTask('date', ['gitinfo', 'getExpireTime']);
|
|
|
|
|
grunt.registerTask('prep-release', ['gitinfo', 'fetch-release', 'test-release']);
|
|
|
|
|
grunt.registerTask('default', ['concat', 'sass', 'date']);
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|