Add task to download releases from s3

// FREEBIE
This commit is contained in:
lilia 2017-05-04 14:42:30 -07:00 committed by Scott Nonnenberg
parent 5078e1e7d8
commit 9fe6bce0cc
No known key found for this signature in database
GPG key ID: A4931C09644C654B

View file

@ -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']);
};