Add task to download releases from s3
// FREEBIE
This commit is contained in:
parent
5078e1e7d8
commit
9fe6bce0cc
1 changed files with 112 additions and 0 deletions
112
Gruntfile.js
112
Gruntfile.js
|
@ -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']);
|
||||
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue