Skip to content

Latest commit

 

History

History

entity-scaffolder-content

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

@seatgeek/backstage-plugin-entity-scaffolder-content

This plugin offers the ability to run Software Templates from within an entity's EntityPage. Templates, once selected, can be autopopulated with data from the Entity. For example, if I am on the EntityPage for system:default/tickets and I select a template for creating a new Postgres database, I can autopopulate that template's system: field to system:default/tickets.

npm latest version

Template groups visible on an EntityPage

Selected template with entity's information filled in

This plugin addresses backstage/backstage#16053 and builds on top of @frontside/backstage-plugin-scaffolder-workflow.

Installation

Install the package

Install the @seatgeek/backstage-plugin-entity-scaffolder-content package in your frontend app package:

# From your Backstage root directory
yarn add --cwd packages/app @seatgeek/backstage-plugin-entity-scaffolder-content

Add the plugin to your EntityPage

import { EntityScaffolderContent } from '@seatgeek/backstage-plugin-entity-scaffolder-content';

const systemPage = (
  <EntityLayout>
    {/** ... */}
    <EntityLayout.Route path="/scaffolder" title="Scaffolder">
      <EntityScaffolderContent
        templateGroupFilters={[
          // We show all resource templates that have the label `forEntity:system``
          // on our system EntityPage
          {
            title: 'Resources',
            filter: (_, template) =>
              template.metadata?.labels?.forEntity === 'system' &&
              template.spec.type === 'Resource',
          },
          // If our system defines its language as python, we show all templates
          // that are intended to be applied to pythom systems.
          {
            title: 'Python',
            filter: (entity, template) =>
              template.metadata?.labels?.forEntity === 'system' &&
              entity.metadata?.labels?.language === 'python' &&
              template.metadata?.labels?.language === 'python',
          },
        ]}
        buildInitialState={entity => ({ system: stringifyEntityRef(entity) })}
        // optional
        ScaffolderFieldExtensions={
          <ScaffolderFieldExtensions>
            {/* Any field extensions you need */}
          </ScaffolderFieldExtensions>
        }
        // optional
        components={{
          TemplateCard: CustomTemplateCard,
        }}
      />
    </EntityLayout.Route>
  </EntityLayout>
);