Builtin actions
The scaffolder comes with several built-in actions for fetching content, registering in the catalog and of course actions for creating and publishing a git repository.
Action Modules
There are several action modules that are available to be added:
- Azure DevOps:
@backstage/plugin-scaffolder-backend-module-azure - Bitbucket Cloud:
@backstage/plugin-scaffolder-backend-module-bitbucket-cloud - Bitbucket Server:
@backstage/plugin-scaffolder-backend-module-bitbucket-server - Gerrit:
@backstage/plugin-scaffolder-backend-module-gerrit - Gitea:
@backstage/plugin-scaffolder-backend-module-gitea - GitHub:
@backstage/plugin-scaffolder-backend-module-github - GitLab:
@backstage/plugin-scaffolder-backend-module-gitlab - Rails:
@backstage/plugin-scaffolder-backend-module-rails - Yeoman:
@backstage/plugin-scaffolder-backend-module-yeoman - Sentry:
@backstage/plugin-scaffolder-backend-module-sentry - Cookiecutter:
@backstage/plugin-scaffolder-backend-module-cookiecutter
Installing Action Modules
Here's how to add an action module, first you need to run this command:
yarn --cwd packages/backend add @backstage/plugin-scaffolder-backend-module-github
Then you need to add it to your backend, this is a simplified new backend system for example purposes:
import { createBackend } from '@backstage/backend-defaults';
const backend = createBackend();
backend.add(import('@backstage/plugin-app-backend'));
backend.add(import('@backstage/plugin-catalog-backend'));
backend.add(
import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'),
);
// scaffolder plugin
backend.add(import('@backstage/plugin-scaffolder-backend'));
backend.add(import('@backstage/plugin-scaffolder-backend-module-github'));
backend.start();
Listing Actions
A list of all registered actions can be found under /create/actions. For local
development you should be able to reach them at
http://localhost:3000/create/actions.
Migrating from fetch:cookiecutter to fetch:template
The fetch:template action is a new action with a similar API to
fetch:cookiecutter but no dependency on cookiecutter. There are two options
for migrating templates that use fetch:cookiecutter to use fetch:template:
Using cookiecutterCompat mode
The new fetch:template action has a cookiecutterCompat flag which should
allow most templates built for fetch:cookiecutter to work without any changes.
- Update action name in
template.yaml. The name should be changed fromfetch:cookiecuttertofetch:template. - Set
cookiecutterCompattotruein thefetch:templatestep input intemplate.yaml.
steps:
- id: fetchBase
name: Fetch Base
action: fetch:cookiecutter
action: fetch:template
input:
url: ./skeleton
cookiecutterCompat: true
values:
Manual migration
If you prefer, you can manually migrate your templates to avoid the need for enabling cookiecutter compatibility mode, which will result in slightly less verbose template variables expressions.
- Update action name in
template.yaml. The name should be changed fromfetch:cookiecuttertofetch:template. - Update variable syntax in file names and content.
fetch:cookiecutterexpects variables to be enclosed in{{}}and prefixed withcookiecutter., whilefetch:templateexpects variables to be enclosed in${{}}and prefixed withvalues.. For example, a reference to variablemyInputVariablewould need to be migrated from{{ cookiecutter.myInputVariable }}to${{ values.myInputVariable }}. - Replace uses of
jsonifywithdump. Thejsonifyfilter is built in tocookiecutter, and is not available by default when usingfetch:template. Thedumpfilter is the equivalent filter in nunjucks, so an expression like{{ cookiecutter.myAwesomeList | jsonify }}should be migrated to${{ values.myAwesomeList | dump }}.