From 05260a5b16fcc4fc102a49342682872711488f15 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 5 Jun 2018 08:15:11 +0200
Subject: [PATCH] refactor: remove semver dependency from github datasource

Instead, perform isVersion filter in lookup
---
 lib/datasource/github.js                          | 5 +----
 lib/workers/repository/process/lookup/index.js    | 6 +++++-
 test/datasource/__snapshots__/github.spec.js.snap | 4 ++++
 test/datasource/github.spec.js                    | 8 ++++----
 4 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/lib/datasource/github.js b/lib/datasource/github.js
index 5639805e79..3b39c6513e 100644
--- a/lib/datasource/github.js
+++ b/lib/datasource/github.js
@@ -1,5 +1,4 @@
 const ghGot = require('../platform/github/gh-got-wrapper');
-const versioning = require('../versioning');
 
 module.exports = {
   getDependency,
@@ -48,10 +47,8 @@ async function getDependency(repo, options = {}) {
     return null;
   }
   // Filter by semver if no versionScheme provided
-  const { isVersion } = versioning(options.versionScheme || 'semver');
-  versions = versions.filter(version => isVersion(version));
   if (options.clean === 'true') {
-    versions = versions.map(version => version.replace(/^v/, ''));
+    versions = versions.map(version => version.replace(/^v(\d)/, '$1'));
   }
   const dependency = {
     repositoryUrl: 'https://github.com/' + repo,
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index a6cacd96d8..8ca9c398ab 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -19,6 +19,7 @@ async function lookupUpdates(config) {
     getMinor,
     isGreaterThan,
     isRange,
+    isVersion,
     matches,
     getNewValue,
   } = versioning(config.versionScheme);
@@ -54,7 +55,10 @@ async function lookupUpdates(config) {
     // TODO: return an object
     return [result];
   }
-  const allVersions = Object.keys(dependency.versions);
+  // Filter out any results from datasource that don't comply with our versioning scheme
+  const allVersions = Object.keys(dependency.versions).filter(v =>
+    isVersion(v)
+  );
   // istanbul ignore if
   if (allVersions.length === 0) {
     const message = `No versions returned from registry for this package`;
diff --git a/test/datasource/__snapshots__/github.spec.js.snap b/test/datasource/__snapshots__/github.spec.js.snap
index ecd57d7b77..a314db87c2 100644
--- a/test/datasource/__snapshots__/github.spec.js.snap
+++ b/test/datasource/__snapshots__/github.spec.js.snap
@@ -6,6 +6,8 @@ Object {
   "versions": Object {
     "1.0.0": Object {},
     "1.1.0": Object {},
+    "a": Object {},
+    "v": Object {},
   },
 }
 `;
@@ -15,6 +17,8 @@ Object {
   "repositoryUrl": "https://github.com/some/dep",
   "versions": Object {
     "1.0.0": Object {},
+    "a": Object {},
+    "v": Object {},
     "v1.1.0": Object {},
   },
 }
diff --git a/test/datasource/github.spec.js b/test/datasource/github.spec.js
index 45e57d032f..09b248082b 100644
--- a/test/datasource/github.spec.js
+++ b/test/datasource/github.spec.js
@@ -9,27 +9,27 @@ describe('datasource/github', () => {
     it('returns cleaned tags', async () => {
       const body = [
         { ref: 'refs/tags/a' },
-        { ref: 'refs/tags/b' },
+        { ref: 'refs/tags/v' },
         { ref: 'refs/tags/1.0.0' },
         { ref: 'refs/tags/v1.1.0' },
       ];
       ghGot.mockReturnValueOnce({ headers: {}, body });
       const res = await github.getDependency('some/dep', { clean: 'true' });
       expect(res).toMatchSnapshot();
-      expect(Object.keys(res.versions)).toHaveLength(2);
+      expect(Object.keys(res.versions)).toHaveLength(4);
       expect(res.versions['1.1.0']).toBeDefined();
     });
     it('returns releases', async () => {
       const body = [
         { tag_name: 'a' },
-        { tag_name: 'b' },
+        { tag_name: 'v' },
         { tag_name: '1.0.0' },
         { tag_name: 'v1.1.0' },
       ];
       ghGot.mockReturnValueOnce({ headers: {}, body });
       const res = await github.getDependency('some/dep', { ref: 'release' });
       expect(res).toMatchSnapshot();
-      expect(Object.keys(res.versions)).toHaveLength(2);
+      expect(Object.keys(res.versions)).toHaveLength(4);
       expect(res.versions['v1.1.0']).toBeDefined();
     });
     it('returns null for invalid ref', async () => {
-- 
GitLab