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