diff --git a/lib/manager/bazel/extract.js b/lib/manager/bazel/extract.js index 48359aaf316c2fa00f682f6dee791120592c29ba..0ca0888a0ccdb334dce18458b08fe5b14af30530 100644 --- a/lib/manager/bazel/extract.js +++ b/lib/manager/bazel/extract.js @@ -32,7 +32,7 @@ function parseUrl(urlString) { function extractPackageFile(content) { const definitions = content.match( - /(git_repository|http_archive)\(([\s\S]*?)\n\)\n?/g + /(go_repository|git_repository|http_archive)\(([\s\S]*?)\n\)\n?/g ); if (!definitions) { logger.debug('No matching WORKSPACE definitions found'); @@ -42,9 +42,10 @@ function extractPackageFile(content) { const deps = []; definitions.forEach(def => { logger.debug({ def }, 'Checking bazel definition'); - - const dep = { def, versionScheme: 'semver' }; + const [depType] = def.split('(', 1); + const dep = { depType, def, versionScheme: 'semver' }; let depName; + let importpath; let remote; let currentValue; let url; @@ -74,9 +75,12 @@ function extractPackageFile(content) { if (match) { [, sha256] = match; } + match = def.match(/importpath = "([^"]+)"/); + if (match) { + [, importpath] = match; + } logger.debug({ dependency: depName, remote, currentValue }); - if (def.startsWith('git_repository') && depName && remote && currentValue) { - dep.depType = 'git_repository'; + if (depType === 'git_repository' && depName && remote && currentValue) { dep.depName = depName; dep.remote = remote; dep.currentValue = currentValue; @@ -84,13 +88,22 @@ function extractPackageFile(content) { dep.purl = 'pkg:github/' + repo; deps.push(dep); } else if ( - def.startsWith('http_archive') && + depType === 'go_repository' && + depName && + importpath && + currentValue + ) { + dep.depName = depName; + dep.currentValue = currentValue; + dep.purl = 'pkg:go/' + importpath; + deps.push(dep); + } else if ( + depType === 'http_archive' && depName && parseUrl(url) && sha256 ) { const parsedUrl = parseUrl(url); - dep.depType = 'http_archive'; dep.depName = depName; dep.repo = parsedUrl.repo; dep.currentValue = parsedUrl.currentValue; diff --git a/lib/manager/bazel/update.js b/lib/manager/bazel/update.js index 514ae438b8edf3eb685a3dfb3d5c1b1eac324159..2b3261d6864b78e99bc3b423c2b8a48a53175cce 100644 --- a/lib/manager/bazel/update.js +++ b/lib/manager/bazel/update.js @@ -9,7 +9,10 @@ async function updateDependency(fileContent, upgrade) { try { logger.debug(`bazel.updateDependency(): ${upgrade.newValue}`); let newDef; - if (upgrade.depType === 'git_repository') { + if ( + upgrade.depType === 'git_repository' || + upgrade.depType === 'go_repository' + ) { newDef = upgrade.def.replace( /tag = "[^"]+"/, `tag = "${upgrade.newValue}"` diff --git a/test/_fixtures/bazel/WORKSPACE1 b/test/_fixtures/bazel/WORKSPACE1 index b7ea24ba8f02d187b7ab501feb7f4e3c1fb60db7..800e2c0032612f85bb1c8755ae92c0a08a9ffb46 100644 --- a/test/_fixtures/bazel/WORKSPACE1 +++ b/test/_fixtures/bazel/WORKSPACE1 @@ -1,6 +1,24 @@ workspace(name = "angular_bazel_example") +go_repository( + name = "com_github_bitly_go-nsq", + importpath = "github.com/bitly/go-nsq", + tag = "v1.0.5" +) + +go_repository( + name = "com_github_google_uuid", + importpath = "github.com/google/uuid", + commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e" +) + +go_repository( + name = "com_gopkgin_mgo_v2", + importpath = "gopkg.in/mgo.v2", + tag = "v2" +) + git_repository( name = "build_bazel_rules_nodejs", remote = "https://github.com/bazelbuild/rules_nodejs.git", diff --git a/test/manager/bazel/__snapshots__/extract.spec.js.snap b/test/manager/bazel/__snapshots__/extract.spec.js.snap index 93bf960b01b970d688e4c7b26e73eabca7a49f09..eaa6e5c3351675199a91cd3456a257830e5e1252 100644 --- a/test/manager/bazel/__snapshots__/extract.spec.js.snap +++ b/test/manager/bazel/__snapshots__/extract.spec.js.snap @@ -2,6 +2,32 @@ exports[`lib/manager/bazel/extract extractPackageFile() extracts multiple types of dependencies 1`] = ` Array [ + Object { + "currentValue": "v1.0.5", + "def": "go_repository( + name = \\"com_github_bitly_go-nsq\\", + importpath = \\"github.com/bitly/go-nsq\\", + tag = \\"v1.0.5\\" +) +", + "depName": "com_github_bitly_go-nsq", + "depType": "go_repository", + "purl": "pkg:go/github.com/bitly/go-nsq", + "versionScheme": "semver", + }, + Object { + "currentValue": "v2", + "def": "go_repository( + name = \\"com_gopkgin_mgo_v2\\", + importpath = \\"gopkg.in/mgo.v2\\", + tag = \\"v2\\" +) +", + "depName": "com_gopkgin_mgo_v2", + "depType": "go_repository", + "purl": "pkg:go/gopkg.in/mgo.v2", + "versionScheme": "semver", + }, Object { "currentValue": "0.3.1", "def": "git_repository(