From c86ea5a4ecbe2d772192ac95df0012291aede89a Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 1 Jun 2018 15:38:20 +0200
Subject: [PATCH] refactor: bazel use purl

---
 lib/datasource/github.js                      |  15 ---
 lib/manager/bazel/extract.js                  |   5 +
 lib/manager/bazel/index.js                    |   2 -
 lib/manager/bazel/package.js                  |  69 -----------
 .../__snapshots__/github.spec.js.snap         |  10 --
 .../bazel/__snapshots__/extract.spec.js.snap  |   4 +
 .../bazel/__snapshots__/package.spec.js.snap  |  31 -----
 test/manager/bazel/package.spec.js            | 109 ------------------
 8 files changed, 9 insertions(+), 236 deletions(-)
 delete mode 100644 lib/manager/bazel/package.js
 delete mode 100644 test/manager/bazel/__snapshots__/package.spec.js.snap
 delete mode 100644 test/manager/bazel/package.spec.js

diff --git a/lib/datasource/github.js b/lib/datasource/github.js
index 8fdfbe9f86..10e5c6972f 100644
--- a/lib/datasource/github.js
+++ b/lib/datasource/github.js
@@ -4,7 +4,6 @@ const { isPinnedVersion, sortVersions } = require('../versioning/semver');
 module.exports = {
   getDependency,
   getRepoTags,
-  getRepoReleases,
 };
 
 async function getDependency(repo, options = {}) {
@@ -63,17 +62,3 @@ async function getRepoTags(repo) {
     return [];
   }
 }
-
-async function getRepoReleases(repo) {
-  try {
-    const url = `repos/${repo}/releases?per_page=100`;
-    const res = (await ghGot(url, { paginate: true })).body;
-    return res
-      .map(o => o.tag_name)
-      .filter(isPinnedVersion)
-      .sort(sortVersions);
-  } catch (err) /* istanbul ignore next */ {
-    logger.warn({ repo }, 'Could not fetch repo releases');
-    return [];
-  }
-}
diff --git a/lib/manager/bazel/extract.js b/lib/manager/bazel/extract.js
index b5111bb069..d4910d20ec 100644
--- a/lib/manager/bazel/extract.js
+++ b/lib/manager/bazel/extract.js
@@ -1,3 +1,5 @@
+const parse = require('github-url-from-git');
+
 module.exports = {
   extractDependencies,
 };
