From 9fe6bce0cce93bf95aa5b00172acfb8399897519 Mon Sep 17 00:00:00 2001 From: lilia Date: Thu, 4 May 2017 14:42:30 -0700 Subject: [PATCH] Add task to download releases from s3 // FREEBIE --- Gruntfile.js | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/Gruntfile.js b/Gruntfile.js index 1b68ee07a2..6d0a30eadf 100644 --- a/Gruntfile.js +++ b/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: ` + }); + 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']); };