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 also several modules available for various SCM tools:
- 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
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'));
// catalog plugin
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();
This is a simplified example of what your backend may look like, you may have more code in here then this.
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:cookiecutter
tofetch:template
. - Set
cookiecutterCompat
totrue
in thefetch:template
step input intemplate.yaml
.
steps:
- id: fetch-base
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:cookiecutter
tofetch:template
. - Update variable syntax in file names and content.
fetch:cookiecutter
expects variables to be enclosed in{{
}}
and prefixed withcookiecutter.
, whilefetch:template
expects variables to be enclosed in${{
}}
and prefixed withvalues.
. For example, a reference to variablemyInputVariable
would need to be migrated from{{ cookiecutter.myInputVariable }}
to${{ values.myInputVariable }}
. - Replace uses of
jsonify
withdump
. Thejsonify
filter is built in tocookiecutter
, and is not available by default when usingfetch:template
. Thedump
filter is the equivalent filter in nunjucks, so an expression like{{ cookiecutter.myAwesomeList | jsonify }}
should be migrated to${{ values.myAwesomeList | dump }}
.