diff --git a/docs/architecture-decisions/adr002-default-catalog-file-format.md b/docs/architecture-decisions/adr002-default-catalog-file-format.md
index c1cb719bf5..af22d33020 100644
--- a/docs/architecture-decisions/adr002-default-catalog-file-format.md
+++ b/docs/architecture-decisions/adr002-default-catalog-file-format.md
@@ -68,7 +68,7 @@ metadata:
lifecycle: production
example.com/service-discovery-name: frobsawesome
annotations:
- circleci.com/project-slug: gh/example-org/frobs-awesome
+ circleci.com/project-slug: github/example-org/frobs-awesome
spec:
type: service
```
diff --git a/docs/features/software-catalog/descriptor-format.md b/docs/features/software-catalog/descriptor-format.md
index 78dfcf365c..6ad41bde17 100644
--- a/docs/features/software-catalog/descriptor-format.md
+++ b/docs/features/software-catalog/descriptor-format.md
@@ -34,7 +34,7 @@ software catalog API.
"annotations": {
"backstage.io/managed-by-location": "file:/tmp/component-info.yaml",
"example.com/service-discovery": "artistweb",
- "circleci.com/project-slug": "gh/example-org/artist-website"
+ "circleci.com/project-slug": "github/example-org/artist-website"
},
"description": "The place to be, for great artists",
"etag": "ZjU2MWRkZWUtMmMxZS00YTZiLWFmMWMtOTE1NGNiZDdlYzNk",
@@ -66,7 +66,7 @@ metadata:
system: public-websites
annotations:
example.com/service-discovery: artistweb
- circleci.com/project-slug: gh/example-org/artist-website
+ circleci.com/project-slug: github/example-org/artist-website
tags:
- java
spec:
diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json
index b0c1892d34..3fa10dfba3 100644
--- a/plugins/circleci/package.json
+++ b/plugins/circleci/package.json
@@ -22,6 +22,7 @@
},
"dependencies": {
"@backstage/core": "^0.1.1-alpha.21",
+ "@backstage/plugin-catalog-model": "^0.1.1-alpha.21",
"@backstage/plugin-catalog": "^0.1.1-alpha.21",
"@backstage/theme": "^0.1.1-alpha.21",
"@material-ui/core": "^4.9.1",
diff --git a/plugins/circleci/src/components/Router.tsx b/plugins/circleci/src/components/Router.tsx
new file mode 100644
index 0000000000..c99170b9d1
--- /dev/null
+++ b/plugins/circleci/src/components/Router.tsx
@@ -0,0 +1,28 @@
+import React from 'react';
+import { Routes, Route } from 'react-router';
+import { circleCIRouteRef, circleCIBuildRouteRef } from '../route-refs';
+import { BuildWithStepsPage } from './BuildWithStepsPage/';
+import { BuildsPage } from './BuildsPage';
+import { CIRCLECI_ANNOTATION } from '../constants';
+import { Entity } from '@backstage/catalog-model';
+import { WarningPanel } from '@backstage/core';
+
+export const isPluginApplicableToEntity = (entity: Entity) =>
+ Boolean(entity.metadata.annotations?.[CIRCLECI_ANNOTATION]) &&
+ entity.metadata.annotations?.[CIRCLECI_ANNOTATION] !== '';
+
+export const Router = ({ entity }: { entity: Entity }) =>
+ !isPluginApplicableToEntity(entity) ? (
+
+ `entity.metadata.annotations['{CIRCLECI_ANNOTATION}']` key is missing on
+ the entity.
+
+ ) : (
+
+ } />
+ }
+ />
+
+ );
diff --git a/plugins/circleci/src/constants.ts b/plugins/circleci/src/constants.ts
new file mode 100644
index 0000000000..7d38837fd6
--- /dev/null
+++ b/plugins/circleci/src/constants.ts
@@ -0,0 +1 @@
+export const CIRCLECI_ANNOTATION = 'circleci.com/project-slug';
diff --git a/plugins/circleci/src/index.ts b/plugins/circleci/src/index.ts
index e2e6c4fa69..c6cb140208 100644
--- a/plugins/circleci/src/index.ts
+++ b/plugins/circleci/src/index.ts
@@ -17,4 +17,5 @@
export { plugin } from './plugin';
export * from './api';
export * from './route-refs';
-export { CircleCIWidget } from './components/CircleCIWidget';
+export { Router, isPluginApplicableToEntity } from './components/Router';
+export { CIRCLECI_ANNOTATION } from './constants';
diff --git a/plugins/circleci/src/plugin.ts b/plugins/circleci/src/plugin.ts
index 47ecccef4f..78f92000e3 100644
--- a/plugins/circleci/src/plugin.ts
+++ b/plugins/circleci/src/plugin.ts
@@ -14,14 +14,7 @@
* limitations under the License.
*/
import { createPlugin } from '@backstage/core';
-import { circleCIRouteRef, circleCIBuildRouteRef } from './route-refs';
-import BuildsPage from './pages/BuildsPage/BuildsPage';
-import BuildWithStepsPage from './pages/BuildWithStepsPage/BuildWithStepsPage';
export const plugin = createPlugin({
id: 'circleci',
- register({ router }) {
- router.addRoute(circleCIRouteRef, BuildsPage);
- router.addRoute(circleCIBuildRouteRef, BuildWithStepsPage);
- },
});
diff --git a/plugins/circleci/src/route-refs.tsx b/plugins/circleci/src/route-refs.tsx
index 581f035c1d..d6bad363ed 100644
--- a/plugins/circleci/src/route-refs.tsx
+++ b/plugins/circleci/src/route-refs.tsx
@@ -33,11 +33,11 @@ const CircleCIIcon: FC = props => (
export const circleCIRouteRef = createRouteRef({
icon: CircleCIIcon,
- path: '/circleci',
+ path: '',
title: 'CircleCI | All builds',
});
export const circleCIBuildRouteRef = createRouteRef({
- path: '/circleci/build/:buildId',
+ path: ':buildId',
title: 'CircleCI | Build info',
});