Skip to content

Commit

Permalink
feat(scaffolder): support updating template inputs of tasks
Browse files Browse the repository at this point in the history
Signed-off-by: Phil Kuang <pkuang@factset.com>
  • Loading branch information
kuangp committed Dec 23, 2021
1 parent f132287 commit d078377
Show file tree
Hide file tree
Showing 11 changed files with 215 additions and 122 deletions.
7 changes: 7 additions & 0 deletions .changeset/poor-zoos-invent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-scaffolder-common': patch
---

Support navigating back to pre-filled templates to update inputs of scaffolder tasks for resubmission
56 changes: 8 additions & 48 deletions plugins/scaffolder-backend/api-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ import { Schema } from 'jsonschema';
import { ScmIntegrationRegistry } from '@backstage/integration';
import { ScmIntegrations } from '@backstage/integration';
import { SpawnOptionsWithoutStdio } from 'child_process';
import { TaskSpec } from '@backstage/plugin-scaffolder-common';
import { TaskSpecV1beta2 } from '@backstage/plugin-scaffolder-common';
import { TaskSpecV1beta3 } from '@backstage/plugin-scaffolder-common';
import { TemplateEntityV1beta2 } from '@backstage/catalog-model';
import { TemplateMetadata } from '@backstage/plugin-scaffolder-common';
import { UrlReader } from '@backstage/backend-common';
import { Writable } from 'stream';

Expand Down Expand Up @@ -432,52 +436,11 @@ export type TaskSecrets = {
token: string | undefined;
};

// @public
export type TaskSpec = TaskSpecV1beta2 | TaskSpecV1beta3;
export { TaskSpec };

// @public
export interface TaskSpecV1beta2 {
// (undocumented)
apiVersion: 'backstage.io/v1beta2';
// (undocumented)
baseUrl?: string;
// (undocumented)
metadata?: TemplateMetadata;
// (undocumented)
output: {
[name: string]: string;
};
// (undocumented)
steps: Array<{
id: string;
name: string;
action: string;
input?: JsonObject;
if?: string | boolean;
}>;
// (undocumented)
values: JsonObject;
}
export { TaskSpecV1beta2 };

// @public
export interface TaskSpecV1beta3 {
// (undocumented)
apiVersion: 'scaffolder.backstage.io/v1beta3';
// (undocumented)
baseUrl?: string;
// (undocumented)
metadata?: TemplateMetadata;
// (undocumented)
output: {
[name: string]: JsonValue;
};
// (undocumented)
parameters: JsonObject;
// Warning: (ae-forgotten-export) The symbol "TaskStep" needs to be exported by the entry point index.d.ts
//
// (undocumented)
steps: TaskStep[];
}
export { TaskSpecV1beta3 };

// @public
export interface TaskState {
Expand Down Expand Up @@ -573,8 +536,5 @@ export class TemplateActionRegistry {
): void;
}