@@ -52,6 +54,8 @@ function extractDependencies(content) {
       dep.depName = depName;
       dep.remote = remote;
       dep.currentVersion = currentVersion;
+      const repo = parse(remote).substring('https://github.com/'.length);
+      dep.purl = 'pkg:github/' + repo;
       deps.push(dep);
     } else if (
       def.startsWith('http_archive') &&
@@ -64,6 +68,7 @@ function extractDependencies(content) {
       dep.depType = 'http_archive';
       dep.depName = depName;
       [, dep.repo, dep.currentVersion] = match;
+      dep.purl = 'pkg:github/' + dep.repo;
       deps.push(dep);
     } else {
       logger.info(
diff --git a/lib/manager/bazel/index.js b/lib/manager/bazel/index.js
index cf2a5e0eed..f2ffcfebf8 100644
--- a/lib/manager/bazel/index.js
+++ b/lib/manager/bazel/index.js
@@ -1,5 +1,4 @@
 const { extractDependencies } = require('./extract');
-const { getPackageUpdates } = require('./package');
 const { updateDependency } = require('./update');
 
 const contentPattern = new RegExp('(^|\\n)git_repository\\(');
@@ -7,6 +6,5 @@ const contentPattern = new RegExp('(^|\\n)git_repository\\(');
 module.exports = {
   contentPattern,
   extractDependencies,
-  getPackageUpdates,
   updateDependency,
 };
diff --git a/lib/manager/bazel/package.js b/lib/manager/bazel/package.js
deleted file mode 100644
index 41ad40b64d..0000000000
--- a/lib/manager/bazel/package.js
+++ /dev/null
@@ -1,69 +0,0 @@
-const {
-  getMajor,
-  isGreaterThan,
-  isStable,
-  isPinnedVersion,
-} = require('../../versioning/semver');
-const { getRepoTags, getRepoReleases } = require('../../datasource/github');
-
-module.exports = {
-  getPackageUpdates,
-};
-
-async function getPackageUpdates(config) {
-  logger.debug('bazel.getPackageUpdates()');
-  logger.trace({ config });
-  if (config.depType === 'git_repository') {
-    const { remote, currentVersion } = config;
-    const githubHost = 'https://github.com/';
-    if (!remote.startsWith(githubHost)) {
-      logger.info({ remote }, 'Bazel warning: Unsupported remote');
-      return [];
-    }
-    if (!isPinnedVersion(currentVersion)) {
-      logger.info({ currentVersion }, 'Bazel warning: Unsupported tag');
-      return [];
-    }
-    const repo = remote.substring(githubHost.length).replace(/.git$/, '');
-    let tags = await getRepoTags(repo);
-    logger.debug({ tags, remote });
-    // istanbul ignore if
-    if (!tags.length) {
-      logger.warn({ repo }, 'No tags found');
-      return [];
-    }
-    if (isStable(currentVersion)) {
-      tags = tags.filter(tag => isStable(tag));
-    }
-    const [newestTag] = tags.slice(-1);
-    if (newestTag && isGreaterThan(newestTag, currentVersion)) {
-      logger.debug({ newestTag }, 'Found newer tag');
-      return [
-        {
-          newVersion: newestTag,
-          newVersionMajor: getMajor(newestTag),
-          type:
-            getMajor(newestTag) > getMajor(currentVersion) ? 'major' : 'minor',
-        },
-      ];
-    }
-  } else if (config.depType === 'http_archive') {
-    const { repo, currentVersion } = config;
-    if (!isPinnedVersion(currentVersion)) {
-      logger.info({ currentVersion }, 'Bazel warning: Unsupported tag');
-      return [];
-    }
-    const releases = await getRepoReleases(repo);
-    const [latest] = releases.slice(-1);
-    if (isGreaterThan(latest, currentVersion)) {
-      const upgrade = {
-        newVersion: latest,
-        newVersionMajor: getMajor(latest),
-        type: getMajor(latest) > getMajor(currentVersion) ? 'major' : 'minor',
-      };
-      logger.info({ upgrade });
-      return [upgrade];
-    }
-  }
-  return [];
-}
diff --git a/test/datasource/__snapshots__/github.spec.js.snap b/test/datasource/__snapshots__/github.spec.js.snap
index 5478206962..ecd57d7b77 100644
--- a/test/datasource/__snapshots__/github.spec.js.snap
+++ b/test/datasource/__snapshots__/github.spec.js.snap
@@ -19,13 +19,3 @@ Object {
   },
 }
 `;
-
-exports[`datasource/github getDependency returns stripped versions 1`] = `
-Object {
-  "repositoryUrl": "https://github.com/some/dep",
-  "versions": Object {
-    "1.0.0": Object {},
-    "1.1.0": Object {},
-  },
-}
-`;
diff --git a/test/manager/bazel/__snapshots__/extract.spec.js.snap b/test/manager/bazel/__snapshots__/extract.spec.js.snap
index 6fae882326..72e84d0b72 100644
--- a/test/manager/bazel/__snapshots__/extract.spec.js.snap
+++ b/test/manager/bazel/__snapshots__/extract.spec.js.snap
@@ -12,6 +12,7 @@ Array [
 ",
     "depName": "build_bazel_rules_nodejs",
     "depType": "git_repository",
+    "purl": "pkg:github/bazelbuild/rules_nodejs",
     "remote": "https://github.com/bazelbuild/rules_nodejs.git",
   },
   Object {
@@ -24,6 +25,7 @@ Array [
 ",
     "depName": "build_bazel_rules_typescript",
     "depType": "git_repository",
+    "purl": "pkg:github/bazelbuild/rules_typescript",
     "remote": "https://github.com/bazelbuild/rules_typescript.git",
   },
   Object {
@@ -36,6 +38,7 @@ Array [
 ",
     "depName": "io_bazel_rules_sass",
     "depType": "git_repository",
+    "purl": "pkg:github/bazelbuild/rules_sass",
     "remote": "https://github.com/bazelbuild/rules_sass.git",
   },
   Object {
@@ -48,6 +51,7 @@ Array [
 ",
     "depName": "io_bazel_rules_go",
     "depType": "http_archive",
+    "purl": "pkg:github/bazelbuild/rules_go",
     "repo": "bazelbuild/rules_go",
   },
 ]
diff --git a/test/manager/bazel/__snapshots__/package.spec.js.snap b/test/manager/bazel/__snapshots__/package.spec.js.snap
deleted file mode 100644
index b49e0fa1d7..0000000000
--- a/test/manager/bazel/__snapshots__/package.spec.js.snap
+++ /dev/null
@@ -1,31 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`lib/manager/bazel/package getPackageUpdates returns http archive result 1`] = `
-Array [
-  Object {
-    "newVersion": "0.8.1",
-    "newVersionMajor": 0,
-    "type": "minor",
-  },
-]
-`;
-
-exports[`lib/manager/bazel/package getPackageUpdates returns major result 1`] = `
-Array [
-  Object {
-    "newVersion": "2.0.0",
-    "newVersionMajor": 2,
-    "type": "major",
-  },
-]
-`;
-
-exports[`lib/manager/bazel/package getPackageUpdates returns result if newer version 1`] = `
-Array [
-  Object {
-    "newVersion": "1.1.1",
-    "newVersionMajor": 1,
-    "type": "minor",
-  },
-]
-`;
diff --git a/test/manager/bazel/package.spec.js b/test/manager/bazel/package.spec.js
deleted file mode 100644
index 5211c71eb3..0000000000
--- a/test/manager/bazel/package.spec.js
+++ /dev/null
@@ -1,109 +0,0 @@
-const bazel = require('../../../lib/manager/bazel/package');
-const defaultConfig = require('../../../lib/config/defaults').getConfig();
-const ghGot = require('../../../lib/platform/github/gh-got-wrapper');
-
-jest.mock('../../../lib/platform/github/gh-got-wrapper');
-
-describe('lib/manager/bazel/package', () => {
-  describe('getPackageUpdates', () => {
-    let config;
-    beforeEach(() => {
-      config = {
-        ...defaultConfig,
-      };
-    });
-    it('returns empty if remote is not github', async () => {
-      config.depType = 'git_repository';
-      config.remote = 'https://gitlab.com/a/b.git';
-      expect(await bazel.getPackageUpdates(config)).toEqual([]);
-    });
-    it('returns empty if current version is not valid semver', async () => {
-      config.depType = 'git_repository';
-      config.remote = 'https://github.com/a/b.git';
-      config.currentVersion = 'latest';
-      expect(await bazel.getPackageUpdates(config)).toEqual([]);
-    });
-    it('returns empty if no newer version', async () => {
-      config.depType = 'git_repository';
-      config.remote = 'https://github.com/a/b.git';
-      config.currentVersion = '1.0.0';
-      ghGot.mockReturnValueOnce({
-        body: [
-          {
-            ref: 'refs/tags/0.9.0',
-          },
-          {
-            ref: 'refs/tags/1.0.0',
-          },
-        ],
-      });
-      expect(await bazel.getPackageUpdates(config)).toEqual([]);
-    });
-    it('returns result if newer version', async () => {
-      config.depType = 'git_repository';
-      config.remote = 'https://github.com/a/b.git';
-      config.currentVersion = '1.0.0';
-      ghGot.mockReturnValueOnce({
-        body: [
-          {
-            ref: 'refs/tags/0.9.0',
-          },
-          {
-            ref: 'refs/tags/1.0.0',
-          },
-          {
-            ref: 'refs/tags/1.1.0',
-          },
-          {
-            ref: 'refs/tags/1.1.1',
-          },
-        ],
-      });
-      expect(await bazel.getPackageUpdates(config)).toMatchSnapshot();
-    });
-    it('returns major result', async () => {
-      config.depType = 'git_repository';
-      config.remote = 'https://github.com/a/b.git';
-      config.currentVersion = '1.0.0';
-      ghGot.mockReturnValueOnce({
-        body: [
-          {
-            ref: 'refs/tags/1.0.0',
-          },
-          {
-            ref: 'refs/tags/2.0.0',
-          },
-        ],
-      });
-      expect(await bazel.getPackageUpdates(config)).toMatchSnapshot();
-    });
-    it('returns http archive result', async () => {
-      config.depType = 'http_archive';
-      config.repo = 'a/b';
-      config.currentVersion = '0.7.1';
-      ghGot.mockReturnValueOnce({
-        body: [
-          {
-            tag_name: '0.7.0',
-          },
-          {
-            tag_name: '0.7.1',
-          },
-          {
-            tag_name: '0.8.0',
-          },
-          {
-            tag_name: '0.8.1',
-          },
-        ],
-      });
-      expect(await bazel.getPackageUpdates(config)).toMatchSnapshot();
-    });
-    it('warns for invalid semver', async () => {
-      config.depType = 'http_archive';
-      config.repo = 'a/b';
-      config.currentVersion = 'foo';
-      expect(await bazel.getPackageUpdates(config)).toEqual([]);
-    });
-  });
-});
-- 
GitLab