From e8bad1f3b84e3dc850ba189d91dfd44b1776b5da Mon Sep 17 00:00:00 2001 From: Colin O'Dell <codell@seatgeek.com> Date: Sat, 23 Sep 2023 01:38:13 -0400 Subject: [PATCH] fix(datasource/go): hold onto the latest tag in case no other proxies have better info (#24578) --- .../datasource/go/releases-goproxy.spec.ts | 23 ++++++++++++++++ lib/modules/datasource/go/releases-goproxy.ts | 26 +++++++++++-------- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/lib/modules/datasource/go/releases-goproxy.spec.ts b/lib/modules/datasource/go/releases-goproxy.spec.ts index 20a1cefbde..bcbb07221e 100644 --- a/lib/modules/datasource/go/releases-goproxy.spec.ts +++ b/lib/modules/datasource/go/releases-goproxy.spec.ts @@ -754,5 +754,28 @@ describe('modules/datasource/go/releases-goproxy', () => { expect(res).toBeNull(); }); + + it('returns latest even if package has no releases', async () => { + process.env.GOPROXY = baseUrl; + + httpMock + .scope(`${baseUrl}/github.com/google/btree`) + .get('/@v/list') + .reply(200) + .get('/@latest') + .reply(200, { Version: 'v0.0.0-20230905200255-921286631fa9' }) + .get('/v2/@v/list') + .reply(404); + + const res = await datasource.getReleases({ + packageName: 'github.com/google/btree', + }); + + expect(res).toEqual({ + releases: [], + sourceUrl: 'https://github.com/google/btree', + tags: { latest: 'v0.0.0-20230905200255-921286631fa9' }, + }); + }); }); }); diff --git a/lib/modules/datasource/go/releases-goproxy.ts b/lib/modules/datasource/go/releases-goproxy.ts index 09b4a91e66..bec01647ce 100644 --- a/lib/modules/datasource/go/releases-goproxy.ts +++ b/lib/modules/datasource/go/releases-goproxy.ts @@ -61,19 +61,11 @@ export class GoProxyDatasource extends Datasource { const res = await this.getVersionsWithInfo(url, packageName); if (res.releases.length) { result = res; - try { - const datasource = await BaseGoDatasource.getDatasource( - packageName - ); - const sourceUrl = getSourceUrl(datasource); - if (sourceUrl) { - result.sourceUrl = sourceUrl; - } - } catch (err) { - logger.trace({ err }, `Can't get datasource for ${packageName}`); - } break; } + if (res.tags?.latest) { + result = res; + } } catch (err) { const statusCode = err?.response?.statusCode; const canFallback = @@ -88,6 +80,18 @@ export class GoProxyDatasource extends Datasource { } } + if (result && !result.sourceUrl) { + try { + const datasource = await BaseGoDatasource.getDatasource(packageName); + const sourceUrl = getSourceUrl(datasource); + if (sourceUrl) { + result.sourceUrl = sourceUrl; + } + } catch (err) { + logger.trace({ err }, `Can't get datasource for ${packageName}`); + } + } + return result; } -- GitLab