From 1d4d07e07dbfdc2f32d7393574a442d58f4ee5c2 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 13 Jul 2020 11:55:05 +0200 Subject: [PATCH] chore(scaffolder): refactor out the templaters into a map that is dictated by the router --- .../src/scaffolder/jobs/processor.test.ts | 3 ++- .../scaffolder-backend/src/service/router.ts | 24 ++++++++++++------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/jobs/processor.test.ts b/plugins/scaffolder-backend/src/scaffolder/jobs/processor.test.ts index 191c949c22..8a875e4e2b 100644 --- a/plugins/scaffolder-backend/src/scaffolder/jobs/processor.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/jobs/processor.test.ts @@ -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#', diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index abe12c94eb..225662142f 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -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 { 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, });