Skip to content

Issues sections should link to Git URL of file at given commit with highlighted line(s) #722

@BioPhoton

Description

@BioPhoton

User story

As a user of the CLI I want to have click through experience for all actionable feedback a get from the audit issues.

At the moment the provided issues often show exactly where the error needs to get fixed, but a manual navigation to the line of code is required.

Example:

Severity Message Source file Line(s)
⚠️ warning Lines 1-18 are not covered in any test case. examples/plugins/src/index.ts 1-18
⚠️ warning Line 104 is not covered in any test case. examples/plugins/src/lighthouse/src/lighthouse.plugin.ts 104
Severity Message Source file Line(s)
🚨 error 1st branch is not taken in any test case. examples/plugins/src/file-size/src/file-size.plugin.ts 101
🚨 error 1st branch is not taken in any test case. examples/plugins/src/index.ts 1

Problems to be solved:

  • git repo could be hosted in GitLab/GitHub/Azure/Bitbucket...
  • each Git provider has their own URL structure
  • git remove -v should give us origin
  • how to detect provider from self-hosted repos? (common for enterprises)
  • if we cannot detect provider, then we shouldn't include the link

Acceptance criteria

  • supported hosting provider:
    • GitLab
    • GitHub
  • provide config remoteUrl to serve users with self-hosted repos. (common for enterprises)
  • if we cannot detect provider, then we shouldn't include the link

Example:

Severity Message Source file Line(s)
⚠️ warning Lines 1-18 are not covered in any test case. examples/plugins/src/index.ts 1-18
⚠️ warning Line 104 is not covered in any test case. examples/plugins/src/lighthouse/src/lighthouse.plugin.ts 104
Severity Message Source file Line(s)
🚨 error 1st branch is not taken in any test case. examples/plugins/src/file-size/src/file-size.plugin.ts 101
🚨 error 1st branch is not taken in any test case. examples/plugins/src/index.ts 1

Implementation details

Get remote from current git: git remote -> 'origin'

Get remote url from current git: git remote get-url origin -> '[email protected]:code-pushup/cli.git'

function generateGitHubUrl(source: Pick<SourceFileLocation, 'file' | 'position'>, remoteUrl: string, branch: string): string {
  const {file, position} = source;
  const {startLine = 0, endLine = 0} = position ?? {};
  const repoPath = remoteUrl.match(/github\.com[:/](.+)\.git/)?.[1];
  const lines = startLine ? `#L${startLine}${endLine ? `-L${endLine}` : ''}` : '';
  return `https://github.com/${repoPath}/blob/${branch}/${file}${lines}`;
}

function generateGitLabUrl(source: Pick<SourceFileLocation, 'file' | 'position'>, remoteUrl: string, branch: string): string {
  const {file, position} = source;
  const {startLine = 0, endLine = 0} = position ?? {};
  const repoPath = remoteUrl.match(/gitlab\.com[:/](.+)\.git/)?.[1];
  const lines = startLine ? `#L${startLine}${endLine ? `-${endLine}` : ''}` : '';
  return `https://gitlab.com/${repoPath}/-/blob/${branch}/${file}${lines}`;
}

Related Issues:

#149

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions