From dc0e562d1a68b2db61db06b913c294ecb42c75ba Mon Sep 17 00:00:00 2001 From: Thomas Vitale Date: Fri, 12 Apr 2024 20:29:54 +0200 Subject: [PATCH 1/2] feat: Baseline on Backstage 1.25.0 Signed-off-by: Thomas Vitale --- .gitignore | 3 + .nvmrc | 1 - backstage.json | 2 +- examples/entities.yaml | 41 +++++ examples/org.yaml | 17 +++ examples/template/content/catalog-info.yaml | 8 + examples/template/content/index.js | 1 + examples/template/content/package.json | 5 + examples/template/template.yaml | 74 +++++++++ package.json | 2 +- packages/app/e2e-tests/app.test.ts | 4 + packages/app/package.json | 55 ++++--- packages/app/public/index.html | 2 +- packages/app/src/App.tsx | 47 +----- packages/app/src/components/Root/Root.tsx | 4 +- packages/app/src/components/home/HomePage.tsx | 72 --------- packages/backend/Dockerfile | 9 +- packages/backend/package.json | 50 +++---- packages/backend/src/index.ts | 140 +++++------------- packages/backend/src/plugins/app.ts | 14 -- packages/backend/src/plugins/auth.ts | 54 ------- packages/backend/src/plugins/catalog.ts | 14 -- packages/backend/src/plugins/proxy.ts | 13 -- packages/backend/src/plugins/scaffolder.ts | 22 --- packages/backend/src/plugins/search.ts | 66 --------- packages/backend/src/plugins/techdocs.ts | 51 ------- playwright.config.ts | 2 +- 27 files changed, 258 insertions(+), 515 deletions(-) delete mode 100644 .nvmrc create mode 100644 examples/entities.yaml create mode 100644 examples/org.yaml create mode 100644 examples/template/content/catalog-info.yaml create mode 100644 examples/template/content/index.js create mode 100644 examples/template/content/package.json create mode 100644 examples/template/template.yaml delete mode 100644 packages/app/src/components/home/HomePage.tsx delete mode 100644 packages/backend/src/plugins/app.ts delete mode 100644 packages/backend/src/plugins/auth.ts delete mode 100644 packages/backend/src/plugins/catalog.ts delete mode 100644 packages/backend/src/plugins/proxy.ts delete mode 100644 packages/backend/src/plugins/scaffolder.ts delete mode 100644 packages/backend/src/plugins/search.ts delete mode 100644 packages/backend/src/plugins/techdocs.ts diff --git a/.gitignore b/.gitignore index 7f87397..fbf8139 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,9 @@ node_modules/ !.yarn/sdks !.yarn/versions +# Node version directives +.nvmrc + # dotenv environment variables file .env .env.test diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 2edeafb..0000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -20 \ No newline at end of file diff --git a/backstage.json b/backstage.json index dd15498..61f204c 100644 --- a/backstage.json +++ b/backstage.json @@ -1,3 +1,3 @@ { - "version": "1.23.4" + "version": "1.25.0" } diff --git a/examples/entities.yaml b/examples/entities.yaml new file mode 100644 index 0000000..447e8b1 --- /dev/null +++ b/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/examples/org.yaml b/examples/org.yaml new file mode 100644 index 0000000..a10e81f --- /dev/null +++ b/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/examples/template/content/catalog-info.yaml b/examples/template/content/catalog-info.yaml new file mode 100644 index 0000000..d4ccca4 --- /dev/null +++ b/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/examples/template/content/index.js b/examples/template/content/index.js new file mode 100644 index 0000000..071ce5a --- /dev/null +++ b/examples/template/content/index.js @@ -0,0 +1 @@ +console.log('Hello from ${{ values.name }}!'); diff --git a/examples/template/content/package.json b/examples/template/content/package.json new file mode 100644 index 0000000..86f968a --- /dev/null +++ b/examples/template/content/package.json @@ -0,0 +1,5 @@ +{ + "name": "${{ values.name }}", + "private": true, + "dependencies": {} +} diff --git a/examples/template/template.yaml b/examples/template/template.yaml new file mode 100644 index 0000000..33f262b --- /dev/null +++ b/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 }} diff --git a/package.json b/package.json index ee54603..bab8fef 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ ] }, "devDependencies": { - "@backstage/cli": "^0.25.2", + "@backstage/cli": "^0.26.2", "@backstage/e2e-test-utils": "^0.1.1", "@playwright/test": "^1.32.3", "@spotify/prettier-config": "^12.0.0", diff --git a/packages/app/e2e-tests/app.test.ts b/packages/app/e2e-tests/app.test.ts index d45bc0d..839ff88 100644 --- a/packages/app/e2e-tests/app.test.ts +++ b/packages/app/e2e-tests/app.test.ts @@ -19,5 +19,9 @@ import { test, expect } from '@playwright/test'; test('App should render the welcome page', async ({ page }) => { await page.goto('/'); + const enterButton = page.getByRole('button', { name: 'Enter' }); + await expect(enterButton).toBeVisible(); + await enterButton.click(); + await expect(page.getByText('My Company Catalog')).toBeVisible(); }); diff --git a/packages/app/package.json b/packages/app/package.json index 61594f9..f831cd6 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -14,32 +14,31 @@ "lint": "backstage-cli package lint" }, "dependencies": { - "@backstage/app-defaults": "^1.5.0", - "@backstage/catalog-model": "^1.4.4", - "@backstage/cli": "^0.25.2", - "@backstage/core-app-api": "^1.12.0", - "@backstage/core-components": "^0.14.0", - "@backstage/core-plugin-api": "^1.9.0", - "@backstage/integration-react": "^1.1.24", - "@backstage/plugin-api-docs": "^0.11.0", - "@backstage/plugin-catalog": "^1.17.0", - "@backstage/plugin-catalog-common": "^1.0.21", - "@backstage/plugin-catalog-graph": "^0.4.0", - "@backstage/plugin-catalog-import": "^0.10.6", - "@backstage/plugin-catalog-react": "^1.10.0", - "@backstage/plugin-github-actions": "^0.6.11", - "@backstage/plugin-home": "^0.6.2", - "@backstage/plugin-org": "^0.6.20", - "@backstage/plugin-permission-react": "^0.4.20", - "@backstage/plugin-scaffolder": "^1.18.0", - "@backstage/plugin-search": "^1.4.6", - "@backstage/plugin-search-react": "^1.7.6", - "@backstage/plugin-tech-radar": "^0.6.13", - "@backstage/plugin-techdocs": "^1.10.0", - "@backstage/plugin-techdocs-module-addons-contrib": "^1.1.5", - "@backstage/plugin-techdocs-react": "^1.1.16", - "@backstage/plugin-user-settings": "^0.8.1", - "@backstage/theme": "^0.5.1", + "@backstage/app-defaults": "^1.5.3", + "@backstage/catalog-model": "^1.4.5", + "@backstage/cli": "^0.26.2", + "@backstage/core-app-api": "^1.12.3", + "@backstage/core-components": "^0.14.3", + "@backstage/core-plugin-api": "^1.9.1", + "@backstage/integration-react": "^1.1.25", + "@backstage/plugin-api-docs": "^0.11.3", + "@backstage/plugin-catalog": "^1.18.2", + "@backstage/plugin-catalog-common": "^1.0.22", + "@backstage/plugin-catalog-graph": "^0.4.3", + "@backstage/plugin-catalog-import": "^0.10.9", + "@backstage/plugin-catalog-react": "^1.11.2", + "@backstage/plugin-github-actions": "^0.6.14", + "@backstage/plugin-org": "^0.6.23", + "@backstage/plugin-permission-react": "^0.4.21", + "@backstage/plugin-scaffolder": "^1.19.2", + "@backstage/plugin-search": "^1.4.9", + "@backstage/plugin-search-react": "^1.7.9", + "@backstage/plugin-tech-radar": "^0.7.2", + "@backstage/plugin-techdocs": "^1.10.3", + "@backstage/plugin-techdocs-module-addons-contrib": "^1.1.8", + "@backstage/plugin-techdocs-react": "^1.2.2", + "@backstage/plugin-user-settings": "^0.8.4", + "@backstage/theme": "^0.5.2", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "history": "^5.0.0", @@ -50,12 +49,12 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/test-utils": "^1.5.0", + "@backstage/test-utils": "^1.5.3", "@playwright/test": "^1.32.3", - "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", + "@testing-library/dom": "^9.0.0", "@types/react-dom": "*", "cross-env": "^7.0.0" }, diff --git a/packages/app/public/index.html b/packages/app/public/index.html index 3337729..18da7c4 100644 --- a/packages/app/public/index.html +++ b/packages/app/public/index.html @@ -6,7 +6,7 @@