// @public
export type TemplateMetadata = {
name: string;
};
export { TemplateMetadata };
```
73 changes: 15 additions & 58 deletions plugins/scaffolder-backend/src/scaffolder/tasks/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,21 @@
*/

import { JsonValue, JsonObject } from '@backstage/types';
import {
TaskSpec,
TaskStep,
TemplateMetadata,
TaskSpecV1beta2,
TaskSpecV1beta3,
} from '@backstage/plugin-scaffolder-common';

export type {
TaskSpec,
TaskStep,
TemplateMetadata,
TaskSpecV1beta2,
TaskSpecV1beta3,
};

/**
* Status
Expand Down Expand Up @@ -69,64 +84,6 @@ export type SerializedTaskEvent = {
createdAt: string;
};

/**
* TemplateMetadata
*
* @public
*/
export type TemplateMetadata = {
name: string;
};

/**
* TaskSpecV1beta2
*
* @public
*/
export interface TaskSpecV1beta2 {
apiVersion: 'backstage.io/v1beta2';
baseUrl?: string;
values: JsonObject;
steps: Array<{
id: string;
name: string;
action: string;
input?: JsonObject;
if?: string | boolean;
}>;
output: { [name: string]: string };
metadata?: TemplateMetadata;
}

export interface TaskStep {
id: string;
name: string;
action: string;
input?: JsonObject;
if?: string | boolean;
}

/**
* TaskSpecV1beta3
*
* @public
*/
export interface TaskSpecV1beta3 {
apiVersion: 'scaffolder.backstage.io/v1beta3';
baseUrl?: string;
parameters: JsonObject;
steps: TaskStep[];
output: { [name: string]: JsonValue };
metadata?: TemplateMetadata;
}

/**
* TaskSpec
*
* @public
*/
export type TaskSpec = TaskSpecV1beta2 | TaskSpecV1beta3;

/**
* TaskSecrets
*
Expand Down
59 changes: 59 additions & 0 deletions plugins/scaffolder-common/api-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,60 @@
import { Entity } from '@backstage/catalog-model';
import { JsonObject } from '@backstage/types';
import { JSONSchema } from '@backstage/catalog-model';
import { JsonValue } from '@backstage/types';

// @public
export type TaskSpec = TaskSpecV1beta2 | TaskSpecV1beta3;

// @public
export interface TaskSpecV1beta2 {
// (undocumented)
apiVersion: 'backstage.io/v1beta2';
// (undocumented)
baseUrl?: string;
// (undocumented)
metadata?: TemplateMetadata;
// (undocumented)
output: {
[name: string]: string;
};
// (undocumented)
steps: TaskStep[];
// (undocumented)
values: JsonObject;
}

// @public
export interface TaskSpecV1beta3 {
// (undocumented)
apiVersion: 'scaffolder.backstage.io/v1beta3';
// (undocumented)
baseUrl?: string;
// (undocumented)
metadata?: TemplateMetadata;
// (undocumented)
output: {
[name: string]: JsonValue;
};
// (undocumented)
parameters: JsonObject;
// (undocumented)
steps: TaskStep[];
}

// @public
export interface TaskStep {
// (undocumented)
action: string;
// (undocumented)
id: string;
// (undocumented)
if?: string | boolean;
// (undocumented)
input?: JsonObject;
// (undocumented)
name: string;
}

// @public (undocumented)
export interface TemplateEntityV1beta3 extends Entity {
Expand Down Expand Up @@ -33,4 +87,9 @@ export interface TemplateEntityV1beta3 extends Entity {

// @public (undocumented)
export const templateEntityV1beta3Schema: JSONSchema;

// @public
export type TemplateMetadata = {
name: string;
};
```
74 changes: 74 additions & 0 deletions plugins/scaffolder-common/src/TaskSpec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* Copyright 2021 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { JsonValue, JsonObject } from '@backstage/types';

/**
* TemplateMetadata
*
* @public
*/
export type TemplateMetadata = {
name: string;
};

/**
* TaskStep
*
* @public
*/
export interface TaskStep {
id: string;
name: string;
action: string;
input?: JsonObject;
if?: string | boolean;
}

/**
* TaskSpecV1beta2
*
* @public
*/
export interface TaskSpecV1beta2 {
apiVersion: 'backstage.io/v1beta2';
baseUrl?: string;
values: JsonObject;
steps: TaskStep[];
output: { [name: string]: string };
metadata?: TemplateMetadata;
}

/**
* TaskSpecV1beta3
*
* @public
*/
export interface TaskSpecV1beta3 {
apiVersion: 'scaffolder.backstage.io/v1beta3';
baseUrl?: string;
parameters: JsonObject;
steps: TaskStep[];
output: { [name: string]: JsonValue };
metadata?: TemplateMetadata;
}

/**
* TaskSpec
*
* @public
*/
export type TaskSpec = TaskSpecV1beta2 | TaskSpecV1beta3;
2 changes: 2 additions & 0 deletions plugins/scaffolder-common/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,5 @@ export const templateEntityV1beta3Schema: JSONSchema = v1beta3Schema as Omit<
JSONSchema,
'examples'
>;

export * from './TaskSpec';
2 changes: 1 addition & 1 deletion plugins/scaffolder/api-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ import { IconButton } from '@material-ui/core';
import { IdentityApi } from '@backstage/core-plugin-api';
import { JsonObject } from '@backstage/types';
import { JSONSchema } from '@backstage/catalog-model';
import { JsonValue } from '@backstage/types';
import { Observable } from '@backstage/types';
import { default as React_2 } from 'react';
import { ReactNode } from 'react';
import { RouteRef } from '@backstage/core-plugin-api';
import { ScmIntegrationRegistry } from '@backstage/integration';
import { TaskSpec } from '@backstage/plugin-scaffolder-common';
import { TemplateEntityV1beta2 } from '@backstage/catalog-model';

// Warning: (ae-missing-release-tag) "createScaffolderFieldExtension" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
Expand Down
1 change: 1 addition & 0 deletions plugins/scaffolder/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"@backstage/integration": "^0.6.10",
"@backstage/integration-react": "^0.1.16",
"@backstage/plugin-catalog-react": "^0.6.8",
"@backstage/plugin-scaffolder-common": "^0.1.1",
"@backstage/theme": "^0.2.14",
"@backstage/types": "^0.1.1",
"@material-ui/core": "^4.12.2",
Expand Down

0 comments on commit d078377

Please sign in to comment.