piano/grunt/http.js

67 lines
1.9 KiB
JavaScript

/*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'));
}
}
}
});
};