From c25e979aadaf7beb818a27d81430ecd5c55a7047 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 29 Jun 2018 14:28:24 +0200
Subject: [PATCH] refactor: push docker suffix filter to datasource

---
 lib/datasource/docker.js            |  1 +
 lib/manager/docker/package.js       | 11 ++++++-----
 test/datasource/docker.spec.js      | 13 ++++++++++---
 test/manager/docker/package.spec.js |  5 +----
 4 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/lib/datasource/docker.js b/lib/datasource/docker.js
index 064afa6be9..0f652f7b93 100644
--- a/lib/datasource/docker.js
+++ b/lib/datasource/docker.js
@@ -140,6 +140,7 @@ async function getTags(registry, name, suffix) {
     logger.trace({ tags });
     return tags
       .filter(tag => !suffix || tag.endsWith(`-${suffix}`))
+      .map(tag => (suffix ? tag.replace(new RegExp(`-${suffix}$`), '') : tag))
       .filter(isVersion);
   } catch (err) /* istanbul ignore next */ {
     logger.debug(
diff --git a/lib/manager/docker/package.js b/lib/manager/docker/package.js
index e4deee480b..ce03429e6c 100644
--- a/lib/manager/docker/package.js
+++ b/lib/manager/docker/package.js
@@ -68,12 +68,13 @@ async function getPackageUpdates(config) {
     const currentMajor = getMajor(tagVersion);
     const currentlyStable = isStable(tagVersion, unstablePattern);
     let versionList = [];
-    const allTags = await dockerApi.getTags(dockerRegistry, config.depName);
+    const allTags = await dockerApi.getTags(
+      dockerRegistry,
+      config.depName,
+      tagSuffix
+    );
     if (allTags) {
       versionList = allTags
-        .filter(tag => getSuffix(tag) === tagSuffix)
-        .map(getVersion)
-        .filter(isValid)
         .filter(
           version =>
             // All stable are allowed
@@ -178,5 +179,5 @@ function getVersion(tag) {
 
 function getSuffix(tag) {
   const split = tag.indexOf('-');
-  return split > 0 ? tag.slice(split + 1) : '';
+  return split > 0 ? tag.slice(split + 1) : undefined;
 }
diff --git a/test/datasource/docker.spec.js b/test/datasource/docker.spec.js
index d0b1d58714..deb3bfb51f 100644
--- a/test/datasource/docker.spec.js
+++ b/test/datasource/docker.spec.js
@@ -41,12 +41,19 @@ describe('api/docker', () => {
       const res = await docker.getTags(undefined, 'node');
       expect(res).toBe(null);
     });
-    it('returns tags', async () => {
-      const tags = ['a', 'b'];
+    it('returns tags with no suffix', async () => {
+      const tags = ['a', 'b', '1.0.0', '1.1.0', '1.1.0-alpine'];
       got.mockReturnValueOnce({ headers: {}, body: { token: 'some-token ' } });
       got.mockReturnValueOnce({ headers: {}, body: { tags } });
       const res = await docker.getTags(undefined, 'my/node');
-      expect(res).toEqual(tags);
+      expect(res).toEqual(['1.0.0', '1.1.0', '1.1.0-alpine']);
+    });
+    it('returns tags with suffix', async () => {
+      const tags = ['a', 'b', '1.0.0', '1.1.0-alpine'];
+      got.mockReturnValueOnce({ headers: {}, body: { token: 'some-token ' } });
+      got.mockReturnValueOnce({ headers: {}, body: { tags } });
+      const res = await docker.getTags(undefined, 'my/node', 'alpine');
+      expect(res).toEqual(['1.1.0']);
     });
     it('returns null on error', async () => {
       got.mockReturnValueOnce({});
diff --git a/test/manager/docker/package.spec.js b/test/manager/docker/package.spec.js
index 6dac154f68..97af7020f2 100644
--- a/test/manager/docker/package.spec.js
+++ b/test/manager/docker/package.spec.js
@@ -207,10 +207,7 @@ describe('lib/manager/docker/package', () => {
       config.currentTag = '1.0.0-something';
       dockerApi.getDigest.mockReturnValueOnce('sha256:one');
       dockerApi.getDigest.mockReturnValueOnce('sha256:two');
-      dockerApi.getTags.mockReturnValueOnce([
-        '1.1.0-something',
-        '1.2.0-otherthing',
-      ]);
+      dockerApi.getTags.mockReturnValueOnce(['1.1.0']);
       const res = await docker.getPackageUpdates(config);
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
-- 
GitLab