@platforma-sdk/bootstrap 3.5.21 → 4.0.0

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.
Files changed (40) hide show
  1. package/assets/compose-backend.yaml +119 -49
  2. package/dist/commands/svc/create/arg-parser.cjs +175 -0
  3. package/dist/commands/svc/create/arg-parser.cjs.map +1 -0
  4. package/dist/commands/svc/create/arg-parser.d.ts +42 -0
  5. package/dist/commands/svc/create/arg-parser.js +173 -0
  6. package/dist/commands/svc/create/arg-parser.js.map +1 -0
  7. package/dist/commands/svc/create/docker/s3.cjs +26 -3
  8. package/dist/commands/svc/create/docker/s3.cjs.map +1 -1
  9. package/dist/commands/svc/create/docker/s3.js +26 -3
  10. package/dist/commands/svc/create/docker/s3.js.map +1 -1
  11. package/dist/commands/svc/create/docker.cjs +36 -3
  12. package/dist/commands/svc/create/docker.cjs.map +1 -1
  13. package/dist/commands/svc/create/docker.js +36 -3
  14. package/dist/commands/svc/create/docker.js.map +1 -1
  15. package/dist/commands/svc/create/local/s3.cjs +21 -3
  16. package/dist/commands/svc/create/local/s3.cjs.map +1 -1
  17. package/dist/commands/svc/create/local/s3.js +21 -3
  18. package/dist/commands/svc/create/local/s3.js.map +1 -1
  19. package/dist/commands/svc/create/local.cjs +51 -28
  20. package/dist/commands/svc/create/local.cjs.map +1 -1
  21. package/dist/commands/svc/create/local.js +51 -28
  22. package/dist/commands/svc/create/local.js.map +1 -1
  23. package/dist/core.cjs +174 -44
  24. package/dist/core.cjs.map +1 -1
  25. package/dist/core.d.ts +3 -0
  26. package/dist/core.js +174 -44
  27. package/dist/core.js.map +1 -1
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.ts +8 -8
  30. package/dist/index.js.map +1 -1
  31. package/dist/templates/compose.cjs +3 -0
  32. package/dist/templates/compose.cjs.map +1 -1
  33. package/dist/templates/compose.d.ts +1 -0
  34. package/dist/templates/compose.js +3 -0
  35. package/dist/templates/compose.js.map +1 -1
  36. package/dist/templates/pl-config.cjs +2 -2
  37. package/dist/templates/pl-config.cjs.map +1 -1
  38. package/dist/templates/pl-config.js +2 -2
  39. package/dist/templates/pl-config.js.map +1 -1
  40. package/package.json +2 -2
package/dist/core.cjs CHANGED
@@ -163,6 +163,29 @@ class Core {
163
163
  GOMAXPROCS: String(options?.configOptions?.numCpu),
164
164
  };
165
165
  }
166
+ // Process additional environment variables from CLI options
167
+ if (options?.backendCommands) {
168
+ if (!runBinary.runOpts.env) {
169
+ runBinary.runOpts.env = {};
170
+ }
171
+ for (const cmd of options.backendCommands) {
172
+ const equalIndex = cmd.indexOf('=');
173
+ if (equalIndex > 0) {
174
+ const key = cmd.substring(0, equalIndex);
175
+ const value = cmd.substring(equalIndex + 1);
176
+ runBinary.runOpts.env[key] = value;
177
+ }
178
+ else {
179
+ this.logger.warn(`Invalid environment variable format: ${cmd}. Expected format: KEY=VALUE`);
180
+ }
181
+ }
182
+ }
183
+ // Process additional backend commands
184
+ if (options?.backendCommands && options.backendCommands.length > 0) {
185
+ this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);
186
+ // Add commands as arguments to the binary
187
+ runBinary.args = [...runBinary.args, ...options.backendCommands];
188
+ }
166
189
  upCommands.push(runBinary);
