@steedos/service-package-registry 2.6.1-beta.7 → 2.6.2-beta.3
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/main/default/client/project_nodes.client.js +2 -2
- package/main/default/manager/loader.js +136 -40
- package/main/default/manager/packages.js +29 -6
- package/main/default/manager/registry.js +28 -2
- package/main/default/objectTranslations/steedos_packages.en/steedos_packages.en.objectTranslation.yml +4 -0
- package/main/default/objects/steedos_packages/fields/dependencies.field.yml +4 -0
- package/main/default/objects/steedos_packages/fields/description.field.yml +1 -1
- package/main/default/objects/steedos_packages/fields/homepage.field.yml +4 -0
- package/main/default/objects/steedos_packages/fields/icon.field.yml +3 -0
- package/main/default/objects/steedos_packages/fields/instance_id.field.yml +1 -0
- package/main/default/objects/steedos_packages/fields/metadata.$.type.field.yml +1 -1
- package/main/default/objects/steedos_packages/fields/metadata.field.yml +2 -1
- package/main/default/objects/steedos_packages/fields/node_id.field.yml +1 -0
- package/main/default/objects/steedos_packages/fields/readme.field.yml +4 -0
- package/main/default/objects/steedos_packages/fields/service_name.field.yml +1 -0
- package/main/default/objects/steedos_packages/fields/static.field.yml +4 -0
- package/main/default/objects/steedos_packages/listviews/all.listview.yml +6 -5
- package/main/default/objects/steedos_packages/listviews/custom.listview.yml +8 -0
- package/main/default/objects/steedos_packages/listviews/system.listview.yml +8 -0
- package/main/default/pages/steedos_package_detail.page.amis.json +144 -0
- package/main/default/pages/steedos_package_detail.page.yml +12 -0
- package/main/default/pages/steedos_packages_list.page.amis.json +146 -0
- package/main/default/pages/steedos_packages_list.page.yml +12 -0
- package/package.json +7 -7
- package/project.package.service.js +183 -220
- package/main/default/routes/nodes.router.js +0 -226
- package/main/default/routes/registry.router.js +0 -21
|
@@ -16,7 +16,6 @@ const { MoleculerError } = require("moleculer").Errors;
|
|
|
16
16
|
const validator = require('validator');
|
|
17
17
|
const npa = require("npm-package-arg");
|
|
18
18
|
const login = require('./main/default/manager/login');
|
|
19
|
-
// const objectql = require('@steedos/objectql');
|
|
20
19
|
|
|
21
20
|
const HEADER_AUTH = 'Authorization';
|
|
22
21
|
const AUTH_TYPE = 'Bearer';
|
|
@@ -26,7 +25,7 @@ const AUTH_TYPE = 'Bearer';
|
|
|
26
25
|
* 软件包服务启动后也需要抛出事件。
|
|
27
26
|
*/
|
|
28
27
|
module.exports = {
|
|
29
|
-
name: '
|
|
28
|
+
name: '@steedos/service-project',
|
|
30
29
|
namespace: "steedos",
|
|
31
30
|
/**
|
|
32
31
|
* Settings
|
|
@@ -37,11 +36,6 @@ module.exports = {
|
|
|
37
36
|
name: this.name,
|
|
38
37
|
isPackage: false
|
|
39
38
|
},
|
|
40
|
-
STEEDOS_CLOUD_URL: process.env.STEEDOS_CLOUD_URL ? process.env.STEEDOS_CLOUD_URL : 'https://console.steedos.cn',
|
|
41
|
-
STEEDOS_CLOUD_SPACE_ID: process.env.STEEDOS_CLOUD_SPACE_ID,
|
|
42
|
-
STEEDOS_CLOUD_API_KEY: process.env.STEEDOS_CLOUD_API_KEY,
|
|
43
|
-
STEEDOS_REGISTRY_URL: process.env.STEEDOS_REGISTRY_URL ? process.env.STEEDOS_REGISTRY_URL : 'https://registry.steedos.cn/',
|
|
44
|
-
STEEDOS_CLOUD_SYNC_PACKAGES: validator.toBoolean(process.env.STEEDOS_CLOUD_SYNC_PACKAGES || 'false', true),
|
|
45
39
|
STEEDOS_INITIAL_PACKAGES: process.env.STEEDOS_INITIAL_PACKAGES
|
|
46
40
|
},
|
|
47
41
|
|
|
@@ -98,11 +92,15 @@ module.exports = {
|
|
|
98
92
|
async handler(ctx) {
|
|
99
93
|
const { module } = ctx.params
|
|
100
94
|
const packages = loader.loadPackagesConfig();
|
|
101
|
-
|
|
95
|
+
let packageConfig = _.find(packages, (_p, pname) => {
|
|
96
|
+
_p.name = pname;
|
|
102
97
|
return pname === module;
|
|
103
98
|
})
|
|
104
99
|
if (packageConfig) {
|
|
105
100
|
if (packageConfig.enable) {
|
|
101
|
+
if(packageConfig.static){
|
|
102
|
+
packageConfig = Object.assign({}, packageConfig, this.getStaticPackageInfo(packageConfig, packageConfig.name))
|
|
103
|
+
}
|
|
106
104
|
if (packageConfig.local) {
|
|
107
105
|
let packagePath = packageConfig.path;
|
|
108
106
|
if(!path.isAbsolute(packagePath)){
|
|
@@ -110,8 +108,10 @@ module.exports = {
|
|
|
110
108
|
}
|
|
111
109
|
await loader.loadPackage(module, packagePath);
|
|
112
110
|
const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
|
|
111
|
+
const packageYmlData = loader.getPackageYmlData(packagePath);
|
|
113
112
|
await ctx.broker.call(`@steedos/service-packages.install`, {
|
|
114
113
|
serviceInfo: Object.assign({}, Object.assign({}, packageConfig, { name: module }), {
|
|
114
|
+
packageYmlData: packageYmlData,
|
|
115
115
|
nodeID: ctx.broker.nodeID,
|
|
116
116
|
instanceID: ctx.broker.instanceID,
|
|
117
117
|
metadata: metadata
|
|
@@ -133,11 +133,16 @@ module.exports = {
|
|
|
133
133
|
disablePackage:{
|
|
134
134
|
async handler(ctx) {
|
|
135
135
|
const { module } = ctx.params
|
|
136
|
-
|
|
136
|
+
let packageConfig = await loader.disablePackage(module);
|
|
137
|
+
if(packageConfig.static){
|
|
138
|
+
packageConfig = Object.assign({}, packageConfig, this.getStaticPackageInfo(packageConfig, packageConfig.name))
|
|
139
|
+
}
|
|
137
140
|
if(packageConfig.path){
|
|
138
141
|
const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
|
|
142
|
+
const packageYmlData = loader.getPackageYmlData(packageConfig.path);
|
|
139
143
|
await ctx.broker.call(`@steedos/service-packages.install`, {
|
|
140
144
|
serviceInfo: Object.assign({}, packageConfig, {
|
|
145
|
+
packageYmlData,
|
|
141
146
|
nodeID: ctx.broker.nodeID,
|
|
142
147
|
instanceID: ctx.broker.instanceID,
|
|
143
148
|
metadata: metadata
|
|
@@ -150,10 +155,27 @@ module.exports = {
|
|
|
150
155
|
enablePackage:{
|
|
151
156
|
async handler(ctx) {
|
|
152
157
|
const { module } = ctx.params
|
|
153
|
-
|
|
158
|
+
let packageConfig = await loader.getPackageConfig(module);
|
|
159
|
+
|
|
160
|
+
if(packageConfig.static){
|
|
161
|
+
packageConfig = Object.assign({}, packageConfig, this.getStaticPackageInfo(packageConfig, packageConfig.name))
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const packageYmlData = loader.getPackageYmlData(packageConfig.path);
|
|
165
|
+
|
|
166
|
+
if(packageYmlData.dependencies){
|
|
167
|
+
await packages.checkDependencies(path.resolve(packageConfig.path), packageYmlData.dependencies || [])
|
|
168
|
+
}
|
|
169
|
+
packageConfig = await loader.enablePackage(module);
|
|
170
|
+
|
|
171
|
+
if(packageConfig.static){
|
|
172
|
+
packageConfig = Object.assign({}, packageConfig, this.getStaticPackageInfo(packageConfig, packageConfig.name))
|
|
173
|
+
}
|
|
174
|
+
|
|
154
175
|
const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
|
|
155
176
|
await ctx.broker.call(`@steedos/service-packages.install`, {
|
|
156
177
|
serviceInfo: Object.assign({}, packageConfig, {
|
|
178
|
+
packageYmlData,
|
|
157
179
|
nodeID: ctx.broker.nodeID,
|
|
158
180
|
instanceID: ctx.broker.instanceID,
|
|
159
181
|
metadata: metadata
|
|
@@ -162,68 +184,6 @@ module.exports = {
|
|
|
162
184
|
return {}
|
|
163
185
|
}
|
|
164
186
|
},
|
|
165
|
-
getCloudSaasPurchasedPackages:{
|
|
166
|
-
async handler(ctx) {
|
|
167
|
-
try {
|
|
168
|
-
|
|
169
|
-
const user = ctx.meta.user;
|
|
170
|
-
if(!user.is_space_admin){
|
|
171
|
-
throw new Error('not permission!');
|
|
172
|
-
}
|
|
173
|
-
return await this.getCloudSaasPurchasedPackages();
|
|
174
|
-
} catch (error) {
|
|
175
|
-
throw new MoleculerError(error.message, 500, "ERR_SOMETHING");
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
installPurchasedPackages: {
|
|
180
|
-
async handler(ctx){
|
|
181
|
-
const installErrors = {};
|
|
182
|
-
const installPackages = [];
|
|
183
|
-
try {
|
|
184
|
-
const user = ctx.meta.user;
|
|
185
|
-
if(!user.is_space_admin){
|
|
186
|
-
throw new Error('not permission!');
|
|
187
|
-
}
|
|
188
|
-
try {
|
|
189
|
-
await this.loginSteedosRegistry();
|
|
190
|
-
console.info(`login steedos registry success`);
|
|
191
|
-
} catch (error) {
|
|
192
|
-
// console.error(`login steedos registry fail: `, error.message);
|
|
193
|
-
}
|
|
194
|
-
const settings = this.settings;
|
|
195
|
-
const syncCloudPackages = settings.STEEDOS_CLOUD_SYNC_PACKAGES;
|
|
196
|
-
let result = null;
|
|
197
|
-
if(syncCloudPackages){
|
|
198
|
-
result = await this.getCloudSaasPurchasedPackages();
|
|
199
|
-
}
|
|
200
|
-
if(result){
|
|
201
|
-
for (const _package of result.packages) {
|
|
202
|
-
try {
|
|
203
|
-
const { name, version, label, description } = _package
|
|
204
|
-
let enable = true; //安装已购买的软件包时先默认启用
|
|
205
|
-
//TODO 处理 registry_url
|
|
206
|
-
// 安装最新版
|
|
207
|
-
const packageInfo = await this.installPackage(name, null, label, description, enable, ctx.broker);
|
|
208
|
-
installPackages.push(packageInfo)
|
|
209
|
-
} catch (error) {
|
|
210
|
-
if(error.stderr){
|
|
211
|
-
installErrors[_package.name] = error.stderr
|
|
212
|
-
}else{
|
|
213
|
-
installErrors[_package.name] = error.message
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return {
|
|
219
|
-
installPackages: installPackages,
|
|
220
|
-
installErrors: installErrors
|
|
221
|
-
}
|
|
222
|
-
} catch (error) {
|
|
223
|
-
throw new MoleculerError(error.message, 500, "ERR_SOMETHING");
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
},
|
|
227
187
|
getPackageVersions: {
|
|
228
188
|
async handler(ctx) {
|
|
229
189
|
const { module } = ctx.params
|
|
@@ -243,16 +203,11 @@ module.exports = {
|
|
|
243
203
|
if(!user.is_space_admin){
|
|
244
204
|
throw new Error('not permission!');
|
|
245
205
|
}
|
|
246
|
-
|
|
247
|
-
await this.loginSteedosRegistry();
|
|
248
|
-
console.info(`login steedos registry success`);
|
|
249
|
-
} catch (error) {
|
|
250
|
-
// console.error(`login steedos registry fail: `, error.message);
|
|
251
|
-
}
|
|
252
|
-
let { module, version, url, auth, registry_url } = ctx.params
|
|
206
|
+
let { module, version, url, auth, registry_url, fromClient = false } = ctx.params
|
|
253
207
|
const enable = true;
|
|
254
|
-
return await this.installPackageFromUrl(module, version, url, auth, enable, registry_url, ctx.broker)
|
|
208
|
+
return await this.installPackageFromUrl(module, version, url, auth, enable, registry_url, ctx.broker, {fromClient})
|
|
255
209
|
} catch (error) {
|
|
210
|
+
this.broker.logger.error(`installPackageFromUrl: `, error);
|
|
256
211
|
let errorInfo = error.message || '';
|
|
257
212
|
if (error.stderr) {
|
|
258
213
|
const errors = error.stderr.split('\n');
|
|
@@ -276,6 +231,28 @@ module.exports = {
|
|
|
276
231
|
async handler(ctx) {
|
|
277
232
|
return await this.initialPackages();
|
|
278
233
|
}
|
|
234
|
+
},
|
|
235
|
+
addPackages: {
|
|
236
|
+
async handler(ctx) {
|
|
237
|
+
return await this.addPackages(ctx);
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
getNpmrc: {
|
|
241
|
+
async handler(ctx){
|
|
242
|
+
return await loader.getNpmrc()
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
setNpmrc: {
|
|
246
|
+
async handler(ctx){
|
|
247
|
+
const { npmrc } = ctx.params;
|
|
248
|
+
return await loader.setNpmrc(npmrc)
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
yarnAddPackage: {
|
|
252
|
+
async handler(ctx) {
|
|
253
|
+
const { yarnPackage } = ctx.params;
|
|
254
|
+
return await this.yarnAddPackage(yarnPackage);
|
|
255
|
+
}
|
|
279
256
|
}
|
|
280
257
|
},
|
|
281
258
|
|
|
@@ -293,47 +270,6 @@ module.exports = {
|
|
|
293
270
|
installPackage: {
|
|
294
271
|
async handler(module, version, label, description, enable, broker) {
|
|
295
272
|
return await loader.installPackage(broker, {module, version, label, description, enable})
|
|
296
|
-
}
|
|
297
|
-
},
|
|
298
|
-
getCloudSaasPurchasedPackages:{
|
|
299
|
-
async handler() {
|
|
300
|
-
const settings = this.settings;
|
|
301
|
-
const apiKey = settings.STEEDOS_CLOUD_API_KEY || process.env.STEEDOS_CLOUD_API_KEY
|
|
302
|
-
const spaceId = settings.STEEDOS_CLOUD_SPACE_ID || process.env.STEEDOS_CLOUD_SPACE_ID
|
|
303
|
-
const url = settings.STEEDOS_CLOUD_URL
|
|
304
|
-
|
|
305
|
-
if(!apiKey || !spaceId || !url){
|
|
306
|
-
throw new Error(`请配置STEEDOS_CLOUD参数`);
|
|
307
|
-
}
|
|
308
|
-
const headers = Object.assign({}, {'Content-Type': 'application/json'}, { [HEADER_AUTH]: `${AUTH_TYPE} apikey,${apiKey}`});
|
|
309
|
-
const response = await fetch(`${url}/api/shop/product_subscriptions/steedos-packages`, {
|
|
310
|
-
method: 'GET', headers: headers
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
const result = await response.json();
|
|
314
|
-
|
|
315
|
-
if(result.status === 'error'){
|
|
316
|
-
throw new Error(`${url}: ${result.message}`)
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
const packages = [];
|
|
320
|
-
|
|
321
|
-
_.each(result.data, (item)=>{
|
|
322
|
-
if(item.product){
|
|
323
|
-
let isExist = _.find(packages, (_package)=>{
|
|
324
|
-
return _package.name === item.product.sku
|
|
325
|
-
})
|
|
326
|
-
if(!isExist){
|
|
327
|
-
packages.push({
|
|
328
|
-
name: item.product.sku,
|
|
329
|
-
version: null, //始终安装latest最新版
|
|
330
|
-
label: item.product.name,
|
|
331
|
-
description: item.product.description || ''
|
|
332
|
-
})
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
})
|
|
336
|
-
return { packages : packages}
|
|
337
273
|
}
|
|
338
274
|
},
|
|
339
275
|
getPackageVersions: {
|
|
@@ -358,8 +294,10 @@ module.exports = {
|
|
|
358
294
|
}
|
|
359
295
|
const newConfig = loader.appendToPackagesConfig(module, packageConfig);
|
|
360
296
|
const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
|
|
297
|
+
const packageYmlData = loader.getPackageYmlData(packagePath);
|
|
361
298
|
await this.broker.call(`@steedos/service-packages.install`, {
|
|
362
299
|
serviceInfo: Object.assign({}, newConfig, {
|
|
300
|
+
packageYmlData,
|
|
363
301
|
name: module,
|
|
364
302
|
enable: enable,
|
|
365
303
|
nodeID: this.broker.nodeID,
|
|
@@ -371,7 +309,7 @@ module.exports = {
|
|
|
371
309
|
}
|
|
372
310
|
},
|
|
373
311
|
installPackageFromUrl: {
|
|
374
|
-
async handler(module, version, url, auth, enable, registry_url, broker) {
|
|
312
|
+
async handler(module, version, url, auth, enable, registry_url, broker, {fromClient}) {
|
|
375
313
|
if(!module || !_.isString(module) || !module.trim()){
|
|
376
314
|
throw new Error(`无效的软件包名称`);
|
|
377
315
|
} else {
|
|
@@ -392,32 +330,13 @@ module.exports = {
|
|
|
392
330
|
}
|
|
393
331
|
}
|
|
394
332
|
|
|
395
|
-
const settings = this.settings;
|
|
396
|
-
if (url && url.startsWith(settings.STEEDOS_CLOUD_URL + '/api/pkg/download')) {
|
|
397
|
-
const apiKey = settings.STEEDOS_CLOUD_API_KEY || process.env.STEEDOS_CLOUD_API_KEY
|
|
398
|
-
const spaceId = settings.STEEDOS_CLOUD_SPACE_ID || process.env.STEEDOS_CLOUD_SPACE_ID
|
|
399
|
-
const cloudUrl = settings.STEEDOS_CLOUD_URL
|
|
400
|
-
|
|
401
|
-
if (!apiKey || !spaceId || !cloudUrl) {
|
|
402
|
-
throw new Error(`请配置STEEDOS_CLOUD参数`);
|
|
403
|
-
}
|
|
404
|
-
const headers = Object.assign({}, { 'Content-Type': 'application/json' }, { [HEADER_AUTH]: `${AUTH_TYPE} apikey,${apiKey}` });
|
|
405
|
-
const response = await fetch(url, {
|
|
406
|
-
method: 'POST', headers: headers, body: JSON.stringify({ _authToken: auth })
|
|
407
|
-
});
|
|
408
|
-
|
|
409
|
-
const result = await response.json();
|
|
410
|
-
|
|
411
|
-
if (result.error) {
|
|
412
|
-
throw new Error(`安装失败,软件包URL或认证信息错误`)
|
|
413
|
-
}
|
|
414
|
-
url = `${url}/${result.token}`
|
|
415
|
-
console.log(`url`, url);
|
|
416
|
-
}
|
|
417
333
|
const packagePath = await registry.installModule(module, version, url, registry_url);
|
|
418
334
|
const packageInfo = loader.getPackageInfo(null, packagePath);
|
|
419
335
|
const packageName = packageInfo.name;
|
|
420
336
|
if(enable){
|
|
337
|
+
if(fromClient){
|
|
338
|
+
await packages.checkDependencies(packagePath)
|
|
339
|
+
}
|
|
421
340
|
await loader.loadPackage(packageName, packagePath);
|
|
422
341
|
}else{
|
|
423
342
|
enable = false;
|
|
@@ -433,9 +352,17 @@ module.exports = {
|
|
|
433
352
|
path: util.getPackageRelativePath(process.cwd(), packagePath)
|
|
434
353
|
}
|
|
435
354
|
loader.appendToPackagesConfig(packageName, packageConfig);
|
|
436
|
-
|
|
355
|
+
let metadata = {}
|
|
356
|
+
try {
|
|
357
|
+
// 软件包元数据扫描失败,并不影响软件包的启动. 在控制台输出异常信息即可.
|
|
358
|
+
metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
|
|
359
|
+
} catch (error) {
|
|
360
|
+
console.error(error)
|
|
361
|
+
}
|
|
362
|
+
const packageYmlData = loader.getPackageYmlData(packagePath);
|
|
437
363
|
await broker.call(`@steedos/service-packages.install`, {
|
|
438
364
|
serviceInfo: Object.assign({}, packageConfig, {
|
|
365
|
+
packageYmlData,
|
|
439
366
|
name: packageName,
|
|
440
367
|
enable: enable,
|
|
441
368
|
nodeID: broker.nodeID,
|
|
@@ -463,40 +390,6 @@ module.exports = {
|
|
|
463
390
|
return result.data;
|
|
464
391
|
}
|
|
465
392
|
},
|
|
466
|
-
loginSteedosRegistry: {
|
|
467
|
-
async handler() {
|
|
468
|
-
const settings = this.settings;
|
|
469
|
-
// 配置主控地址
|
|
470
|
-
const consoleUrl = settings.STEEDOS_CLOUD_URL;
|
|
471
|
-
if (!consoleUrl) {
|
|
472
|
-
throw new Error('请配置主控地址');
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
// 初始化工作区数据
|
|
476
|
-
// 获取环境变量中工作区信息
|
|
477
|
-
const spaceId = settings.STEEDOS_CLOUD_SPACE_ID || process.env.STEEDOS_CLOUD_SPACE_ID;
|
|
478
|
-
const apiKey = settings.STEEDOS_CLOUD_API_KEY || process.env.STEEDOS_CLOUD_API_KEY;
|
|
479
|
-
|
|
480
|
-
if (!spaceId || !apiKey) {
|
|
481
|
-
throw new Error('请配置环境变量STEEDOS_CLOUD_SPACE_ID和STEEDOS_CLOUD_API_KEY。');
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
const registryUrl = settings.STEEDOS_REGISTRY_URL
|
|
485
|
-
|
|
486
|
-
// 调用接口获取初始化信息
|
|
487
|
-
const { info, scopes } = await this.getSafeScopes(spaceId, apiKey, consoleUrl);
|
|
488
|
-
const { adminPhone } = info;
|
|
489
|
-
if (!adminPhone) {
|
|
490
|
-
throw new Error('缺少工作区信息 工作区名称、管理员姓名、管理员手机号,请检查');
|
|
491
|
-
}
|
|
492
|
-
// let scope = '';
|
|
493
|
-
// if (scopes && scopes.length > 0) {
|
|
494
|
-
// scope = scopes[0];
|
|
495
|
-
// }
|
|
496
|
-
await login.loginToRegistry(adminPhone, apiKey, `${adminPhone}@steedos.com`, registryUrl, undefined);
|
|
497
|
-
login.setYarnrcScopes(scopes, registryUrl);
|
|
498
|
-
}
|
|
499
|
-
},
|
|
500
393
|
initialPackages: {
|
|
501
394
|
async handler(){
|
|
502
395
|
const settings = this.settings;
|
|
@@ -545,6 +438,116 @@ module.exports = {
|
|
|
545
438
|
}
|
|
546
439
|
}
|
|
547
440
|
}
|
|
441
|
+
},
|
|
442
|
+
addPackages: {
|
|
443
|
+
async handler(ctx){
|
|
444
|
+
const { packages } = ctx.params;
|
|
445
|
+
for(const _package of packages){
|
|
446
|
+
let name = null;
|
|
447
|
+
let options = null;
|
|
448
|
+
if(_.isString(_package)){
|
|
449
|
+
name = _package;
|
|
450
|
+
options = {}
|
|
451
|
+
}else{
|
|
452
|
+
const { name: _name, ..._options} = _package;
|
|
453
|
+
name = _name;
|
|
454
|
+
options = _options;
|
|
455
|
+
}
|
|
456
|
+
if(!_.has(options, 'static')){
|
|
457
|
+
options.static = true
|
|
458
|
+
}
|
|
459
|
+
loader.appendToPackagesConfig(name, options, 'addPackage')
|
|
460
|
+
await this.installPackagesSyncToMetaData(name);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
getStaticPackageInfo: {
|
|
465
|
+
handler(packageInfo, packageName){
|
|
466
|
+
const _path = packageInfo.path || path.dirname(require.resolve(`${packageName}/package.json`));
|
|
467
|
+
const packageJson = require(`${_path}/package.json`);
|
|
468
|
+
return {
|
|
469
|
+
path: _path,
|
|
470
|
+
version: packageJson.version,
|
|
471
|
+
description: packageJson.description,
|
|
472
|
+
homepage: packageJson.homepage
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
},
|
|
476
|
+
getPackageInfo: {
|
|
477
|
+
handler(packageInfo, packageName){
|
|
478
|
+
let packagePath = packageInfo.path || path.dirname(require.resolve(`${packageName}/package.json`));
|
|
479
|
+
if(!path.isAbsolute(packagePath)){
|
|
480
|
+
packagePath = path.resolve(process.cwd(), packagePath)
|
|
481
|
+
}
|
|
482
|
+
const packageJson = require(`${packagePath}/package.json`);
|
|
483
|
+
return {
|
|
484
|
+
version: packageJson.version,
|
|
485
|
+
description: packageJson.description,
|
|
486
|
+
homepage: packageJson.homepage
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
},
|
|
490
|
+
installPackagesSyncToMetaData:{
|
|
491
|
+
async handler(packageName){
|
|
492
|
+
//注册本地已安装的steedos packages
|
|
493
|
+
const installPackages = loader.loadPackagesConfig();
|
|
494
|
+
for (const name in installPackages) {
|
|
495
|
+
if (Object.hasOwnProperty.call(installPackages, name) && (packageName && packageName === name || !packageName)) {
|
|
496
|
+
let _packageInfo = installPackages[name];
|
|
497
|
+
if(_packageInfo.static){
|
|
498
|
+
_packageInfo = Object.assign({}, _packageInfo, this.getStaticPackageInfo(_packageInfo, name))
|
|
499
|
+
}else{
|
|
500
|
+
_packageInfo = Object.assign({}, _packageInfo, this.getPackageInfo(_packageInfo, name))
|
|
501
|
+
}
|
|
502
|
+
const metadata = await loader.getPackageMetadata(_packageInfo.path);
|
|
503
|
+
const packageYmlData = loader.getPackageYmlData(_packageInfo.path);
|
|
504
|
+
await this.broker.call(`@steedos/service-packages.install`, {
|
|
505
|
+
serviceInfo: {
|
|
506
|
+
packageYmlData,
|
|
507
|
+
name: name,
|
|
508
|
+
nodeID: this.broker.nodeID,
|
|
509
|
+
instanceID: this.broker.instanceID,
|
|
510
|
+
path: _packageInfo.path,
|
|
511
|
+
local: _packageInfo.local,
|
|
512
|
+
enable: false,
|
|
513
|
+
version: _packageInfo.version,
|
|
514
|
+
description: _packageInfo.description,
|
|
515
|
+
metadata: metadata,
|
|
516
|
+
static: _packageInfo.static,
|
|
517
|
+
homepage: _packageInfo.homepage
|
|
518
|
+
}
|
|
519
|
+
})
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
},
|
|
524
|
+
yarnAddPackage: {
|
|
525
|
+
async handler(yarnPackage) {
|
|
526
|
+
const packages = await registry.yarnAddPackage(yarnPackage);
|
|
527
|
+
for (const packageInfo of packages) {
|
|
528
|
+
const packagePath = packageInfo.path;
|
|
529
|
+
loader.appendToPackagesConfig(packageInfo.name, {
|
|
530
|
+
version: packageInfo.version,
|
|
531
|
+
path: util.getPackageRelativePath(process.cwd(), packagePath),
|
|
532
|
+
enable: false
|
|
533
|
+
});
|
|
534
|
+
const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
|
|
535
|
+
const packageYmlData = loader.getPackageYmlData(packagePath);
|
|
536
|
+
await this.broker.call(`@steedos/service-packages.install`, {
|
|
537
|
+
serviceInfo: Object.assign({}, {
|
|
538
|
+
version: packageInfo.version,
|
|
539
|
+
path: packageInfo.path
|
|
540
|
+
}, {
|
|
541
|
+
packageYmlData: packageYmlData,
|
|
542
|
+
name: packageInfo.name,
|
|
543
|
+
enable: false,
|
|
544
|
+
nodeID: broker.nodeID,
|
|
545
|
+
instanceID: broker.instanceID,
|
|
546
|
+
metadata: metadata
|
|
547
|
+
})
|
|
548
|
+
})
|
|
549
|
+
}
|
|
550
|
+
}
|
|
548
551
|
}
|
|
549
552
|
},
|
|
550
553
|
|
|
@@ -559,13 +562,6 @@ module.exports = {
|
|
|
559
562
|
* Service started lifecycle event handler
|
|
560
563
|
*/
|
|
561
564
|
async started() {
|
|
562
|
-
// objectql.getSteedosSchema(this.broker);
|
|
563
|
-
try {
|
|
564
|
-
await this.loginSteedosRegistry();
|
|
565
|
-
console.info(`login steedos registry success`);
|
|
566
|
-
} catch (error) {
|
|
567
|
-
// console.error(`login steedos registry fail: `, error.message);
|
|
568
|
-
}
|
|
569
565
|
|
|
570
566
|
const PACKAGE_INSTALL_NODE = process.env.PACKAGE_INSTALL_NODE
|
|
571
567
|
if(PACKAGE_INSTALL_NODE){
|
|
@@ -583,19 +579,6 @@ module.exports = {
|
|
|
583
579
|
console.log(`started error`, error)
|
|
584
580
|
}
|
|
585
581
|
|
|
586
|
-
// 新版单包项目加载
|
|
587
|
-
// try {
|
|
588
|
-
// if(fs.existsSync(path.join(process.cwd(), 'package.service.js'))){
|
|
589
|
-
// const packagePath = process.cwd();
|
|
590
|
-
// if(fs.existsSync(packagePath)){
|
|
591
|
-
// const packageInfo = require(path.join(packagePath, 'package.json'));
|
|
592
|
-
// loader.appendToPackagesConfig(`${packageInfo.name}`, {version: packageInfo.version, description: packageInfo.description, local: true, path: util.getPackageRelativePath(process.cwd(), packagePath)});
|
|
593
|
-
// }
|
|
594
|
-
// }
|
|
595
|
-
// } catch (error) {
|
|
596
|
-
// console.log(`started error`, error)
|
|
597
|
-
// }
|
|
598
|
-
|
|
599
582
|
await metadata.uncompressPackages(process.cwd());
|
|
600
583
|
const mPackages = metadata.getAllPackages(process.cwd());
|
|
601
584
|
_.each(mPackages, (packagePath)=>{
|
|
@@ -608,27 +591,7 @@ module.exports = {
|
|
|
608
591
|
})
|
|
609
592
|
await loader.loadPackages();
|
|
610
593
|
|
|
611
|
-
|
|
612
|
-
const installPackages = loader.loadPackagesConfig();
|
|
613
|
-
for (const name in installPackages) {
|
|
614
|
-
if (Object.hasOwnProperty.call(installPackages, name)) {
|
|
615
|
-
const _packageInfo = installPackages[name];
|
|
616
|
-
const metadata = await loader.getPackageMetadata(_packageInfo.path);
|
|
617
|
-
await this.broker.call(`@steedos/service-packages.install`, {
|
|
618
|
-
serviceInfo: {
|
|
619
|
-
name: name,
|
|
620
|
-
nodeID: this.broker.nodeID,
|
|
621
|
-
instanceID: this.broker.instanceID,
|
|
622
|
-
path: _packageInfo.path,
|
|
623
|
-
local: _packageInfo.local,
|
|
624
|
-
enable: _packageInfo.enable,
|
|
625
|
-
version: _packageInfo.version,
|
|
626
|
-
description: _packageInfo.description,
|
|
627
|
-
metadata: metadata
|
|
628
|
-
}
|
|
629
|
-
})
|
|
630
|
-
}
|
|
631
|
-
}
|
|
594
|
+
await this.installPackagesSyncToMetaData()
|
|
632
595
|
|
|
633
596
|
},
|
|
634
597
|
|