diff --git a/.changeset/seven-badgers-marry.md b/.changeset/seven-badgers-marry.md new file mode 100644 index 0000000000..929ae99fac --- /dev/null +++ b/.changeset/seven-badgers-marry.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +This adds a configuration option to the scaffolder plugin router, so we can allow for multiple taskworkers. Currently with only one taskworker you are limited to scaffolding one thing at a time. Set the `taskWorkers?: number` option in your scaffolder router to get more than 1 taskworker diff --git a/.github/styles/vocab.txt b/.github/styles/vocab.txt index b8f028a2ae..2d24e8393b 100644 --- a/.github/styles/vocab.txt +++ b/.github/styles/vocab.txt @@ -241,6 +241,10 @@ supertype talkdesk Talkdesk tasklist +taskworker +Taskworker +taskworkers +Taskworkers techdocs Telenor templated diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index dc8e69eb46..70fa58b027 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -58,6 +58,7 @@ export interface RouterOptions { database: PluginDatabaseManager; catalogClient: CatalogApi; actions?: TemplateAction[]; + taskWorkers?: number; } function isAlpha1Template( @@ -91,6 +92,7 @@ export async function createRouter( database, catalogClient, actions, + taskWorkers, } = options; const logger = parentLogger.child({ plugin: 'scaffolder' }); @@ -103,11 +105,15 @@ export async function createRouter( ); const taskBroker = new StorageTaskBroker(databaseTaskStore, logger); const actionRegistry = new TemplateActionRegistry(); - const worker = new TaskWorker({ - logger, - taskBroker, - actionRegistry, - workingDirectory, + const workers = new Array(taskWorkers || 1); + workers.map(_ => { + const worker = new TaskWorker({ + logger, + taskBroker, + actionRegistry, + workingDirectory, + }); + return worker; }); const actionsToRegister = Array.isArray(actions) @@ -127,8 +133,7 @@ export async function createRouter( ]; actionsToRegister.forEach(action => actionRegistry.register(action)); - - worker.start(); + workers.forEach(worker => worker.start()); router .get(