167
190
  state.setInstanceInfo(instanceName, {
168
191
  type: 'process',
@@ -186,8 +209,8 @@ class Core {
186
209
  const minioPort = options?.minioPort ?? 9000;
187
210
  const instance = this.createLocal(instanceName, {
188
211
  ...options,
189
- primaryURL: options?.primaryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/main-bucket/?region=no-region`,
190
- libraryURL: options?.libraryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/library-bucket/?region=no-region`,
212
+ primaryURL: options?.primaryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-primary-bucket/?region=no-region`,
213
+ libraryURL: options?.libraryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-library-bucket/?region=no-region`,
191
214
  });
192
215
  const localRoot = options?.configOptions?.localRoot;
193
216
  const minioRunCmd = this.createMinio(instanceName, {
@@ -273,14 +296,14 @@ class Core {
273
296
  }
274
297
  const presignHost = options?.presignHost ?? 'localhost';
275
298
  const presignPort = options?.s3Port ?? 9000;
276
- const primary = plConfig.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/main-bucket`);
299
+ const primary = plConfig.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-primary-bucket`);
277
300
  if (primary.type !== 'S3') {
278
301
  throw new Error('primary storage must have \'S3\' type in \'docker s3\' configuration');
279
302
  }
280
303
  else {
281
304
  primary.presignEndpoint = `http://${presignHost}:${presignPort}`;
282
305
  }
283
- const library = plConfig.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/library-bucket`);
306
+ const library = plConfig.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-library-bucket`);
284
307
  if (library.type !== 'S3') {
285
308
  throw new Error(`${library.type} storage type is not supported for library storage`);
286
309
  }
@@ -309,13 +332,14 @@ class Core {
309
332
  ['backend', {
310
333
  platform: options?.platformOverride,
311
334
  mounts: backendMounts,
335
+ commands: options?.backendCommands,
312
336
  }],
313
337
  ]));
314
338
  const envs = {
315
339
  MINIO_IMAGE: 'quay.io/minio/minio',
316
340
  MINIO_STORAGE: storageDir('minio'),
317
341
  PL_IMAGE: image,
318
- PL_AUTH_HTPASSWD_PATH: usersFSPath,
342
+ PL_AUTH_HTPASSWD: usersFSPath,
319
343
  PL_LICENSE: options?.license,
320
344
  PL_LICENSE_FILE: options?.licenseFile,
321
345
  PL_LOG_LEVEL: options?.logLevel ?? 'info',
@@ -331,36 +355,70 @@ class Core {
331
355
  ...this.configureDockerStorage('primary', primary),
332
356
  ...this.configureDockerStorage('library', library),
333
357
  };
334
- if (options?.grpcAddr)
335
- envs.PL_GRPC_ADDR = options.grpcAddr;
336
- if (options?.grpcPort)
337
- envs.PL_GRPC_PORT = options.grpcPort.toString();
338
- if (options?.monitoringAddr)
339
- envs.PL_MONITORING_ADDR = options.monitoringAddr;
340
- if (options?.monitoringPort)
358
+ if (options?.grpcAddr) {
359
+ const addrParts = options.grpcAddr.split(':');
360
+ if (addrParts.length === 2) {
361
+ envs.PL_LISTEN_ADDRESS = addrParts[0];
362
+ envs.PL_LISTEN_PORT = addrParts[1];
363
+ }
364
+ else {
365
+ envs.PL_LISTEN_ADDRESS = options.grpcAddr;
366
+ }
367
+ }
368
+ else if (options?.grpcPort) {
369
+ envs.PL_LISTEN_PORT = options.grpcPort.toString();
370
+ }
371
+ if (options?.monitoringAddr) {
372
+ const addrParts = options.monitoringAddr.split(':');
373
+ if (addrParts.length === 2) {
374
+ envs.PL_MONITORING_IP = addrParts[0];
375
+ envs.PL_MONITORING_PORT = addrParts[1];
376
+ }
377
+ else {
378
+ envs.PL_MONITORING_IP = options.monitoringAddr;
379
+ }
380
+ }
381
+ else if (options?.monitoringPort) {
341
382
  envs.PL_MONITORING_PORT = options.monitoringPort.toString();
342
- if (options?.debugAddr)
343
- envs.PL_DEBUG_ADDR = options.debugAddr;
344
- if (options?.debugPort)
383
+ }
384
+ if (options?.debugAddr) {
385
+ const addrParts = options.debugAddr.split(':');
386
+ if (addrParts.length === 2) {
387
+ envs.PL_DEBUG_IP = addrParts[0];
388
+ envs.PL_DEBUG_PORT = addrParts[1];
389
+ }
390
+ else {
391
+ envs.PL_DEBUG_IP = options.debugAddr;
392
+ }
393
+ }
394
+ else if (options?.debugPort) {
345
395
  envs.PL_DEBUG_PORT = options.debugPort.toString();
396
+ }
346
397
  if (options?.s3Port)
347
398
  envs.MINIO_PORT = options.s3Port.toString();
348
399
  if (options?.s3ConsolePort)
349
400
  envs.MINIO_CONSOLE_PORT = options.s3ConsolePort.toString();
350
401
  if (options?.auth) {
351
402
  if (options.auth.enabled) {
352
- envs['PL_AUTH_ENABLED'] = 'true';
403
+ envs['PL_NO_AUTH'] = 'false';
404
+ }
405
+ else {
406
+ envs['PL_NO_AUTH'] = 'true';
353
407
  }
354
408
  if (options.auth.drivers) {
355
409
  for (const drv of options.auth.drivers) {
356
410
  if (drv.driver === 'htpasswd') {
357
- envs['PL_AUTH_HTPASSWD_PATH'] = path.resolve(drv.path);
411
+ envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);
358
412
  drv.path = '/etc/platforma/users.htpasswd';
359
413
  }
360
414
  }
361
415
  envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);
362
416
  }
363
417
  }
