diff --git a/lib/modules/datasource/github-releases/cache/cache-base.spec.ts b/lib/modules/datasource/github-releases/cache/cache-base.spec.ts index 640fcdcc7f2b785acc53d6e804324281cc229872..b36e1ce61a544ad2bd83dbd33e360aae3ade0c2b 100644 --- a/lib/modules/datasource/github-releases/cache/cache-base.spec.ts +++ b/lib/modules/datasource/github-releases/cache/cache-base.spec.ts @@ -234,7 +234,7 @@ describe('modules/datasource/github-releases/cache/cache-base', () => { ]); }); - it('returns cached values on server errors', async () => { + it('throws for http errors', async () => { packageCache.get.mockResolvedValueOnce({ items: { v1: { version: 'v1', releaseTimestamp: t1, bar: 'aaa' }, @@ -257,4 +257,26 @@ describe('modules/datasource/github-releases/cache/cache-base', () => { expect(packageCache.get).toHaveBeenCalled(); expect(packageCache.set).not.toHaveBeenCalled(); }); + + it('throws for graphql errors', async () => { + packageCache.get.mockResolvedValueOnce({ + items: {}, + createdAt: t3, + updatedAt: t3, + }); + responses = [ + { + statusCode: 200, + headers: {}, + body: { errors: [{ message: 'Ooops' }] }, + }, + ]; + const cache = new TestCache(http, { resetDeltaMinutes: 0 }); + + await expect(cache.getItems({ packageName: 'foo/bar' })).rejects.toThrow( + 'Ooops' + ); + expect(packageCache.get).toHaveBeenCalled(); + expect(packageCache.set).not.toHaveBeenCalled(); + }); }); diff --git a/lib/modules/datasource/github-releases/cache/cache-base.ts b/lib/modules/datasource/github-releases/cache/cache-base.ts index 3a846a31998ee1f6c7c4914f24a2aa76fd2cd7d5..4ed5742ae273634f07e1fe89831d7c593eccbd85 100644 --- a/lib/modules/datasource/github-releases/cache/cache-base.ts +++ b/lib/modules/datasource/github-releases/cache/cache-base.ts @@ -203,7 +203,13 @@ export abstract class AbstractGithubDatasourceCache< }); pagesRemained -= 1; - const data = graphqlRes.body.data; + const { data, errors } = graphqlRes.body; + + const errorMessage = errors?.[0]?.message; + if (errorMessage) { + throw Error(errorMessage); + } + if (data) { const { nodes: fetchedItems, diff --git a/lib/util/http/github.ts b/lib/util/http/github.ts index e4b43912763106179e407f8a2c5dcb9fc458981d..dfb697e9d4c439dadaef4810d62503e2914349ff 100644 --- a/lib/util/http/github.ts +++ b/lib/util/http/github.ts @@ -50,7 +50,6 @@ export interface GithubGraphqlResponse<T = unknown> { errors?: { type?: string; message: string; - locations: unknown; }[]; }