/*jshint node:true */ 'use strict'; module.exports = function (grunt) { grunt.loadNpmTasks('grunt-http'); /** * Select matching asset from last release in releases list * from GitHub API * * @param {releases: array} Releases list * @return {string|false} Asset download URL, false if none found */ function selectAsset(releases) { var assets, asset, release, assetsLength, releasesLength, name, types = grunt.config.get('platforms'), type = types[grunt.task.current.args[0]], i, j; releasesLength = releases.length; for (i = 0; i < releasesLength; i += 1) { release = releases[i]; name = 'atom-shell-' + release.tag_name + '-' + type + '.zip'; // we only want stable releases if (release.prerelease === false && release.draft === false) { assets = release.assets; assetsLength = assets.length; for (j = 0; j < assetsLength; j += 1) { asset = assets[j]; if (asset.name === name) { return asset.browser_download_url; } } } } return false; } grunt.config('http.find-asset', { options: { url: '<%= releases %>', headers: { 'User-Agent': 'Grunt' }, callback: function (err, res, body) { if (err) { throw err; } var releases = JSON.parse(body), asset = selectAsset(releases); if (asset !== false) { grunt.config.set('asset', asset); } else { grunt.fail.warn(new Error('No recent release found')); } } } }); };