418
+ // Process additional backend commands
419
+ if (options?.backendCommands && options.backendCommands.length > 0) {
420
+ this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);
421
+ }
364
422
  state.setInstanceInfo(instanceName, {
365
423
  type: 'docker',
366
424
  upCommands: [{
@@ -433,16 +491,17 @@ class Core {
433
491
  ['backend', {
434
492
  platform: options?.platformOverride,
435
493
  mounts: backendMounts,
494
+ commands: options?.backendCommands,
436
495
  }],
437
496
  ]));
438
497
  const primary = plConfig.storageSettingsFromURL(options?.primaryStorageURL ?? `file:${primaryFSPath}`, '.');
439
498
  const library = plConfig.storageSettingsFromURL(options?.libraryStorageURL ?? `file:${libraryFSPath}`, '.');
440
499
  const envs = {
441
500
  PL_IMAGE: image,
442
- PL_AUTH_HTPASSWD_PATH: usersFSPath,
501
+ PL_AUTH_HTPASSWD: usersFSPath,
443
502
  PL_LICENSE: options?.license,
444
503
  PL_LICENSE_FILE: options?.licenseFile,
445
- PL_LOG_LEVEL: 'info',
504
+ PL_LOG_LEVEL: options?.logLevel ?? 'info',
446
505
  PL_LOG_DIR: path.dirname(logFilePath),
447
506
  PL_LOG_ROTATION_ENABLED: 'true',
448
507
  PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',
@@ -454,32 +513,66 @@ class Core {
454
513
  ...this.configureDockerStorage('primary', primary),
455
514
  ...this.configureDockerStorage('library', library),
456
515
  };
457
- if (options?.grpcAddr)
458
- envs.PL_GRPC_ADDR = options.grpcAddr;
459
- if (options?.grpcPort)
460
- envs.PL_GRPC_PORT = options.grpcPort.toString();
461
- if (options?.monitoringAddr)
462
- envs.PL_MONITORING_ADDR = options.monitoringAddr;
463
- if (options?.monitoringPort)
516
+ if (options?.grpcAddr) {
517
+ const addrParts = options.grpcAddr.split(':');
518
+ if (addrParts.length === 2) {
519
+ envs.PL_LISTEN_ADDRESS = addrParts[0];
520
+ envs.PL_LISTEN_PORT = addrParts[1];
521
+ }
522
+ else {
523
+ envs.PL_LISTEN_ADDRESS = options.grpcAddr;
524
+ }
525
+ }
526
+ else if (options?.grpcPort) {
527
+ envs.PL_LISTEN_PORT = options.grpcPort.toString();
528
+ }
529
+ if (options?.monitoringAddr) {
530
+ const addrParts = options.monitoringAddr.split(':');
531
+ if (addrParts.length === 2) {
532
+ envs.PL_MONITORING_IP = addrParts[0];
533
+ envs.PL_MONITORING_PORT = addrParts[1];
534
+ }
535
+ else {
536
+ envs.PL_MONITORING_IP = options.monitoringAddr;
537
+ }
538
+ }
539
+ else if (options?.monitoringPort) {
464
540
  envs.PL_MONITORING_PORT = options.monitoringPort.toString();
465
- if (options?.debugAddr)
466
- envs.PL_DEBUG_ADDR = options.debugAddr;
467
- if (options?.debugPort)
541
+ }
542
+ if (options?.debugAddr) {
543
+ const addrParts = options.debugAddr.split(':');
544
+ if (addrParts.length === 2) {
545
+ envs.PL_DEBUG_IP = addrParts[0];
546
+ envs.PL_DEBUG_PORT = addrParts[1];
547
+ }
548
+ else {
549
+ envs.PL_DEBUG_IP = options.debugAddr;
550
+ }
551
+ }
552
+ else if (options?.debugPort) {
468
553
  envs.PL_DEBUG_PORT = options.debugPort.toString();
554
+ }
469
555
  if (options?.auth) {
470
556
  if (options.auth.enabled) {
471
- envs['PL_AUTH_ENABLED'] = 'true';
557
+ envs['PL_NO_AUTH'] = 'false';
558
+ }
559
+ else {
560
+ envs['PL_NO_AUTH'] = 'true';
472
561
  }
473
562
  if (options.auth.drivers) {
474
563
  for (const drv of options.auth.drivers) {
475
564
  if (drv.driver === 'htpasswd') {
476
- envs['PL_AUTH_HTPASSWD_PATH'] = path.resolve(drv.path);
565
+ envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);
477
566
  drv.path = '/etc/platforma/users.htpasswd';
478
567
  }
479
568
  }
480
569
  envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);
481
570
  }
482
571
  }
572
+ // Process additional backend commands
573
+ if (options?.backendCommands && options.backendCommands.length > 0) {
574
+ this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);
575
+ }
483
576
  state.setInstanceInfo(instanceName, {
484
577
  type: 'docker',
485
578
  upCommands: [{
@@ -651,21 +744,58 @@ You can obtain the license from "https://licensing.milaboratories.com".`);
651
744
  storageID = storageID.toUpperCase();
652
745
  switch (sType) {
653
746
  case 'S3':
654
- envs[`PL_DATA_${storageID}_TYPE`] = 'S3';
655
- envs[`PL_DATA_${storageID}_S3_BUCKET`] = storage.bucketName;
656
- if (storage.endpoint)
657
- envs[`PL_DATA_${storageID}_S3_ENDPOINT`] = storage.endpoint;
658
- if (storage.presignEndpoint)
659
- envs[`PL_DATA_${storageID}_S3_PRESIGN_ENDPOINT`] = storage.presignEndpoint;
660
- if (storage.region)
661
- envs[`PL_DATA_${storageID}_S3_REGION`] = storage.region;
662
- if (storage.key)
663
- envs[`PL_DATA_${storageID}_S3_KEY`] = storage.key;
664
- if (storage.secret)
665
- envs[`PL_DATA_${storageID}_S3_SECRET`] = storage.secret;
747
+ switch (storageID) {
748
+ case 'PRIMARY': {
749
+ // Construct the S3 URL for primary storage
750
+ if (storage.endpoint && storage.bucketName) {
751
+ envs['PL_DATA_LIBRARY_S3_URL'] = `${storage.endpoint}${storage.bucketName}`;
752
+ }
753
+ if (storage.endpoint)
754
+ envs['PL_PRIMARY_STORAGE_S3_ENDPOINT'] = storage.endpoint;
755
+ if (storage.presignEndpoint)
756
+ envs['PL_PRIMARY_STORAGE_S3_EXTERNAL_ENDPOINT'] = storage.presignEndpoint;
757
+ if (storage.region)
758
+ envs['PL_PRIMARY_STORAGE_S3_REGION'] = storage.region;
759
+ if (storage.key)
760
+ envs['PL_PRIMARY_STORAGE_S3_KEY'] = storage.key;
761
+ if (storage.secret)
762
+ envs['PL_PRIMARY_STORAGE_S3_SECRET'] = storage.secret;
763
+ break;
764
+ }
765
+ case 'LIBRARY': {
766
+ // Construct the S3 URL for library storage
767
+ if (storage.endpoint && storage.bucketName) {
768
+ envs['PL_DATA_LIBRARY_S3_URL'] = `library=${storage.endpoint}${storage.bucketName}`;
769
+ }
770
+ if (storage.endpoint)
771
+ envs['PL_DATA_LIBRARY_S3_ENDPOINT'] = `library=${storage.endpoint}`;
772
+ if (storage.presignEndpoint)
773
+ envs['PL_DATA_LIBRARY_S3_EXTERNAL_ENDPOINT'] = `library=${storage.presignEndpoint}`;
774
+ if (storage.region)
775
+ envs['PL_DATA_LIBRARY_S3_REGION'] = `library=${storage.region}`;
776
+ if (storage.key)
777
+ envs['PL_DATA_LIBRARY_S3_KEY'] = `library=${storage.key}`;
778
+ if (storage.secret)
779
+ envs['PL_DATA_LIBRARY_S3_SECRET'] = `library=${storage.secret}`;
780
+ break;
781
+ }
782
+ default:
783
+ throw new Error(`Unknown storage ID: ${storageID}`);
784
+ }
666
785
  return envs;
667
786
  case 'FS':
668
- envs[`PL_DATA_${storageID}_TYPE`] = 'FS';
787
+ switch (storageID) {
788
+ case 'PRIMARY':
789
+ if (storage.rootPath)
790
+ envs['PL_PRIMARY_STORAGE_FS'] = storage.rootPath;
791
+ break;
792
+ case 'LIBRARY':
793
+ if (storage.rootPath)
794
+ envs['PL_DATA_LIBRARY_FS_PATH'] = storage.rootPath;
795
+ break;
796
+ default:
797
+ throw new Error(`Unknown storage ID: ${storageID}`);
798
+ }
669
799
  return envs;
670
800
  default:
671
801
  util.assertNever();