From 87f49304fc5c40adaf1f31a555ca3e4b12314ec3 Mon Sep 17 00:00:00 2001 From: Laura Warr Date: Fri, 15 Sep 2023 13:53:33 -0400 Subject: [PATCH] feat: Add handling for gitlab pr links --- .../diff/__snapshots__/diff.test.ts.snap | 31 +++++++++++++++++++ src/commands/diff/diff.test.ts | 10 ++++++ src/commands/diff/index.ts | 14 +++++++-- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/src/commands/diff/__snapshots__/diff.test.ts.snap b/src/commands/diff/__snapshots__/diff.test.ts.snap index 4dffa98fc..887be200c 100644 --- a/src/commands/diff/__snapshots__/diff.test.ts.snap +++ b/src/commands/diff/__snapshots__/diff.test.ts.snap @@ -260,6 +260,37 @@ DevCycle Variable Changes: " `; +exports[`diff runs against a test file and linkifies the output for a gitlab MR 1`] = ` +" +DevCycle Variable Changes: + +🟢 6 Variables Added +🔴 1 Variable Removed + +🟢 Added + + 1. simple-case + Location: [test-utils/fixtures/diff/sampleDiff.js:L1](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af) + 2. duplicate-case + Locations: + - [test-utils/fixtures/diff/sampleDiff.js:L2](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af) + - [test-utils/fixtures/diff/sampleDiff.js:L3](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af) + 3. single-quotes + Location: [test-utils/fixtures/diff/sampleDiff.js:L5](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af) + 4. multi-line + Location: [test-utils/fixtures/diff/sampleDiff.js:L11](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af) + 5. multi-line-comment + Location: [test-utils/fixtures/diff/sampleDiff.js:L21](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af) + 6. duplicate-same-line + Location: [test-utils/fixtures/diff/sampleDiff.js:L26](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af) + +🔴 Removed + + 1. simple-case + Location: [test-utils/fixtures/diff/sampleDiff.js:L1](https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6/diffs#diff-content-934428700c2f83423b2b273991070db8c347f8af) +" +`; + exports[`diff runs against a test file with a custom matcher 1`] = ` " DevCycle Variable Changes: diff --git a/src/commands/diff/diff.test.ts b/src/commands/diff/diff.test.ts index 08798ce51..d0e5167d8 100644 --- a/src/commands/diff/diff.test.ts +++ b/src/commands/diff/diff.test.ts @@ -96,6 +96,16 @@ describe('diff', () => { expect(ctx.stdout).toMatchSnapshot() }) + test + .stdout() + .command([ + 'diff', '--file', './test-utils/fixtures/diff/e2e', '--no-api', + '--pr-link', 'https://gitlab.com/devcycle/devcycle-usages-ci-cd/-/merge_requests/6' + ]) + .it('runs against a test file and linkifies the output for a gitlab MR', (ctx) => { + expect(ctx.stdout).toMatchSnapshot() + }) + test .nock(AUTH_URL, (api) => { api.post('/oauth/token', { diff --git a/src/commands/diff/index.ts b/src/commands/diff/index.ts index 59d65c169..7e579de71 100644 --- a/src/commands/diff/index.ts +++ b/src/commands/diff/index.ts @@ -7,6 +7,7 @@ import { parseFiles } from '../../utils/diff/parse' import { VariableDiffMatch } from '../../utils/parsers/types' import Base from '../base' import { sha256 } from 'js-sha256' +import { createHash } from 'node:crypto' import { fetchVariableByKey } from '../../api/variables' import ClientNameFlag, { getClientNames } from '../../flags/client-name' import MatchPatternFlag, { getMatchPatterns } from '../../flags/match-pattern' @@ -327,9 +328,16 @@ export default class Diff extends Base { private logLocations(matches: VariableDiffMatch[], mode: 'add' | 'remove', prLink?: string) { const formatPrLink = (fileName: string, line: number) => { const displayName = `${fileName}:L${line}` - const link = prLink?.includes('bitbucket') - ? `${prLink}#L${fileName}${mode === 'add' ? 'T' : 'F'}${line}` - : `${prLink}/files#diff-${sha256(fileName)}${mode === 'add' ? 'R' : 'L'}${line}` + let link = '' + if (prLink?.includes('bitbucket')) { + link = `${prLink}#L${fileName}${mode === 'add' ? 'T' : 'F'}${line}` + } else if (prLink?.includes('gitlab')) { + // TODO: include line number in link if possible + const sha1Hash = createHash('sha1').update(fileName).digest('hex') + link = `${prLink}/diffs#diff-content-${sha1Hash}` + } else { + link = `${prLink}/files#diff-${sha256(fileName)}${mode === 'add' ? 'R' : 'L'}${line}` + } return `[${displayName}](${link})` }