From 2e925ed0764a67ef667cdb73e6fdff9a1db9c502 Mon Sep 17 00:00:00 2001 From: Deepankumar Loganathan Date: Tue, 20 Feb 2024 22:18:12 +0100 Subject: [PATCH] fixed ADR file path in UrlResolver Signed-off-by: Deepankumar Loganathan --- plugins/adr-common/api-report.md | 1 + plugins/adr-common/src/index.ts | 8 ++++++++ .../adr/src/components/AdrReader/AdrReader.tsx | 17 +++-------------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/plugins/adr-common/api-report.md b/plugins/adr-common/api-report.md index a36854f0e7..f12a086359 100644 --- a/plugins/adr-common/api-report.md +++ b/plugins/adr-common/api-report.md @@ -25,6 +25,7 @@ export const ANNOTATION_ADR_LOCATION = 'backstage.io/adr-location'; export const getAdrLocationUrl: ( entity: Entity, scmIntegration: ScmIntegrationRegistry, + adrFilePath?: String, ) => string; // @public diff --git a/plugins/adr-common/src/index.ts b/plugins/adr-common/src/index.ts index 97c82b2047..7b441d091c 100644 --- a/plugins/adr-common/src/index.ts +++ b/plugins/adr-common/src/index.ts @@ -57,11 +57,19 @@ export const isAdrAvailable = (entity: Entity) => export const getAdrLocationUrl = ( entity: Entity, scmIntegration: ScmIntegrationRegistry, + adrFilePath?: String, ) => { if (!isAdrAvailable(entity)) { throw new Error(`Missing ADR annotation: ${ANNOTATION_ADR_LOCATION}`); } + if (adrFilePath) { + return scmIntegration.resolveUrl({ + url: `${getAdrLocationDir(entity)!.replace(/\/$/, '')}/${adrFilePath}`, + base: getEntitySourceLocation(entity).target, + }); + } + return scmIntegration.resolveUrl({ url: getAdrLocationDir(entity)!, base: getEntitySourceLocation(entity).target, diff --git a/plugins/adr/src/components/AdrReader/AdrReader.tsx b/plugins/adr/src/components/AdrReader/AdrReader.tsx index f41b1b1fdb..2169165288 100644 --- a/plugins/adr/src/components/AdrReader/AdrReader.tsx +++ b/plugins/adr/src/components/AdrReader/AdrReader.tsx @@ -44,22 +44,11 @@ export const AdrReader = (props: { const { entity } = useEntity(); const scmIntegrations = useApi(scmIntegrationsApiRef); const adrApi = useApi(adrApiRef); - const adrLocationUrl = getAdrLocationUrl(entity, scmIntegrations); - let url = `${adrLocationUrl.replace(/\/$/, '')}`; - const adrUrlPath = url.match(/path=\/.*\&/); - if (adrUrlPath) { - // Azure DevOps SCM handle the path in URL Params - const adrPath = adrUrlPath![0].replace(/\&$/, ''); - const regex = new RegExp(`${adrPath}`); - url = url.replace(regex, `${adrPath}/${adr}}`); - } else { - // Other SCM tools - url = `${url}/${adr}`; - } + const adrLocationUrl = getAdrLocationUrl(entity, scmIntegrations, adr); const { value, loading, error } = useAsync( - async () => adrApi.readAdr(url), - [url], + async () => adrApi.readAdr(adrLocationUrl), + [adrLocationUrl], ); const adrContent = useMemo(() => {