fixing techdocs-cli Docker client creation

Docker client does not need to be created when --no-docker
option is provided.

If you had DOCKER_CERT_PATH environment variable defined
the Docker client was looking for certificates
and breaking techdocs-cli generate command even with --no-docker
option.

Signed-off-by: Matteo Silvestri <matteosilv@gmail.com>
This commit is contained in:
Matteo Silvestri
2022-09-07 15:34:47 +02:00
parent b8b2d4ab04
commit 0b2a30dead
5 changed files with 45 additions and 7 deletions
+14
View File
@@ -0,0 +1,14 @@
---
'@techdocs/cli': patch
'@backstage/plugin-techdocs-node': patch
---
fixing techdocs-cli Docker client creation
Docker client does not need to be created when --no-docker
option is provided.
If you had DOCKER_CERT_PATH environment variable defined
the Docker client was looking for certificates
and breaking techdocs-cli generate command even with --no-docker
option.
@@ -89,6 +89,23 @@ describe('end-to-end', () => {
expect(proc.exit).toEqual(0);
});
it('can generate with DOCKER_* TLS variables and --no-docker option', async () => {
const env = {
DOCKER_HOST: 'tcp://localhost:2376',
DOCKER_TLS_CERTDIR: '/certs',
DOCKER_TLS_VERIFY: '1',
DOCKER_CERT_PATH: '/certs/client',
...process.env,
};
const proc = await executeCommand(entryPoint, ['generate', '--no-docker'], {
cwd,
timeout,
env,
});
expect(proc.stdout).toContain('Successfully generated docs');
expect(proc.exit).toEqual(0);
});
it('can serve in mkdocs', async () => {
const proc = await executeCommand(
entryPoint,
@@ -22,7 +22,10 @@ import {
TechdocsGenerator,
ParsedLocationAnnotation,
} from '@backstage/plugin-techdocs-node';
import { DockerContainerRunner } from '@backstage/backend-common';
import {
ContainerRunner,
DockerContainerRunner,
} from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import {
convertTechDocsRefToLocationAnnotation,
@@ -66,8 +69,12 @@ export default async function generate(opts: OptionValues) {
});
// Docker client (conditionally) used by the generators, based on techdocs.generators config.
const dockerClient = new Docker();
const containerRunner = new DockerContainerRunner({ dockerClient });
let containerRunner: ContainerRunner | undefined;
if (opts.docker) {
const dockerClient = new Docker();
containerRunner = new DockerContainerRunner({ dockerClient });
}
let parsedLocationAnnotation = {} as ParsedLocationAnnotation;
if (opts.techdocsRef) {
@@ -55,7 +55,7 @@ export class TechdocsGenerator implements GeneratorBase {
*/
public static readonly defaultDockerImage = 'spotify/techdocs:v1.1.0';
private readonly logger: Logger;
private readonly containerRunner: ContainerRunner;
private readonly containerRunner?: ContainerRunner;
private readonly options: GeneratorConfig;
private readonly scmIntegrations: ScmIntegrationRegistry;
@@ -77,7 +77,7 @@ export class TechdocsGenerator implements GeneratorBase {
constructor(options: {
logger: Logger;
containerRunner: ContainerRunner;
containerRunner?: ContainerRunner;
config: Config;
scmIntegrations: ScmIntegrationRegistry;
}) {
@@ -143,7 +143,7 @@ export class TechdocsGenerator implements GeneratorBase {
);
break;
case 'docker':
await this.containerRunner.runContainer({
await this.containerRunner!.runContainer({
imageName:
this.options.dockerImage ?? TechdocsGenerator.defaultDockerImage,
args: ['build', '-d', '/output'],
@@ -28,7 +28,7 @@ export type GeneratorRunInType = 'docker' | 'local';
* @public
*/
export type GeneratorOptions = {
containerRunner: ContainerRunner;
containerRunner?: ContainerRunner;
logger: Logger;
};