ch007m / backstage-backend-module

backstage-backend-module
0 stars 0 forks source link

Backstage module

This project has been created to demo: createBackendModule and scaffolderTemplatingExtensionPoint. See ticket here.

Note: Documentation about how to create a Scaffold backend module: https://github.com/backstage/backstage/blob/master/docs/backend-system/building-backends/08-migrating.md#the-scaffolder-plugin

HowTo guide: Backend module and Template filter

The following section describe how to register, using the new backend system, a backend module able to add Template filters that we will use within a Template scaffolded to perform operations like this : ${{ parameters.name | filter1 | filter2 | etc }}

npx @backstage/create-app@0.5.13 --skip-install

yarn add --cwd packages/backend @backstage/backend-plugin-api yarn add --cwd packages/backend @backstage/plugin-scaffolder-node yarn add --cwd packages/backend @backstage/types


- Create a backend module which uses as dependency: `scaffolderTemplatingExtensionPoint` and declare some filters using the function init function `scaffolderTemplating.addTemplateFilters`. For this demo project, we will create this basic `base64` filter: `{ base64: (...args: JsonValue[]) => btoa(args.join(""))}`

```bash
mkdir -p packages/backend/src/modules

cat <<EOF > packages/backend/src/modules/scaffoldTemplateFilters.ts
import {coreServices, createBackendModule} from '@backstage/backend-plugin-api';
import {scaffolderTemplatingExtensionPoint} from '@backstage/plugin-scaffolder-node/alpha';
import {JsonValue} from '@backstage/types';

export const myModule = createBackendModule({
    pluginId: 'scaffolder',
    moduleId: 'my-custom-filter',
    register(env) {
      env.registerInit({
        deps: {
          config: coreServices.rootConfig,
          scaffolderTemplating: scaffolderTemplatingExtensionPoint,
        },
        async init({scaffolderTemplating}) {
          scaffolderTemplating.addTemplateFilters(
            { base64: (...args: JsonValue[]) => btoa(args.join(""))}
          );
        },
      });
    },
  });
...
    # Local dummy template
    - type: file
      target: ../../examples/template/dummy.yaml
      rules:
        - allow: [Template]

Use an external module