diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 6036f89310..25630253d4 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -100,7 +100,6 @@ import { EntityJenkinsContent, EntityLatestJenkinsRunCard, isJenkinsAvailable, - EntityJobRunsTable, } from '@backstage/plugin-jenkins'; import { EntityKafkaContent } from '@backstage/plugin-kafka'; import { EntityKubernetesContent } from '@backstage/plugin-kubernetes'; @@ -246,9 +245,6 @@ export const cicdContent = ( -
-
-
diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index f82ce2e7ec..7c160ebcc7 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -19,10 +19,11 @@ import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; import RetryIcon from '@material-ui/icons/Replay'; import VisibilityIcon from '@material-ui/icons/Visibility'; +import HistoryIcon from '@material-ui/icons/History'; import { default as React, useState } from 'react'; import { Project } from '../../../../api/JenkinsApi'; import JenkinsLogo from '../../../../assets/JenkinsLogo.svg'; -import { buildRouteRef } from '../../../../plugin'; +import { buildRouteRef, jobRunsRouteRef } from '../../../../plugin'; import { useBuilds } from '../../../useBuilds'; import { JenkinsRunStatus } from '../Status'; import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; @@ -182,6 +183,7 @@ const generatedColumns: TableColumn[] = [ ); const alertApi = useApi(alertApiRef); + const jobRunsLink = useRouteRef(jobRunsRouteRef); const onRebuild = async () => { if (row.onRestartClick) { @@ -205,7 +207,7 @@ const generatedColumns: TableColumn[] = [ }; return ( -
+
{row.lastBuild?.url && ( @@ -221,6 +223,17 @@ const generatedColumns: TableColumn[] = [ )} + + + + + + +
); }; diff --git a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx index 352417c29d..6861a5854d 100644 --- a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx +++ b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx @@ -21,6 +21,8 @@ import { useJobRuns } from './../useJobRuns'; import { Job, JobBuild } from './../../api/JenkinsApi'; import { JenkinsRunStatus } from './../BuildsPage/lib/Status'; import VisibilityIcon from '@material-ui/icons/Visibility'; +import { jobRunsRouteRef } from '../../plugin'; +import { useRouteRefParams } from '@backstage/core-plugin-api'; const generatedColumns: TableColumn[] = [ { @@ -174,7 +176,8 @@ export const JobRunsTableView = ({ }; export const JobRunsTable = () => { - const [tableProps, { setPage, setPageSize }] = useJobRuns(); + const { jobFullName } = useRouteRefParams(jobRunsRouteRef); + const [tableProps, { setPage, setPageSize }] = useJobRuns(jobFullName); return ( @@ -39,6 +40,7 @@ export const Router = () => { return ( } /> + } /> } /> ); diff --git a/plugins/jenkins/src/components/useJobRuns.ts b/plugins/jenkins/src/components/useJobRuns.ts index 0724fd7495..183524c8a8 100644 --- a/plugins/jenkins/src/components/useJobRuns.ts +++ b/plugins/jenkins/src/components/useJobRuns.ts @@ -19,14 +19,13 @@ import { jenkinsApiRef } from '../api'; import { errorApiRef, useApi } from '@backstage/core-plugin-api'; import { useEntity } from '@backstage/plugin-catalog-react'; import { getCompoundEntityRef } from '@backstage/catalog-model'; -import { JENKINS_ANNOTATION, LEGACY_JENKINS_ANNOTATION } from '../constants'; export enum ErrorType { CONNECTION_ERROR, NOT_FOUND, } -export function useJobRuns() { +export function useJobRuns(jobFullName: string) { const { entity } = useEntity(); const api = useApi(jenkinsApiRef); const errorApi = useApi(errorApiRef); @@ -40,11 +39,6 @@ export function useJobRuns() { errorType: ErrorType; }>(); - const jobFullName = - entity.metadata.annotations?.[JENKINS_ANNOTATION] || - entity.metadata.annotations?.[LEGACY_JENKINS_ANNOTATION] || - ''; - const { loading, value: jobRuns } = useAsyncRetry(async () => { try { const jobBuilds = await api.getJobBuilds({ diff --git a/plugins/jenkins/src/index.ts b/plugins/jenkins/src/index.ts index 7063485511..7562026bdc 100644 --- a/plugins/jenkins/src/index.ts +++ b/plugins/jenkins/src/index.ts @@ -23,7 +23,6 @@ export { jenkinsPlugin, jenkinsPlugin as plugin, - EntityJobRunsTable, EntityJenkinsContent, EntityLatestJenkinsRunCard, } from './plugin'; diff --git a/plugins/jenkins/src/plugin.ts b/plugins/jenkins/src/plugin.ts index 6e0bd77f91..046d3f7eb6 100644 --- a/plugins/jenkins/src/plugin.ts +++ b/plugins/jenkins/src/plugin.ts @@ -38,6 +38,13 @@ export const buildRouteRef = createSubRouteRef({ parent: rootRouteRef, }); +/** @public */ +export const jobRunsRouteRef = createSubRouteRef({ + id: 'jenkins/job/runs', + path: '/builds/:jobFullName/runs', + parent: rootRouteRef, +}); + /** @public */ export const jenkinsPlugin = createPlugin({ id: 'jenkins', @@ -72,13 +79,3 @@ export const EntityLatestJenkinsRunCard = jenkinsPlugin.provide( }, }), ); - -/** @public */ -export const EntityJobRunsTable = jenkinsPlugin.provide( - createComponentExtension({ - name: 'EntityLatestJenkinsRunCard', - component: { - lazy: () => import('./components/JobRunsTable').then(m => m.JobRunsTable), - }, - }), -);