chore(scaffolder): refactor out the templaters into a map that is dictated by the router

This commit is contained in:
blam
2020-07-13 11:55:05 +02:00
parent 2fdd40698a
commit 1d4d07e07d
2 changed files with 18 additions and 9 deletions
@@ -37,7 +37,8 @@ describe('JobProcessor', () => {
generation: 1,
},
spec: {
type: 'cookiecutter',
type: 'website',
templater: 'cookiecutter',
path: './template',
schema: {
$schema: 'http://json-schema.org/draft-07/schema#',
@@ -16,23 +16,24 @@
import { TemplateEntityV1alpha1 } from '@backstage/catalog-model';
import { JsonValue } from '@backstage/config';
import { Octokit } from '@octokit/rest';
import Docker from 'dockerode';
import express from 'express';
import Router from 'express-promise-router';
import { Logger } from 'winston';
import {
GithubPublisher,
JobProcessor,
PreparerBuilder,
RequiredTemplateValues,
StageContext,
TemplaterBase,
TemplaterBuilder,
Publisher,
} from '../scaffolder';
export interface RouterOptions {
preparers: PreparerBuilder;
templater: TemplaterBase;
templaters: TemplaterBuilder;
publisher: Publisher;
logger: Logger;
dockerClient: Docker;
}
@@ -42,9 +43,14 @@ export async function createRouter(
): Promise<express.Router> {
const router = Router();
const githubClient = new Octokit({ auth: process.env.GITHUB_ACCESS_TOKEN });
const { preparers, templater, logger: parentLogger, dockerClient } = options;
const githubPulisher = new GithubPublisher({ client: githubClient });
const {
preparers,
templaters,
publisher,
logger: parentLogger,
dockerClient,
} = options;
const logger = parentLogger.child({ plugin: 'scaffolder' });
const jobProcessor = new JobProcessor();
@@ -106,6 +112,7 @@ export async function createRouter(
{
name: 'Run the templater',
handler: async (ctx: StageContext<{ skeletonDir: string }>) => {
const templater = templaters.get(ctx.entity);
const { resultDir } = await templater.run({
directory: ctx.skeletonDir,
dockerClient,
@@ -120,7 +127,8 @@ export async function createRouter(
name: 'Publish template',
handler: async (ctx: StageContext<{ resultDir: string }>) => {
ctx.logger.info('Should not store the template');
const { remoteUrl } = await githubPulisher.publish({
const { remoteUrl } = await publisher.publish({
entity: ctx.entity,
values: ctx.values,
directory: ctx.resultDir,
});