1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = void 0;
|
7 |
|
8 | require("source-map-support/register");
|
9 |
|
10 | var _publisherBase = _interopRequireDefault(require("@electron-forge/publisher-base"));
|
11 |
|
12 | var _asyncOra = require("@electron-forge/async-ora");
|
13 |
|
14 | var _debug = _interopRequireDefault(require("debug"));
|
15 |
|
16 | var _formData = _interopRequireDefault(require("form-data"));
|
17 |
|
18 | var _fs = _interopRequireDefault(require("fs"));
|
19 |
|
20 | var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
21 |
|
22 | var _path = _interopRequireDefault(require("path"));
|
23 |
|
24 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
25 |
|
26 | function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
|
27 |
|
28 | function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
|
29 |
|
30 | function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
31 |
|
32 | function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
33 |
|
34 | function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
35 |
|
36 | function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
37 |
|
38 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { keys.push.apply(keys, Object.getOwnPropertySymbols(object)); } if (enumerableOnly) keys = keys.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); return keys; }
|
39 |
|
40 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
41 |
|
42 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
43 |
|
44 | const d = (0, _debug.default)('electron-forge:publish:nucleus');
|
45 |
|
46 | class PublisherNucleus extends _publisherBase.default {
|
47 | constructor(...args) {
|
48 | super(...args);
|
49 |
|
50 | _defineProperty(this, "name", 'nucleus');
|
51 |
|
52 | _defineProperty(this, "collapseMakeResults", makeResults => {
|
53 | const newMakeResults = [];
|
54 | var _iteratorNormalCompletion = true;
|
55 | var _didIteratorError = false;
|
56 | var _iteratorError = undefined;
|
57 |
|
58 | try {
|
59 | for (var _iterator = makeResults[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
60 | const result = _step.value;
|
61 | const existingResult = newMakeResults.find(nResult => nResult.arch === result.arch && nResult.platform === result.platform && nResult.packageJSON.version === result.packageJSON.version);
|
62 |
|
63 | if (existingResult) {
|
64 | existingResult.artifacts.push(...result.artifacts);
|
65 | } else {
|
66 | newMakeResults.push(_objectSpread({}, result));
|
67 | }
|
68 | }
|
69 | } catch (err) {
|
70 | _didIteratorError = true;
|
71 | _iteratorError = err;
|
72 | } finally {
|
73 | try {
|
74 | if (!_iteratorNormalCompletion && _iterator.return != null) {
|
75 | _iterator.return();
|
76 | }
|
77 | } finally {
|
78 | if (_didIteratorError) {
|
79 | throw _iteratorError;
|
80 | }
|
81 | }
|
82 | }
|
83 |
|
84 | return newMakeResults;
|
85 | });
|
86 | }
|
87 |
|
88 | publish({
|
89 | makeResults
|
90 | }) {
|
91 | var _this = this;
|
92 |
|
93 | return _asyncToGenerator(function* () {
|
94 | const config = _this.config;
|
95 |
|
96 | const collapsedResults = _this.collapseMakeResults(makeResults);
|
97 |
|
98 | var _iteratorNormalCompletion2 = true;
|
99 | var _didIteratorError2 = false;
|
100 | var _iteratorError2 = undefined;
|
101 |
|
102 | try {
|
103 | for (var _iterator2 = collapsedResults.entries()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
104 | const _step2$value = _slicedToArray(_step2.value, 2),
|
105 | resultIdx = _step2$value[0],
|
106 | makeResult = _step2$value[1];
|
107 |
|
108 | const msg = `Uploading result (${resultIdx + 1}/${collapsedResults.length})`;
|
109 | d(msg);
|
110 | yield (0, _asyncOra.asyncOra)(msg,
|
111 | /*#__PURE__*/
|
112 | _asyncToGenerator(function* () {
|
113 | const data = new _formData.default();
|
114 | data.append('platform', makeResult.platform);
|
115 | data.append('arch', makeResult.arch);
|
116 | data.append('version', makeResult.packageJSON.version);
|
117 | let artifactIdx = 0;
|
118 | var _iteratorNormalCompletion3 = true;
|
119 | var _didIteratorError3 = false;
|
120 | var _iteratorError3 = undefined;
|
121 |
|
122 | try {
|
123 | for (var _iterator3 = makeResult.artifacts[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
124 | const artifactPath = _step3.value;
|
125 | // Skip the RELEASES file, it is automatically generated on the server
|
126 | // eslint-disable-next-line no-continue
|
127 | if (_path.default.basename(artifactPath).toLowerCase() === 'releases') continue;
|
128 | data.append(`file${artifactIdx}`, _fs.default.createReadStream(artifactPath));
|
129 | artifactIdx += 1;
|
130 | }
|
131 | } catch (err) {
|
132 | _didIteratorError3 = true;
|
133 | _iteratorError3 = err;
|
134 | } finally {
|
135 | try {
|
136 | if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
137 | _iterator3.return();
|
138 | }
|
139 | } finally {
|
140 | if (_didIteratorError3) {
|
141 | throw _iteratorError3;
|
142 | }
|
143 | }
|
144 | }
|
145 |
|
146 | const response = yield (0, _nodeFetch.default)(`${config.host}/rest/app/${config.appId}/channel/${config.channelId}/upload`, {
|
147 | headers: {
|
148 | Authorization: config.token
|
149 | },
|
150 | method: 'POST',
|
151 | body: data
|
152 | });
|
153 |
|
154 | if (response.status !== 200) {
|
155 | throw new Error(`Unexpected response code from Nucleus: ${response.status}\n\nBody:\n${yield response.text()}`);
|
156 | }
|
157 | }));
|
158 | }
|
159 | } catch (err) {
|
160 | _didIteratorError2 = true;
|
161 | _iteratorError2 = err;
|
162 | } finally {
|
163 | try {
|
164 | if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
165 | _iterator2.return();
|
166 | }
|
167 | } finally {
|
168 | if (_didIteratorError2) {
|
169 | throw _iteratorError2;
|
170 | }
|
171 | }
|
172 | }
|
173 | })();
|
174 | }
|
175 |
|
176 | }
|
177 |
|
178 | exports.default = PublisherNucleus;
|
179 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9QdWJsaXNoZXJOdWNsZXVzLnRzIl0sIm5hbWVzIjpbImQiLCJQdWJsaXNoZXJOdWNsZXVzIiwiUHVibGlzaGVyQmFzZSIsIm1ha2VSZXN1bHRzIiwibmV3TWFrZVJlc3VsdHMiLCJyZXN1bHQiLCJleGlzdGluZ1Jlc3VsdCIsImZpbmQiLCJuUmVzdWx0IiwiYXJjaCIsInBsYXRmb3JtIiwicGFja2FnZUpTT04iLCJ2ZXJzaW9uIiwiYXJ0aWZhY3RzIiwicHVzaCIsInB1Ymxpc2giLCJjb25maWciLCJjb2xsYXBzZWRSZXN1bHRzIiwiY29sbGFwc2VNYWtlUmVzdWx0cyIsImVudHJpZXMiLCJyZXN1bHRJZHgiLCJtYWtlUmVzdWx0IiwibXNnIiwibGVuZ3RoIiwiZGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiYXJ0aWZhY3RJZHgiLCJhcnRpZmFjdFBhdGgiLCJwYXRoIiwiYmFzZW5hbWUiLCJ0b0xvd2VyQ2FzZSIsImZzIiwiY3JlYXRlUmVhZFN0cmVhbSIsInJlc3BvbnNlIiwiaG9zdCIsImFwcElkIiwiY2hhbm5lbElkIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJ0b2tlbiIsIm1ldGhvZCIsImJvZHkiLCJzdGF0dXMiLCJFcnJvciIsInRleHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsTUFBTUEsQ0FBQyxHQUFHLG9CQUFNLGdDQUFOLENBQVY7O0FBRWUsTUFBTUMsZ0JBQU4sU0FBK0JDLHNCQUEvQixDQUFxRTtBQUFBO0FBQUE7O0FBQUEsa0NBQzNFLFNBRDJFOztBQUFBLGlEQUduREMsV0FBRCxJQUFrRDtBQUM5RSxZQUFNQyxjQUFrQyxHQUFHLEVBQTNDO0FBRDhFO0FBQUE7QUFBQTs7QUFBQTtBQUU5RSw2QkFBcUJELFdBQXJCLDhIQUFrQztBQUFBLGdCQUF2QkUsTUFBdUI7QUFDaEMsZ0JBQU1DLGNBQWMs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QUNTLE1BQVQsS0FBb0IsR0FBeEIsRUFBNkI7QUFDM0Isb0JBQU0sSUFBSUMsS0FBSixDQUFXLDBDQUF5Q1YsUUFBUSxDQUFDUyxNQUFPLGNBQTFELE1BQTZFVCxRQUFRLENBQUNXLElBQVQsRUFBZ0IsRUFBdkcsQ0FBTjtBQUNEO0FBQ0YsV0ExQkssRUFBTjtBQTJCRDtBQXBDOEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcUNoRDs7QUF2RGlGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFB1Ymxpc2hlckJhc2UsIHsgUHVibGlzaGVyT3B0aW9ucyB9IGZyb20gJ0BlbGVjdHJvbi1mb3JnZS9wdWJsaXNoZXItYmFzZSc7XG5pbXBvcnQgeyBhc3luY09yYSB9IGZyb20gJ0BlbGVjdHJvbi1mb3JnZS9hc3luYy1vcmEnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBmZXRjaCBmcm9tICdub2RlLWZldGNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyBQdWJsaXNoZXJOdWNsZXVzQ29uZmlnIH0gZnJvbSAnLi9Db25maWcnO1xuXG5jb25zdCBkID0gZGVidWcoJ2VsZWN0cm9uLWZvcmdlOnB1Ymxpc2g6bnVjbGV1cycpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdWJsaXNoZXJOdWNsZXVzIGV4dGVuZHMgUHVibGlzaGVyQmFzZTxQdWJsaXNoZXJOdWNsZXVzQ29uZmlnPiB7XG4gIG5hbWUgPSAnbnVjbGV1cyc7XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZU1ha2VSZXN1bHRzID0gKG1ha2VSZXN1bHRzOiBQdWJsaXNoZXJPcHRpb25zWydtYWtlUmVzdWx0cyddKSA9PiB7XG4gICAgY29uc3QgbmV3TWFrZVJlc3VsdHM6IHR5cGVvZiBtYWtlUmVzdWx0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIG1ha2VSZXN1bHRzKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1Jlc3VsdCA9IG5ld01ha2VSZXN1bHRzLmZpbmQoblJlc3VsdCA9PiBuUmVzdWx0LmFyY2ggPT09IHJlc3VsdC5hcmNoXG4gICAgICAgICAgJiYgblJlc3VsdC5wbGF0Zm9ybSA9PT0gcmVzdWx0LnBsYXRmb3JtXG4gICAgICAgICAgJiYgblJlc3VsdC5wYWNrYWdlSlNPTi52ZXJzaW9uID09PSByZXN1bHQucGFja2FnZUpTT04udmVyc2lvbik7XG4gICAgICBpZiAoZXhpc3RpbmdSZXN1bHQpIHtcbiAgICAgICAgZXhpc3RpbmdSZXN1bHQuYXJ0aWZhY3RzLnB1c2goLi4ucmVzdWx0LmFydGlmYWN0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdNYWtlUmVzdWx0cy5wdXNoKHsgLi4ucmVzdWx0IH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWFrZVJlc3VsdHM7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKHsgbWFrZVJlc3VsdHMgfTogUHVibGlzaGVyT3B0aW9ucykge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgY29sbGFwc2VkUmVzdWx0cyA9IHRoaXMuY29sbGFwc2VNYWtlUmVzdWx0cyhtYWtlUmVzdWx0cyk7XG5cbiAgICBmb3IgKGNvbnN0IFtyZXN1bHRJZHgsIG1ha2VSZXN1bHRdIG9mIGNvbGxhcHNlZFJlc3VsdHMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBtc2cgPSBgVXBsb2FkaW5nIHJlc3VsdCAoJHtyZXN1bHRJZHggKyAxfS8ke2NvbGxhcHNlZFJlc3VsdHMubGVuZ3RofSlgO1xuICAgICAgZChtc2cpO1xuXG4gICAgICBhd2FpdCBhc3luY09yYShtc2csIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBkYXRhLmFwcGVuZCgncGxhdGZvcm0nLCBtYWtlUmVzdWx0LnBsYXRmb3JtKTtcbiAgICAgICAgZGF0YS5hcHBlbmQoJ2FyY2gnLCBtYWtlUmVzdWx0LmFyY2gpO1xuICAgICAgICBkYXRhLmFwcGVuZCgndmVyc2lvbicsIG1ha2VSZXN1bHQucGFja2FnZUpTT04udmVyc2lvbik7XG5cbiAgICAgICAgbGV0IGFydGlmYWN0SWR4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBhcnRpZmFjdFBhdGggb2YgbWFrZVJlc3VsdC5hcnRpZmFjdHMpIHtcbiAgICAgICAgICAvLyBTa2lwIHRoZSBSRUxFQVNFUyBmaWxlLCBpdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBvbiB0aGUgc2VydmVyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgICAgaWYgKHBhdGguYmFzZW5hbWUoYXJ0aWZhY3RQYXRoKS50b0xvd2VyQ2FzZSgpID09PSAncmVsZWFzZXMnKSBjb250aW51ZTtcbiAgICAgICAgICBkYXRhLmFwcGVuZChgZmlsZSR7YXJ0aWZhY3RJZHh9YCwgZnMuY3JlYXRlUmVhZFN0cmVhbShhcnRpZmFjdFBhdGgpKTtcbiAgICAgICAgICBhcnRpZmFjdElkeCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtjb25maWcuaG9zdH0vcmVzdC9hcHAvJHtjb25maWcuYXBwSWR9L2NoYW5uZWwvJHtjb25maWcuY2hhbm5lbElkfS91cGxvYWRgLCB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogY29uZmlnLnRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHJlc3BvbnNlIGNvZGUgZnJvbSBOdWNsZXVzOiAke3Jlc3BvbnNlLnN0YXR1c31cXG5cXG5Cb2R5OlxcbiR7YXdhaXQgcmVzcG9uc2UudGV4dCgpfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ== |
\ | No newline at end of file |