@backstage/plugin-techdocs-node 0.0.0-nightly-20240617021823 → 0.0.0-nightly-20240621021638
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/CHANGELOG.md +20 -5
- package/dist/index.cjs.js +85 -7
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/package.json +8 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,17 +1,32 @@
|
|
|
1
1
|
# @backstage/plugin-techdocs-node
|
|
2
2
|
|
|
3
|
-
## 0.0.0-nightly-
|
|
3
|
+
## 0.0.0-nightly-20240621021638
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
- @backstage/backend-common@0.0.0-nightly-20240621021638
|
|
9
|
+
- @backstage/backend-plugin-api@0.0.0-nightly-20240621021638
|
|
10
|
+
- @backstage/catalog-model@1.5.0
|
|
11
|
+
- @backstage/config@1.2.0
|
|
12
|
+
- @backstage/errors@1.2.4
|
|
13
|
+
- @backstage/integration@1.12.0
|
|
14
|
+
- @backstage/integration-aws-node@0.1.12
|
|
15
|
+
- @backstage/plugin-search-common@1.2.12
|
|
16
|
+
|
|
17
|
+
## 1.12.5
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
6
20
|
|
|
7
21
|
- e64bfb2: Allow defining custom build log transport for techdocs builder
|
|
22
|
+
- 48c38f0: `TechdocsGenerator` won't require a `containerRunner` option anymore for generating TechDocs in docker.
|
|
8
23
|
- d44a20a: Added additional plugin metadata to `package.json`.
|
|
9
24
|
- 5db7536: Updated `getRepoUrlFromLocationAnnotation` to check for Harness SCM integration
|
|
10
25
|
- Updated dependencies
|
|
11
|
-
- @backstage/backend-
|
|
12
|
-
- @backstage/backend-
|
|
13
|
-
- @backstage/integration@
|
|
14
|
-
- @backstage/plugin-search-common@
|
|
26
|
+
- @backstage/backend-common@0.23.0
|
|
27
|
+
- @backstage/backend-plugin-api@0.6.19
|
|
28
|
+
- @backstage/integration@1.12.0
|
|
29
|
+
- @backstage/plugin-search-common@1.2.12
|
|
15
30
|
- @backstage/catalog-model@1.5.0
|
|
16
31
|
- @backstage/config@1.2.0
|
|
17
32
|
- @backstage/errors@1.2.4
|
package/dist/index.cjs.js
CHANGED
|
@@ -13,6 +13,8 @@ var catalogModel = require('@backstage/catalog-model');
|
|
|
13
13
|
var mime = require('mime-types');
|
|
14
14
|
var createLimiter = require('p-limit');
|
|
15
15
|
var recursiveReadDir = require('recursive-readdir');
|
|
16
|
+
var Docker = require('dockerode');
|
|
17
|
+
var util = require('util');
|
|
16
18
|
var integrationAwsNode = require('@backstage/integration-aws-node');
|
|
17
19
|
var clientS3 = require('@aws-sdk/client-s3');
|
|
18
20
|
var credentialProviders = require('@aws-sdk/credential-providers');
|
|
@@ -37,6 +39,7 @@ var yaml__default = /*#__PURE__*/_interopDefaultCompat(yaml);
|
|
|
37
39
|
var mime__default = /*#__PURE__*/_interopDefaultCompat(mime);
|
|
38
40
|
var createLimiter__default = /*#__PURE__*/_interopDefaultCompat(createLimiter);
|
|
39
41
|
var recursiveReadDir__default = /*#__PURE__*/_interopDefaultCompat(recursiveReadDir);
|
|
42
|
+
var Docker__default = /*#__PURE__*/_interopDefaultCompat(Docker);
|
|
40
43
|
var JSON5__default = /*#__PURE__*/_interopDefaultCompat(JSON5);
|
|
41
44
|
var express__default = /*#__PURE__*/_interopDefaultCompat(express);
|
|
42
45
|
var os__default = /*#__PURE__*/_interopDefaultCompat(os);
|
|
@@ -431,6 +434,84 @@ const patchMkdocsYmlWithPlugins = async (mkdocsYmlPath, logger, defaultPlugins =
|
|
|
431
434
|
});
|
|
432
435
|
};
|
|
433
436
|
|
|
437
|
+
const pipeline = util.promisify(stream.pipeline);
|
|
438
|
+
class DockerContainerRunner {
|
|
439
|
+
dockerClient;
|
|
440
|
+
constructor() {
|
|
441
|
+
this.dockerClient = new Docker__default.default();
|
|
442
|
+
}
|
|
443
|
+
async runContainer(options) {
|
|
444
|
+
const {
|
|
445
|
+
imageName,
|
|
446
|
+
command,
|
|
447
|
+
args,
|
|
448
|
+
logStream = new stream.PassThrough(),
|
|
449
|
+
mountDirs = {},
|
|
450
|
+
workingDir,
|
|
451
|
+
envVars = {},
|
|
452
|
+
pullImage = true,
|
|
453
|
+
defaultUser = false
|
|
454
|
+
} = options;
|
|
455
|
+
try {
|
|
456
|
+
await this.dockerClient.ping();
|
|
457
|
+
} catch (e) {
|
|
458
|
+
throw new errors.ForwardedError(
|
|
459
|
+
"This operation requires Docker. Docker does not appear to be available. Docker.ping() failed with",
|
|
460
|
+
e
|
|
461
|
+
);
|
|
462
|
+
}
|
|
463
|
+
if (pullImage) {
|
|
464
|
+
await new Promise((resolve, reject) => {
|
|
465
|
+
this.dockerClient.pull(imageName, {}, (err, stream) => {
|
|
466
|
+
if (err) {
|
|
467
|
+
reject(err);
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
pipeline(stream, logStream, { end: false }).then(resolve).catch(reject);
|
|
471
|
+
});
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
const userOptions = {};
|
|
475
|
+
if (!defaultUser && process.getuid && process.getgid) {
|
|
476
|
+
userOptions.User = `${process.getuid()}:${process.getgid()}`;
|
|
477
|
+
}
|
|
478
|
+
const Volumes = {};
|
|
479
|
+
for (const containerDir of Object.values(mountDirs)) {
|
|
480
|
+
Volumes[containerDir] = {};
|
|
481
|
+
}
|
|
482
|
+
const Binds = [];
|
|
483
|
+
for (const [hostDir, containerDir] of Object.entries(mountDirs)) {
|
|
484
|
+
const realHostDir = await fs__default.default.realpath(hostDir);
|
|
485
|
+
Binds.push(`${realHostDir}:${containerDir}`);
|
|
486
|
+
}
|
|
487
|
+
const Env = [];
|
|
488
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
489
|
+
Env.push(`${key}=${value}`);
|
|
490
|
+
}
|
|
491
|
+
const [{ Error: error, StatusCode: statusCode }] = await this.dockerClient.run(imageName, args, logStream, {
|
|
492
|
+
Volumes,
|
|
493
|
+
HostConfig: {
|
|
494
|
+
AutoRemove: true,
|
|
495
|
+
Binds
|
|
496
|
+
},
|
|
497
|
+
...workingDir ? { WorkingDir: workingDir } : {},
|
|
498
|
+
Entrypoint: command,
|
|
499
|
+
Env,
|
|
500
|
+
...userOptions
|
|
501
|
+
});
|
|
502
|
+
if (error) {
|
|
503
|
+
throw new Error(
|
|
504
|
+
`Docker failed to run with the following error message: ${error}`
|
|
505
|
+
);
|
|
506
|
+
}
|
|
507
|
+
if (statusCode !== 0) {
|
|
508
|
+
throw new Error(
|
|
509
|
+
`Docker container returned a non-zero exit code (${statusCode})`
|
|
510
|
+
);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
|
|
434
515
|
class TechdocsGenerator {
|
|
435
516
|
/**
|
|
436
517
|
* The default docker image (and version) used to generate content. Public
|
|
@@ -514,13 +595,9 @@ class TechdocsGenerator {
|
|
|
514
595
|
`Successfully generated docs from ${inputDir} into ${outputDir} using local mkdocs`
|
|
515
596
|
);
|
|
516
597
|
break;
|
|
517
|
-
case "docker":
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
"Invalid state: containerRunner cannot be undefined when runIn is 'docker'"
|
|
521
|
-
);
|
|
522
|
-
}
|
|
523
|
-
await this.containerRunner.runContainer({
|
|
598
|
+
case "docker": {
|
|
599
|
+
const containerRunner = this.containerRunner || new DockerContainerRunner();
|
|
600
|
+
await containerRunner.runContainer({
|
|
524
601
|
imageName: this.options.dockerImage ?? TechdocsGenerator.defaultDockerImage,
|
|
525
602
|
args: ["build", "-d", "/output"],
|
|
526
603
|
logStream,
|
|
@@ -536,6 +613,7 @@ class TechdocsGenerator {
|
|
|
536
613
|
`Successfully generated docs from ${inputDir} into ${outputDir} using techdocs-container`
|
|
537
614
|
);
|
|
538
615
|
break;
|
|
616
|
+
}
|
|
539
617
|
default:
|
|
540
618
|
throw new Error(
|
|
541
619
|
`Invalid config value "${this.options.runIn}" provided in 'techdocs.generators.techdocs'.`
|