From bdd6e52298b9defc09dc617786da80cff061431c Mon Sep 17 00:00:00 2001 From: Sergio Zharinov <zharinov@users.noreply.github.com> Date: Wed, 18 Mar 2020 15:32:17 +0400 Subject: [PATCH] =?UTF-8?q?feat(gitlab-tags):=20Add=20support=20for=20"rel?= =?UTF-8?q?easeTimestamp"=20for=20GitLa=E2=80=A6=20(#5712)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__snapshots__/index.spec.ts.snap | 9 +++++++ lib/datasource/gitlab-tags/index.spec.ts | 18 +++++++++++-- lib/datasource/gitlab-tags/index.ts | 27 +++++++++++-------- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/lib/datasource/gitlab-tags/__snapshots__/index.spec.ts.snap b/lib/datasource/gitlab-tags/__snapshots__/index.spec.ts.snap index 2379601b48..bf29c12e10 100644 --- a/lib/datasource/gitlab-tags/__snapshots__/index.spec.ts.snap +++ b/lib/datasource/gitlab-tags/__snapshots__/index.spec.ts.snap @@ -5,12 +5,19 @@ Object { "releases": Array [ Object { "gitRef": "v1.0.0", + "releaseTimestamp": "2020-03-04T12:01:37.000-06:00", "version": "v1.0.0", }, Object { "gitRef": "v1.1.0", + "releaseTimestamp": undefined, "version": "v1.1.0", }, + Object { + "gitRef": "v1.1.1", + "releaseTimestamp": undefined, + "version": "v1.1.1", + }, ], "sourceUrl": "https://gitlab.company.com/api/v4/some/dep2", } @@ -21,10 +28,12 @@ Object { "releases": Array [ Object { "gitRef": "v1.0.0", + "releaseTimestamp": undefined, "version": "v1.0.0", }, Object { "gitRef": "v1.1.0", + "releaseTimestamp": undefined, "version": "v1.1.0", }, ], diff --git a/lib/datasource/gitlab-tags/index.spec.ts b/lib/datasource/gitlab-tags/index.spec.ts index 5982053edf..30dfbb2b29 100644 --- a/lib/datasource/gitlab-tags/index.spec.ts +++ b/lib/datasource/gitlab-tags/index.spec.ts @@ -14,14 +14,28 @@ describe('datasource/gitlab-tags', () => { describe('getPkgReleases', () => { beforeAll(() => global.renovateCache.rmAll()); it('returns tags', async () => { - const body = [{ name: 'v1.0.0' }, { name: 'v1.1.0' }]; + const body = [ + { + name: 'v1.0.0', + commit: { + created_at: '2020-03-04T12:01:37.000-06:00', + }, + }, + { + name: 'v1.1.0', + commit: {}, + }, + { + name: 'v1.1.1', + }, + ]; glGot.mockReturnValueOnce({ headers: {}, body }); const res = await gitlab.getPkgReleases({ registryUrls: ['https://gitlab.company.com/api/v4/'], lookupName: 'some/dep2', }); expect(res).toMatchSnapshot(); - expect(res.releases).toHaveLength(2); + expect(res.releases).toHaveLength(3); }); it('returns tags with default registry', async () => { diff --git a/lib/datasource/gitlab-tags/index.ts b/lib/datasource/gitlab-tags/index.ts index 9a2a46f503..dc086e5a74 100644 --- a/lib/datasource/gitlab-tags/index.ts +++ b/lib/datasource/gitlab-tags/index.ts @@ -13,6 +13,13 @@ function getCacheKey(depHost: string, repo: string): string { return `${depHost}:${repo}:${type}`; } +type GitlabTag = { + name: string; + commit?: { + created_at?: string; + }; +}; + export async function getPkgReleases({ registryUrls, lookupName: repo, @@ -21,7 +28,7 @@ export async function getPkgReleases({ const depHost = is.nonEmptyArray(registryUrls) ? registryUrls[0].replace(/\/$/, '') : 'https://gitlab.com'; - let versions: string[]; + let gitlabTags: GitlabTag[]; const cachedResult = await renovateCache.get<ReleaseResult>( cacheNamespace, getCacheKey(depHost, repo) @@ -36,22 +43,19 @@ export async function getPkgReleases({ try { // tag const url = `${depHost}/api/v4/projects/${urlEncodedRepo}/repository/tags?per_page=100`; - type GlTag = { - name: string; - }[]; - versions = ( - await glGot<GlTag>(url, { + gitlabTags = ( + await glGot<GitlabTag[]>(url, { paginate: true, }) - ).body.map(o => o.name); + ).body; } catch (err) { // istanbul ignore next logger.debug({ repo, err }, 'Error retrieving from Gitlab'); } // istanbul ignore if - if (!versions) { + if (!gitlabTags) { return null; } @@ -59,9 +63,10 @@ export async function getPkgReleases({ sourceUrl: `${depHost}/${repo}`, releases: null, }; - dependency.releases = versions.map(version => ({ - version, - gitRef: version, + dependency.releases = gitlabTags.map(({ name, commit }) => ({ + version: name, + gitRef: name, + releaseTimestamp: commit?.created_at, })); const cacheMinutes = 10; -- GitLab