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