diff --git a/.changeset/famous-crews-speak.md b/.changeset/famous-crews-speak.md new file mode 100644 index 0000000000..d2246472a0 --- /dev/null +++ b/.changeset/famous-crews-speak.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Fixed GitlabUrlReader to include api tokens in API calls diff --git a/packages/backend-common/src/reading/GitlabUrlReader.test.ts b/packages/backend-common/src/reading/GitlabUrlReader.test.ts index 518e2efadc..31092e7707 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.test.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.test.ts @@ -44,6 +44,7 @@ const gitlabProcessor = new GitlabUrlReader( host: 'gitlab.com', apiBaseUrl: 'https://gitlab.com/api/v4', baseUrl: 'https://gitlab.com', + token: 'gl-dummy-token', }), ), ), @@ -57,6 +58,7 @@ const hostedGitlabProcessor = new GitlabUrlReader( host: 'gitlab.mycompany.com', apiBaseUrl: 'https://gitlab.mycompany.com/api/v4', baseUrl: 'https://gitlab.mycompany.com', + token: 'gl-dummy-token', }), ), ), @@ -656,4 +658,21 @@ describe('GitlabUrlReader', () => { ).rejects.toThrow(/^Unable to translate GitLab artifact URL:/); }); }); + + describe('resolveProjectToId', () => { + it('should resolve the project path to a valid project id', async () => { + worker.use( + rest.get('*/api/v4/projects/some%2Fproject', (req, res, ctx) => { + // the private-token header must be included on API calls + expect(req.headers.get('private-token')).toBe('gl-dummy-token'); + return res(ctx.status(200), ctx.json({ id: 12345 })); + }), + ); + await expect( + (gitlabProcessor as any).resolveProjectToId( + new URL('https://gitlab.com/some/project'), + ), + ).resolves.toEqual(12345); + }); + }); }); diff --git a/packages/backend-common/src/reading/GitlabUrlReader.ts b/packages/backend-common/src/reading/GitlabUrlReader.ts index 522e81cd2f..a582f02cf0 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.ts @@ -311,6 +311,7 @@ export class GitlabUrlReader implements UrlReader { `${ pathToProject.origin }${relativePath}/api/v4/projects/${encodeURIComponent(project)}`, + getGitLabRequestOptions(this.integration.config), ); const data = await result.json(); if (!result.ok) {