diff --git a/internal/services/backstage/packages/app/package.json b/internal/services/backstage/packages/app/package.json
index d7337888507..4f5e7edff08 100644
--- a/internal/services/backstage/packages/app/package.json
+++ b/internal/services/backstage/packages/app/package.json
@@ -43,6 +43,7 @@
"@backstage/plugin-techdocs": "^1.4.2",
"@backstage/plugin-techdocs-module-addons-contrib": "^1.0.8",
"@backstage/plugin-techdocs-react": "^1.1.1",
+ "@backstage/plugin-todo": "^0.2.15",
"@backstage/plugin-user-settings": "^0.6.1",
"@backstage/theme": "^0.2.16",
"@material-ui/core": "^4.12.4",
diff --git a/internal/services/backstage/packages/app/src/App.tsx b/internal/services/backstage/packages/app/src/App.tsx
index f14c7a6d836..8d1b63051d1 100644
--- a/internal/services/backstage/packages/app/src/App.tsx
+++ b/internal/services/backstage/packages/app/src/App.tsx
@@ -88,6 +88,7 @@ const routes = (
path="/docs/:namespace/:kind/:name/*"
element={}
>
+ {/* @ts-ignore */}
diff --git a/internal/services/backstage/packages/app/src/components/catalog/EntityPage.tsx b/internal/services/backstage/packages/app/src/components/catalog/EntityPage.tsx
index 286420f8cf8..a9355dd732e 100644
--- a/internal/services/backstage/packages/app/src/components/catalog/EntityPage.tsx
+++ b/internal/services/backstage/packages/app/src/components/catalog/EntityPage.tsx
@@ -61,9 +61,12 @@ import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib';
import { EntityKubernetesContent } from '@backstage/plugin-kubernetes';
import { EntityAdrContent, isAdrAvailable } from '@backstage/plugin-adr';
+// eslint-disable-next-line import/no-extraneous-dependencies
+import { EntityTodoContent } from '@backstage/plugin-todo';
const techdocsContent = (
+ {/* @ts-ignore */}
@@ -154,6 +157,10 @@ const serviceEntityPage = (
+
+
+
+
{cicdContent}
diff --git a/internal/services/backstage/packages/backend/package.json b/internal/services/backstage/packages/backend/package.json
index 6d9ff366107..0e4106617a2 100644
--- a/internal/services/backstage/packages/backend/package.json
+++ b/internal/services/backstage/packages/backend/package.json
@@ -34,6 +34,7 @@
"@backstage/plugin-search-backend-module-pg": "^0.5.0",
"@backstage/plugin-search-backend-node": "^1.1.0",
"@backstage/plugin-techdocs-backend": "^1.5.0",
+ "@backstage/plugin-todo-backend": "^0.1.36",
"app": "link:../app",
"better-sqlite3": "^8.0.1",
"dockerode": "^3.3.4",
diff --git a/internal/services/backstage/packages/backend/src/index.ts b/internal/services/backstage/packages/backend/src/index.ts
index 55934641bb4..aa4ddacdd20 100644
--- a/internal/services/backstage/packages/backend/src/index.ts
+++ b/internal/services/backstage/packages/backend/src/index.ts
@@ -29,6 +29,7 @@ import proxy from './plugins/proxy';
import techdocs from './plugins/techdocs';
import search from './plugins/search';
import kubernetes from './plugins/kubernetes';
+import todo from './plugins/todo';
import { PluginEnvironment } from './types';
import { ServerPermissionClient } from '@backstage/plugin-permission-node';
import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
@@ -87,6 +88,7 @@ async function main() {
const searchEnv = useHotMemoize(module, () => createEnv('search'));
const appEnv = useHotMemoize(module, () => createEnv('app'));
const kubernetesEnv = useHotMemoize(module, () => createEnv('kubernetes'));
+ const todoEnv = useHotMemoize(module, () => createEnv('todo'));
const apiRouter = Router();
apiRouter.use('/catalog', await catalog(catalogEnv));
@@ -96,6 +98,7 @@ async function main() {
apiRouter.use('/proxy', await proxy(proxyEnv));
apiRouter.use('/search', await search(searchEnv));
apiRouter.use('/kubernetes', await kubernetes(kubernetesEnv));
+ apiRouter.use('/todo', await todo(todoEnv));
// Add backends ABOVE this line; this 404 handler is the catch-all fallback
apiRouter.use(notFoundHandler());
diff --git a/internal/services/backstage/packages/backend/src/plugins/todo.ts b/internal/services/backstage/packages/backend/src/plugins/todo.ts
new file mode 100644
index 00000000000..9efb3d013e6
--- /dev/null
+++ b/internal/services/backstage/packages/backend/src/plugins/todo.ts
@@ -0,0 +1,28 @@
+import { Router } from 'express';
+import { CatalogClient } from '@backstage/catalog-client';
+import {
+ createRouter,
+ TodoReaderService,
+ TodoScmReader,
+} from '@backstage/plugin-todo-backend';
+import { PluginEnvironment } from '../types';
+
+export default async function createPlugin(
+ env: PluginEnvironment,
+): Promise {
+ const todoReader = TodoScmReader.fromConfig(env.config, {
+ logger: env.logger,
+ reader: env.reader,
+ });
+
+ const catalogClient = new CatalogClient({
+ discoveryApi: env.discovery,
+ });
+
+ const todoService = new TodoReaderService({
+ todoReader,
+ catalogClient,
+ });
+
+ return await createRouter({ todoService });
+}
diff --git a/internal/services/backstage/shortlink-org/components/shortlink-api.yaml b/internal/services/backstage/shortlink-org/components/shortlink-api.yaml
index 5c5ad31087d..8f1f2c11a95 100644
--- a/internal/services/backstage/shortlink-org/components/shortlink-api.yaml
+++ b/internal/services/backstage/shortlink-org/components/shortlink-api.yaml
@@ -12,7 +12,8 @@ metadata:
annotations:
'backstage.io/kubernetes-namespace': shortlink
'backstage.io/kubernetes-label-selector': 'app.kubernetes.io/name=shortlink-api'
- backstage.io/techdocs-ref: dir:.
+ backstage.io/source-location: url:https://github.com/shortlink-org/shortlink/tree/main/internal/services/api
+ backstage.io/techdocs-ref: url:url:https://github.com/shortlink-org/shortlink/tree/main/internal/services/api
spec:
type: service
lifecycle: production
diff --git a/internal/services/backstage/shortlink-org/components/shortlink-billing.yaml b/internal/services/backstage/shortlink-org/components/shortlink-billing.yaml
index 4bd2ad7d585..30e8306db42 100644
--- a/internal/services/backstage/shortlink-org/components/shortlink-billing.yaml
+++ b/internal/services/backstage/shortlink-org/components/shortlink-billing.yaml
@@ -11,7 +11,8 @@ metadata:
- go
annotations:
'backstage.io/kubernetes-label-selector': 'app.kubernetes.io/name=shortlink-billing'
- backstage.io/techdocs-ref: dir:.
+ backstage.io/source-location: url:https://github.com/shortlink-org/shortlink/tree/main/internal/services/billing
+ backstage.io/techdocs-ref: url:url:https://github.com/shortlink-org/shortlink/tree/main/internal/services/billing
spec:
type: service
lifecycle: production
diff --git a/internal/services/backstage/yarn.lock b/internal/services/backstage/yarn.lock
index 569c3e03660..162b49a55ed 100644
--- a/internal/services/backstage/yarn.lock
+++ b/internal/services/backstage/yarn.lock
@@ -3533,6 +3533,40 @@
react-helmet "6.1.0"
react-use "^17.2.4"
+"@backstage/plugin-todo-backend@^0.1.36":
+ version "0.1.36"
+ resolved "https://registry.yarnpkg.com/@backstage/plugin-todo-backend/-/plugin-todo-backend-0.1.36.tgz#21282d3630f7c30eb73f6b554794e6e3ed0ce6dc"
+ integrity sha512-fVi4GSnlTpdU6YLcpVbocKRuY/h0BAGTu5a57xYeduaaVOUhH4lZKMBhgjFXx79Osq1z4LwciZhEBuTAVNZEog==
+ dependencies:
+ "@backstage/backend-common" "^0.17.0"
+ "@backstage/catalog-client" "^1.2.0"
+ "@backstage/catalog-model" "^1.1.4"
+ "@backstage/config" "^1.0.5"
+ "@backstage/errors" "^1.1.4"
+ "@backstage/integration" "^1.4.1"
+ "@types/express" "^4.17.6"
+ express "^4.17.1"
+ express-promise-router "^4.1.0"
+ leasot "^12.0.0"
+ winston "^3.2.1"
+ yn "^4.0.0"
+
+"@backstage/plugin-todo@^0.2.15":
+ version "0.2.15"
+ resolved "https://registry.yarnpkg.com/@backstage/plugin-todo/-/plugin-todo-0.2.15.tgz#85bef0846a854ce4e590f7f6dfd097a3ccd7718a"
+ integrity sha512-2L8YPFu0j4FkepX3xDb0kkogiEW6z3sPCPpZKj5z51LkkiNvBgJOH9ya237i13khUCuX1QBctcJVN3ECN0D40Q==
+ dependencies:
+ "@backstage/catalog-model" "^1.1.4"
+ "@backstage/core-components" "^0.12.2"
+ "@backstage/core-plugin-api" "^1.2.0"
+ "@backstage/errors" "^1.1.4"
+ "@backstage/plugin-catalog-react" "^1.2.3"
+ "@backstage/theme" "^0.2.16"
+ "@material-ui/core" "^4.12.2"
+ "@material-ui/icons" "^4.9.1"
+ "@material-ui/lab" "4.0.0-alpha.57"
+ react-use "^17.2.4"
+
"@backstage/plugin-user-settings@^0.6.1":
version "0.6.1"
resolved "https://registry.yarnpkg.com/@backstage/plugin-user-settings/-/plugin-user-settings-0.6.1.tgz#215fb7a7c081d0e3af4e5fa074c3fb3ef96c83f3"
@@ -7615,6 +7649,7 @@ anymatch@^3.0.3, anymatch@~3.1.2:
"@backstage/plugin-techdocs" "^1.4.2"
"@backstage/plugin-techdocs-module-addons-contrib" "^1.0.8"
"@backstage/plugin-techdocs-react" "^1.1.1"
+ "@backstage/plugin-todo" "^0.2.15"
"@backstage/plugin-user-settings" "^0.6.1"
"@backstage/theme" "^0.2.16"
"@material-ui/core" "^4.12.4"
@@ -10491,6 +10526,11 @@ envinfo@^7.7.4:
resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
+eol@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd"
+ integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==
+
err-code@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
@@ -11774,6 +11814,11 @@ get-port@^5.1.1:
resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193"
integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==
+get-stdin@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
+ integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
+
get-stream@^5.0.0, get-stream@^5.1.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
@@ -11990,7 +12035,7 @@ globalthis@^1.0.1, globalthis@^1.0.3:
dependencies:
define-properties "^1.1.3"
-globby@^11.0.0, globby@^11.0.2, globby@^11.0.4, globby@^11.1.0:
+globby@^11.0.0, globby@^11.0.2, globby@^11.0.3, globby@^11.0.4, globby@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
@@ -14016,6 +14061,11 @@ json-to-ast@^2.1.0:
code-error-fragment "0.0.230"
grapheme-splitter "^1.0.4"
+json2xml@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/json2xml/-/json2xml-0.1.3.tgz#9ae7c220bedd7c66a668e26f7ac182f6704eca21"
+ integrity sha512-yfTe9HnbrE3oRUEQL9mn7BueLd7RCTb7ig/mAFI6xY4RNYOEXF26x0qHFR7mb8ZrKgfE57wxkq0N3TboyFm6UA==
+
json5@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
@@ -14311,6 +14361,23 @@ lazystream@^1.0.0:
dependencies:
readable-stream "^2.0.5"
+leasot@^12.0.0:
+ version "12.5.0"
+ resolved "https://registry.yarnpkg.com/leasot/-/leasot-12.5.0.tgz#d2b0273d0eaa3fc20ded2ede81b46b9c6f158451"
+ integrity sha512-bx2hqCDZ6EVzdaM+aIBNO12Ff0BscGVWPf23Wzj5FLCEXZuJR729Wn5Naom8dJcqpEbsk2XXzvdHus/3WZqW5w==
+ dependencies:
+ async "^3.2.0"
+ chalk "^4.1.0"
+ commander "^7.2.0"
+ eol "^0.9.1"
+ get-stdin "^8.0.0"
+ globby "^11.0.3"
+ json2xml "^0.1.3"
+ lodash "^4.17.21"
+ log-symbols "^4.1.0"
+ strip-ansi "^6.0.0"
+ text-table "^0.2.0"
+
lerna@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/lerna/-/lerna-4.0.0.tgz#b139d685d50ea0ca1be87713a7c2f44a5b678e9e"