diff --git a/plugins/scaffolder-backend/src/lib/catalog/CatalogEntityClient.ts b/plugins/scaffolder-backend/src/lib/catalog/CatalogEntityClient.ts index cea0e85148..57f73b1876 100644 --- a/plugins/scaffolder-backend/src/lib/catalog/CatalogEntityClient.ts +++ b/plugins/scaffolder-backend/src/lib/catalog/CatalogEntityClient.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { TemplateEntityV1alpha1 } from '@backstage/catalog-model'; +import { TemplateEntity } from '@backstage/catalog-model'; import { CatalogApi } from '@backstage/catalog-client'; import { ConflictError, NotFoundError } from '@backstage/backend-common'; @@ -32,7 +32,7 @@ export class CatalogEntityClient { async findTemplate( templateName: string, options?: { token?: string }, - ): Promise { + ): Promise { const { items: templates } = (await this.catalogClient.getEntities( { filter: { @@ -41,7 +41,7 @@ export class CatalogEntityClient { }, }, options, - )) as { items: TemplateEntityV1alpha1[] }; + )) as { items: TemplateEntity[] }; if (templates.length !== 1) { if (templates.length > 1) { diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts index e7ad21e703..9d0c0863aa 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts @@ -17,7 +17,7 @@ import { PassThrough } from 'stream'; import { Logger } from 'winston'; import * as winston from 'winston'; -import { JsonValue } from '@backstage/config'; +import { JsonValue, JsonObject } from '@backstage/config'; import { TaskBroker, Task } from './types'; import fs from 'fs-extra'; import path from 'path'; @@ -57,10 +57,11 @@ export class TaskWorker { ); const templateCtx: { + parameters: JsonObject; steps: { [stepName: string]: { output: { [outputName: string]: JsonValue } }; }; - } = { steps: {} }; + } = { parameters: task.spec.values, steps: {} }; for (const step of task.spec.steps) { const metadata = { stepId: step.id }; diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/TemplateConverter.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/TemplateConverter.ts index 4139948513..8019b676b5 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/TemplateConverter.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/TemplateConverter.ts @@ -86,6 +86,7 @@ export function templateEntityToSpec( }); return { + values: {}, steps, output: { remoteUrl: '{{ steps.publish.output.remoteUrl }}', diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts index ae18a59e41..7fc35d9e46 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts @@ -43,6 +43,7 @@ export type DbTaskEventRow = { }; export type TaskSpec = { + values: JsonObject; steps: Array<{ id: string; name: string; diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 3d10bbd101..358d571000 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -45,6 +45,7 @@ import { import { registerLegacyActions } from '../scaffolder/stages/legacy'; import { getWorkingDirectory } from './helpers'; import { + InputError, NotFoundError, PluginDatabaseManager, } from '@backstage/backend-common'; @@ -250,7 +251,25 @@ export async function createRouter( res.status(400).json({ errors: validationResult.errors }); return; } - const taskSpec = templateEntityToSpec(template, values); + + let taskSpec; + if (template.apiVersion === 'backstage.io/v1alpha1') { + taskSpec = templateEntityToSpec(template, values); + } else if (template.apiVersion === 'backstage.io/v1beta1') { + // TODO: add v1beta1 type + // const betaTemplate = template as TemplateEntityV1beta1 + const betaTemplate = template as any; + taskSpec = { + values, + steps: betaTemplate.spec.steps, + output: betaTemplate.spec.output, + }; + } else { + throw new InputError( + `Unknown apiVersion field in schema entity, ${template.apiVersion}`, + ); + } + const result = await taskBroker.dispatch(taskSpec); res.status(201).json({ id: result.taskId });