From f03c6843f977a9f9b2bd254dda2aa22c64c6cde3 Mon Sep 17 00:00:00 2001 From: Fredrik Blomqvist <fredrik.blomqvist.95@gmail.com> Date: Mon, 12 Apr 2021 23:57:14 -0400 Subject: [PATCH] fix(go): submodules behavior (#9519) --- .../go/__snapshots__/index.spec.ts.snap | 98 +++++++++---------- lib/datasource/go/index.spec.ts | 10 +- lib/datasource/go/index.ts | 26 +++-- 3 files changed, 69 insertions(+), 65 deletions(-) diff --git a/lib/datasource/go/__snapshots__/index.spec.ts.snap b/lib/datasource/go/__snapshots__/index.spec.ts.snap index 8ef004e2c8..7fffc7b10b 100644 --- a/lib/datasource/go/__snapshots__/index.spec.ts.snap +++ b/lib/datasource/go/__snapshots__/index.spec.ts.snap @@ -93,33 +93,33 @@ Array [ ] `; -exports[`datasource/go getReleases falls back to old behaviour 1`] = ` -Array [ - Object { - "headers": Object { - "accept": "application/vnd.github.v3+json", - "accept-encoding": "gzip, deflate", - "host": "api.github.com", - "user-agent": "https://github.com/renovatebot/renovate", +exports[`datasource/go getReleases handles fyne.io 1`] = ` +Object { + "releases": Array [ + Object { + "gitRef": "v1.0.0", + "version": "v1.0.0", }, - "method": "GET", - "url": "https://api.github.com/repos/x/text/tags?per_page=100", - }, + Object { + "gitRef": "v2.0.0", + "version": "v2.0.0", + }, + ], + "sourceUrl": "https://github.com/fyne-io/fyne", +} +`; + +exports[`datasource/go getReleases handles fyne.io 2`] = ` +Array [ Object { "headers": Object { - "accept": "application/vnd.github.v3+json", "accept-encoding": "gzip, deflate", - "host": "api.github.com", + "host": "fyne.io", "user-agent": "https://github.com/renovatebot/renovate", }, "method": "GET", - "url": "https://api.github.com/repos/x/text/releases?per_page=100", + "url": "https://fyne.io/fyne?go-get=1", }, -] -`; - -exports[`datasource/go getReleases falls back to old behaviour 2`] = ` -Array [ Object { "headers": Object { "accept": "application/vnd.github.v3+json", @@ -128,7 +128,7 @@ Array [ "user-agent": "https://github.com/renovatebot/renovate", }, "method": "GET", - "url": "https://api.github.com/repos/x/text/tags?per_page=100", + "url": "https://api.github.com/repos/fyne-io/fyne/tags?per_page=100", }, Object { "headers": Object { @@ -138,12 +138,12 @@ Array [ "user-agent": "https://github.com/renovatebot/renovate", }, "method": "GET", - "url": "https://api.github.com/repos/x/text/releases?per_page=100", + "url": "https://api.github.com/repos/fyne-io/fyne/releases?per_page=100", }, ] `; -exports[`datasource/go getReleases handles fyne.io 1`] = ` +exports[`datasource/go getReleases processes real data 1`] = ` Object { "releases": Array [ Object { @@ -155,20 +155,20 @@ Object { "version": "v2.0.0", }, ], - "sourceUrl": "https://github.com/fyne-io/fyne", + "sourceUrl": "https://github.com/golang/text", } `; -exports[`datasource/go getReleases handles fyne.io 2`] = ` +exports[`datasource/go getReleases processes real data 2`] = ` Array [ Object { "headers": Object { "accept-encoding": "gzip, deflate", - "host": "fyne.io", + "host": "golang.org", "user-agent": "https://github.com/renovatebot/renovate", }, "method": "GET", - "url": "https://fyne.io/fyne?go-get=1", + "url": "https://golang.org/x/text?go-get=1", }, Object { "headers": Object { @@ -178,7 +178,7 @@ Array [ "user-agent": "https://github.com/renovatebot/renovate", }, "method": "GET", - "url": "https://api.github.com/repos/fyne-io/fyne/tags?per_page=100", + "url": "https://api.github.com/repos/golang/text/tags?per_page=100", }, Object { "headers": Object { @@ -188,37 +188,22 @@ Array [ "user-agent": "https://github.com/renovatebot/renovate", }, "method": "GET", - "url": "https://api.github.com/repos/fyne-io/fyne/releases?per_page=100", + "url": "https://api.github.com/repos/golang/text/releases?per_page=100", }, ] `; -exports[`datasource/go getReleases processes real data 1`] = ` -Object { - "releases": Array [ - Object { - "gitRef": "v1.0.0", - "version": "v1.0.0", - }, - Object { - "gitRef": "v2.0.0", - "version": "v2.0.0", - }, - ], - "sourceUrl": "https://github.com/golang/text", -} -`; - -exports[`datasource/go getReleases processes real data 2`] = ` +exports[`datasource/go getReleases returns none if no tags match submodules 1`] = ` Array [ Object { "headers": Object { + "accept": "application/vnd.github.v3+json", "accept-encoding": "gzip, deflate", - "host": "golang.org", + "host": "api.github.com", "user-agent": "https://github.com/renovatebot/renovate", }, "method": "GET", - "url": "https://golang.org/x/text?go-get=1", + "url": "https://api.github.com/repos/x/text/tags?per_page=100", }, Object { "headers": Object { @@ -228,8 +213,13 @@ Array [ "user-agent": "https://github.com/renovatebot/renovate", }, "method": "GET", - "url": "https://api.github.com/repos/golang/text/tags?per_page=100", + "url": "https://api.github.com/repos/x/text/releases?per_page=100", }, +] +`; + +exports[`datasource/go getReleases returns none if no tags match submodules 2`] = ` +Array [ Object { "headers": Object { "accept": "application/vnd.github.v3+json", @@ -238,7 +228,17 @@ Array [ "user-agent": "https://github.com/renovatebot/renovate", }, "method": "GET", - "url": "https://api.github.com/repos/golang/text/releases?per_page=100", + "url": "https://api.github.com/repos/x/text/tags?per_page=100", + }, + Object { + "headers": Object { + "accept": "application/vnd.github.v3+json", + "accept-encoding": "gzip, deflate", + "host": "api.github.com", + "user-agent": "https://github.com/renovatebot/renovate", + }, + "method": "GET", + "url": "https://api.github.com/repos/x/text/releases?per_page=100", }, ] `; diff --git a/lib/datasource/go/index.spec.ts b/lib/datasource/go/index.spec.ts index 442f20e38a..1c3ad871a2 100644 --- a/lib/datasource/go/index.spec.ts +++ b/lib/datasource/go/index.spec.ts @@ -132,6 +132,7 @@ describe('datasource/go', () => { expect(httpMock.getTrace()).toMatchSnapshot(); }); }); + describe('getReleases', () => { it('returns null for empty result', async () => { httpMock @@ -391,7 +392,7 @@ describe('datasource/go', () => { httpMock.reset(); } }); - it('falls back to old behaviour', async () => { + it('returns none if no tags match submodules', async () => { const packages = [ { datasource, depName: 'github.com/x/text/a' }, { datasource, depName: 'github.com/x/text/b' }, @@ -408,10 +409,7 @@ describe('datasource/go', () => { .reply(200, []); const result = await getPkgReleases(pkg); - expect(result.releases).toHaveLength(2); - expect(result.releases.map(({ version }) => version)).toStrictEqual( - tags.map(({ name }) => name) - ); + expect(result.releases).toHaveLength(0); const httpCalls = httpMock.getTrace(); expect(httpCalls).toMatchSnapshot(); @@ -427,7 +425,6 @@ describe('datasource/go', () => { { name: 'b/v3.0.0' }, ]; - httpMock.setup(); httpMock .scope('https://api.github.com/') .get('/repos/x/text/tags?per_page=100') @@ -443,7 +440,6 @@ describe('datasource/go', () => { const httpCalls = httpMock.getTrace(); expect(httpCalls).toMatchSnapshot(); - httpMock.reset(); }); it('handles fyne.io', async () => { httpMock diff --git a/lib/datasource/go/index.ts b/lib/datasource/go/index.ts index 9f2cfd6d55..a8372bdbc9 100644 --- a/lib/datasource/go/index.ts +++ b/lib/datasource/go/index.ts @@ -151,13 +151,14 @@ export async function getReleases({ }: GetReleasesConfig): Promise<ReleaseResult | null> { logger.trace(`go.getReleases(${lookupName})`); const source = await getDatasource(lookupName); - let res = null; if (!source) { logger.warn({ lookupName }, 'Unsupported dependency.'); return null; } + let res: ReleaseResult; + switch (source.datasource) { case github.id: { res = await github.getReleases(source); @@ -179,8 +180,9 @@ export async function getReleases({ // istanbul ignore if if (!res) { - return res; + return null; } + /** * github.com/org/mod/submodule should be tagged as submodule/va.b.c * and that tag should be used instead of just va.b.c, although for compatibility @@ -188,9 +190,14 @@ export async function getReleases({ */ const nameParts = lookupName.replace(/\/v\d+$/, '').split('/'); logger.trace({ nameParts, releases: res.releases }, 'go.getReleases'); + + // If it has more than 3 parts it's a submodule if (nameParts.length > 3) { const prefix = nameParts.slice(3, nameParts.length).join('/'); logger.trace(`go.getReleases.prefix:${prefix}`); + + // Filter the releases so that we only get the ones that are for this submodule + // Also trim the submodule prefix from the version number const submodReleases = res.releases .filter((release) => release.version?.startsWith(prefix)) .map((release) => { @@ -199,18 +206,19 @@ export async function getReleases({ return r2; }); logger.trace({ submodReleases }, 'go.getReleases'); - if (submodReleases.length > 0) { - return { - sourceUrl: res.sourceUrl, - releases: submodReleases, - }; - } + + return { + sourceUrl: res.sourceUrl, + releases: submodReleases, + }; } - if (res?.releases) { + + if (res.releases) { res.releases = res.releases.filter((release) => release.version?.startsWith('v') ); } + return res; } -- GitLab