diff --git a/cfn-parameters.json b/cfn-parameters.json index 03508f8..2b85f54 100644 --- a/cfn-parameters.json +++ b/cfn-parameters.json @@ -28,6 +28,8 @@ "PgPassword": $secrets.POSTGRES_PASSWORD, "AuthGoogleClientId": $secrets.AUTH_GOOGLE_CLIENT_ID, "AuthGoogleClientSecret": $secrets.AUTH_GOOGLE_CLIENT_SECRET, + "AuthGithubClientId": $secrets.AUTH_GITHUB_CLIENT_ID, + "AuthGithubClientSecret": $secrets.AUTH_GITHUB_CLIENT_SECRET, "BackstageAppUrl": $vars.BACKSTAGE_APP_URL, "BackstageBackendUrl": $vars.BACKSTAGE_BACKEND_URL, "ServerlessOpsCatalogApiUrl": $vars.SERVERLESSOPS_CATALOG_API_URL, diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity deleted file mode 100644 index fe703d0..0000000 --- a/node_modules/.yarn-integrity +++ /dev/null @@ -1,10 +0,0 @@ -{ - "systemParams": "linux-x64-137", - "modulesFolders": [], - "flags": [], - "linkedModules": [], - "topLevelPatterns": [], - "lockfileEntries": {}, - "files": [], - "artifacts": {} -} \ No newline at end of file diff --git a/src/app-config.production.yaml b/src/app-config.production.yaml index 954ac2d..84479a9 100644 --- a/src/app-config.production.yaml +++ b/src/app-config.production.yaml @@ -47,6 +47,13 @@ auth: - resolver: emailMatchingUserEntityProfileEmail - resolver: emailLocalPartMatchingUserEntityName - resolver: emailMatchingUserEntityAnnotation + github: + production: + clientId: ${AUTH_GITHUB_CLIENT_ID} + clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} + signIn: + resolvers: + - resolver: emailMatchingUserEntityProfileEmail integrations: github: diff --git a/src/app-config.yaml b/src/app-config.yaml index 6994143..ee8252f 100644 --- a/src/app-config.yaml +++ b/src/app-config.yaml @@ -9,13 +9,47 @@ app: # Configure the catalog index page to be the root page, this is normally mounted on /catalog - page:catalog: config: - path: / + pagination: + mode: offset + limit: 20 + #path: / - catalog-filter:catalog/kind: config: initialFilter: domain - catalog-filter:catalog/list: config: initialFilter: all + + # Catalog page tabs + - page:catalog/entity: + config: + showNavItemIcons: true + - entity-content:catalog/overview: + config: + icon: catalog + group: false + - entity-content:api-docs/definition: + config: + icon: kind:api + group: false + - entity-content:api-docs/apis: + config: + icon: kind:api + group: false + - entity-content:techdocs: + config: + icon: techdocs + group: false + # NOTE: Setting `disabled: true` causes to hide the page causes crashes. I assume it's + # related to not being fully ported to the new frontend system at the current time. As a + # result we're using this filter that will always fails. + - entity-content:github-actions: + config: + filter: + kind: false + - entity-content:github-issues/entity: + disabled: true + - sub-page:scaffolder/templates: config: groups: diff --git a/src/packages/app/package.json b/src/packages/app/package.json index 74cdd02..4e11eb7 100644 --- a/src/packages/app/package.json +++ b/src/packages/app/package.json @@ -14,6 +14,9 @@ "lint": "backstage-cli package lint" }, "dependencies": { + "@backstage-community/plugin-github-actions": "^1.2.0", + "@backstage-community/plugin-github-deployments": "^1.2.0", + "@backstage-community/plugin-github-issues": "^1.2.1", "@backstage/cli": "backstage:^", "@backstage/core-components": "backstage:^", "@backstage/core-plugin-api": "backstage:^", @@ -37,8 +40,9 @@ "@backstage/plugin-techdocs-module-addons-contrib": "backstage:^", "@backstage/plugin-user-settings": "backstage:^", "@backstage/ui": "backstage:^", + "@internal/backstage-plugin-app-module-nav": "workspace:^", + "@internal/backstage-plugin-catalog-module-serverlessops": "workspace:^", "@internal/backstage-plugin-scaffolder-entity-pickers": "workspace:^", - "@internal/backstage-plugin-serverlessops-catalog": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "react": "^18.0.2", diff --git a/src/packages/app/src/App.tsx b/src/packages/app/src/App.tsx index ef79c96..fe3d2fc 100644 --- a/src/packages/app/src/App.tsx +++ b/src/packages/app/src/App.tsx @@ -1,12 +1,19 @@ import { createApp } from '@backstage/frontend-defaults'; import catalogPlugin from '@backstage/plugin-catalog/alpha'; -import serverlessOpsCatalogPlugin from '@internal/backstage-plugin-serverlessops-catalog'; import { navModule } from './modules/nav'; import { configApiRef, googleAuthApiRef, useApi } from '@backstage/core-plugin-api'; import { SignInPageBlueprint } from '@backstage/plugin-app-react'; import { SignInPage } from '@backstage/core-components'; import { createFrontendModule } from '@backstage/frontend-plugin-api'; +// external plugins +import githubActionsPlugin from '@backstage-community/plugin-github-actions/alpha'; +import githubDeploymentsPlugin from '@backstage-community/plugin-github-deployments/alpha'; +import githubIssuesPlugin from '@backstage-community/plugin-github-issues/alpha'; +// local plugins +import serverlessOpsCatalogModule from '@internal/backstage-plugin-catalog-module-serverlessops'; +import appModuleNav from '@internal/backstage-plugin-app-module-nav'; + const signInPage = SignInPageBlueprint.make({ params: { loader: async () => props => { @@ -48,7 +55,11 @@ export default createApp({ features: [ catalogPlugin, navModule, - serverlessOpsCatalogPlugin, + githubActionsPlugin, + githubDeploymentsPlugin, + githubIssuesPlugin, + serverlessOpsCatalogModule, + appModuleNav, createFrontendModule({ pluginId: 'app', extensions: [signInPage], diff --git a/src/plugins/serverlessops-catalog/.eslintrc.js b/src/plugins/app-module-nav/.eslintrc.js similarity index 100% rename from src/plugins/serverlessops-catalog/.eslintrc.js rename to src/plugins/app-module-nav/.eslintrc.js diff --git a/src/plugins/app-module-nav/README.md b/src/plugins/app-module-nav/README.md new file mode 100644 index 0000000..3a33bc2 --- /dev/null +++ b/src/plugins/app-module-nav/README.md @@ -0,0 +1,5 @@ +# @internal/backstage-plugin-app-module-nav + +The nav frontend module for the app plugin. + +_This plugin was created through the Backstage CLI_ diff --git a/src/plugins/app-module-nav/package.json b/src/plugins/app-module-nav/package.json new file mode 100644 index 0000000..838759f --- /dev/null +++ b/src/plugins/app-module-nav/package.json @@ -0,0 +1,39 @@ +{ + "name": "@internal/backstage-plugin-app-module-nav", + "version": "0.1.0", + "license": "UNLICENSED", + "private": true, + "description": "The nav frontend module for the app plugin.", + "main": "src/index.ts", + "types": "src/index.ts", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "frontend-plugin-module", + "pluginId": "app", + "pluginPackage": "@backstage/plugin-app" + }, + "sideEffects": false, + "scripts": { + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/frontend-plugin-api": "backstage:^" + }, + "devDependencies": { + "@backstage/cli": "backstage:^", + "@testing-library/jest-dom": "^6.0.0" + }, + "files": [ + "dist" + ] +} diff --git a/src/plugins/app-module-nav/src/index.ts b/src/plugins/app-module-nav/src/index.ts new file mode 100644 index 0000000..5ab7d48 --- /dev/null +++ b/src/plugins/app-module-nav/src/index.ts @@ -0,0 +1 @@ +export { appModuleNav as default } from './module'; diff --git a/src/plugins/app-module-nav/src/module.tsx b/src/plugins/app-module-nav/src/module.tsx new file mode 100644 index 0000000..fcecd13 --- /dev/null +++ b/src/plugins/app-module-nav/src/module.tsx @@ -0,0 +1,19 @@ +import { createFrontendModule } from '@backstage/frontend-plugin-api'; +import { NavContentBlueprint } from '@backstage/plugin-app-react'; +import { SidebarContentOverrideComponent } from './nav/SidebarOverride'; + +export const SidebarContentOverride = NavContentBlueprint.make({ + params: { + component: ({ navItems }: { navItems: any }) => ( + + ), + }, +}); + + +export const appModuleNav = createFrontendModule({ + pluginId: 'app', + extensions: [ + SidebarContentOverride, + ], +}); diff --git a/src/plugins/app-module-nav/src/nav/SidebarOverride.test.tsx b/src/plugins/app-module-nav/src/nav/SidebarOverride.test.tsx new file mode 100644 index 0000000..6415225 --- /dev/null +++ b/src/plugins/app-module-nav/src/nav/SidebarOverride.test.tsx @@ -0,0 +1,32 @@ +import { SidebarContentOverrideComponent } from './SidebarOverride'; + +jest.mock('@backstage/core-components', () => ({ + Sidebar: ({ children }: any) =>
{children}
, + SidebarDivider: () =>
, + SidebarGroup: ({ children }: any) =>
{children}
, + SidebarItem: ({ text }: any) =>
{text}
, + SidebarScrollWrapper: ({ children }: any) =>
{children}
, + SidebarSpace: () =>
, +})); + +jest.mock('@backstage/plugin-search', () => ({ SidebarSearchModal: () =>
Search
})); +jest.mock('@backstage/plugin-user-settings', () => ({ UserSettingsSignInAvatar: () =>
Settings
})); +jest.mock('@backstage/plugin-notifications', () => ({ NotificationsSidebarItem: () =>
Notifications
})); + +describe('SidebarContentOverrideComponent', () => { + it('removes the hidden navigation items before rendering the sidebar', () => { + const take = jest.fn(() => null); + const rest = jest.fn(() => []); + + const navItems = { + withComponent: jest.fn(() => ({ take, rest })), + } as any; + + SidebarContentOverrideComponent({ navItems }); + + expect(take).toHaveBeenCalledWith('page:search'); + expect(take).toHaveBeenCalledWith('page:api-docs'); + expect(take).toHaveBeenCalledWith('page:notifications'); + expect(take).toHaveBeenCalledWith('page:catalog-import'); + }); +}); diff --git a/src/plugins/app-module-nav/src/nav/SidebarOverride.tsx b/src/plugins/app-module-nav/src/nav/SidebarOverride.tsx new file mode 100644 index 0000000..0f01438 --- /dev/null +++ b/src/plugins/app-module-nav/src/nav/SidebarOverride.tsx @@ -0,0 +1,56 @@ +import { + Sidebar, + SidebarDivider, + SidebarGroup, + SidebarItem, + SidebarScrollWrapper, + SidebarSpace, +} from '@backstage/core-components'; +import MenuIcon from '@material-ui/icons/Menu'; +import SearchIcon from '@material-ui/icons/Search'; +import { SidebarSearchModal } from '@backstage/plugin-search'; +import { UserSettingsSignInAvatar } from '@backstage/plugin-user-settings'; +import { NotificationsSidebarItem } from '@backstage/plugin-notifications'; + +export function SidebarContentOverrideComponent({ navItems }: { navItems: any }) { + const nav = navItems.withComponent((item: any) => ( + item.icon} to={item.href} text={item.title} /> + )); + + nav.take('page:search'); + nav.take('page:api-docs'); + nav.take('page:notifications'); + nav.take('page:catalog-import'); + + return ( + + } to="/search"> + + + + }> + {nav.take('page:catalog')} + {nav.take('page:catalog-graph')} + {nav.take('page:scaffolder')} + + + {nav.take('page:serverlessops-catalog/serverlessops-catalog-tabbed-directory-index')} + {nav.rest({ sortBy: 'title' })} + + + + + + + } + to="/settings" + > + {nav.take('page:catalog-unprocessed-entities')} + {nav.take('page:app-visualizer')} + {nav.take('page:user-settings')} + + + ); +} diff --git a/src/plugins/app-module-nav/src/nav/index.ts b/src/plugins/app-module-nav/src/nav/index.ts new file mode 100644 index 0000000..21b24eb --- /dev/null +++ b/src/plugins/app-module-nav/src/nav/index.ts @@ -0,0 +1,7 @@ +import { createFrontendModule } from '@backstage/frontend-plugin-api'; +import { SidebarContentOverride } from './SidebarOverride'; + +export const serverlessOpsCatalogNavModule = createFrontendModule({ + pluginId: 'serverlessops-catalog', + extensions: [SidebarContentOverride], +}); diff --git a/src/plugins/serverlessops-catalog/src/setupTests.ts b/src/plugins/app-module-nav/src/setupTests.ts similarity index 100% rename from src/plugins/serverlessops-catalog/src/setupTests.ts rename to src/plugins/app-module-nav/src/setupTests.ts diff --git a/src/plugins/catalog-module-serverlessops/.eslintrc.js b/src/plugins/catalog-module-serverlessops/.eslintrc.js new file mode 100644 index 0000000..e2a53a6 --- /dev/null +++ b/src/plugins/catalog-module-serverlessops/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/src/plugins/serverlessops-catalog/README.md b/src/plugins/catalog-module-serverlessops/README.md similarity index 100% rename from src/plugins/serverlessops-catalog/README.md rename to src/plugins/catalog-module-serverlessops/README.md diff --git a/src/plugins/catalog-module-serverlessops/dev/index.tsx b/src/plugins/catalog-module-serverlessops/dev/index.tsx new file mode 100644 index 0000000..595f259 --- /dev/null +++ b/src/plugins/catalog-module-serverlessops/dev/index.tsx @@ -0,0 +1,6 @@ +import { createDevApp } from '@backstage/frontend-dev-utils' +import serverlessOpsCatalogModule from '../src' + +createDevApp({ + features: [serverlessOpsCatalogModule], +}) diff --git a/src/plugins/serverlessops-catalog/package.json b/src/plugins/catalog-module-serverlessops/package.json similarity index 86% rename from src/plugins/serverlessops-catalog/package.json rename to src/plugins/catalog-module-serverlessops/package.json index 93796b9..6a7a39b 100644 --- a/src/plugins/serverlessops-catalog/package.json +++ b/src/plugins/catalog-module-serverlessops/package.json @@ -1,5 +1,5 @@ { - "name": "@internal/backstage-plugin-serverlessops-catalog", + "name": "@internal/backstage-plugin-catalog-module-serverlessops", "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", @@ -11,8 +11,9 @@ "types": "dist/index.d.ts" }, "backstage": { - "role": "frontend-plugin", - "pluginId": "serverlessops-catalog" + "role": "frontend-plugin-module", + "pluginId": "catalog", + "moduleId": "serverlessops" }, "sideEffects": false, "scripts": { @@ -42,7 +43,10 @@ "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", - "react-use": "^17.2.4" + "@remixicon/react": "^4.9.0", + "@roadiehq/backstage-plugin-github-insights": "^3.5.0", + "react-use": "^17.2.4", + "zod": "^4.4.3" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0 || ^18.0.0", diff --git a/src/plugins/catalog-module-serverlessops/src/components/CatalogEntityContent/ActivityCatalogEntityContent.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogEntityContent/ActivityCatalogEntityContent.tsx new file mode 100644 index 0000000..1143a7e --- /dev/null +++ b/src/plugins/catalog-module-serverlessops/src/components/CatalogEntityContent/ActivityCatalogEntityContent.tsx @@ -0,0 +1,13 @@ +import { Grid } from '@material-ui/core'; +import { GithubIssuesCard } from '@backstage-community/plugin-github-issues' + +export const ActivityCatalogEntityContent = () => { + + return ( + + + + + + ); +}; \ No newline at end of file diff --git a/src/plugins/catalog-module-serverlessops/src/components/CatalogEntityContent/CicdCatalogEntityContent.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogEntityContent/CicdCatalogEntityContent.tsx new file mode 100644 index 0000000..5e4218f --- /dev/null +++ b/src/plugins/catalog-module-serverlessops/src/components/CatalogEntityContent/CicdCatalogEntityContent.tsx @@ -0,0 +1,55 @@ +import { + useEntity, + MissingAnnotationEmptyState, +} from '@backstage/plugin-catalog-react'; +import { Grid, Typography } from '@material-ui/core'; +import { + EntityLatestGithubActionRunCard, + EntityRecentGithubActionsRunsCard, + isGithubActionsAvailable, + GITHUB_ACTIONS_ANNOTATION +} from '@backstage-community/plugin-github-actions'; +import { EntityGithubDeploymentsCard } from '@backstage-community/plugin-github-deployments'; + +export const CicdCatalogEntityContent = () => { + const { entity } = useEntity(); + if (!isGithubActionsAvailable(entity)) { + return ( + + ); + } + + return ( + + + Build + + + + + + + + Main branch + + + + + + + All branches + + + + + + + Deploy + + + + + + + ); +}; \ No newline at end of file diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogEntityPage/catalogEntityPage.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogEntityPage/catalogEntityPage.tsx similarity index 100% rename from src/plugins/serverlessops-catalog/src/components/CatalogEntityPage/catalogEntityPage.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogEntityPage/catalogEntityPage.tsx diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexColumns/columns.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexColumns/columns.tsx similarity index 100% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexColumns/columns.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexColumns/columns.tsx diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/ApiCatalogIndexPageEntityList.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/ApiCatalogIndexPageEntityList.tsx similarity index 91% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/ApiCatalogIndexPageEntityList.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/ApiCatalogIndexPageEntityList.tsx index 178224d..ab131eb 100644 --- a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/ApiCatalogIndexPageEntityList.tsx +++ b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/ApiCatalogIndexPageEntityList.tsx @@ -18,7 +18,7 @@ const defaultColumns: TableColumn[] = [ columnFactories.createSpecTypeColumn({ width: 'auto' }), columnFactories.createMetadataDescriptionColumn({ width: 'auto' }), ] -export function ApiCatalogIndexPageEntityList() { +export function ApiCatalogIndexPageEntityList({ pagination }: { pagination?: any }) { return ( ) } \ No newline at end of file diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/CatalogIndexPageEntityList.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/CatalogIndexPageEntityList.tsx similarity index 100% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/CatalogIndexPageEntityList.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/CatalogIndexPageEntityList.tsx diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/ComponentCatalogIndexPageEntityList.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/ComponentCatalogIndexPageEntityList.tsx similarity index 91% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/ComponentCatalogIndexPageEntityList.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/ComponentCatalogIndexPageEntityList.tsx index 01eab36..6420832 100644 --- a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/ComponentCatalogIndexPageEntityList.tsx +++ b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/ComponentCatalogIndexPageEntityList.tsx @@ -18,7 +18,7 @@ const defaultColumns: TableColumn[] = [ columnFactories.createMetadataDescriptionColumn({ width: 'auto' }), ] -export function ComponentCatalogIndexPageEntityList() { +export function ComponentCatalogIndexPageEntityList({ pagination }: { pagination?: any }) { return ( ) } \ No newline at end of file diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/DomainCatalogIndexPageEntityList.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/DomainCatalogIndexPageEntityList.tsx similarity index 90% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/DomainCatalogIndexPageEntityList.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/DomainCatalogIndexPageEntityList.tsx index e66db94..074edce 100644 --- a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/DomainCatalogIndexPageEntityList.tsx +++ b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/DomainCatalogIndexPageEntityList.tsx @@ -16,7 +16,7 @@ const defaultColumns: TableColumn[] = [ columnFactories.createMetadataDescriptionColumn({width: 'auto'}), ] -export function DomainCatalogIndexPageEntityList() { +export function DomainCatalogIndexPageEntityList({ pagination }: { pagination?: any }) { return ( ) } \ No newline at end of file diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/GroupCatalogIndexPageEntityList.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/GroupCatalogIndexPageEntityList.tsx similarity index 100% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/GroupCatalogIndexPageEntityList.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/GroupCatalogIndexPageEntityList.tsx diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/LocationCatalogIndexPageEntityList.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/LocationCatalogIndexPageEntityList.tsx similarity index 84% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/LocationCatalogIndexPageEntityList.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/LocationCatalogIndexPageEntityList.tsx index b9ff38c..dc6ac9f 100644 --- a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/LocationCatalogIndexPageEntityList.tsx +++ b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/LocationCatalogIndexPageEntityList.tsx @@ -7,7 +7,7 @@ import { UserListPicker, } from '@backstage/plugin-catalog-react'; -export function LocationCatalogIndexPageEntityList() { +export function LocationCatalogIndexPageEntityList({ pagination }: { pagination?: any }) { return ( ) } \ No newline at end of file diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/ResourceCatalogIndexPageEntityList.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/ResourceCatalogIndexPageEntityList.tsx similarity index 91% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/ResourceCatalogIndexPageEntityList.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/ResourceCatalogIndexPageEntityList.tsx index 22ae44f..52ec15f 100644 --- a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/ResourceCatalogIndexPageEntityList.tsx +++ b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/ResourceCatalogIndexPageEntityList.tsx @@ -19,7 +19,7 @@ const defaultColumns: TableColumn[] = [ columnFactories.createMetadataDescriptionColumn({ width: 'auto' }), ] -export function ResourceCatalogIndexPageEntityList() { +export function ResourceCatalogIndexPageEntityList({ pagination }: { pagination?: any }) { return ( ) } \ No newline at end of file diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/SystemCatalogIndexPageEntityList.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/SystemCatalogIndexPageEntityList.tsx similarity index 91% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/SystemCatalogIndexPageEntityList.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/SystemCatalogIndexPageEntityList.tsx index 1f489ee..a3c62ae 100644 --- a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/SystemCatalogIndexPageEntityList.tsx +++ b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/SystemCatalogIndexPageEntityList.tsx @@ -18,7 +18,7 @@ const defaultColumns: TableColumn[] = [ // columnFactories.createDomainColumn({ width: 'auto' }), columnFactories.createMetadataDescriptionColumn({ width: 'auto' }), ] -export function SystemCatalogIndexPageEntityList() { +export function SystemCatalogIndexPageEntityList({ pagination }: { pagination?: any }) { return ( ) } \ No newline at end of file diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/UserCatalogIndexPageEntityList.tsx b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/UserCatalogIndexPageEntityList.tsx similarity index 100% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/UserCatalogIndexPageEntityList.tsx rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/UserCatalogIndexPageEntityList.tsx diff --git a/src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/index.ts b/src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/index.ts similarity index 100% rename from src/plugins/serverlessops-catalog/src/components/CatalogIndexPageEntityList/index.ts rename to src/plugins/catalog-module-serverlessops/src/components/CatalogIndexPageEntityList/index.ts diff --git a/src/plugins/serverlessops-catalog/src/components/TabbedCatalogIndexPage/TabbedCatalogIndexPage.tsx b/src/plugins/catalog-module-serverlessops/src/components/TabbedCatalogIndexPage/TabbedCatalogIndexPage.tsx similarity index 67% rename from src/plugins/serverlessops-catalog/src/components/TabbedCatalogIndexPage/TabbedCatalogIndexPage.tsx rename to src/plugins/catalog-module-serverlessops/src/components/TabbedCatalogIndexPage/TabbedCatalogIndexPage.tsx index 9b4f919..9de34d9 100644 --- a/src/plugins/serverlessops-catalog/src/components/TabbedCatalogIndexPage/TabbedCatalogIndexPage.tsx +++ b/src/plugins/catalog-module-serverlessops/src/components/TabbedCatalogIndexPage/TabbedCatalogIndexPage.tsx @@ -9,8 +9,14 @@ import { SystemCatalogIndexPageEntityList } from '../CatalogIndexPageEntityList'; +type TabbedCatalogIndexPageProps = { + pagination?: { + mode?: 'offset' | 'cursor'; + limit?: number; + }; +}; -export function TabbedCatalogIndexPage() { +export function TabbedCatalogIndexPage({ pagination }: TabbedCatalogIndexPageProps) { const configApi = useApi(configApiRef); const organizationName = @@ -24,22 +30,22 @@ export function TabbedCatalogIndexPage() { > - + - + - + - + - + - + diff --git a/src/plugins/serverlessops-catalog/src/components/TabbedCatalogIndexPage/index.ts b/src/plugins/catalog-module-serverlessops/src/components/TabbedCatalogIndexPage/index.ts similarity index 100% rename from src/plugins/serverlessops-catalog/src/components/TabbedCatalogIndexPage/index.ts rename to src/plugins/catalog-module-serverlessops/src/components/TabbedCatalogIndexPage/index.ts diff --git a/src/plugins/serverlessops-catalog/src/components/TabbedDirectoryIndexPage/TabbedDirectoryIndexPage.tsx b/src/plugins/catalog-module-serverlessops/src/components/TabbedDirectoryIndexPage/TabbedDirectoryIndexPage.tsx similarity index 100% rename from src/plugins/serverlessops-catalog/src/components/TabbedDirectoryIndexPage/TabbedDirectoryIndexPage.tsx rename to src/plugins/catalog-module-serverlessops/src/components/TabbedDirectoryIndexPage/TabbedDirectoryIndexPage.tsx diff --git a/src/plugins/serverlessops-catalog/src/components/TabbedDirectoryIndexPage/index.ts b/src/plugins/catalog-module-serverlessops/src/components/TabbedDirectoryIndexPage/index.ts similarity index 100% rename from src/plugins/serverlessops-catalog/src/components/TabbedDirectoryIndexPage/index.ts rename to src/plugins/catalog-module-serverlessops/src/components/TabbedDirectoryIndexPage/index.ts diff --git a/src/plugins/catalog-module-serverlessops/src/index.ts b/src/plugins/catalog-module-serverlessops/src/index.ts new file mode 100644 index 0000000..f941130 --- /dev/null +++ b/src/plugins/catalog-module-serverlessops/src/index.ts @@ -0,0 +1,5 @@ +export { + SoActivityCatalogEntityContent, + SoCicdCatalogEntityContent, + serverlessOpsCatalogModule as default, +} from './module'; diff --git a/src/plugins/catalog-module-serverlessops/src/module.tsx b/src/plugins/catalog-module-serverlessops/src/module.tsx new file mode 100644 index 0000000..a20955d --- /dev/null +++ b/src/plugins/catalog-module-serverlessops/src/module.tsx @@ -0,0 +1,88 @@ +import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha'; +import { GitHubIcon, UserIcon } from '@backstage/core-components' +import { z } from 'zod' +import { + createFrontendModule, + createRouteRef, + PageBlueprint, +} from '@backstage/frontend-plugin-api' +import { RiGitPullRequestLine } from "@remixicon/react" + +const cicdRouteRef = createRouteRef() +const activityRouteRef = createRouteRef() +const tabbedDirectoryRouteRef = createRouteRef() + +export const SoCicdCatalogEntityContent = EntityContentBlueprint.make({ + name: 'cicd', + params: { + path: 'cicd', + title: 'CI/CD', + filter: 'kind:component', + icon: , + routeRef: cicdRouteRef, + loader: async () => { + const { CicdCatalogEntityContent } = await import('./components/CatalogEntityContent/CicdCatalogEntityContent') + return + } + }, +}) + +export const SoActivityCatalogEntityContent = EntityContentBlueprint.make({ + name: 'activity', + params: { + path: 'activity', + title: 'Activity', + filter: 'kind:component', + icon: , + routeRef: activityRouteRef, + loader: async () => { + const { ActivityCatalogEntityContent } = await import('./components/CatalogEntityContent/ActivityCatalogEntityContent') + return + } + }, +}) + +export const SoCatalogTabbedIndexPage = PageBlueprint.makeWithOverrides({ + configSchema: { + pagination: z + .object({ + mode: z.enum(['offset', 'cursor']).optional(), + limit: z.number().optional(), + }) + .optional(), + }, + factory(originalFactory, { config }) { + return originalFactory({ + path: '/catalog', + routeRef: createRouteRef({ aliasFor: 'catalog.catalogIndex' }), + loader: async () => { + const { TabbedCatalogIndexPage } = await import('./components/TabbedCatalogIndexPage') + return + }, + }) + }, +}) + +export const SoCatalogTabbedDirectoryIndexPage = PageBlueprint.make({ + name: 'directory', + params: { + path: '/directory', + title: 'Directory', + icon: , + routeRef: tabbedDirectoryRouteRef, + loader: async () => { + const { TabbedDirectoryIndexPage } = await import('./components/TabbedDirectoryIndexPage') + return < TabbedDirectoryIndexPage /> + } + }, +}) + +export const serverlessOpsCatalogModule = createFrontendModule({ + pluginId: 'catalog', + extensions: [ + SoCatalogTabbedIndexPage, + SoCatalogTabbedDirectoryIndexPage, + SoActivityCatalogEntityContent, + SoCicdCatalogEntityContent, + ] +}); diff --git a/src/plugins/serverlessops-catalog/src/routes.ts b/src/plugins/catalog-module-serverlessops/src/routes.ts similarity index 100% rename from src/plugins/serverlessops-catalog/src/routes.ts rename to src/plugins/catalog-module-serverlessops/src/routes.ts diff --git a/src/plugins/catalog-module-serverlessops/src/setupTests.ts b/src/plugins/catalog-module-serverlessops/src/setupTests.ts new file mode 100644 index 0000000..7b0828b --- /dev/null +++ b/src/plugins/catalog-module-serverlessops/src/setupTests.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/src/plugins/serverlessops-catalog/dev/index.tsx b/src/plugins/serverlessops-catalog/dev/index.tsx deleted file mode 100644 index 5145933..0000000 --- a/src/plugins/serverlessops-catalog/dev/index.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { createDevApp } from '@backstage/frontend-dev-utils' -import serverlessOpsCatalogPlugin from '../src' - -createDevApp({ - features: [serverlessOpsCatalogPlugin], -}) diff --git a/src/plugins/serverlessops-catalog/src/index.ts b/src/plugins/serverlessops-catalog/src/index.ts deleted file mode 100644 index 8f4e6d2..0000000 --- a/src/plugins/serverlessops-catalog/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { - SoCatalogTabbedIndexPage, - SoCatalogTabbedDirectoryIndexPage, - serverlessOpsCatalogPlugin as default, -} from './plugin'; diff --git a/src/plugins/serverlessops-catalog/src/plugin.test.ts b/src/plugins/serverlessops-catalog/src/plugin.test.ts deleted file mode 100644 index 89da1f8..0000000 --- a/src/plugins/serverlessops-catalog/src/plugin.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { - SoCatalogTabbedDirectoryIndexPage, - SoCatalogTabbedIndexPage, - serverlessOpsCatalogPlugin, -} from './plugin'; - -describe('catalog', () => { - it('should export plugin SoCatalogTabbedDirectoryIndexPage', () => { - expect(SoCatalogTabbedDirectoryIndexPage).toBeDefined(); - }); - it('should export plugin SoCatalogTabbedIndexPage', () => { - expect(SoCatalogTabbedIndexPage).toBeDefined(); - }); - it('should export default plugin surface', () => { - expect(serverlessOpsCatalogPlugin).toBeDefined(); - }); -}); diff --git a/src/plugins/serverlessops-catalog/src/plugin.tsx b/src/plugins/serverlessops-catalog/src/plugin.tsx deleted file mode 100644 index e204669..0000000 --- a/src/plugins/serverlessops-catalog/src/plugin.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { createElement } from 'react' -import { - createFrontendPlugin, - createRouteRef, - PageBlueprint, -} from '@backstage/frontend-plugin-api' - -export { TabbedCatalogIndexPage } from './components/TabbedCatalogIndexPage' - -const catalogIndexRouteRef = createRouteRef() -const tabbedCatalogRouteRef = createRouteRef() -const tabbedDirectoryRouteRef = createRouteRef() - -export const SoCatalogTabbedIndexPage = PageBlueprint.make({ - name: 'serverlessops-catalog-tabbed-index', - params: { - path: '/serverlessops-catalog/catalog', - routeRef: tabbedCatalogRouteRef, - loader: () => - import('./components/TabbedCatalogIndexPage').then(m => - createElement(m.TabbedCatalogIndexPage) - ), - }, -}) - -export const SoCatalogTabbedDirectoryIndexPage = PageBlueprint.make({ - name: 'serverlessops-catalog-tabbed-directory-index', - params: { - path: '/serverlessops-catalog/directory', - routeRef: tabbedDirectoryRouteRef, - loader: () => - import('./components/TabbedDirectoryIndexPage').then(m => - createElement(m.TabbedDirectoryIndexPage) - ), - }, -}) - -const serverlessOpsCatalogPlugin = createFrontendPlugin({ - pluginId: 'serverlessops-catalog', - routes: { - catalogIndex: catalogIndexRouteRef, - tabbedCatalog: tabbedCatalogRouteRef, - tabbedDirectory: tabbedDirectoryRouteRef, - }, - extensions: [ - SoCatalogTabbedIndexPage, - SoCatalogTabbedDirectoryIndexPage, - ], -}) - -export { serverlessOpsCatalogPlugin } \ No newline at end of file diff --git a/src/yarn.lock b/src/yarn.lock index 9a95c55..be47b0b 100644 --- a/src/yarn.lock +++ b/src/yarn.lock @@ -1232,6 +1232,93 @@ __metadata: languageName: node linkType: hard +"@backstage-community/plugin-github-actions@npm:^1.2.0": + version: 1.2.0 + resolution: "@backstage-community/plugin-github-actions@npm:1.2.0" + dependencies: + "@backstage/catalog-model": "npm:^1.9.0" + "@backstage/core-compat-api": "npm:^0.5.12" + "@backstage/core-components": "npm:^0.18.11" + "@backstage/core-plugin-api": "npm:^1.12.7" + "@backstage/frontend-plugin-api": "npm:^0.17.2" + "@backstage/integration": "npm:^2.0.3" + "@backstage/integration-react": "npm:^1.2.19" + "@backstage/plugin-catalog-react": "npm:^3.1.0" + "@backstage/ui": "npm:^0.16.0" + "@material-ui/core": "npm:^4.12.2" + "@material-ui/lab": "npm:4.0.0-alpha.61" + "@octokit/rest": "npm:^19.0.3" + "@remixicon/react": "npm:^4.2.0" + "@types/react": "npm:^16.13.1 || ^17.0.0 || ^18.0.0" + git-url-parse: "npm:^14.0.0" + luxon: "npm:^3.0.0" + react-aria-components: "npm:^1.3.0" + react-use: "npm:^17.2.4" + zod: "npm:^4.0.0" + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 10c0/dc02afa6552a48bc3ca671976b8f80d32c98a6da74a48325c14c57190aa923fb0faeb6c00008bd0b870a4355fa85bfd3dcf7512a77820a301d0a744b5ad039cb + languageName: node + linkType: hard + +"@backstage-community/plugin-github-deployments@npm:^1.2.0": + version: 1.2.0 + resolution: "@backstage-community/plugin-github-deployments@npm:1.2.0" + dependencies: + "@backstage/catalog-model": "npm:^1.9.0" + "@backstage/core-compat-api": "npm:^0.5.12" + "@backstage/core-components": "npm:^0.18.11" + "@backstage/core-plugin-api": "npm:^1.12.7" + "@backstage/errors": "npm:^1.3.1" + "@backstage/frontend-plugin-api": "npm:^0.17.2" + "@backstage/integration": "npm:^2.0.3" + "@backstage/integration-react": "npm:^1.2.19" + "@backstage/plugin-catalog-react": "npm:^3.1.0" + "@backstage/ui": "npm:^0.16.0" + "@octokit/graphql": "npm:^5.0.0" + "@remixicon/react": "npm:^4.2.0" + "@types/react": "npm:^16.13.1 || ^17.0.0 || ^18.0.0" + luxon: "npm:^3.0.0" + react-use: "npm:^17.2.4" + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 10c0/e47a8077d7aa4df240a0cd11372d2c368a4fcd94d6964b7235ae91459ce530baf7aa4f3e77c23c20703fef1b3db5059f65e48ac0d2c1998dc191125c851438fc + languageName: node + linkType: hard + +"@backstage-community/plugin-github-issues@npm:^1.2.1": + version: 1.2.1 + resolution: "@backstage-community/plugin-github-issues@npm:1.2.1" + dependencies: + "@backstage/catalog-model": "npm:^1.9.0" + "@backstage/core-compat-api": "npm:^0.5.12" + "@backstage/core-components": "npm:^0.18.11" + "@backstage/core-plugin-api": "npm:^1.12.7" + "@backstage/errors": "npm:^1.3.1" + "@backstage/frontend-plugin-api": "npm:^0.17.2" + "@backstage/integration": "npm:^2.0.3" + "@backstage/integration-react": "npm:^1.2.19" + "@backstage/plugin-catalog-react": "npm:^3.1.0" + "@backstage/ui": "npm:^0.16.0" + "@material-ui/core": "npm:^4.12.4" + "@material-ui/lab": "npm:4.0.0-alpha.61" + "@remixicon/react": "npm:^4.2.0" + "@types/react": "npm:^16.13.1 || ^17.0.0 || ^18.0.0" + luxon: "npm:^3.0.0" + octokit: "npm:^3.0.0" + react-use: "npm:^17.4.0" + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 10c0/33ea79713db40058c57315238b8a838aff3baf9054a8fe15986f03eb2bd4fffa39a3c961ea338b89a0bb715694cb2800e4668920e39b3e90753a38f7a4d323c7 + languageName: node + linkType: hard + "@backstage/backend-app-api@npm:^1.7.1": version: 1.7.1 resolution: "@backstage/backend-app-api@npm:1.7.1" @@ -1429,7 +1516,7 @@ __metadata: languageName: node linkType: hard -"@backstage/catalog-client@backstage:^::backstage=1.52.1&npm=1.16.0, @backstage/catalog-client@npm:^1.16.0": +"@backstage/catalog-client@backstage:^::backstage=1.52.1&npm=1.16.0, @backstage/catalog-client@npm:^1.12.1, @backstage/catalog-client@npm:^1.16.0": version: 1.16.0 resolution: "@backstage/catalog-client@npm:1.16.0" dependencies: @@ -1444,7 +1531,7 @@ __metadata: languageName: node linkType: hard -"@backstage/catalog-model@backstage:^::backstage=1.52.1&npm=1.9.0, @backstage/catalog-model@npm:^1.9.0": +"@backstage/catalog-model@backstage:^::backstage=1.52.1&npm=1.9.0, @backstage/catalog-model@npm:^1.7.5, @backstage/catalog-model@npm:^1.7.6, @backstage/catalog-model@npm:^1.9.0": version: 1.9.0 resolution: "@backstage/catalog-model@npm:1.9.0" dependencies: @@ -1899,7 +1986,7 @@ __metadata: languageName: node linkType: hard -"@backstage/config@backstage:^::backstage=1.52.1&npm=1.3.8, @backstage/config@npm:^1.3.8": +"@backstage/config@backstage:^::backstage=1.52.1&npm=1.3.8, @backstage/config@npm:^1.3.6, @backstage/config@npm:^1.3.8": version: 1.3.8 resolution: "@backstage/config@npm:1.3.8" dependencies: @@ -1923,7 +2010,7 @@ __metadata: languageName: node linkType: hard -"@backstage/core-app-api@backstage:^::backstage=1.52.1&npm=1.20.2, @backstage/core-app-api@npm:^1.20.2": +"@backstage/core-app-api@backstage:^::backstage=1.52.1&npm=1.20.2, @backstage/core-app-api@npm:^1.19.4, @backstage/core-app-api@npm:^1.20.2": version: 1.20.2 resolution: "@backstage/core-app-api@npm:1.20.2" dependencies: @@ -1952,7 +2039,7 @@ __metadata: languageName: node linkType: hard -"@backstage/core-compat-api@npm:^0.5.12": +"@backstage/core-compat-api@npm:^0.5.12, @backstage/core-compat-api@npm:^0.5.3, @backstage/core-compat-api@npm:^0.5.7": version: 0.5.12 resolution: "@backstage/core-compat-api@npm:0.5.12" dependencies: @@ -1977,7 +2064,7 @@ __metadata: languageName: node linkType: hard -"@backstage/core-components@backstage:^::backstage=1.52.1&npm=0.18.11, @backstage/core-components@npm:^0.18.11": +"@backstage/core-components@backstage:^::backstage=1.52.1&npm=0.18.11, @backstage/core-components@npm:^0.18.11, @backstage/core-components@npm:^0.18.2, @backstage/core-components@npm:^0.18.6": version: 0.18.11 resolution: "@backstage/core-components@npm:0.18.11" dependencies: @@ -2035,7 +2122,7 @@ __metadata: languageName: node linkType: hard -"@backstage/core-plugin-api@backstage:^::backstage=1.52.1&npm=1.12.7, @backstage/core-plugin-api@npm:^1.12.7": +"@backstage/core-plugin-api@backstage:^::backstage=1.52.1&npm=1.12.7, @backstage/core-plugin-api@npm:^1.11.1, @backstage/core-plugin-api@npm:^1.12.1, @backstage/core-plugin-api@npm:^1.12.2, @backstage/core-plugin-api@npm:^1.12.4, @backstage/core-plugin-api@npm:^1.12.7": version: 1.12.7 resolution: "@backstage/core-plugin-api@npm:1.12.7" dependencies: @@ -2073,7 +2160,7 @@ __metadata: languageName: node linkType: hard -"@backstage/errors@npm:^1.3.1": +"@backstage/errors@npm:^1.2.7, @backstage/errors@npm:^1.3.1": version: 1.3.1 resolution: "@backstage/errors@npm:1.3.1" dependencies: @@ -2106,6 +2193,32 @@ __metadata: languageName: node linkType: hard +"@backstage/frontend-app-api@npm:^0.14.1": + version: 0.14.1 + resolution: "@backstage/frontend-app-api@npm:0.14.1" + dependencies: + "@backstage/config": "npm:^1.3.6" + "@backstage/core-app-api": "npm:^1.19.4" + "@backstage/core-plugin-api": "npm:^1.12.2" + "@backstage/errors": "npm:^1.2.7" + "@backstage/frontend-defaults": "npm:^0.3.6" + "@backstage/frontend-plugin-api": "npm:^0.13.4" + "@backstage/types": "npm:^1.2.2" + "@backstage/version-bridge": "npm:^1.0.11" + lodash: "npm:^4.17.21" + zod: "npm:^3.25.76" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.3.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/ebd55a914db7fd08315b59656c24d20becd9d4ee772b6ef93c9ed07239bef028078fd74636c8ff2b7ea61d283013002d918e44ee956b11bd64365dda26309f50 + languageName: node + linkType: hard + "@backstage/frontend-app-api@npm:^0.16.4": version: 0.16.5 resolution: "@backstage/frontend-app-api@npm:0.16.5" @@ -2156,6 +2269,29 @@ __metadata: languageName: node linkType: hard +"@backstage/frontend-defaults@npm:^0.3.6": + version: 0.3.6 + resolution: "@backstage/frontend-defaults@npm:0.3.6" + dependencies: + "@backstage/config": "npm:^1.3.6" + "@backstage/core-components": "npm:^0.18.6" + "@backstage/errors": "npm:^1.2.7" + "@backstage/frontend-app-api": "npm:^0.14.1" + "@backstage/frontend-plugin-api": "npm:^0.13.4" + "@backstage/plugin-app": "npm:^0.3.5" + "@react-hookz/web": "npm:^24.0.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.3.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/dbb774da769fed52e343124b01d198e4a20544d621f81f661078bc5765cf3eca5e4a31ef1c0a6091087e2a1920253318e4801084895d3d589c5abc8610307e06 + languageName: node + linkType: hard + "@backstage/frontend-dev-utils@backstage:^::backstage=1.52.1&npm=0.1.3, @backstage/frontend-dev-utils@npm:^0.1.3": version: 0.1.3 resolution: "@backstage/frontend-dev-utils@npm:0.1.3" @@ -2200,6 +2336,51 @@ __metadata: languageName: node linkType: hard +"@backstage/frontend-plugin-api@npm:^0.12.1": + version: 0.12.1 + resolution: "@backstage/frontend-plugin-api@npm:0.12.1" + dependencies: + "@backstage/core-components": "npm:^0.18.2" + "@backstage/core-plugin-api": "npm:^1.11.1" + "@backstage/types": "npm:^1.2.2" + "@backstage/version-bridge": "npm:^1.0.11" + "@material-ui/core": "npm:^4.12.4" + lodash: "npm:^4.17.21" + zod: "npm:^3.22.4" + zod-to-json-schema: "npm:^3.21.4" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.3.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/e0dbd14a641668e69ec1f6fc466c26bac1b98516cd4f156a0e88677a2af1e2d5e4d810c99de3d79a21d05c771c889f87069d8a132c183a4dd61097a5b6cc59e8 + languageName: node + linkType: hard + +"@backstage/frontend-plugin-api@npm:^0.13.3, @backstage/frontend-plugin-api@npm:^0.13.4": + version: 0.13.4 + resolution: "@backstage/frontend-plugin-api@npm:0.13.4" + dependencies: + "@backstage/errors": "npm:^1.2.7" + "@backstage/types": "npm:^1.2.2" + "@backstage/version-bridge": "npm:^1.0.11" + zod: "npm:^3.25.76" + zod-to-json-schema: "npm:^3.25.1" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.3.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/0e7375c3abb20cc849c00f5013b33e05032fce83e3758affa20ece8075904778f430cf6bfdf77ead3fae3a0c492a6e299e1c98dbc7ba7952ee9c19033b36fcc4 + languageName: node + linkType: hard + "@backstage/frontend-test-utils@backstage:^::backstage=1.52.1&npm=0.6.1, @backstage/frontend-test-utils@npm:^0.6.1": version: 0.6.1 resolution: "@backstage/frontend-test-utils@npm:0.6.1" @@ -2236,6 +2417,32 @@ __metadata: languageName: node linkType: hard +"@backstage/frontend-test-utils@npm:^0.4.5": + version: 0.4.5 + resolution: "@backstage/frontend-test-utils@npm:0.4.5" + dependencies: + "@backstage/config": "npm:^1.3.6" + "@backstage/frontend-app-api": "npm:^0.14.1" + "@backstage/frontend-plugin-api": "npm:^0.13.4" + "@backstage/plugin-app": "npm:^0.3.5" + "@backstage/plugin-app-react": "npm:^0.1.0" + "@backstage/test-utils": "npm:^1.7.14" + "@backstage/types": "npm:^1.2.2" + "@backstage/version-bridge": "npm:^1.0.11" + zod: "npm:^3.25.76" + peerDependencies: + "@testing-library/react": ^16.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.3.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/009b7f6795688ac9950b67a9449291566918cc72503f1bd290e939031fef0283d412f7c9fc430ac613b002cb5f1c6b922c5bfd4df069d324b4d0316da93fa76a + languageName: node + linkType: hard + "@backstage/integration-aws-node@npm:^0.2.0": version: 0.2.0 resolution: "@backstage/integration-aws-node@npm:0.2.0" @@ -2251,7 +2458,7 @@ __metadata: languageName: node linkType: hard -"@backstage/integration-react@backstage:^::backstage=1.52.1&npm=1.2.19, @backstage/integration-react@npm:^1.2.19": +"@backstage/integration-react@backstage:^::backstage=1.52.1&npm=1.2.19, @backstage/integration-react@npm:^1.2.11, @backstage/integration-react@npm:^1.2.14, @backstage/integration-react@npm:^1.2.19": version: 1.2.19 resolution: "@backstage/integration-react@npm:1.2.19" dependencies: @@ -2272,6 +2479,24 @@ __metadata: languageName: node linkType: hard +"@backstage/integration@npm:^1.18.1": + version: 1.20.1 + resolution: "@backstage/integration@npm:1.20.1" + dependencies: + "@azure/identity": "npm:^4.0.0" + "@azure/storage-blob": "npm:^12.5.0" + "@backstage/config": "npm:^1.3.6" + "@backstage/errors": "npm:^1.2.7" + "@octokit/auth-app": "npm:^4.0.0" + "@octokit/rest": "npm:^19.0.3" + cross-fetch: "npm:^4.0.0" + git-url-parse: "npm:^15.0.0" + lodash: "npm:^4.17.21" + luxon: "npm:^3.0.0" + checksum: 10c0/f117b378dd4865e3dd9d74992049d61df38c0534f95221afbaac6e9506d7ef543fa9cc5f7adc11633fc1bec298bf10064e7a62dc066b00b666f758056e51f187 + languageName: node + linkType: hard + "@backstage/integration@npm:^2.0.3": version: 2.0.3 resolution: "@backstage/integration@npm:2.0.3" @@ -2406,6 +2631,25 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-app-react@npm:^0.1.0": + version: 0.1.0 + resolution: "@backstage/plugin-app-react@npm:0.1.0" + dependencies: + "@backstage/core-plugin-api": "npm:^1.12.1" + "@backstage/frontend-plugin-api": "npm:^0.13.3" + "@material-ui/core": "npm:^4.9.13" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.3.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/a10716547b2c4a5c8c9d55d1283091b5009877996d2e0ad0b37babc631c35bd45a4cc359e18ae7f98f87b38b869baae5f68c5eeff5d79029ec79f9a9780abb19 + languageName: node + linkType: hard + "@backstage/plugin-app-visualizer@backstage:^::backstage=1.52.1&npm=0.2.5, @backstage/plugin-app-visualizer@npm:^0.2.5": version: 0.2.5 resolution: "@backstage/plugin-app-visualizer@npm:0.2.5" @@ -2428,6 +2672,37 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-app@npm:^0.3.5": + version: 0.3.5 + resolution: "@backstage/plugin-app@npm:0.3.5" + dependencies: + "@backstage/core-components": "npm:^0.18.6" + "@backstage/core-plugin-api": "npm:^1.12.2" + "@backstage/frontend-plugin-api": "npm:^0.13.4" + "@backstage/integration-react": "npm:^1.2.14" + "@backstage/plugin-app-react": "npm:^0.1.0" + "@backstage/plugin-permission-react": "npm:^0.4.39" + "@backstage/theme": "npm:^0.7.1" + "@backstage/types": "npm:^1.2.2" + "@backstage/version-bridge": "npm:^1.0.11" + "@material-ui/core": "npm:^4.9.13" + "@material-ui/icons": "npm:^4.9.1" + "@material-ui/lab": "npm:^4.0.0-alpha.61" + "@react-hookz/web": "npm:^24.0.0" + react-use: "npm:^17.2.4" + zod: "npm:^3.25.76" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.3.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/4c29c3d2671aa87fe6f4607b67e86a6607170ae310a5afadbdd961089424c6650b4a8d2aeb552ed317b334765e99ba471d8745c1fc52d8d1ea9a71f5addbd85d + languageName: node + linkType: hard + "@backstage/plugin-app@npm:^0.5.0": version: 0.5.0 resolution: "@backstage/plugin-app@npm:0.5.0" @@ -2712,7 +2987,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-catalog-common@npm:^1.1.10": +"@backstage/plugin-catalog-common@npm:^1.1.10, @backstage/plugin-catalog-common@npm:^1.1.7": version: 1.1.10 resolution: "@backstage/plugin-catalog-common@npm:1.1.10" dependencies: @@ -2865,6 +3140,47 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-catalog-react@npm:^1.21.2": + version: 1.21.6 + resolution: "@backstage/plugin-catalog-react@npm:1.21.6" + dependencies: + "@backstage/catalog-client": "npm:^1.12.1" + "@backstage/catalog-model": "npm:^1.7.6" + "@backstage/core-compat-api": "npm:^0.5.7" + "@backstage/core-components": "npm:^0.18.6" + "@backstage/core-plugin-api": "npm:^1.12.2" + "@backstage/errors": "npm:^1.2.7" + "@backstage/frontend-plugin-api": "npm:^0.13.4" + "@backstage/frontend-test-utils": "npm:^0.4.5" + "@backstage/integration-react": "npm:^1.2.14" + "@backstage/plugin-catalog-common": "npm:^1.1.7" + "@backstage/plugin-permission-common": "npm:^0.9.5" + "@backstage/plugin-permission-react": "npm:^0.4.39" + "@backstage/types": "npm:^1.2.2" + "@backstage/version-bridge": "npm:^1.0.11" + "@material-ui/core": "npm:^4.12.2" + "@material-ui/icons": "npm:^4.9.1" + "@material-ui/lab": "npm:4.0.0-alpha.61" + "@react-hookz/web": "npm:^24.0.0" + classnames: "npm:^2.2.6" + lodash: "npm:^4.17.21" + material-ui-popup-state: "npm:^5.3.6" + qs: "npm:^6.9.4" + react-use: "npm:^17.2.4" + yaml: "npm:^2.0.0" + zen-observable: "npm:^0.10.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.3.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/b6670b0d47f0042e09392c91b4c56327ce12f548190ad8351828f8f7c8a6bf891d2ce4d0b196b4ae3a76993ec8fd90b4b0190653791743a008e94f71280f2c72 + languageName: node + linkType: hard + "@backstage/plugin-catalog-unprocessed-entities-common@npm:^0.0.16": version: 0.0.16 resolution: "@backstage/plugin-catalog-unprocessed-entities-common@npm:0.0.16" @@ -3126,7 +3442,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-permission-common@backstage:^::backstage=1.52.1&npm=0.9.9, @backstage/plugin-permission-common@npm:^0.9.9": +"@backstage/plugin-permission-common@backstage:^::backstage=1.52.1&npm=0.9.9, @backstage/plugin-permission-common@npm:^0.9.5, @backstage/plugin-permission-common@npm:^0.9.7, @backstage/plugin-permission-common@npm:^0.9.9": version: 0.9.9 resolution: "@backstage/plugin-permission-common@npm:0.9.9" dependencies: @@ -3157,6 +3473,27 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-permission-react@npm:^0.4.39": + version: 0.4.41 + resolution: "@backstage/plugin-permission-react@npm:0.4.41" + dependencies: + "@backstage/config": "npm:^1.3.6" + "@backstage/core-plugin-api": "npm:^1.12.4" + "@backstage/plugin-permission-common": "npm:^0.9.7" + dataloader: "npm:^2.0.0" + swr: "npm:^2.0.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/d04a28f02cd98a0415f0ccc21b755fb88190bf3b1cf61c6f48086f4823d674ac25152fa14a5b273ae4232617e514334198efab670daae06aaa07b5ff1be7f4a6 + languageName: node + linkType: hard + "@backstage/plugin-permission-react@npm:^0.5.2": version: 0.5.2 resolution: "@backstage/plugin-permission-react@npm:0.5.2" @@ -3924,7 +4261,7 @@ __metadata: languageName: node linkType: hard -"@backstage/test-utils@backstage:^::backstage=1.52.1&npm=1.7.19, @backstage/test-utils@npm:^1.7.19": +"@backstage/test-utils@backstage:^::backstage=1.52.1&npm=1.7.19, @backstage/test-utils@npm:^1.7.14, @backstage/test-utils@npm:^1.7.19": version: 1.7.19 resolution: "@backstage/test-utils@npm:1.7.19" dependencies: @@ -3956,7 +4293,7 @@ __metadata: languageName: node linkType: hard -"@backstage/theme@backstage:^::backstage=1.52.1&npm=0.7.3, @backstage/theme@npm:^0.7.3": +"@backstage/theme@backstage:^::backstage=1.52.1&npm=0.7.3, @backstage/theme@npm:^0.7.0, @backstage/theme@npm:^0.7.1, @backstage/theme@npm:^0.7.3": version: 0.7.3 resolution: "@backstage/theme@npm:0.7.3" dependencies: @@ -4010,7 +4347,7 @@ __metadata: languageName: node linkType: hard -"@backstage/version-bridge@npm:^1.0.12": +"@backstage/version-bridge@npm:^1.0.11, @backstage/version-bridge@npm:^1.0.12": version: 1.0.12 resolution: "@backstage/version-bridge@npm:1.0.12" peerDependencies: @@ -5090,6 +5427,16 @@ __metadata: languageName: node linkType: hard +"@internal/backstage-plugin-app-module-nav@workspace:^, @internal/backstage-plugin-app-module-nav@workspace:plugins/app-module-nav": + version: 0.0.0-use.local + resolution: "@internal/backstage-plugin-app-module-nav@workspace:plugins/app-module-nav" + dependencies: + "@backstage/cli": "backstage:^" + "@backstage/frontend-plugin-api": "backstage:^" + "@testing-library/jest-dom": "npm:^6.0.0" + languageName: unknown + linkType: soft + "@internal/backstage-plugin-catalog-backend-module-google@workspace:^, @internal/backstage-plugin-catalog-backend-module-google@workspace:plugins/plugin-catalog-backend-module-google": version: 0.0.0-use.local resolution: "@internal/backstage-plugin-catalog-backend-module-google@workspace:plugins/plugin-catalog-backend-module-google" @@ -5121,6 +5468,46 @@ __metadata: languageName: unknown linkType: soft +"@internal/backstage-plugin-catalog-module-serverlessops@workspace:^, @internal/backstage-plugin-catalog-module-serverlessops@workspace:plugins/catalog-module-serverlessops": + version: 0.0.0-use.local + resolution: "@internal/backstage-plugin-catalog-module-serverlessops@workspace:plugins/catalog-module-serverlessops" + dependencies: + "@backstage/catalog-model": "backstage:^" + "@backstage/cli": "backstage:^" + "@backstage/core-app-api": "backstage:^" + "@backstage/core-components": "backstage:^" + "@backstage/core-plugin-api": "backstage:^" + "@backstage/frontend-dev-utils": "backstage:^" + "@backstage/frontend-plugin-api": "backstage:^" + "@backstage/plugin-api-docs": "backstage:^" + "@backstage/plugin-catalog": "backstage:^" + "@backstage/plugin-catalog-graph": "backstage:^" + "@backstage/plugin-catalog-react": "backstage:^" + "@backstage/plugin-org": "backstage:^" + "@backstage/plugin-techdocs": "backstage:^" + "@backstage/plugin-techdocs-module-addons-contrib": "backstage:^" + "@backstage/plugin-techdocs-react": "backstage:^" + "@backstage/test-utils": "backstage:^" + "@backstage/theme": "backstage:^" + "@backstage/types": "backstage:^" + "@material-ui/core": "npm:^4.9.13" + "@material-ui/icons": "npm:^4.9.1" + "@material-ui/lab": "npm:4.0.0-alpha.61" + "@remixicon/react": "npm:^4.9.0" + "@roadiehq/backstage-plugin-github-insights": "npm:^3.5.0" + "@testing-library/jest-dom": "npm:^6.0.0" + "@testing-library/react": "npm:^14.0.0" + "@testing-library/user-event": "npm:^14.0.0" + msw: "npm:^1.0.0" + react: "npm:^16.13.1 || ^17.0.0 || ^18.0.0" + react-use: "npm:^17.2.4" + zod: "npm:^4.4.3" + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + languageName: unknown + linkType: soft + "@internal/backstage-plugin-scaffolder-backend-module-serverlessops@workspace:^, @internal/backstage-plugin-scaffolder-backend-module-serverlessops@workspace:plugins/scaffolder-backend-module-serverlessops": version: 0.0.0-use.local resolution: "@internal/backstage-plugin-scaffolder-backend-module-serverlessops@workspace:plugins/scaffolder-backend-module-serverlessops" @@ -5164,43 +5551,6 @@ __metadata: languageName: unknown linkType: soft -"@internal/backstage-plugin-serverlessops-catalog@workspace:^, @internal/backstage-plugin-serverlessops-catalog@workspace:plugins/serverlessops-catalog": - version: 0.0.0-use.local - resolution: "@internal/backstage-plugin-serverlessops-catalog@workspace:plugins/serverlessops-catalog" - dependencies: - "@backstage/catalog-model": "backstage:^" - "@backstage/cli": "backstage:^" - "@backstage/core-app-api": "backstage:^" - "@backstage/core-components": "backstage:^" - "@backstage/core-plugin-api": "backstage:^" - "@backstage/frontend-dev-utils": "backstage:^" - "@backstage/frontend-plugin-api": "backstage:^" - "@backstage/plugin-api-docs": "backstage:^" - "@backstage/plugin-catalog": "backstage:^" - "@backstage/plugin-catalog-graph": "backstage:^" - "@backstage/plugin-catalog-react": "backstage:^" - "@backstage/plugin-org": "backstage:^" - "@backstage/plugin-techdocs": "backstage:^" - "@backstage/plugin-techdocs-module-addons-contrib": "backstage:^" - "@backstage/plugin-techdocs-react": "backstage:^" - "@backstage/test-utils": "backstage:^" - "@backstage/theme": "backstage:^" - "@backstage/types": "backstage:^" - "@material-ui/core": "npm:^4.9.13" - "@material-ui/icons": "npm:^4.9.1" - "@material-ui/lab": "npm:4.0.0-alpha.61" - "@testing-library/jest-dom": "npm:^6.0.0" - "@testing-library/react": "npm:^14.0.0" - "@testing-library/user-event": "npm:^14.0.0" - msw: "npm:^1.0.0" - react: "npm:^16.13.1 || ^17.0.0 || ^18.0.0" - react-use: "npm:^17.2.4" - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - languageName: unknown - linkType: soft - "@internationalized/date@npm:^3.12.0, @internationalized/date@npm:^3.12.1, @internationalized/date@npm:^3.12.2": version: 3.12.2 resolution: "@internationalized/date@npm:3.12.2" @@ -6246,6 +6596,27 @@ __metadata: languageName: node linkType: hard +"@material-ui/lab@npm:4.0.0-alpha.45": + version: 4.0.0-alpha.45 + resolution: "@material-ui/lab@npm:4.0.0-alpha.45" + dependencies: + "@babel/runtime": "npm:^7.4.4" + "@material-ui/utils": "npm:^4.7.1" + clsx: "npm:^1.0.4" + prop-types: "npm:^15.7.2" + react-is: "npm:^16.8.0" + peerDependencies: + "@material-ui/core": ^4.9.0 + "@types/react": ^16.8.6 + react: ^16.8.0 + react-dom: ^16.8.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/5c07c9f9fa68a2fac4a95086de1b79758e0b2aa11fd1c3cf0783e452bb0dbd49d57a1359c3e9dd98e52e65cda6445e5b42d5d2b79283241a8cde04129fa1bfdf + languageName: node + linkType: hard + "@material-ui/lab@npm:4.0.0-alpha.61, @material-ui/lab@npm:^4.0.0-alpha.60, @material-ui/lab@npm:^4.0.0-alpha.61": version: 4.0.0-alpha.61 resolution: "@material-ui/lab@npm:4.0.0-alpha.61" @@ -6349,7 +6720,7 @@ __metadata: languageName: node linkType: hard -"@material-ui/utils@npm:^4.11.3": +"@material-ui/utils@npm:^4.11.3, @material-ui/utils@npm:^4.7.1": version: 4.11.3 resolution: "@material-ui/utils@npm:4.11.3" dependencies: @@ -8465,7 +8836,7 @@ __metadata: languageName: node linkType: hard -"@remixicon/react@npm:^4.6.0": +"@remixicon/react@npm:^4.2.0, @remixicon/react@npm:^4.6.0, @remixicon/react@npm:^4.9.0": version: 4.9.0 resolution: "@remixicon/react@npm:4.9.0" peerDependencies: @@ -8531,6 +8902,54 @@ __metadata: languageName: node linkType: hard +"@roadiehq/backstage-plugin-github-insights@npm:^3.5.0": + version: 3.5.0 + resolution: "@roadiehq/backstage-plugin-github-insights@npm:3.5.0" + dependencies: + "@backstage/catalog-model": "npm:^1.7.5" + "@backstage/core-compat-api": "npm:^0.5.3" + "@backstage/core-components": "npm:^0.18.2" + "@backstage/core-plugin-api": "npm:^1.11.1" + "@backstage/frontend-plugin-api": "npm:^0.12.1" + "@backstage/integration": "npm:^1.18.1" + "@backstage/integration-react": "npm:^1.2.11" + "@backstage/plugin-catalog-react": "npm:^1.21.2" + "@backstage/theme": "npm:^0.7.0" + "@material-ui/core": "npm:^4.12.2" + "@material-ui/icons": "npm:^4.9.1" + "@material-ui/lab": "npm:4.0.0-alpha.45" + "@octokit/rest": "npm:^19.0.3" + "@octokit/types": "npm:^9.0.0" + "@roadiehq/github-auth-utils-react": "npm:^1.2.0" + git-url-parse: "npm:^16.1.0" + immer: "npm:9.0.7" + react-use: "npm:^17.2.4" + zustand: "npm:3.6.9" + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router: 6.0.0-beta.0 || ^6.3.0 + checksum: 10c0/6609b33783ffa95642f179fca0ff6490ee7edfdcf8955cc79aa2efdde55468466a236752d5c6334b58f3ef100fc7ba9c80ae7531e9829e51f6a4657995f184b1 + languageName: node + linkType: hard + +"@roadiehq/github-auth-utils-react@npm:^1.2.0": + version: 1.2.0 + resolution: "@roadiehq/github-auth-utils-react@npm:1.2.0" + dependencies: + "@backstage/core-components": "npm:^0.18.2" + "@backstage/core-plugin-api": "npm:^1.11.1" + "@backstage/integration-react": "npm:^1.2.11" + "@material-ui/core": "npm:^4.12.2" + zustand: "npm:^4.5.6" + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router: 6.0.0-beta.0 || ^6.3.0 + checksum: 10c0/8664d50d51fb76f6e4d759cc7b5e70d0a41fecad9778ef3011d90562f184ff01d6c79c4f55e688c5c4cc3522b6374ac03667f3e894cbaaba97a474ed6cb5973e + languageName: node + linkType: hard + "@rollup/plugin-commonjs@npm:^26.0.0": version: 26.0.3 resolution: "@rollup/plugin-commonjs@npm:26.0.3" @@ -11056,6 +11475,13 @@ __metadata: languageName: node linkType: hard +"@types/parse-path@npm:^7.0.0": + version: 7.0.3 + resolution: "@types/parse-path@npm:7.0.3" + checksum: 10c0/8344b6c7acba4e4e5a8d542f56f53c297685fa92f9b0c085d7532cc7e1b661432cecfc1c75c76cdb0d161c95679b6ecfe0573d9fef7c836962aacf604150a984 + languageName: node + linkType: hard + "@types/parse5@npm:^6.0.0": version: 6.0.3 resolution: "@types/parse5@npm:6.0.3" @@ -12399,6 +12825,9 @@ __metadata: version: 0.0.0-use.local resolution: "app@workspace:packages/app" dependencies: + "@backstage-community/plugin-github-actions": "npm:^1.2.0" + "@backstage-community/plugin-github-deployments": "npm:^1.2.0" + "@backstage-community/plugin-github-issues": "npm:^1.2.1" "@backstage/cli": "backstage:^" "@backstage/core-components": "backstage:^" "@backstage/core-plugin-api": "backstage:^" @@ -12423,8 +12852,9 @@ __metadata: "@backstage/plugin-techdocs-module-addons-contrib": "backstage:^" "@backstage/plugin-user-settings": "backstage:^" "@backstage/ui": "backstage:^" + "@internal/backstage-plugin-app-module-nav": "workspace:^" + "@internal/backstage-plugin-catalog-module-serverlessops": "workspace:^" "@internal/backstage-plugin-scaffolder-entity-pickers": "workspace:^" - "@internal/backstage-plugin-serverlessops-catalog": "workspace:^" "@material-ui/core": "npm:^4.12.2" "@material-ui/icons": "npm:^4.9.1" "@playwright/test": "npm:^1.32.3" @@ -18166,6 +18596,25 @@ __metadata: languageName: node linkType: hard +"git-up@npm:^8.1.0": + version: 8.1.1 + resolution: "git-up@npm:8.1.1" + dependencies: + is-ssh: "npm:^1.4.0" + parse-url: "npm:^9.2.0" + checksum: 10c0/2cc4461d8565a3f7a1ecd3d262a58ddb8df0a67f7f7d4915df2913c460b2e88ae570a6ea810700a6d22fb3b9e4bea8dd10a8eb469900ddc12e35c62208608c03 + languageName: node + linkType: hard + +"git-url-parse@npm:^14.0.0": + version: 14.1.0 + resolution: "git-url-parse@npm:14.1.0" + dependencies: + git-up: "npm:^7.0.0" + checksum: 10c0/cd91547210eccdfaca92c41c5ab018c23a75e881f36aa8d7c46cef8e10dea790a455aeb4ca91426109fd5f645c6e874c0cf80a38be6a8675ed91abb08ed904d4 + languageName: node + linkType: hard + "git-url-parse@npm:^15.0.0": version: 15.0.0 resolution: "git-url-parse@npm:15.0.0" @@ -18175,6 +18624,15 @@ __metadata: languageName: node linkType: hard +"git-url-parse@npm:^16.1.0": + version: 16.1.0 + resolution: "git-url-parse@npm:16.1.0" + dependencies: + git-up: "npm:^8.1.0" + checksum: 10c0/b8f5ebcbd5b2baf9f1bb77a217376f0247c47fe1d42811ccaac3015768eebb0759a59051f758e50e70adf5c67ae059d1975bf6b750164f36bfd39138d11b940b + languageName: node + linkType: hard + "github-from-package@npm:0.0.0": version: 0.0.0 resolution: "github-from-package@npm:0.0.0" @@ -19305,6 +19763,13 @@ __metadata: languageName: node linkType: hard +"immer@npm:9.0.7": + version: 9.0.7 + resolution: "immer@npm:9.0.7" + checksum: 10c0/80740aede86e89eb3a1de5f97f9045a971fa41a45488a9471c930579ce49a268a001df757be3609af9133157dd6fefb45000f61fbc3ff24e853aaa0163c7a6b0 + languageName: node + linkType: hard + "immer@npm:^9.0.6, immer@npm:^9.0.7": version: 9.0.21 resolution: "immer@npm:9.0.21" @@ -24494,6 +24959,16 @@ __metadata: languageName: node linkType: hard +"parse-url@npm:^9.2.0": + version: 9.2.0 + resolution: "parse-url@npm:9.2.0" + dependencies: + "@types/parse-path": "npm:^7.0.0" + parse-path: "npm:^7.0.0" + checksum: 10c0/b8f56cdb01e76616255dff82544f4b5ab4378f6f4bac8604ed6fde03a75b0f71c547d92688386d8f22f38fad3c928c075abf69458677c6185da76c841bfd7a93 + languageName: node + linkType: hard + "parse5-htmlparser2-tree-adapter@npm:^6.0.0": version: 6.0.1 resolution: "parse5-htmlparser2-tree-adapter@npm:6.0.1" @@ -25894,7 +26369,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.12.3, qs@npm:^6.14.0, qs@npm:^6.14.1, qs@npm:^6.15.0, qs@npm:^6.15.2, qs@npm:^6.7.0, qs@npm:~6.15.1": +"qs@npm:^6.12.3, qs@npm:^6.14.0, qs@npm:^6.14.1, qs@npm:^6.15.0, qs@npm:^6.15.2, qs@npm:^6.7.0, qs@npm:^6.9.4, qs@npm:~6.15.1": version: 6.15.3 resolution: "qs@npm:6.15.3" dependencies: @@ -26115,7 +26590,7 @@ __metadata: languageName: node linkType: hard -"react-aria-components@npm:^1.14.0": +"react-aria-components@npm:^1.14.0, react-aria-components@npm:^1.3.0": version: 1.19.0 resolution: "react-aria-components@npm:1.19.0" dependencies: @@ -26420,7 +26895,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.13.1, react-is@npm:^16.7.0": +"react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 @@ -26724,7 +27199,7 @@ __metadata: languageName: node linkType: hard -"react-use@npm:^17.2.4, react-use@npm:^17.3.2, react-use@npm:^17.5.1": +"react-use@npm:^17.2.4, react-use@npm:^17.3.2, react-use@npm:^17.4.0, react-use@npm:^17.5.1": version: 17.6.1 resolution: "react-use@npm:17.6.1" dependencies: @@ -30560,7 +31035,7 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.4.0, use-sync-external-store@npm:^1.6.0": +"use-sync-external-store@npm:^1.2.2, use-sync-external-store@npm:^1.4.0, use-sync-external-store@npm:^1.6.0": version: 1.6.0 resolution: "use-sync-external-store@npm:1.6.0" peerDependencies: @@ -31528,7 +32003,7 @@ __metadata: languageName: node linkType: hard -"zod-to-json-schema@npm:^3.23.5, zod-to-json-schema@npm:^3.25.1": +"zod-to-json-schema@npm:^3.21.4, zod-to-json-schema@npm:^3.23.5, zod-to-json-schema@npm:^3.25.1": version: 3.25.2 resolution: "zod-to-json-schema@npm:3.25.2" peerDependencies: @@ -31555,14 +32030,14 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.23.8, zod@npm:^3.25.76": +"zod@npm:^3.22.4, zod@npm:^3.23.8, zod@npm:^3.25.76": version: 3.25.76 resolution: "zod@npm:3.25.76" checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c languageName: node linkType: hard -"zod@npm:^3.25 || ^4.0, zod@npm:^3.25.76 || ^4.0.0, zod@npm:^4.0.0": +"zod@npm:^3.25 || ^4.0, zod@npm:^3.25.76 || ^4.0.0, zod@npm:^4.0.0, zod@npm:^4.4.3": version: 4.4.3 resolution: "zod@npm:4.4.3" checksum: 10c0/7ea31b558e88f9faf44f31dd185e2e1cbf51fed3081787fb96cc2534749b50c0acfc6da7f0922a7353ed092dd358c7d50c28ea96c94d04af64191bd33152eca3 @@ -31576,6 +32051,38 @@ __metadata: languageName: node linkType: hard +"zustand@npm:3.6.9": + version: 3.6.9 + resolution: "zustand@npm:3.6.9" + peerDependencies: + react: ">=16.8" + peerDependenciesMeta: + react: + optional: true + checksum: 10c0/032f5acafcb544aa8a6d9d1cd77e0e4034e090a80d5af514588f59d78ea0bfadfaad33a42fdbdf791e1a3b031c5b2d4a576a1c9d06b7c4967d334d9ac77affd3 + languageName: node + linkType: hard + +"zustand@npm:^4.5.6": + version: 4.5.7 + resolution: "zustand@npm:4.5.7" + dependencies: + use-sync-external-store: "npm:^1.2.2" + peerDependencies: + "@types/react": ">=16.8" + immer: ">=9.0.6" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + checksum: 10c0/55559e37a82f0c06cadc61cb08f08314c0fe05d6a93815e41e3376130c13db22a5017cbb0cd1f018c82f2dad0051afe3592561d40f980bd4082e32005e8a950c + languageName: node + linkType: hard + "zwitch@npm:^2.0.0": version: 2.0.4 resolution: "zwitch@npm:2.0.4" diff --git a/template.yaml b/template.yaml index 54e5ee5..1613dfb 100644 --- a/template.yaml +++ b/template.yaml @@ -129,6 +129,16 @@ Parameters: Description: Google OAuth client secret NoEcho: true + AuthGithubClientId: + Type: String + Description: GitHub OAuth client ID + NoEcho: true + + AuthGithubClientSecret: + Type: String + Description: GitHub OAuth client secret + NoEcho: true + BackstageAppUrl: Type: String Description: URL of application frontend @@ -188,6 +198,10 @@ Resources: Value: !Ref AuthGoogleClientId - Name: AUTH_GOOGLE_CLIENT_SECRET Value: !Ref AuthGoogleClientSecret + - Name: AUTH_GITHUB_CLIENT_ID + Value: !Ref AuthGithubClientId + - Name: AUTH_GITHUB_CLIENT_SECRET + Value: !Ref AuthGithubClientSecret - Name: BACKSTAGE_APP_URL Value: !Ref BackstageAppUrl - Name: BACKSTAGE_BACKEND_URL