From 5dca42b174dd9bb81c48df6d224c6659a9b5ab2d Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Tue, 31 Aug 2021 10:55:37 -0500 Subject: [PATCH 1/2] Properly handle Azure DevOps Server download URL Signed-off-by: Andre Wanlin --- .changeset/fuzzy-pigs-wash.md | 5 +++++ packages/integration/src/azure/core.test.ts | 15 +++++++++++++++ packages/integration/src/azure/core.ts | 12 +++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 .changeset/fuzzy-pigs-wash.md diff --git a/.changeset/fuzzy-pigs-wash.md b/.changeset/fuzzy-pigs-wash.md new file mode 100644 index 0000000000..d4a0ce4602 --- /dev/null +++ b/.changeset/fuzzy-pigs-wash.md @@ -0,0 +1,5 @@ +--- +'@backstage/integration': patch +--- + +Update to properly handle Azure DevOps Server download URL diff --git a/packages/integration/src/azure/core.test.ts b/packages/integration/src/azure/core.test.ts index 9937008b61..37fe50f3ea 100644 --- a/packages/integration/src/azure/core.test.ts +++ b/packages/integration/src/azure/core.test.ts @@ -97,5 +97,20 @@ describe('azure core', () => { ); expect(new URL(result).searchParams.get('scopePath')).toEqual('docs'); }); + + it.each([ + { + url: 'https://dev.azure.com/org-name/project-name/_git/repo-name', + result: + 'https://dev.azure.com/org-name/project-name/_apis/git/repositories/repo-name/items?recursionLevel=full&download=true&api-version=6.0', + }, + { + url: 'https://api.com/org-name/project-name/_git/repo-name', + result: + 'https://api.com/org-name/project-name/_apis/git/repositories/repo-name/items?recursionLevel=full&download=true&api-version=6.0', + }, + ])('should handle happy path %#', async ({ url, result }) => { + expect(getAzureDownloadUrl(url)).toBe(result); + }); }); }); diff --git a/packages/integration/src/azure/core.ts b/packages/integration/src/azure/core.ts index 18de5aa1d2..7d7bf2742d 100644 --- a/packages/integration/src/azure/core.ts +++ b/packages/integration/src/azure/core.ts @@ -100,7 +100,17 @@ export function getAzureDownloadUrl(url: string): string { ? `&scopePath=${encodeURIComponent(filepath)}` : ''; - return `${protocol}://${resource}/${organization}/${project}/_apis/git/repositories/${repoName}/items?recursionLevel=full&download=true&api-version=6.0${scopePath}`; + if (url.includes('dev.azure.com')) { + return `${protocol}://${resource}/${organization}/${project}/_apis/git/repositories/${repoName}/items?recursionLevel=full&download=true&api-version=6.0${scopePath}`; + } + + // For Azure DevOps Server `parseGitUrl` returns the same values + // for `organization` and `project` like this: `organization/project/_git` + // so we drop `project` and then strip `/_git` from `organization` + return `${protocol}://${resource}/${organization.replace( + '/_git', + '', + )}/_apis/git/repositories/${repoName}/items?recursionLevel=full&download=true&api-version=6.0${scopePath}`; } /** From 00bc49f8fe8ad3c51e7ee911e2913eff3062bc66 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Tue, 31 Aug 2021 13:19:46 -0500 Subject: [PATCH 2/2] Update packages/integration/src/azure/core.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated with suggested change Co-authored-by: Fredrik Adelöw Signed-off-by: Andre Wanlin --- packages/integration/src/azure/core.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/integration/src/azure/core.ts b/packages/integration/src/azure/core.ts index 7d7bf2742d..e22764f643 100644 --- a/packages/integration/src/azure/core.ts +++ b/packages/integration/src/azure/core.ts @@ -100,7 +100,7 @@ export function getAzureDownloadUrl(url: string): string { ? `&scopePath=${encodeURIComponent(filepath)}` : ''; - if (url.includes('dev.azure.com')) { + if (resource === 'dev.azure.com') { return `${protocol}://${resource}/${organization}/${project}/_apis/git/repositories/${repoName}/items?recursionLevel=full&download=true&api-version=6.0${scopePath}`; }