From 90c68a2ca8b6c66778ec0db78b1a9541eaea5c1b Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Wed, 18 Aug 2021 13:35:54 -0400 Subject: [PATCH] fix(techdocs): generate correct feedback urls for GitHub Signed-off-by: Phil Kuang --- .changeset/rude-avocados-give.md | 5 +++++ .changeset/short-flies-sneeze.md | 5 +++++ packages/integration/api-report.md | 8 ++++++++ packages/integration/src/github/index.ts | 5 ++++- .../reader/transformers/addGitFeedbackLink.test.ts | 4 ++-- .../src/reader/transformers/addGitFeedbackLink.ts | 13 +++++++++++-- 6 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 .changeset/rude-avocados-give.md create mode 100644 .changeset/short-flies-sneeze.md diff --git a/.changeset/rude-avocados-give.md b/.changeset/rude-avocados-give.md new file mode 100644 index 0000000000..7ea8a87361 --- /dev/null +++ b/.changeset/rude-avocados-give.md @@ -0,0 +1,5 @@ +--- +'@backstage/integration': patch +--- + +Export `replaceGitHubUrlType` diff --git a/.changeset/short-flies-sneeze.md b/.changeset/short-flies-sneeze.md new file mode 100644 index 0000000000..fb0f0117a9 --- /dev/null +++ b/.changeset/short-flies-sneeze.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Fix Techdocs feedback icon link for GitHub URLs diff --git a/packages/integration/api-report.md b/packages/integration/api-report.md index 832064eebc..8298d858ee 100644 --- a/packages/integration/api-report.md +++ b/packages/integration/api-report.md @@ -434,6 +434,14 @@ export function readGoogleGcsIntegrationConfig( config: Config, ): GoogleGcsIntegrationConfig; +// Warning: (ae-missing-release-tag) "replaceUrlType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function replaceGitHubUrlType( + url: string, + type: 'blob' | 'tree' | 'edit', +): string; + // Warning: (ae-missing-release-tag) "ScmIntegration" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public diff --git a/packages/integration/src/github/index.ts b/packages/integration/src/github/index.ts index 9247c4ff8e..80d9ce2f26 100644 --- a/packages/integration/src/github/index.ts +++ b/packages/integration/src/github/index.ts @@ -25,4 +25,7 @@ export { GithubCredentialsProvider, } from './GithubCredentialsProvider'; export type { GithubCredentialType } from './GithubCredentialsProvider'; -export { GitHubIntegration } from './GitHubIntegration'; +export { + GitHubIntegration, + replaceUrlType as replaceGitHubUrlType, +} from './GitHubIntegration'; diff --git a/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.test.ts b/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.test.ts index 6d82f585a4..dea13ca09d 100644 --- a/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.test.ts +++ b/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.test.ts @@ -85,7 +85,7 @@ describe('addGitFeedbackLink', () => { `, @@ -99,7 +99,7 @@ describe('addGitFeedbackLink', () => { expect( (shadowDom.querySelector('#git-feedback-link') as HTMLLinkElement)!.href, ).toEqual( - 'https://github.com/groupname/reponame/issues/new?title=Documentation%20Feedback%3A%20HeaderText&body=Page%20source%3A%0Ahttps%3A%2F%2Fgithub.com%2Fgroupname%2Freponame%2Fblob%2Fmaster%2Fdocs%2Fdocname.md%0A%0AFeedback%3A', + 'https://github.com/groupname/reponame/issues/new?title=Documentation%20Feedback%3A%20HeaderText&body=Page%20source%3A%0Ahttps%3A%2F%2Fgithub.com%2Fgroupname%2Freponame%2Fedit%2Fmaster%2Fdocs%2Fdocname.md%0A%0AFeedback%3A', ); }); diff --git a/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.ts b/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.ts index d998f6f8b1..13befb3309 100644 --- a/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.ts +++ b/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.ts @@ -15,7 +15,10 @@ */ import type { Transformer } from './index'; -import { ScmIntegrationRegistry } from '@backstage/integration'; +import { + replaceGitHubUrlType, + ScmIntegrationRegistry, +} from '@backstage/integration'; import FeedbackOutlinedIcon from '@material-ui/icons/FeedbackOutlined'; import React from 'react'; import ReactDOM from 'react-dom'; @@ -51,7 +54,13 @@ export const addGitFeedbackLink = ( const issueDesc = encodeURIComponent( `Page source:\n${sourceAnchor.href}\n\nFeedback:`, ); - const gitInfo = parseGitUrl(sourceURL.pathname); + + // Convert GitHub edit url to blob type so it can be parsed by git-url-parse correctly + const gitUrl = + integration?.type === 'github' + ? replaceGitHubUrlType(sourceURL.href, 'blob') + : sourceURL.href; + const gitInfo = parseGitUrl(gitUrl); const repoPath = `/${gitInfo.organization}/${gitInfo.name}`; const feedbackLink = sourceAnchor.cloneNode() as HTMLAnchorElement;