-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
87 lines (78 loc) · 2.18 KB
/
index.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
86
87
var fs = require('fs');
var path = require('path');
var request = require('request');
var netrc = require('node-netrc');
var chalk = require('chalk');
var Chance = require('chance');
var chance = new Chance();
module.exports = function(config) {
if (!config.app) {
console.log(chalk.red('You must specify an app name.'));
return;
}
if (!config.tarball) {
console.log(chalk.red('You must specify a tarball.'));
return;
}
var APP_URL = 'https://api.heroku.com/apps/' + config.app;
var nrc = netrc('api.heroku.com');
var credentials = {
username: nrc.login,
password: nrc.password
};
var sourceConfig = {
method: 'POST',
url: APP_URL + '/sources',
headers: {
'Accept': 'application/vnd.heroku+json; version=3'
},
auth: credentials
};
console.log(chalk.blue('Getting source urls...'));
request(sourceConfig, function(e, res, body) {
if (!e) {
console.log(chalk.green('SUCCESS!'));
var source = JSON.parse(body);
var tarball = fs.readFileSync(path.resolve(config.tarball));
console.log(chalk.blue('Uploading tarball...'));
request({
method: 'PUT',
url: source.source_blob.put_url,
body: tarball
}, function(e, res, body) {
if (!e) {
console.log(chalk.green('SUCCESS!'));
console.log(chalk.blue('Creating build...'));
request({
method: 'POST',
url: APP_URL + '/builds',
headers: {
'Accept': 'application/vnd.heroku+json; version=3'
},
auth: credentials,
json: true,
body: {
source_blob: {
url: source.source_blob.get_url,
version: chance.hash()
}
}
}, function(e, res, body) {
if (!e) {
console.log(chalk.green('SUCCESS!'));
} else {
handleError(e, res);
}
});
} else {
handleError(e, res);
}
});
} else {
handleError(e, res);
}
});
function handleError(e, res) {
console.log(chalk.red('Uh oh, something went wrong...'), e, res.statusCode);
}
};