Refactor the runDockerContainer function to a ContainerRunner interface.

Signed-off-by: Dominik Henneke <dominik.henneke@sda-se.com>
This commit is contained in:
Dominik Henneke
2021-04-21 17:14:11 +02:00
parent 044f9930d1
commit e0bfd3d448
39 changed files with 652 additions and 347 deletions
+1 -1
View File
@@ -35,7 +35,6 @@
"@backstage/config": "^0.1.4",
"@backstage/errors": "^0.1.1",
"@backstage/techdocs-common": "^0.5.0",
"@types/dockerode": "^3.2.1",
"@types/express": "^4.17.6",
"cross-fetch": "^3.0.6",
"dockerode": "^3.2.1",
@@ -47,6 +46,7 @@
},
"devDependencies": {
"@backstage/cli": "^0.6.8",
"@types/dockerode": "^3.2.1",
"supertest": "^6.1.3"
},
"files": [
@@ -28,7 +28,6 @@ import {
PublisherBase,
UrlPreparer,
} from '@backstage/techdocs-common';
import Docker from 'dockerode';
import fs from 'fs-extra';
import os from 'os';
import path from 'path';
@@ -41,7 +40,6 @@ type DocsBuilderArguments = {
publisher: PublisherBase;
entity: Entity;
logger: Logger;
dockerClient: Docker;
};
export class DocsBuilder {
@@ -50,7 +48,6 @@ export class DocsBuilder {
private publisher: PublisherBase;
private entity: Entity;
private logger: Logger;
private dockerClient: Docker;
constructor({
preparers,
@@ -58,14 +55,12 @@ export class DocsBuilder {
publisher,
entity,
logger,
dockerClient,
}: DocsBuilderArguments) {
this.preparer = preparers.get(entity);
this.generator = generators.get(entity);
this.publisher = publisher;
this.entity = entity;
this.logger = logger;
this.dockerClient = dockerClient;
}
public async build(): Promise<void> {
@@ -157,7 +152,6 @@ export class DocsBuilder {
await this.generator.run({
inputDir: preparedDir,
outputDir,
dockerClient: this.dockerClient,
parsedLocationAnnotation,
etag: newEtag,
});
@@ -24,7 +24,6 @@ import {
PublisherBase,
} from '@backstage/techdocs-common';
import fetch from 'cross-fetch';
import Docker from 'dockerode';
import express from 'express';
import Router from 'express-promise-router';
import { Knex } from 'knex';
@@ -40,7 +39,6 @@ type RouterOptions = {
discovery: PluginEndpointDiscovery;
database?: Knex; // TODO: Make database required when we're implementing database stuff.
config: Config;
dockerClient: Docker;
};
export async function createRouter({
@@ -48,7 +46,6 @@ export async function createRouter({
generators,
publisher,
config,
dockerClient,
logger,
discovery,
}: RouterOptions): Promise<express.Router> {
@@ -165,7 +162,6 @@ export async function createRouter({
preparers,
generators,
publisher,
dockerClient,
logger,
entity,
});
@@ -16,21 +16,22 @@
import {
createServiceBuilder,
DockerContainerRunner,
SingleHostDiscovery,
UrlReader,
} from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import {
DirectoryPreparer,
Generators,
Preparers,
Publisher,
TechdocsGenerator,
} from '@backstage/techdocs-common';
import Docker from 'dockerode';
import { Server } from 'http';
import { Logger } from 'winston';
import { createRouter } from './router';
import Docker from 'dockerode';
import {
Preparers,
DirectoryPreparer,
Generators,
TechdocsGenerator,
Publisher,
} from '@backstage/techdocs-common';
import { ConfigReader } from '@backstage/config';
export interface ServerOptions {
port: number;
@@ -65,21 +66,25 @@ export async function startStandaloneServer(
);
preparers.register('dir', directoryPreparer);
const dockerClient = new Docker();
const containerRunner = new DockerContainerRunner({ dockerClient });
const generators = new Generators();
const techdocsGenerator = new TechdocsGenerator(logger, config);
const techdocsGenerator = new TechdocsGenerator({
logger,
containerRunner,
config,
});
generators.register('techdocs', techdocsGenerator);
const publisher = await Publisher.fromConfig(config, { logger, discovery });
const dockerClient = new Docker();
logger.debug('Starting application server...');
const router = await createRouter({
preparers,
generators,
logger,
publisher,
dockerClient,
config,
discovery,
});