diff --git a/lib/datasource/github.js b/lib/datasource/github.js index 8fdfbe9f869700899bbf681f1b6785c29eb6b416..10e5c6972f21ce9997904ffabc674684e1205a5e 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 b5111bb06965fcdfe7f6c3cd0754be1b8c494c4c..d4910d20ec1c931f1cb259ebb3975a44abb05431 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 cf2a5e0eed672b8c7d201a79b62b091e80533417..f2ffcfebf86dc6d30de6509c0d2e2fc375255d9d 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 41ad40b64d3d8b11e107a482cf15d4784db60cb4..0000000000000000000000000000000000000000 --- 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 5478206962332363fcd19556e7d156abb5e6fa3a..ecd57d7b77d368befaf694221cd807eac1467ae4 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 6fae88232644bc395f228fe125e67ee89a2581a3..72e84d0b72f7d1cb9ffd2d7d7531dc942024813c 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 b49e0fa1d7feca4734e3308bafa66c433e8f71e2..0000000000000000000000000000000000000000 --- 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 5211c71eb3b38f61a2cd4e257d6faf2d2996d909..0000000000000000000000000000000000000000 --- 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([]); - }); - }); -});