Backstage
    Preparing search index...

    Module @backstage/plugin-scaffolder-backend-module-cookiecutter

    A module for the scaffolder backend that lets you template projects using cookiecutter.

    scaffolder-backend-module-cookiecutter

    Welcome to the fetch:cookiecutter action for the scaffolder-backend.

    You need to configure the action in your backend:

    # From your Backstage root directory
    yarn --cwd packages/backend add @backstage/plugin-scaffolder-backend-module-cookiecutter

    Then ensure that both the scaffolder and this module are added to your backend:

    // In packages/backend/src/index.ts
    const backend = createBackend();
    // ...
    backend.add(import('@backstage/plugin-scaffolder-backend'));
    backend.add(import('@backstage/plugin-scaffolder-backend-module-cookiecutter'));

    After that you can use the action in your template:

    apiVersion: scaffolder.backstage.io/v1beta3
    kind: Template
    metadata:
    name: cookiecutter-demo
    title: Cookiecutter Test
    description: Cookiecutter example
    spec:
    owner: backstage/techdocs-core
    type: service

    parameters:
    - title: Fill in some steps
    required:
    - name
    - owner
    properties:
    name:
    title: Name
    type: string
    description: Unique name of the component
    ui:autofocus: true
    ui:options:
    rows: 5
    owner:
    title: Owner
    type: string
    description: Owner of the component
    ui:field: OwnerPicker
    ui:options:
    catalogFilter:
    kind: Group
    system:
    title: System
    type: string
    description: System of the component
    ui:field: EntityPicker
    ui:options:
    catalogFilter:
    kind: System
    defaultKind: System

    - title: Choose a location
    required:
    - repoUrl
    - dryRun
    properties:
    repoUrl:
    title: Repository Location
    type: string
    ui:field: RepoUrlPicker
    ui:options:
    allowedHosts:
    - github.com
    dryRun:
    title: Only perform a dry run, don't publish anything
    type: boolean
    default: false

    steps:
    - id: fetch-base
    name: Fetch Base
    action: fetch:cookiecutter
    input:
    url: ./template
    values:
    name: ${{ parameters.name }}
    owner: ${{ parameters.owner }}
    system: ${{ parameters.system }}
    destination: ${{ parameters.repoUrl | parseRepoUrl }}

    - id: publish
    if: ${{ parameters.dryRun !== true }}
    name: Publish
    action: publish:github
    input:
    allowedHosts:
    - github.com
    description: This is ${{ parameters.name }}
    repoUrl: ${{ parameters.repoUrl }}

    - id: register
    if: ${{ parameters.dryRun !== true }}
    name: Register
    action: catalog:register
    input:
    repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }}
    catalogInfoPath: '/catalog-info.yaml'

    - name: Results
    if: ${{ parameters.dryRun }}
    action: debug:log
    input:
    listWorkspace: true

    output:
    links:
    - title: Repository
    url: ${{ steps['publish'].output.remoteUrl }}
    - title: Open in catalog
    icon: catalog
    entityRef: ${{ steps['register'].output.entityRef }}

    You can also visit the /create/actions route in your Backstage application to find out more about the parameters this action accepts when it's installed to configure how you like.

    The environment needs to have either cookiecutter installed and be available in the PATH or access to a docker daemon so it can spin up a docker container with cookiecutter available.

    If you are running Backstage from a Docker container and you want to avoid calling a container inside a container, you can set up cookiecutter in your own image, this will use the local installation instead.

    You can do so by including the following lines in the last step of your Dockerfile:

    RUN apt-get update && apt-get install -y python3 python3-pip
    RUN pip3 install cookiecutter

    In this case, you don't have to include containerRunner in the action configuration.

    Interfaces

    ContainerRunner

    Variables

    default

    Functions

    createFetchCookiecutterAction