Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/WORKFLOW_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This repository contains several GitHub Actions workflows to ensure code quality
- Changes to OpenShift plugin files

**Features:**
- Tests on Node.js 18.x and 20.x
- Tests on Node.js 22.x
- Runs Jest tests with coverage
- Uploads coverage to Codecov
- Linting and TypeScript type checking
Expand Down
11 changes: 10 additions & 1 deletion .github/workflows/status-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
node-version: '22.x'
cache: 'yarn'

- name: Install dependencies
Expand Down Expand Up @@ -84,6 +84,15 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22.x'
cache: 'yarn'

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Run security audit
run: |
cd plugins/openshift
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:

strategy:
matrix:
node-version: [22.x, 20.x]
node-version: [22.x]

steps:
- name: Checkout code
Expand All @@ -40,7 +40,7 @@ jobs:
CI: true

- name: Upload coverage reports to Codecov
if: matrix.node-version == '20.x'
if: matrix.node-version == '22.x'
uses: codecov/codecov-action@v4
with:
file: ./plugins/openshift/coverage/lcov.info
Expand Down Expand Up @@ -68,7 +68,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
node-version: '22.x'
cache: 'yarn'

- name: Install dependencies
Expand All @@ -82,5 +82,5 @@ jobs:
- name: Run TypeScript type checks
run: |
cd plugins/openshift
yarn tsc --noEmit
yarn tsc

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,6 @@ site
e2e-test-report/

/catalog

# Cache
.cache/
2 changes: 1 addition & 1 deletion backstage.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"version": "1.39.0"
"version": "1.47.3"
}
11 changes: 11 additions & 0 deletions examples/template/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,17 @@ spec:
repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }}
catalogInfoPath: '/catalog-info.yaml'

- id: notify
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this file necessary? I don't recall ever needing this.

name: Notify
action: notification:send
input:
recipients: entity
entityRefs:
- user:default/guest
title: 'Template executed'
info: 'Your template has been executed'
severity: 'normal'

