From ffcb1087c4d290f0ad450f10ebad2a4a65d6a899 Mon Sep 17 00:00:00 2001 From: Conor Sloan Date: Fri, 9 Aug 2024 14:31:15 +0100 Subject: [PATCH] send auth token to get container registry url endpoint --- __tests__/api-client.test.ts | 36 +++++++++++++++++++++++++++++++----- dist/index.js | 12 +++++++++--- src/api-client.ts | 12 ++++++++++-- src/config.ts | 6 ++++-- 4 files changed, 54 insertions(+), 12 deletions(-) diff --git a/__tests__/api-client.test.ts b/__tests__/api-client.test.ts index 5ed5a00..b3e2eaf 100644 --- a/__tests__/api-client.test.ts +++ b/__tests__/api-client.test.ts @@ -4,6 +4,7 @@ import { } from '../src/api-client' const url = 'https://registry.example.com' +const test_token = 'test_token' let fetchMock: jest.SpyInstance @@ -26,12 +27,23 @@ describe('getRepositoryMetadata', () => { }) ) ) - const result = await getRepositoryMetadata(url, 'repository', 'token') + const result = await getRepositoryMetadata(url, 'repository', test_token) expect(result).toEqual({ repoId: '123', ownerId: '456', visibility: 'public' }) + + expect(fetchMock).toHaveBeenCalledWith( + 'https://registry.example.com/repos/repository', + { + method: 'GET', + headers: { + Authorization: `Bearer ${test_token}`, + Accept: 'application/vnd.github.v3+json' + } + } + ) }) it('throws an error when the fetch errors', async () => { @@ -67,18 +79,32 @@ describe('getContainerRegistryURL', () => { fetchMock.mockResolvedValueOnce( new Response(JSON.stringify({ url: 'https://registry.example.com' })) ) - const result = await getContainerRegistryURL(url) + const result = await getContainerRegistryURL(url, test_token) + expect(result).toEqual(new URL('https://registry.example.com')) + + expect(fetchMock).toHaveBeenCalledWith( + 'https://registry.example.com/packages/container-registry-url', + { + method: 'GET', + headers: { + Authorization: `Bearer ${test_token}`, + Accept: 'application/vnd.github.v3+json' + } + } + ) }) it('throws an error when the fetch errors', async () => { fetchMock.mockRejectedValueOnce(new Error('API is down')) - await expect(getContainerRegistryURL(url)).rejects.toThrow('API is down') + await expect(getContainerRegistryURL(url, test_token)).rejects.toThrow( + 'API is down' + ) }) it('throws an error when the response status is not ok', async () => { fetchMock.mockResolvedValueOnce(new Response(null, { status: 500 })) - await expect(getContainerRegistryURL(url)).rejects.toThrow( + await expect(getContainerRegistryURL(url, test_token)).rejects.toThrow( 'Failed to fetch container registry url due to bad status code: 500' ) }) @@ -87,7 +113,7 @@ describe('getContainerRegistryURL', () => { fetchMock.mockResolvedValueOnce( new Response(JSON.stringify({ wrong: 'format' })) ) - await expect(getContainerRegistryURL(url)).rejects.toThrow( + await expect(getContainerRegistryURL(url, test_token)).rejects.toThrow( 'Failed to fetch repository metadata: unexpected response format' ) }) diff --git a/dist/index.js b/dist/index.js index 03f6d02..d063e76 100644 --- a/dist/index.js +++ b/dist/index.js @@ -104365,8 +104365,14 @@ async function getRepositoryMetadata(githubAPIURL, repository, token) { }; } exports.getRepositoryMetadata = getRepositoryMetadata; -async function getContainerRegistryURL(githubAPIURL) { - const response = await fetch(`${githubAPIURL}/packages/container-registry-url`); +async function getContainerRegistryURL(githubAPIURL, token) { + const response = await fetch(`${githubAPIURL}/packages/container-registry-url`, { + method: 'GET', + headers: { + Authorization: `Bearer ${token}`, + Accept: 'application/vnd.github.v3+json' + } + }); if (!response.ok) { throw new Error(`Failed to fetch container registry url due to bad status code: ${response.status}`); } @@ -104464,7 +104470,7 @@ async function resolvePublishActionOptions() { throw new Error(`Could not find GITHUB_REPOSITORY_OWNER_ID.`); } // Required Values fetched from the GitHub API - const containerRegistryUrl = await apiClient.getContainerRegistryURL(apiBaseUrl); + const containerRegistryUrl = await apiClient.getContainerRegistryURL(apiBaseUrl, token); const isEnterprise = !githubServerUrl.includes('https://github.com') && !githubServerUrl.endsWith('.ghe.com'); const repoMetadata = await apiClient.getRepositoryMetadata(apiBaseUrl, nameWithOwner, token); diff --git a/src/api-client.ts b/src/api-client.ts index ac92e53..a7a0413 100644 --- a/src/api-client.ts +++ b/src/api-client.ts @@ -34,10 +34,18 @@ export async function getRepositoryMetadata( } export async function getContainerRegistryURL( - githubAPIURL: string + githubAPIURL: string, + token: string ): Promise { const response = await fetch( - `${githubAPIURL}/packages/container-registry-url` + `${githubAPIURL}/packages/container-registry-url`, + { + method: 'GET', + headers: { + Authorization: `Bearer ${token}`, + Accept: 'application/vnd.github.v3+json' + } + } ) if (!response.ok) { throw new Error( diff --git a/src/config.ts b/src/config.ts index f3f7e53..20ab07a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -92,8 +92,10 @@ export async function resolvePublishActionOptions(): Promise