diff --git a/lib/modules/datasource/go/releases-goproxy.spec.ts b/lib/modules/datasource/go/releases-goproxy.spec.ts index 20a1cefbde28adea9e4bf983b40c65806319e419..bcbb07221e7add28065040f4f594f3a55f5ca189 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 09b4a91e6676a526ca6b8202b1920baf18ae6912..bec01647ce2660eab54ebe879a6abf4373ce551c 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; }