diff --git a/plugins/scaffolder-react/api-report.md b/plugins/scaffolder-react/api-report.md
index 1886ed96ee..79e461a2ec 100644
--- a/plugins/scaffolder-react/api-report.md
+++ b/plugins/scaffolder-react/api-report.md
@@ -6,6 +6,7 @@
///
import { ApiHolder } from '@backstage/core-plugin-api';
+import { ApiRef } from '@backstage/core-plugin-api';
import { Dispatch } from 'react';
import { Extension } from '@backstage/core-plugin-api';
import { ExternalRouteRef } from '@backstage/core-plugin-api';
@@ -17,12 +18,15 @@ import type { FormProps as FormProps_2 } from '@rjsf/core-v5';
import { JsonObject } from '@backstage/types';
import { JSONSchema7 } from 'json-schema';
import { JsonValue } from '@backstage/types';
+import { Observable } from '@backstage/types';
import { PathParams } from '@backstage/core-plugin-api';
import { PropsWithChildren } from 'react';
import { default as React_2 } from 'react';
import { RouteRef } from '@backstage/core-plugin-api';
import { SetStateAction } from 'react';
import { SubRouteRef } from '@backstage/core-plugin-api';
+import { TaskSpec } from '@backstage/plugin-scaffolder-common';
+import { TaskStep } from '@backstage/plugin-scaffolder-common';
import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
import { UIOptionsType } from '@rjsf/utils';
import { UiSchema } from '@rjsf/utils';
@@ -117,6 +121,29 @@ export const legacySelectedTemplateRouteRef: SubRouteRef<
PathParams<'/templates/:templateName'>
>;
+// @public
+export type ListActionsResponse = Array<{
+ id: string;
+ description?: string;
+ schema?: {
+ input?: JSONSchema7;
+ output?: JSONSchema7;
+ };
+}>;
+
+// @public
+export type LogEvent = {
+ type: 'log' | 'completion';
+ body: {
+ message: string;
+ stepId?: string;
+ status?: ScaffolderTaskStatus;
+ };
+ createdAt: string;
+ id: string;
+ taskId: string;
+};
+
// @alpha
export type NextCustomFieldValidator = (
data: TFieldReturnValue,
@@ -193,15 +220,147 @@ export type ReviewStateProps = {
// @public (undocumented)
export const rootRouteRef: RouteRef;
+// @public
+export interface ScaffolderApi {
+ // (undocumented)
+ dryRun?(options: ScaffolderDryRunOptions): Promise;
+ // (undocumented)
+ getIntegrationsList(
+ options: ScaffolderGetIntegrationsListOptions,
+ ): Promise;
+ // (undocumented)
+ getTask(taskId: string): Promise;
+ // (undocumented)
+ getTemplateParameterSchema(
+ templateRef: string,
+ ): Promise;
+ listActions(): Promise;
+ // (undocumented)
+ listTasks?(options: { filterByOwnership: 'owned' | 'all' }): Promise<{
+ tasks: ScaffolderTask[];
+ }>;
+ scaffold(
+ options: ScaffolderScaffoldOptions,
+ ): Promise;
+ // (undocumented)
+ streamLogs(options: ScaffolderStreamLogsOptions): Observable;
+}
+
+// @public (undocumented)
+export const scaffolderApiRef: ApiRef;
+
+// @public (undocumented)
+export interface ScaffolderDryRunOptions {
+ // (undocumented)
+ directoryContents: {
+ path: string;
+ base64Content: string;
+ }[];
+ // (undocumented)
+ secrets?: Record;
+ // (undocumented)
+ template: JsonValue;
+ // (undocumented)
+ values: JsonObject;
+}
+
+// @public (undocumented)
+export interface ScaffolderDryRunResponse {
+ // (undocumented)
+ directoryContents: Array<{
+ path: string;
+ base64Content: string;
+ executable: boolean;
+ }>;
+ // (undocumented)
+ log: Array>;
+ // (undocumented)
+ output: ScaffolderTaskOutput;
+ // (undocumented)
+ steps: TaskStep[];
+}
+
// @public
export const ScaffolderFieldExtensions: React_2.ComponentType;
+// @public
+export interface ScaffolderGetIntegrationsListOptions {
+ // (undocumented)
+ allowedHosts: string[];
+}
+
+// @public
+export interface ScaffolderGetIntegrationsListResponse {
+ // (undocumented)
+ integrations: {
+ type: string;
+ title: string;
+ host: string;
+ }[];
+}
+
// @public (undocumented)
export const scaffolderListTaskRouteRef: SubRouteRef;
+// @public (undocumented)
+export type ScaffolderOutputLink = {
+ title?: string;
+ icon?: string;
+ url?: string;
+ entityRef?: string;
+};
+
+// @public
+export interface ScaffolderScaffoldOptions {
+ // (undocumented)
+ secrets?: Record;
+ // (undocumented)
+ templateRef: string;
+ // (undocumented)
+ values: Record;
+}
+
+// @public
+export interface ScaffolderScaffoldResponse {
+ // (undocumented)
+ taskId: string;
+}
+
+// @public
+export interface ScaffolderStreamLogsOptions {
+ // (undocumented)
+ after?: number;
+ // (undocumented)
+ taskId: string;
+}
+
+// @public
+export type ScaffolderTask = {
+ id: string;
+ spec: TaskSpec;
+ status: 'failed' | 'completed' | 'processing' | 'open' | 'cancelled';
+ lastHeartbeatAt: string;
+ createdAt: string;
+};
+
+// @public (undocumented)
+export type ScaffolderTaskOutput = {
+ links?: ScaffolderOutputLink[];
+} & {
+ [key: string]: unknown;
+};
+
// @public (undocumented)
export const scaffolderTaskRouteRef: SubRouteRef>;
+// @public
+export type ScaffolderTaskStatus =
+ | 'open'
+ | 'processing'
+ | 'failed'
+ | 'completed'
+ | 'skipped';
+
// @public
export interface ScaffolderUseTemplateSecrets {
// (undocumented)
diff --git a/plugins/scaffolder-react/src/api/ref.ts b/plugins/scaffolder-react/src/api/ref.ts
index bf0a5faddf..3dee426b09 100644
--- a/plugins/scaffolder-react/src/api/ref.ts
+++ b/plugins/scaffolder-react/src/api/ref.ts
@@ -17,6 +17,7 @@
import { createApiRef } from '@backstage/core-plugin-api';
import { ScaffolderApi } from './types';
+/** @public */
export const scaffolderApiRef = createApiRef({
id: 'plugin.scaffolder.service',
});
diff --git a/plugins/scaffolder-react/src/next/components/Stepper/Stepper.test.tsx b/plugins/scaffolder-react/src/next/components/Stepper/Stepper.test.tsx
index 2660eed47d..786f45b05d 100644
--- a/plugins/scaffolder-react/src/next/components/Stepper/Stepper.test.tsx
+++ b/plugins/scaffolder-react/src/next/components/Stepper/Stepper.test.tsx
@@ -20,7 +20,7 @@ import { renderInTestApp } from '@backstage/test-utils';
import { act, fireEvent } from '@testing-library/react';
import type { RJSFValidationError } from '@rjsf/utils';
import { JsonValue } from '@backstage/types';
-import { NextFieldExtensionComponentProps } from '../../../extensions/types';
+import { NextFieldExtensionComponentProps } from '../../extensions';
describe('Stepper', () => {
it('should render the step titles for each step of the manifest', async () => {
diff --git a/plugins/scaffolder/src/api.ts b/plugins/scaffolder/src/api.ts
index 515496a363..15bd1925b3 100644
--- a/plugins/scaffolder/src/api.ts
+++ b/plugins/scaffolder/src/api.ts
@@ -140,12 +140,6 @@ export class ScaffolderClient implements ScaffolderApi {
return schema;
}
- /**
- * Executes the scaffolding of a component, given a template and its
- * parameter values.
- *
- * @param options - The {@link ScaffolderScaffoldOptions} the scaffolding.
- */
async scaffold(
options: ScaffolderScaffoldOptions,
): Promise {