-
Notifications
You must be signed in to change notification settings - Fork 5
/
build.js
85 lines (70 loc) · 2.31 KB
/
build.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
(function() {
var request = require('request')
, sys = require('sys')
, exec = require('child_process').exec
, pace = require('pace')
, fs = require('fs');
// Get the latest release of Atom-shell
var getLatestRelease = function(target, arch) {
var options = {
url: 'https://api.github.com/repos/atom/atom-shell/releases',
headers: {
'User-Agent': 'andika'
}
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
var latestReleaseAssets = JSON.parse(body)[0]['assets']
, versionNumber = JSON.parse(body)[0]['tag_name']
latestReleaseAssets.some(function(asset) {
var name = asset['name']
, url = 'https://github.com/atom/atom-shell/releases/download/'
+ versionNumber + '/' + name;
if (name.indexOf(target) != -1 && name.indexOf(arch) != -1
&& name.indexOf('symbols') == -1) {
hasAlreadyDownload(name, function() {
console.log('Has already been downloaded');
}, function() {
downloadReleaseAsset(url, name, asset['size']);
});
}
});
}
});
},
hasAlreadyDownload = function(name, success, failure) {
if (fs.existsSync('build/' + name)) success();
else failure();
},
downloadReleaseAsset = function(url, name, contentLength) {
var options = {
url: url,
headers: {
'User-Agent': 'andika'
}
};
console.log('start downloading: '+name);
var req = request(options)
, received = 0, progress = 0;
pace = pace(contentLength);
req.pipe(fs.createWriteStream('build/' + name))
req.on("data", function(data) {
pace.op(data.length);
});
req.on("end", function() {
console.log('File has been successfully downloaded');
});
};
var system, architecture;
process.argv.forEach(function (val, index, array) {
if (index == 2 && ['win', 'linux', 'darwin', 'all'].indexOf(val) != -1)
system = val;
if (index == 3 && ['ia32', 'x64'].indexOf(val) != -1)
architecture = val;
});
if (!fs.existsSync('build'))
fs.mkdir("build", 0766, function(err){
getLatestRelease(system, architecture);
});
else getLatestRelease(system, architecture);
})();