diff --git a/packages/backend-common/src/reading/GitlabUrlReader.test.ts b/packages/backend-common/src/reading/GitlabUrlReader.test.ts index 4c612b4350..18f00d9f68 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.test.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.test.ts @@ -585,17 +585,27 @@ describe('GitlabUrlReader', () => { }); it('should fall back to getGitLabFileFetchUrl for blob urls', async () => { await expect( - (gitlabProcessor as any).getGitlabFetchUrl('https://gitlab.com/group/subgroup/project/-/blob/branch/my/path/to/file.yaml'), - ).resolves.toEqual('https://gitlab.com/api/v4/projects/12345/repository/files/my%2Fpath%2Fto%2Ffile.yaml/raw?ref=branch'); + (gitlabProcessor as any).getGitlabFetchUrl( + 'https://gitlab.com/group/subgroup/project/-/blob/branch/my/path/to/file.yaml', + ), + ).resolves.toEqual( + 'https://gitlab.com/api/v4/projects/12345/repository/files/my%2Fpath%2Fto%2Ffile.yaml/raw?ref=branch', + ); }); it('should work for job artifact urls', async () => { await expect( - (gitlabProcessor as any).getGitlabFetchUrl('https://gitlab.com/group/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob'), - ).resolves.toEqual('https://gitlab.com/api/v4/projects/12345/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob'); + (gitlabProcessor as any).getGitlabFetchUrl( + 'https://gitlab.com/group/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob', + ), + ).resolves.toEqual( + 'https://gitlab.com/api/v4/projects/12345/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob', + ); }); it('should fail on unfamiliar or non-Gitlab urls', async () => { await expect( - (gitlabProcessor as any).getGitlabFetchUrl('https://gitlab.com/some/random/endpoint'), + (gitlabProcessor as any).getGitlabFetchUrl( + 'https://gitlab.com/some/random/endpoint', + ), ).rejects.toThrow('Please provide full path to yaml file from GitLab'); }); }); @@ -617,17 +627,31 @@ describe('GitlabUrlReader', () => { }); it('should reject urls that are not for the job artifacts API', async () => { await expect( - (gitlabProcessor as any).getGitlabArtifactFetchUrl(new URL('https://gitlab.com/some/url')) + (gitlabProcessor as any).getGitlabArtifactFetchUrl( + new URL('https://gitlab.com/some/url'), + ), ).rejects.toThrow('Unable to process url as an GitLab artifact'); }); it('should work for job artifact urls', async () => { await expect( - (gitlabProcessor as any).getGitlabArtifactFetchUrl(new URL('https://gitlab.com/group/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob')) - ).resolves.toEqual(new URL('https://gitlab.com/api/v4/projects/12345/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob')); + (gitlabProcessor as any).getGitlabArtifactFetchUrl( + new URL( + 'https://gitlab.com/group/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob', + ), + ), + ).resolves.toEqual( + new URL( + 'https://gitlab.com/api/v4/projects/12345/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob', + ), + ); }); it('errors in mapping the project ID should be captured', async () => { await expect( - (gitlabProcessor as any).getGitlabArtifactFetchUrl(new URL('https://gitlab.com/groupA/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob')) + (gitlabProcessor as any).getGitlabArtifactFetchUrl( + new URL( + 'https://gitlab.com/groupA/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob', + ), + ), ).rejects.toThrow(/^Unable to translate GitLab artifact URL:/); }); }); diff --git a/packages/backend-common/src/reading/GitlabUrlReader.ts b/packages/backend-common/src/reading/GitlabUrlReader.ts index 7b89f00f47..522e81cd2f 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.ts @@ -278,11 +278,14 @@ export class GitlabUrlReader implements UrlReader { throw new Error('Unable to process url as an GitLab artifact'); } try { - const [namespaceAndProject, ref] = target.pathname.split('/-/jobs/artifacts/'); + const [namespaceAndProject, ref] = + target.pathname.split('/-/jobs/artifacts/'); const projectPath = new URL(target); projectPath.pathname = namespaceAndProject; const projectId = await this.resolveProjectToId(projectPath); - const relativePath = getGitLabIntegrationRelativePath(this.integration.config); + const relativePath = getGitLabIntegrationRelativePath( + this.integration.config, + ); const newUrl = new URL(target); newUrl.pathname = `${relativePath}/api/v4/projects/${projectId}/jobs/artifacts/${ref}`; return newUrl;