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