diff --git a/.changeset/serious-apricots-collect.md b/.changeset/serious-apricots-collect.md new file mode 100644 index 0000000000..77c5b87bdd --- /dev/null +++ b/.changeset/serious-apricots-collect.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Added sample catalog data to the template under a top-level `examples` directory. This includes some simple entities, org data, and a template. You can find the sample data at https://github.com/backstage/backstage/tree/master/packages/create-app/templates/default-app/examples. diff --git a/app-config.yaml b/app-config.yaml index 1156b9b340..eb51c59847 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -203,8 +203,6 @@ catalog: - Component - API - Resource - - Group - - User - Template - System - Domain @@ -243,7 +241,7 @@ catalog: # Add a location here to ingest it, for example from a URL: # # - type: url - # target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all-components.yaml + # target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all.yaml # # For local development you can use a file location instead: # @@ -253,33 +251,23 @@ catalog: # File locations are relative to the current working directory of the # backend, for example packages/backend/. - # Backstage example components + # Backstage example entities - type: file - target: ../catalog-model/examples/all-components.yaml + target: ../catalog-model/examples/all.yaml + # Backstage example groups and users + - type: file + target: ../catalog-model/examples/acme-corp.yaml + rules: + - allow: [User, Group] # Example component for github-actions and TechDocs - type: file target: ../../plugins/github-actions/examples/sample.yaml # Example component for TechDocs - type: file target: ../../plugins/techdocs-backend/examples/documented-component/catalog-info.yaml - # Backstage example APIs - - type: file - target: ../catalog-model/examples/all-apis.yaml - # Backstage example resources - - type: file - target: ../catalog-model/examples/all-resources.yaml - # Backstage example systems - - type: file - target: ../catalog-model/examples/all-systems.yaml - # Backstage example domains - - type: file - target: ../catalog-model/examples/all-domains.yaml # Backstage example templates - type: file target: ../../plugins/scaffolder-backend/sample-templates/all-templates.yaml - # Backstage example groups and users - - type: file - target: ../catalog-model/examples/acme-corp.yaml # Backstage end-to-end tests of TechDocs - type: file target: ../../cypress/e2e-fixture.catalog.info.yaml diff --git a/packages/catalog-model/examples/all.yaml b/packages/catalog-model/examples/all.yaml new file mode 100644 index 0000000000..1101a60ef9 --- /dev/null +++ b/packages/catalog-model/examples/all.yaml @@ -0,0 +1,12 @@ +apiVersion: backstage.io/v1alpha1 +kind: Location +metadata: + name: example-apis + description: A collection of all Backstage example entities, except users, groups, and templates +spec: + targets: + - ./all-apis.yaml + - ./all-components.yaml + - ./all-domains.yaml + - ./all-resources.yaml + - ./all-systems.yaml diff --git a/packages/create-app/templates/default-app/app-config.yaml.hbs b/packages/create-app/templates/default-app/app-config.yaml.hbs index 2bf366d756..cd6998de69 100644 --- a/packages/create-app/templates/default-app/app-config.yaml.hbs +++ b/packages/create-app/templates/default-app/app-config.yaml.hbs @@ -76,36 +76,28 @@ catalog: rules: - allow: [Component, System, API, Resource, Location] locations: - # Backstage example components - - type: url - target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all-components.yaml + # Local example data, file locations are relative to the backend process, typically `packages/backend` + - type: file + target: ../../examples/entities.yaml - # Backstage example systems - - type: url - target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all-systems.yaml - - # Backstage example APIs - - type: url - target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all-apis.yaml - - # Backstage example resources - - type: url - target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all-resources.yaml - - # Backstage example organization groups - - type: url - target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/acme/org.yaml - - # Backstage example templates - - type: url - target: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/react-ssr-template/template.yaml + # Local example template + - type: file + target: ../../examples/template/template.yaml rules: - allow: [Template] - - type: url - target: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/springboot-grpc-template/template.yaml + + # Local example organizational data + - type: file + target: ../../examples/org.yaml rules: - - allow: [Template] - - type: url - target: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/docs-template/template.yaml - rules: - - allow: [Template] + - allow: [User, Group] + + ## Uncomment these lines to add more example data + # - type: url + # target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all.yaml + + ## Uncomment these lines to add an example org + # - type: url + # target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/acme-corp.yaml + # rules: + # - allow: [User, Group] diff --git a/packages/create-app/templates/default-app/examples/entities.yaml b/packages/create-app/templates/default-app/examples/entities.yaml new file mode 100644 index 0000000000..447e8b1f34 --- /dev/null +++ b/packages/create-app/templates/default-app/examples/entities.yaml @@ -0,0 +1,41 @@ +--- +# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-system +apiVersion: backstage.io/v1alpha1 +kind: System +metadata: + name: examples +spec: + owner: guests +--- +# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-component +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: example-website +spec: + type: website + lifecycle: experimental + owner: guests + system: examples + providesApis: [example-grpc-api] +--- +# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-api +apiVersion: backstage.io/v1alpha1 +kind: API +metadata: + name: example-grpc-api +spec: + type: grpc + lifecycle: experimental + owner: guests + system: examples + definition: | + syntax = "proto3"; + + service Exampler { + rpc Example (ExampleMessage) returns (ExampleMessage) {}; + } + + message ExampleMessage { + string example = 1; + }; diff --git a/packages/create-app/templates/default-app/examples/org.yaml b/packages/create-app/templates/default-app/examples/org.yaml new file mode 100644 index 0000000000..a10e81fc7f --- /dev/null +++ b/packages/create-app/templates/default-app/examples/org.yaml @@ -0,0 +1,17 @@ +--- +# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-user +apiVersion: backstage.io/v1alpha1 +kind: User +metadata: + name: guest +spec: + memberOf: [guests] +--- +# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-group +apiVersion: backstage.io/v1alpha1 +kind: Group +metadata: + name: guests +spec: + type: team + children: [] diff --git a/packages/create-app/templates/default-app/examples/template/content/catalog-info.yaml b/packages/create-app/templates/default-app/examples/template/content/catalog-info.yaml new file mode 100644 index 0000000000..d4ccca42ef --- /dev/null +++ b/packages/create-app/templates/default-app/examples/template/content/catalog-info.yaml @@ -0,0 +1,8 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: ${{ values.name | dump }} +spec: + type: service + owner: user:guest + lifecycle: experimental diff --git a/packages/create-app/templates/default-app/examples/template/content/index.js b/packages/create-app/templates/default-app/examples/template/content/index.js new file mode 100644 index 0000000000..071ce5aa71 --- /dev/null +++ b/packages/create-app/templates/default-app/examples/template/content/index.js @@ -0,0 +1 @@ +console.log('Hello from ${{ values.name }}!'); diff --git a/packages/create-app/templates/default-app/examples/template/content/package.json b/packages/create-app/templates/default-app/examples/template/content/package.json new file mode 100644 index 0000000000..86f968a73b --- /dev/null +++ b/packages/create-app/templates/default-app/examples/template/content/package.json @@ -0,0 +1,5 @@ +{ + "name": "${{ values.name }}", + "private": true, + "dependencies": {} +} diff --git a/packages/create-app/templates/default-app/examples/template/template.yaml b/packages/create-app/templates/default-app/examples/template/template.yaml new file mode 100644 index 0000000000..50052b7a7c --- /dev/null +++ b/packages/create-app/templates/default-app/examples/template/template.yaml @@ -0,0 +1,74 @@ +apiVersion: scaffolder.backstage.io/v1beta3 +# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-template +kind: Template +metadata: + name: example-nodejs-template + title: Example Node.js Template + description: An example template for the scaffolder that creates a simple Node.js service +spec: + owner: user:guest + type: service + + # These parameters are used to generate the input form in the frontend, and are + # used to gather input data for the execution of the template. + parameters: + - title: Fill in some steps + required: + - name + properties: + name: + title: Name + type: string + description: Unique name of the component + ui:autofocus: true + ui:options: + rows: 5 + - title: Choose a location + required: + - repoUrl + properties: + repoUrl: + title: Repository Location + type: string + ui:field: RepoUrlPicker + ui:options: + allowedHosts: + - github.com + + # These steps are executed in the scaffolder backend, using data that we gathered + # via the parameters above. + steps: + # Each step executes an action, in this case one templates files into the working directory. + - id: fetch-base + name: Fetch Base + action: fetch:template + input: + url: ./content + values: + name: ${{ parameters.name }} + + # This step publishes the contents of the working directory to GitHub. + - id: publish + name: Publish + action: publish:github + input: + allowedHosts: ['github.com'] + description: This is ${{ parameters.name }} + repoUrl: ${{ parameters.repoUrl }} + + # The final step is to register our new component in the catalog. + - id: register + name: Register + action: catalog:register + input: + repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }} + catalogInfoPath: '/catalog-info.yaml' + + # Outputs are displayed to the user after a successful execution of the template. + output: + links: + - title: Repository + url: ${{ steps.publish.output.remoteUrl }} + - title: Open in catalog + icon: catalog + entityRef: ${{ steps.register.output.entityRef }}