-
Notifications
You must be signed in to change notification settings - Fork 4
/
can_publish.js
103 lines (94 loc) · 2.58 KB
/
can_publish.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/**
* page_capture
*
* check if the current codebase should be published (based on version numbers)
*
* Copyright (c) 2015 Yieldbot, Inc. - All rights reserved.
*/
'use strict';
// check manifest.json and package.json versions
// if versions are the same
// check draft manifest version
// if manifest.json > draft manifest version
// publish
// else
// no publish
// else
// log that versions are different
var request = require('request');
var cmp = require('semver-compare');
var pkgVersion = require('./package.json').version;
var manifestVersion = require('./src/manifest.json').version;
var oauth = {
grant_type: 'refresh_token',
refresh_token: process.env.REFRESH_TOKEN_READ_ONLY,
client_id: process.env.CLIENT_ID,
client_secret: process.env.CLIENT_SECRET
};
var fields = '';
for (var p in oauth) {
fields += p + '=' + oauth[p] + '&';
}
var postConfig = {
url: 'https://www.googleapis.com/oauth2/v3/token?' + fields,
json: true
};
//https://developer.chrome.com/webstore/webstore_api/items/get
var getManifestInfo = function(token, cb) {
var options = {
url: 'https://www.googleapis.com/chromewebstore/v1.1/items/' + process.env.APP_ID + '?projection=DRAFT',
json: true,
headers: {
'Authorization': 'Bearer ' + token,
'x-goog-api-version': '2',
'Content-Length': '0',
'Expect': ''
}
};
request(options, function callback(err, res, body) {
if (err) {
console.error('ERROR.3', err);
process.exit(1);
} else {
try {
if (body.crxVersion) {
var version = body.crxVersion;
cb(version);
} else {
console.error('ERROR.4', 'no "crxVersion" property on', body);
process.exit(1);
}
} catch (err) {
console.error('ERROR.5', err);
process.exit(1);
}
}
});
};
if (pkgVersion !== manifestVersion) {
console.log('package and manifest versions are different');
process.exit(1);
} else {
// get the readonly refresh token
request.post(postConfig, function(err, res, body) {
if (err) {
console.error('ERROR.1', err);
process.exit(1);
} else {
try {
getManifestInfo(body.access_token, function(version) {
if (cmp(manifestVersion, version)) {
console.log(manifestVersion, '>', version);
process.exit();
} else {
console.log(manifestVersion, 'not_greater_than', version);
process.exit(1);
}
});
} catch (err) {
console.error('ERROR.2', err);
process.exit(1);
}
}
});
}