Skip to content
This repository has been archived by the owner on Jul 24, 2024. It is now read-only.

Commit

Permalink
Merge pull request #52 from JupiterOne/INT-2374-commitWebLink
Browse files Browse the repository at this point in the history
INT-2374 - Add support for `commitWebLink` on `gitlab_merge_request`
  • Loading branch information
austinkelleher authored Jan 21, 2022
2 parents 17f29f9 + 8afbdb1 commit b661a78
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 2 deletions.
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,13 @@ and this project adheres to

## [Unreleased]

## 4.0.0 - 2021-01-20
## 4.1.0 - 2021-01-20

- New properties added to resources:

| Entity | Properties |
| ---------------------- | --------------- |
| `gitlab_merge_request` | `commitWebLink` |

### Changed

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@jupiterone/graph-gitlab",
"version": "4.0.0",
"version": "4.1.0",
"description": "A JupiterOne Integration",
"license": "MPL-2.0",
"main": "dist/index.js",
Expand Down
2 changes: 2 additions & 0 deletions src/converters/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
GitLabProject,
GitLabUser,
} from '../provider/types';
import { getCommitWebLinkFromMergeRequest } from '../util/mergeRequest';

export function createProjectEntity(project: GitLabProject): Entity {
const { _links, ...source } = project; // drop the _links
Expand Down Expand Up @@ -153,6 +154,7 @@ export function createMergeRequestEntity(
sha: mergeRequest.sha,
mergeCommitSha: mergeRequest.merge_commit_sha || undefined,
squashCommitSha: mergeRequest.squash_commit_sha || undefined,
commitWebLink: getCommitWebLinkFromMergeRequest(mergeRequest),
},
},
});
Expand Down
72 changes: 72 additions & 0 deletions src/util/mergeRequest.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import {
buildCommitWebLinkFromCommitSha,
getBaseRepositoryUrlFromWebUrl,
getCommitWebLinkFromMergeRequest,
} from './mergeRequest';

describe('#getBaseRepositoryUrlFromWebUrl', () => {
test('should return base repository URL if valid input supplied', () => {
expect(
getBaseRepositoryUrlFromWebUrl(
'https://gitlab.com/jupiterone-dev/test-proj/-/merge_requests/1',
),
).toEqual('https://gitlab.com/jupiterone-dev/test-proj');
});

test('should return undefined if invalid input supplied', () => {
expect(getBaseRepositoryUrlFromWebUrl('')).toEqual(undefined);
});
});

describe('#buildCommitWebLinkFromCommitSha', () => {
test('should return base repository URL if valid input supplied', () => {
expect(
buildCommitWebLinkFromCommitSha(
'https://gitlab.com/jupiterone-dev/test-proj',
'abcdef',
),
).toEqual('https://gitlab.com/jupiterone-dev/test-proj/-/commit/abcdef');
});
});

describe('#getCommitWebLinkFromMergeRequest', () => {
test('should build commit web link from merge request when both merge commit sha and squash commit sha present', () => {
expect(
getCommitWebLinkFromMergeRequest({
web_url:
'https://gitlab.com/jupiterone-dev/test-proj/-/merge_requests/1',
merge_commit_sha: 'abc123',
squash_commit_sha: 'abc456',
}),
).toEqual('https://gitlab.com/jupiterone-dev/test-proj/-/commit/abc123');
});

test('should build commit web link from merge commit sha if no squash commit present', () => {
expect(
getCommitWebLinkFromMergeRequest({
web_url:
'https://gitlab.com/jupiterone-dev/test-proj/-/merge_requests/1',
merge_commit_sha: 'abc123',
}),
).toEqual('https://gitlab.com/jupiterone-dev/test-proj/-/commit/abc123');
});

test('should build commit web link from squash commit sha if no merge commit sha present', () => {
expect(
getCommitWebLinkFromMergeRequest({
web_url:
'https://gitlab.com/jupiterone-dev/test-proj/-/merge_requests/1',
squash_commit_sha: 'abc456',
}),
).toEqual('https://gitlab.com/jupiterone-dev/test-proj/-/commit/abc456');
});

test('should return undefined if neither merge commit or squash commit sha is present', () => {
expect(
getCommitWebLinkFromMergeRequest({
web_url:
'https://gitlab.com/jupiterone-dev/test-proj/-/merge_requests/1',
}),
).toEqual(undefined);
});
});
32 changes: 32 additions & 0 deletions src/util/mergeRequest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { GitLabMergeRequest } from '../provider/types';

/**
* Example input: https://gitlab.com/jupiterone-dev/test-proj/-/merge_requests/1
* Example output: https://gitlab.com/jupiterone-dev/test-proj
*/
export function getBaseRepositoryUrlFromWebUrl(
webUrl: string,
): string | undefined {
// ['https://gitlab.com/jupiterone-dev/test-proj', 'merge_requests/1']
const expectedSplitPartsSize = 2;
const parts = webUrl.split('/-/');
if (parts.length !== expectedSplitPartsSize) return undefined;
return parts[0];
}

export function buildCommitWebLinkFromCommitSha(
baseUrl: string,
commitSha: string,
) {
return `${baseUrl}/-/commit/${commitSha}`;
}

export function getCommitWebLinkFromMergeRequest(
mergeRequest: GitLabMergeRequest,
): string | undefined {
const sha = mergeRequest.merge_commit_sha || mergeRequest.squash_commit_sha;
if (!sha) return;

const baseUrl = getBaseRepositoryUrlFromWebUrl(mergeRequest.web_url);
return baseUrl && buildCommitWebLinkFromCommitSha(baseUrl, sha);
}
1 change: 1 addition & 0 deletions test/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,5 +98,6 @@ export const prSchema: GraphObjectSchema = {
sha: { type: 'string' },
mergeCommitSha: { type: 'string' },
squashCommitSha: { type: 'string' },
commitWebLink: { type: 'string' },
},
};

0 comments on commit b661a78

Please sign in to comment.