@electron-forge/publisher-nucleus 6.0.0-beta.7 → 6.0.0-beta.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -15
- package/dist/Config.d.ts +1 -0
- package/dist/Config.d.ts.map +1 -0
- package/dist/Config.js +4 -2
- package/dist/PublisherNucleus.d.ts +5 -2
- package/dist/PublisherNucleus.d.ts.map +1 -0
- package/dist/PublisherNucleus.js +68 -124
- package/index.ts +5 -0
- package/package.json +11 -14
- package/src/PublisherNucleus.ts +32 -13
- package/tsconfig.json +40 -21
- package/tsconfig.tsbuildinfo +1 -0
- package/doc/assets/css/main.css +0 -865
- package/doc/assets/css/main.css.map +0 -7
- package/doc/assets/images/icons.png +0 -0
- package/doc/assets/images/icons@2x.png +0 -0
- package/doc/assets/images/widgets.png +0 -0
- package/doc/assets/images/widgets@2x.png +0 -0
- package/doc/assets/js/main.js +0 -5
- package/doc/assets/js/search.js +0 -3
- package/doc/classes/publishernucleus.html +0 -344
- package/doc/globals.html +0 -190
- package/doc/index.html +0 -170
- package/doc/interfaces/publishernucleusconfig.html +0 -260
- package/tslint.json +0 -12
package/README.md
CHANGED
|
@@ -1,23 +1,28 @@
|
|
|
1
|
-
|
|
1
|
+
## publisher-nucleus
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`@electron-forge/publisher-nucleus` publishes all your artifacts to an instance of Nucleus Update Server where users will be able to download them. This update service supports all three platforms.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Check out the README at [`atlassian/nucleus`](https://github.com/atlassian/nucleus) for more information on this project.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
Configuration options are documented in [`Publisher
|
|
8
|
+
NucleusConfig](https://js.electronforge.io/interfaces/_electron_forge_publisher_nucleus.PublisherNucleusConfig.html).
|
|
9
9
|
|
|
10
|
-
### Usage
|
|
11
10
|
|
|
12
|
-
```javascript
|
|
13
|
-
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
```javascript title=forge.config.js
|
|
12
|
+
module.exports = {
|
|
13
|
+
// ...
|
|
14
|
+
publishers: [
|
|
15
|
+
{
|
|
16
|
+
name: '@electron-forge/publisher-nucleus',
|
|
17
|
+
config: {
|
|
18
|
+
host: 'https://my-nucleus.mysite.com',
|
|
19
|
+
appId: 1,
|
|
20
|
+
channelId: 'abcdefg',
|
|
21
|
+
token: 'my-token'
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
]
|
|
21
25
|
}
|
|
22
26
|
```
|
|
23
27
|
|
|
28
|
+
We recommend you set the `token`option using an environment variable, don't hard code into in your config.
|
package/dist/Config.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf"}
|
package/dist/Config.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
2
5
|
|
|
3
|
-
|
|
4
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbXX0=
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import PublisherBase,
|
|
1
|
+
import { PublisherBase, PublisherOptions } from '@electron-forge/publisher-base';
|
|
2
2
|
import { PublisherNucleusConfig } from './Config';
|
|
3
3
|
export default class PublisherNucleus extends PublisherBase<PublisherNucleusConfig> {
|
|
4
4
|
name: string;
|
|
5
|
-
|
|
5
|
+
private collapseMakeResults;
|
|
6
|
+
publish({ makeResults }: PublisherOptions): Promise<void>;
|
|
6
7
|
}
|
|
8
|
+
export { PublisherNucleus, PublisherNucleusConfig };
|
|
9
|
+
//# sourceMappingURL=PublisherNucleus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PublisherNucleus.d.ts","sourceRoot":"","sources":["../src/PublisherNucleus.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAKjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAIlD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,aAAa,CAAC,sBAAsB,CAAC;IACjF,IAAI,SAAa;IAEjB,OAAO,CAAC,mBAAmB,CAazB;IAEI,OAAO,CAAC,EAAE,WAAW,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAqChE;AAED,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,CAAC"}
|
package/dist/PublisherNucleus.js
CHANGED
|
@@ -1,137 +1,81 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
Object.defineProperty(exports, "PublisherNucleusConfig", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return _config.PublisherNucleusConfig;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
exports.PublisherNucleus = exports.default = void 0;
|
|
12
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
13
|
+
var _path = _interopRequireDefault(require("path"));
|
|
12
14
|
var _asyncOra = require("@electron-forge/async-ora");
|
|
13
|
-
|
|
15
|
+
var _publisherBase = require("@electron-forge/publisher-base");
|
|
14
16
|
var _debug = _interopRequireDefault(require("debug"));
|
|
15
|
-
|
|
16
17
|
var _formData = _interopRequireDefault(require("form-data"));
|
|
17
|
-
|
|
18
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
19
|
-
|
|
20
18
|
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
value: 'nucleus'
|
|
47
|
-
}), _temp;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
publish({
|
|
51
|
-
makeResults
|
|
52
|
-
}) {
|
|
53
|
-
var _this = this;
|
|
54
|
-
|
|
55
|
-
return _asyncToGenerator(function* () {
|
|
56
|
-
const config = _this.config;
|
|
57
|
-
var _iteratorNormalCompletion = true;
|
|
58
|
-
var _didIteratorError = false;
|
|
59
|
-
var _iteratorError = undefined;
|
|
60
|
-
|
|
61
|
-
try {
|
|
62
|
-
for (var _iterator = makeResults.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
63
|
-
const _step$value = _slicedToArray(_step.value, 2),
|
|
64
|
-
i = _step$value[0],
|
|
65
|
-
makeResult = _step$value[1];
|
|
66
|
-
|
|
67
|
-
const msg = `Uploading result (${i}/${makeResults.length})`;
|
|
68
|
-
d(msg);
|
|
69
|
-
yield (0, _asyncOra.asyncOra)(msg,
|
|
70
|
-
/*#__PURE__*/
|
|
71
|
-
_asyncToGenerator(function* () {
|
|
72
|
-
const data = new _formData.default();
|
|
73
|
-
data.append('platform', makeResult.platform);
|
|
74
|
-
data.append('arch', makeResult.arch);
|
|
75
|
-
data.append('version', makeResult.packageJSON.version);
|
|
76
|
-
let i = 0;
|
|
77
|
-
var _iteratorNormalCompletion2 = true;
|
|
78
|
-
var _didIteratorError2 = false;
|
|
79
|
-
var _iteratorError2 = undefined;
|
|
80
|
-
|
|
81
|
-
try {
|
|
82
|
-
for (var _iterator2 = makeResult.artifacts[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
83
|
-
const artifactPath = _step2.value;
|
|
84
|
-
// Skip the RELEASES file, it is automatically generated on the server
|
|
85
|
-
if (_path.default.basename(artifactPath).toLowerCase() === 'releases') continue;
|
|
86
|
-
data.append('file' + i, _fs.default.createReadStream(artifactPath));
|
|
87
|
-
i += 1;
|
|
88
|
-
}
|
|
89
|
-
} catch (err) {
|
|
90
|
-
_didIteratorError2 = true;
|
|
91
|
-
_iteratorError2 = err;
|
|
92
|
-
} finally {
|
|
93
|
-
try {
|
|
94
|
-
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
95
|
-
_iterator2.return();
|
|
19
|
+
var _config = require("./Config");
|
|
20
|
+
function _interopRequireDefault(obj) {
|
|
21
|
+
return obj && obj.__esModule ? obj : {
|
|
22
|
+
default: obj
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const d = (0, _debug).default('electron-forge:publish:nucleus');
|
|
26
|
+
class PublisherNucleus extends _publisherBase.PublisherBase {
|
|
27
|
+
async publish({ makeResults }) {
|
|
28
|
+
const { config } = this;
|
|
29
|
+
const collapsedResults = this.collapseMakeResults(makeResults);
|
|
30
|
+
for (const [resultIdx, makeResult] of collapsedResults.entries()){
|
|
31
|
+
const msg = `Uploading result (${resultIdx + 1}/${collapsedResults.length})`;
|
|
32
|
+
d(msg);
|
|
33
|
+
await (0, _asyncOra).asyncOra(msg, async ()=>{
|
|
34
|
+
const data = new _formData.default();
|
|
35
|
+
data.append('platform', makeResult.platform);
|
|
36
|
+
data.append('arch', makeResult.arch);
|
|
37
|
+
data.append('version', makeResult.packageJSON.version);
|
|
38
|
+
let artifactIdx = 0;
|
|
39
|
+
for (const artifactPath of makeResult.artifacts){
|
|
40
|
+
// Skip the RELEASES file, it is automatically generated on the server
|
|
41
|
+
if (_path.default.basename(artifactPath).toLowerCase() === 'releases') continue;
|
|
42
|
+
data.append(`file${artifactIdx}`, _fs.default.createReadStream(artifactPath));
|
|
43
|
+
artifactIdx += 1;
|
|
96
44
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
45
|
+
const response = await (0, _nodeFetch).default(`${config.host}/rest/app/${config.appId}/channel/${config.channelId}/upload`, {
|
|
46
|
+
headers: {
|
|
47
|
+
Authorization: config.token
|
|
48
|
+
},
|
|
49
|
+
method: 'POST',
|
|
50
|
+
body: data
|
|
51
|
+
});
|
|
52
|
+
if (response.status !== 200) {
|
|
53
|
+
throw new Error(`Unexpected response code from Nucleus: ${response.status}\n\nBody:\n${await response.text()}`);
|
|
100
54
|
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const response = yield (0, _nodeFetch.default)(`${config.host}/rest/app/${config.appId}/channel/${config.channelId}/upload`, {
|
|
105
|
-
headers: {
|
|
106
|
-
Authorization: config.token
|
|
107
|
-
},
|
|
108
|
-
method: 'POST',
|
|
109
|
-
body: data
|
|
110
55
|
});
|
|
111
|
-
|
|
112
|
-
if (response.status !== 200) {
|
|
113
|
-
throw `Unexpected response code from Nucleus: ${response.status}\n\nBody:\n${yield response.text()}`;
|
|
114
|
-
}
|
|
115
|
-
}));
|
|
116
56
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
57
|
+
}
|
|
58
|
+
constructor(...args){
|
|
59
|
+
super(...args);
|
|
60
|
+
this.name = 'nucleus';
|
|
61
|
+
this.collapseMakeResults = (makeResults)=>{
|
|
62
|
+
const newMakeResults = [];
|
|
63
|
+
for (const result of makeResults){
|
|
64
|
+
const existingResult = newMakeResults.find((nResult)=>nResult.arch === result.arch && nResult.platform === result.platform && nResult.packageJSON.version === result.packageJSON.version
|
|
65
|
+
);
|
|
66
|
+
if (existingResult) {
|
|
67
|
+
existingResult.artifacts.push(...result.artifacts);
|
|
68
|
+
} else {
|
|
69
|
+
newMakeResults.push({
|
|
70
|
+
...result
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return newMakeResults;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
134
77
|
}
|
|
135
|
-
|
|
136
78
|
exports.default = PublisherNucleus;
|
|
137
|
-
|
|
79
|
+
exports.PublisherNucleus = PublisherNucleus;
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9QdWJsaXNoZXJOdWNsZXVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgYXN5bmNPcmEgfSBmcm9tICdAZWxlY3Ryb24tZm9yZ2UvYXN5bmMtb3JhJztcbmltcG9ydCB7IFB1Ymxpc2hlckJhc2UsIFB1Ymxpc2hlck9wdGlvbnMgfSBmcm9tICdAZWxlY3Ryb24tZm9yZ2UvcHVibGlzaGVyLWJhc2UnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IGZldGNoIGZyb20gJ25vZGUtZmV0Y2gnO1xuXG5pbXBvcnQgeyBQdWJsaXNoZXJOdWNsZXVzQ29uZmlnIH0gZnJvbSAnLi9Db25maWcnO1xuXG5jb25zdCBkID0gZGVidWcoJ2VsZWN0cm9uLWZvcmdlOnB1Ymxpc2g6bnVjbGV1cycpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdWJsaXNoZXJOdWNsZXVzIGV4dGVuZHMgUHVibGlzaGVyQmFzZTxQdWJsaXNoZXJOdWNsZXVzQ29uZmlnPiB7XG4gIG5hbWUgPSAnbnVjbGV1cyc7XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZU1ha2VSZXN1bHRzID0gKG1ha2VSZXN1bHRzOiBQdWJsaXNoZXJPcHRpb25zWydtYWtlUmVzdWx0cyddKSA9PiB7XG4gICAgY29uc3QgbmV3TWFrZVJlc3VsdHM6IHR5cGVvZiBtYWtlUmVzdWx0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIG1ha2VSZXN1bHRzKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1Jlc3VsdCA9IG5ld01ha2VSZXN1bHRzLmZpbmQoXG4gICAgICAgIChuUmVzdWx0KSA9PiBuUmVzdWx0LmFyY2ggPT09IHJlc3VsdC5hcmNoICYmIG5SZXN1bHQucGxhdGZvcm0gPT09IHJlc3VsdC5wbGF0Zm9ybSAmJiBuUmVzdWx0LnBhY2thZ2VKU09OLnZlcnNpb24gPT09IHJlc3VsdC5wYWNrYWdlSlNPTi52ZXJzaW9uXG4gICAgICApO1xuICAgICAgaWYgKGV4aXN0aW5nUmVzdWx0KSB7XG4gICAgICAgIGV4aXN0aW5nUmVzdWx0LmFydGlmYWN0cy5wdXNoKC4uLnJlc3VsdC5hcnRpZmFjdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3TWFrZVJlc3VsdHMucHVzaCh7IC4uLnJlc3VsdCB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld01ha2VSZXN1bHRzO1xuICB9O1xuXG4gIGFzeW5jIHB1Ymxpc2goeyBtYWtlUmVzdWx0cyB9OiBQdWJsaXNoZXJPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBjb2xsYXBzZWRSZXN1bHRzID0gdGhpcy5jb2xsYXBzZU1ha2VSZXN1bHRzKG1ha2VSZXN1bHRzKTtcblxuICAgIGZvciAoY29uc3QgW3Jlc3VsdElkeCwgbWFrZVJlc3VsdF0gb2YgY29sbGFwc2VkUmVzdWx0cy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGBVcGxvYWRpbmcgcmVzdWx0ICgke3Jlc3VsdElkeCArIDF9LyR7Y29sbGFwc2VkUmVzdWx0cy5sZW5ndGh9KWA7XG4gICAgICBkKG1zZyk7XG5cbiAgICAgIGF3YWl0IGFzeW5jT3JhKG1zZywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGRhdGEuYXBwZW5kKCdwbGF0Zm9ybScsIG1ha2VSZXN1bHQucGxhdGZvcm0pO1xuICAgICAgICBkYXRhLmFwcGVuZCgnYXJjaCcsIG1ha2VSZXN1bHQuYXJjaCk7XG4gICAgICAgIGRhdGEuYXBwZW5kKCd2ZXJzaW9uJywgbWFrZVJlc3VsdC5wYWNrYWdlSlNPTi52ZXJzaW9uKTtcblxuICAgICAgICBsZXQgYXJ0aWZhY3RJZHggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0UGF0aCBvZiBtYWtlUmVzdWx0LmFydGlmYWN0cykge1xuICAgICAgICAgIC8vIFNraXAgdGhlIFJFTEVBU0VTIGZpbGUsIGl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG9uIHRoZSBzZXJ2ZXJcbiAgICAgICAgICBpZiAocGF0aC5iYXNlbmFtZShhcnRpZmFjdFBhdGgpLnRvTG93ZXJDYXNlKCkgPT09ICdyZWxlYXNlcycpIGNvbnRpbnVlO1xuICAgICAgICAgIGRhdGEuYXBwZW5kKGBmaWxlJHthcnRpZmFjdElkeH1gLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGFydGlmYWN0UGF0aCkpO1xuICAgICAgICAgIGFydGlmYWN0SWR4ICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2NvbmZpZy5ob3N0fS9yZXN0L2FwcC8ke2NvbmZpZy5hcHBJZH0vY2hhbm5lbC8ke2NvbmZpZy5jaGFubmVsSWR9L3VwbG9hZGAsIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBjb25maWcudG9rZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgcmVzcG9uc2UgY29kZSBmcm9tIE51Y2xldXM6ICR7cmVzcG9uc2Uuc3RhdHVzfVxcblxcbkJvZHk6XFxuJHthd2FpdCByZXNwb25zZS50ZXh0KCl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBQdWJsaXNoZXJOdWNsZXVzLCBQdWJsaXNoZXJOdWNsZXVzQ29uZmlnIH07XG4iXSwibmFtZXMiOlsiUHVibGlzaGVyTnVjbGV1c0NvbmZpZyIsImQiLCJkZWJ1ZyIsIlB1Ymxpc2hlck51Y2xldXMiLCJQdWJsaXNoZXJCYXNlIiwicHVibGlzaCIsIm1ha2VSZXN1bHRzIiwiY29uZmlnIiwiY29sbGFwc2VkUmVzdWx0cyIsImNvbGxhcHNlTWFrZVJlc3VsdHMiLCJyZXN1bHRJZHgiLCJtYWtlUmVzdWx0IiwiZW50cmllcyIsIm1zZyIsImxlbmd0aCIsImFzeW5jT3JhIiwiZGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicGxhdGZvcm0iLCJhcmNoIiwicGFja2FnZUpTT04iLCJ2ZXJzaW9uIiwiYXJ0aWZhY3RJZHgiLCJhcnRpZmFjdFBhdGgiLCJhcnRpZmFjdHMiLCJwYXRoIiwiYmFzZW5hbWUiLCJ0b0xvd2VyQ2FzZSIsImZzIiwiY3JlYXRlUmVhZFN0cmVhbSIsInJlc3BvbnNlIiwiZmV0Y2giLCJob3N0IiwiYXBwSWQiLCJjaGFubmVsSWQiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsInRva2VuIiwibWV0aG9kIiwiYm9keSIsInN0YXR1cyIsIkVycm9yIiwidGV4dCIsIm5hbWUiLCJuZXdNYWtlUmVzdWx0cyIsInJlc3VsdCIsImV4aXN0aW5nUmVzdWx0IiwiZmluZCIsIm5SZXN1bHQiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7OytCQXNFMkJBLENBQXNCOzs7ZUFBdEJBLE9BQXNCOzs7O0FBdEVsQyxHQUFJLENBQUosR0FBSTtBQUNGLEdBQU0sQ0FBTixLQUFNO0FBRUUsR0FBMkIsQ0FBM0IsU0FBMkI7QUFDSixHQUFnQyxDQUFoQyxjQUFnQztBQUM5RCxHQUFPLENBQVAsTUFBTztBQUNKLEdBQVcsQ0FBWCxTQUFXO0FBQ2QsR0FBWSxDQUFaLFVBQVk7QUFFUyxHQUFVLENBQVYsT0FBVTs7Ozs7O0FBRWpELEtBQUssQ0FBQ0MsQ0FBQyxPQUFHQyxNQUFLLFVBQUMsQ0FBZ0M7TUFFM0JDLGdCQUFnQixTQUFTQyxjQUFhO1VBa0JuREMsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxFQUFtQixDQUFDLEVBQWlCLENBQUM7UUFDL0Qs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
|
package/index.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// ⚠️ AUTOGENERATED ⚠️ AUTOGENERATED ⚠️ AUTOGENERATED ⚠️
|
|
2
|
+
// This file was automatically generated by `tools/gen-ts-glue.ts`. Do not modify directly if you want to keep your changes.
|
|
3
|
+
export * from "./src/PublisherNucleus";
|
|
4
|
+
import defaultExport from "./src/PublisherNucleus";
|
|
5
|
+
export default defaultExport;
|
package/package.json
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electron-forge/publisher-nucleus",
|
|
3
|
-
"version": "6.0.0-beta.
|
|
3
|
+
"version": "6.0.0-beta.70",
|
|
4
4
|
"description": "Nucleus publisher for Electron Forge",
|
|
5
|
-
"repository": "https://github.com/electron
|
|
5
|
+
"repository": "https://github.com/electron/forge",
|
|
6
6
|
"author": "Samuel Attard",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"main": "dist/PublisherNucleus.js",
|
|
9
9
|
"typings": "dist/PublisherNucleus.d.ts",
|
|
10
|
-
"scripts": {
|
|
11
|
-
"test": "exit 0"
|
|
12
|
-
},
|
|
13
10
|
"devDependencies": {
|
|
14
|
-
"chai": "^4.
|
|
15
|
-
"mocha": "^
|
|
11
|
+
"chai": "^4.3.3",
|
|
12
|
+
"mocha": "^9.0.1"
|
|
16
13
|
},
|
|
17
14
|
"engines": {
|
|
18
|
-
"node": ">=
|
|
15
|
+
"node": ">= 14.17.5"
|
|
19
16
|
},
|
|
20
17
|
"dependencies": {
|
|
21
|
-
"@electron-forge/async-ora": "6.0.0-beta.
|
|
22
|
-
"@electron-forge/publisher-base": "6.0.0-beta.
|
|
23
|
-
"@electron-forge/shared-types": "6.0.0-beta.
|
|
24
|
-
"debug": "^3.
|
|
25
|
-
"form-data": "^
|
|
26
|
-
"node-fetch": "^2.
|
|
18
|
+
"@electron-forge/async-ora": "6.0.0-beta.70",
|
|
19
|
+
"@electron-forge/publisher-base": "6.0.0-beta.70",
|
|
20
|
+
"@electron-forge/shared-types": "6.0.0-beta.70",
|
|
21
|
+
"debug": "^4.3.1",
|
|
22
|
+
"form-data": "^4.0.0",
|
|
23
|
+
"node-fetch": "^2.6.7"
|
|
27
24
|
}
|
|
28
25
|
}
|
package/src/PublisherNucleus.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
2
4
|
import { asyncOra } from '@electron-forge/async-ora';
|
|
3
|
-
import {
|
|
5
|
+
import { PublisherBase, PublisherOptions } from '@electron-forge/publisher-base';
|
|
4
6
|
import debug from 'debug';
|
|
5
7
|
import FormData from 'form-data';
|
|
6
|
-
import fs from 'fs';
|
|
7
8
|
import fetch from 'node-fetch';
|
|
8
|
-
import path from 'path';
|
|
9
9
|
|
|
10
10
|
import { PublisherNucleusConfig } from './Config';
|
|
11
11
|
|
|
@@ -14,11 +14,28 @@ const d = debug('electron-forge:publish:nucleus');
|
|
|
14
14
|
export default class PublisherNucleus extends PublisherBase<PublisherNucleusConfig> {
|
|
15
15
|
name = 'nucleus';
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
private collapseMakeResults = (makeResults: PublisherOptions['makeResults']) => {
|
|
18
|
+
const newMakeResults: typeof makeResults = [];
|
|
19
|
+
for (const result of makeResults) {
|
|
20
|
+
const existingResult = newMakeResults.find(
|
|
21
|
+
(nResult) => nResult.arch === result.arch && nResult.platform === result.platform && nResult.packageJSON.version === result.packageJSON.version
|
|
22
|
+
);
|
|
23
|
+
if (existingResult) {
|
|
24
|
+
existingResult.artifacts.push(...result.artifacts);
|
|
25
|
+
} else {
|
|
26
|
+
newMakeResults.push({ ...result });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return newMakeResults;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
async publish({ makeResults }: PublisherOptions): Promise<void> {
|
|
18
33
|
const { config } = this;
|
|
19
34
|
|
|
20
|
-
|
|
21
|
-
|
|
35
|
+
const collapsedResults = this.collapseMakeResults(makeResults);
|
|
36
|
+
|
|
37
|
+
for (const [resultIdx, makeResult] of collapsedResults.entries()) {
|
|
38
|
+
const msg = `Uploading result (${resultIdx + 1}/${collapsedResults.length})`;
|
|
22
39
|
d(msg);
|
|
23
40
|
|
|
24
41
|
await asyncOra(msg, async () => {
|
|
@@ -27,14 +44,14 @@ export default class PublisherNucleus extends PublisherBase<PublisherNucleusConf
|
|
|
27
44
|
data.append('arch', makeResult.arch);
|
|
28
45
|
data.append('version', makeResult.packageJSON.version);
|
|
29
46
|
|
|
30
|
-
let
|
|
47
|
+
let artifactIdx = 0;
|
|
31
48
|
for (const artifactPath of makeResult.artifacts) {
|
|
32
49
|
// Skip the RELEASES file, it is automatically generated on the server
|
|
33
50
|
if (path.basename(artifactPath).toLowerCase() === 'releases') continue;
|
|
34
|
-
data.append(
|
|
35
|
-
|
|
51
|
+
data.append(`file${artifactIdx}`, fs.createReadStream(artifactPath));
|
|
52
|
+
artifactIdx += 1;
|
|
36
53
|
}
|
|
37
|
-
|
|
54
|
+
|
|
38
55
|
const response = await fetch(`${config.host}/rest/app/${config.appId}/channel/${config.channelId}/upload`, {
|
|
39
56
|
headers: {
|
|
40
57
|
Authorization: config.token,
|
|
@@ -42,11 +59,13 @@ export default class PublisherNucleus extends PublisherBase<PublisherNucleusConf
|
|
|
42
59
|
method: 'POST',
|
|
43
60
|
body: data,
|
|
44
61
|
});
|
|
45
|
-
|
|
62
|
+
|
|
46
63
|
if (response.status !== 200) {
|
|
47
|
-
throw `Unexpected response code from Nucleus: ${response.status}\n\nBody:\n${await response.text()}
|
|
64
|
+
throw new Error(`Unexpected response code from Nucleus: ${response.status}\n\nBody:\n${await response.text()}`);
|
|
48
65
|
}
|
|
49
66
|
});
|
|
50
67
|
}
|
|
51
68
|
}
|
|
52
69
|
}
|
|
70
|
+
|
|
71
|
+
export { PublisherNucleus, PublisherNucleusConfig };
|
package/tsconfig.json
CHANGED
|
@@ -1,23 +1,42 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
2
|
+
"//": "⚠️ AUTOGENERATED ⚠️ This file was automatically generated by tools/gen-tsconfigs.ts, do not edit manually.",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"module": "commonjs",
|
|
5
|
+
"target": "es2019",
|
|
6
|
+
"outDir": "dist",
|
|
7
|
+
"lib": [
|
|
8
|
+
"dom",
|
|
9
|
+
"es2019"
|
|
10
|
+
],
|
|
11
|
+
"sourceMap": true,
|
|
12
|
+
"rootDir": "src",
|
|
13
|
+
"experimentalDecorators": true,
|
|
14
|
+
"strict": true,
|
|
15
|
+
"esModuleInterop": true,
|
|
16
|
+
"declaration": true,
|
|
17
|
+
"composite": true,
|
|
18
|
+
"declarationMap": true,
|
|
19
|
+
"typeRoots": [
|
|
20
|
+
"../../../typings",
|
|
21
|
+
"../../../node_modules/@types"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"exclude": [
|
|
25
|
+
"node_modules",
|
|
26
|
+
"dist",
|
|
27
|
+
"test",
|
|
28
|
+
"index.ts",
|
|
29
|
+
"tmpl"
|
|
30
|
+
],
|
|
31
|
+
"references": [
|
|
32
|
+
{
|
|
33
|
+
"path": "../../utils/async-ora"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"path": "../base"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"path": "../../utils/types"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
23
42
|
}
|