# Outputs are displayed to the user after a successful execution of the template.
output:
links:
Expand Down
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,16 @@
]
},
"devDependencies": {
"@backstage/cli": "^0.30.0",
"@backstage/cli": "^0.35.3",
"@backstage/e2e-test-utils": "^0.1.1",
"@playwright/test": "^1.32.3",
"@spotify/prettier-config": "^12.0.0",
"concurrently": "^8.0.0",
"lerna": "^7.3.0",
"@jest/environment-jsdom-abstract": "^30.0.0",
"@types/jest": "^30.0.0",
"jest": "^30.2.0",
"jsdom": "^27.1.0",
"node-gyp": "^9.0.0",
"prettier": "^2.3.2",
"typescript": "~5.3.0"
Expand Down
51 changes: 27 additions & 24 deletions packages/app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,32 @@
"lint": "backstage-cli package lint"
},
"dependencies": {
"@backstage/app-defaults": "^1.5.17",
"@backstage/catalog-model": "^1.7.3",
"@backstage/cli": "^0.30.0",
"@backstage/core-app-api": "^1.15.5",
"@backstage/core-components": "^0.16.4",
"@backstage/core-plugin-api": "^1.10.4",
"@backstage/integration-react": "^1.2.4",
"@backstage/plugin-api-docs": "^0.12.4",
"@backstage/plugin-catalog": "^1.27.0",
"@backstage/plugin-catalog-common": "^1.1.3",
"@backstage/plugin-catalog-graph": "^0.4.16",
"@backstage/plugin-catalog-import": "^0.12.10",
"@backstage/plugin-catalog-react": "^1.15.2",
"@backstage/plugin-org": "^0.6.36",
"@backstage/plugin-permission-react": "^0.4.31",
"@backstage/plugin-scaffolder": "^1.28.0",
"@backstage/plugin-search": "^1.4.23",
"@backstage/plugin-search-react": "^1.8.6",
"@backstage/plugin-techdocs": "^1.12.3",
"@backstage/plugin-techdocs-module-addons-contrib": "^1.1.21",
"@backstage/plugin-techdocs-react": "^1.2.14",
"@backstage/plugin-user-settings": "^0.8.19",
"@backstage/theme": "^0.6.4",
"@backstage/app-defaults": "^1.7.4",
"@backstage/catalog-model": "^1.7.6",
"@backstage/cli": "^0.35.3",
"@backstage/core-app-api": "^1.19.4",
"@backstage/core-components": "^0.18.6",
"@backstage/core-plugin-api": "^1.12.2",
"@backstage/integration-react": "^1.2.14",
"@backstage/plugin-api-docs": "^0.13.3",
"@backstage/plugin-catalog": "^1.32.2",
"@backstage/plugin-catalog-common": "^1.1.7",
"@backstage/plugin-catalog-graph": "^0.5.6",
"@backstage/plugin-catalog-import": "^0.13.9",
"@backstage/plugin-catalog-react": "^1.21.6",
"@backstage/plugin-notifications": "^0.5.13",
"@backstage/plugin-org": "^0.6.48",
"@backstage/plugin-permission-react": "^0.4.39",
"@backstage/plugin-scaffolder": "^1.35.2",
"@backstage/plugin-search": "^1.5.3",
"@backstage/plugin-search-react": "^1.10.2",
"@backstage/plugin-signals": "^0.0.27",
"@backstage/plugin-techdocs": "^1.16.2",
"@backstage/plugin-techdocs-module-addons-contrib": "^1.1.32",
"@backstage/plugin-techdocs-react": "^1.3.7",
"@backstage/plugin-user-settings": "^0.8.31",
"@backstage/theme": "^0.7.1",
"@backstage/ui": "^0.11.0",
"@redhatinsights/backstage-plugin-openshift": "^0.1.0",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
Expand All @@ -48,7 +51,7 @@
"react-use": "^17.2.4"
},
"devDependencies": {
"@backstage/test-utils": "^1.7.5",
"@backstage/test-utils": "^1.7.14",
"@playwright/test": "^1.32.3",
"@testing-library/dom": "^9.0.0",
"@testing-library/jest-dom": "^6.0.0",
Expand Down
1 change: 0 additions & 1 deletion packages/app/src/App.test.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import React from 'react';
import { render, waitFor } from '@testing-library/react';
import App from './App';

Expand Down
5 changes: 4 additions & 1 deletion packages/app/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import React from 'react';
import { Navigate, Route } from 'react-router-dom';
import { apiDocsPlugin, ApiExplorerPage } from '@backstage/plugin-api-docs';
import {
Expand Down Expand Up @@ -36,6 +35,8 @@ import { AppRouter, FlatRoutes } from '@backstage/core-app-api';
import { CatalogGraphPage } from '@backstage/plugin-catalog-graph';
import { RequirePermission } from '@backstage/plugin-permission-react';
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';
import { NotificationsPage } from '@backstage/plugin-notifications';
import { SignalsDisplay } from '@backstage/plugin-signals';

const app = createApp({
apis,
Expand Down Expand Up @@ -94,6 +95,7 @@ const routes = (
{searchPage}
</Route>
<Route path="/settings" element={<UserSettingsPage />} />
<Route path="/notifications" element={<NotificationsPage />} />
<Route path="/catalog-graph" element={<CatalogGraphPage />} />
</FlatRoutes>
);
Expand All @@ -102,6 +104,7 @@ export default app.createRoot(
<>
<AlertDisplay />
<OAuthRequestDialog />
<SignalsDisplay />
<AppRouter>
<Root>{routes}</Root>
</AppRouter>
Expand Down
1 change: 0 additions & 1 deletion packages/app/src/components/Root/LogoFull.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import React from 'react';
import { makeStyles } from '@material-ui/core';

const useStyles = makeStyles({
Expand Down
1 change: 0 additions & 1 deletion packages/app/src/components/Root/LogoIcon.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import React from 'react';
import { makeStyles } from '@material-ui/core';

const useStyles = makeStyles({
Expand Down
5 changes: 4 additions & 1 deletion packages/app/src/components/Root/Root.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { PropsWithChildren } from 'react';
import { PropsWithChildren } from 'react';
import { makeStyles } from '@material-ui/core';
import HomeIcon from '@material-ui/icons/Home';
import ExtensionIcon from '@material-ui/icons/Extension';
Expand Down Expand Up @@ -26,6 +26,7 @@ import {
} from '@backstage/core-components';
import MenuIcon from '@material-ui/icons/Menu';
import SearchIcon from '@material-ui/icons/Search';
import { NotificationsSidebarItem } from '@backstage/plugin-notifications';

const useSidebarLogoStyles = makeStyles({
root: {
Expand Down Expand Up @@ -77,6 +78,8 @@ export const Root = ({ children }: PropsWithChildren<{}>) => (
</SidebarGroup>
<SidebarSpace />
<SidebarDivider />
<NotificationsSidebarItem />
<SidebarDivider />
<SidebarGroup
label="Settings"
icon={<UserSettingsSignInAvatar />}
Expand Down
1 change: 1 addition & 0 deletions packages/app/src/components/Root/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export { Root } from './Root';
import '@backstage/ui/css/styles.css';
1 change: 0 additions & 1 deletion packages/app/src/components/catalog/EntityPage.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import React from 'react';
import { Button, Grid } from '@material-ui/core';
import {
EntityApiDefinitionCard,
Expand Down
1 change: 0 additions & 1 deletion packages/app/src/components/search/SearchPage.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import React from 'react';
import { makeStyles, Theme, Grid, Paper } from '@material-ui/core';

import { CatalogSearchResultListItem } from '@backstage/plugin-catalog';
Expand Down
1 change: 0 additions & 1 deletion packages/app/src/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import '@backstage/cli/asset-types';
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';

Expand Down
2 changes: 1 addition & 1 deletion packages/backend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#
# Once the commands have been run, you can build the image using `yarn build-image`

FROM node:18-bookworm-slim
FROM node:24-trixie-slim

# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
Expand Down
48 changes: 25 additions & 23 deletions packages/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,30 @@
"build-image": "docker build ../.. -f Dockerfile --tag backstage"
},
"dependencies": {
"@backstage/backend-common": "^0.25.0",
"@backstage/backend-defaults": "^0.8.1",
"@backstage/backend-tasks": "^0.6.1",
"@backstage/config": "^1.3.2",
"@backstage/plugin-app-backend": "^0.4.5",
"@backstage/plugin-auth-backend": "^0.24.3",
"@backstage/plugin-auth-backend-module-github-provider": "^0.3.0",
"@backstage/plugin-auth-backend-module-guest-provider": "^0.2.5",
"@backstage/plugin-auth-node": "^0.6.0",
"@backstage/plugin-catalog-backend": "^1.31.0",
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^0.2.5",
"@backstage/plugin-permission-backend": "^0.5.54",
"@backstage/plugin-permission-backend-module-allow-all-policy": "^0.2.5",
"@backstage/plugin-permission-common": "^0.8.4",
"@backstage/plugin-permission-node": "^0.8.8",
"@backstage/plugin-proxy-backend": "^0.5.11",
"@backstage/plugin-scaffolder-backend": "^1.30.0",
"@backstage/plugin-search-backend": "^1.8.2",
"@backstage/plugin-search-backend-module-catalog": "^0.3.1",
"@backstage/plugin-search-backend-module-techdocs": "^0.3.6",
"@backstage/plugin-search-backend-node": "^1.3.8",
"@backstage/plugin-techdocs-backend": "^1.11.6",
"@backstage/backend-defaults": "^0.15.1",
"@backstage/config": "^1.3.6",
"@backstage/plugin-app-backend": "^0.5.10",
"@backstage/plugin-auth-backend": "^0.26.0",
"@backstage/plugin-auth-backend-module-github-provider": "^0.4.1",
"@backstage/plugin-auth-backend-module-guest-provider": "^0.2.15",
"@backstage/plugin-auth-node": "^0.6.12",
"@backstage/plugin-catalog-backend": "^3.3.2",
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^0.2.16",
"@backstage/plugin-permission-backend": "^0.7.8",
"@backstage/plugin-permission-backend-module-allow-all-policy": "^0.2.15",
"@backstage/plugin-permission-common": "^0.9.5",
"@backstage/plugin-permission-node": "^0.10.9",
"@backstage/plugin-proxy-backend": "^0.6.9",
"@backstage/plugin-scaffolder-backend": "^3.1.2",
"@backstage/plugin-kubernetes-backend": "^0.21.0",
"@backstage/plugin-notifications-backend": "^0.6.1",
"@backstage/plugin-search-backend": "^2.0.11",
"@backstage/plugin-search-backend-module-catalog": "^0.3.11",
"@backstage/plugin-search-backend-module-techdocs": "^0.4.10",
"@backstage/plugin-scaffolder-backend-module-notifications": "^0.1.18",
"@backstage/plugin-signals-backend": "^0.3.11",
"@backstage/plugin-search-backend-node": "^1.4.0",
"@backstage/plugin-techdocs-backend": "^2.1.4",
"app": "link:../app",
"better-sqlite3": "^9.0.0",
"dockerode": "^3.3.1",
Expand All @@ -46,7 +48,7 @@
"winston": "^3.2.1"
},
"devDependencies": {
"@backstage/cli": "^0.30.0",
"@backstage/cli": "^0.35.3",
"@types/dockerode": "^3.3.0",
"@types/express": "^4.17.6",
"@types/express-serve-static-core": "^4.17.5",
Expand Down
25 changes: 16 additions & 9 deletions packages/backend/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import { createBackend } from '@backstage/backend-defaults';

const backend = createBackend();

backend.add(import('@backstage/plugin-app-backend/alpha'));
backend.add(import('@backstage/plugin-proxy-backend/alpha'));
backend.add(import('@backstage/plugin-scaffolder-backend/alpha'));
backend.add(import('@backstage/plugin-techdocs-backend/alpha'));
backend.add(import('@backstage/plugin-app-backend'));
backend.add(import('@backstage/plugin-proxy-backend'));
backend.add(import('@backstage/plugin-scaffolder-backend'));
backend.add(import('@backstage/plugin-techdocs-backend'));

// auth plugin
backend.add(import('@backstage/plugin-auth-backend'));
Expand All @@ -22,20 +22,27 @@ backend.add(import('@backstage/plugin-auth-backend-module-guest-provider'));
// See https://backstage.io/docs/auth/guest/provider

// catalog plugin
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
backend.add(import('@backstage/plugin-catalog-backend'));
backend.add(
import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'),
);
backend.add(
import('@backstage/plugin-scaffolder-backend-module-notifications'),
);

// permission plugin
backend.add(import('@backstage/plugin-permission-backend/alpha'));
backend.add(import('@backstage/plugin-permission-backend'));
backend.add(
import('@backstage/plugin-permission-backend-module-allow-all-policy'),
);

// notifications and signals plugins
backend.add(import('@backstage/plugin-notifications-backend'));
backend.add(import('@backstage/plugin-signals-backend'));

// search plugin
backend.add(import('@backstage/plugin-search-backend/alpha'));
backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha'));
backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha'));
backend.add(import('@backstage/plugin-search-backend'));
backend.add(import('@backstage/plugin-search-backend-module-catalog'));
backend.add(import('@backstage/plugin-search-backend-module-techdocs'));

backend.start();
Loading
Loading