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/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..5bc9e7c 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,8 @@
"@backstage/plugin-techdocs-module-addons-contrib": "backstage:^",
"@backstage/plugin-user-settings": "backstage:^",
"@backstage/ui": "backstage:^",
+ "@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..3758a66 100644
--- a/src/packages/app/src/App.tsx
+++ b/src/packages/app/src/App.tsx
@@ -1,12 +1,18 @@
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';
+
const signInPage = SignInPageBlueprint.make({
params: {
loader: async () => props => {
@@ -48,7 +54,10 @@ export default createApp({
features: [
catalogPlugin,
navModule,
- serverlessOpsCatalogPlugin,
+ githubActionsPlugin,
+ githubDeploymentsPlugin,
+ githubIssuesPlugin,
+ serverlessOpsCatalogModule,
createFrontendModule({
pluginId: 'app',
extensions: [signInPage],
diff --git a/src/plugins/serverlessops-catalog/.eslintrc.js b/src/plugins/catalog-module-serverlessops/.eslintrc.js
similarity index 100%
rename from src/plugins/serverlessops-catalog/.eslintrc.js
rename to src/plugins/catalog-module-serverlessops/.eslintrc.js
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 89%
rename from src/plugins/serverlessops-catalog/package.json
rename to src/plugins/catalog-module-serverlessops/package.json
index 93796b9..b539135 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,9 @@
"@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",
+ "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..b60c4e3
--- /dev/null
+++ b/src/plugins/catalog-module-serverlessops/src/components/CatalogEntityContent/CicdCatalogEntityContent.tsx
@@ -0,0 +1,54 @@
+import {
+ useEntity,
+ MissingAnnotationEmptyState,
+} from '@backstage/plugin-catalog-react';
+import { Grid, Typography } from '@material-ui/core';
+import {
+ EntityLatestGithubActionRunCard,
+ EntityRecentGithubActionsRunsCard,
+ isGithubActionsAvailable
+} 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/serverlessops-catalog/src/setupTests.ts b/src/plugins/catalog-module-serverlessops/src/setupTests.ts
similarity index 100%
rename from src/plugins/serverlessops-catalog/src/setupTests.ts
rename to src/plugins/catalog-module-serverlessops/src/setupTests.ts
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..e312db9 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"
@@ -5121,6 +5208,45 @@ __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"
+ "@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 +5290,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"
@@ -8465,7 +8554,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:
@@ -12399,6 +12488,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 +12515,8 @@ __metadata:
"@backstage/plugin-techdocs-module-addons-contrib": "backstage:^"
"@backstage/plugin-user-settings": "backstage:^"
"@backstage/ui": "backstage:^"
+ "@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 +18258,15 @@ __metadata:
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"
@@ -26115,7 +26216,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:
@@ -26724,7 +26825,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:
@@ -31562,7 +31663,7 @@ __metadata:
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
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