dependabot-core 0.86.25 → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a6e66bf13b402cf7fd7b581515e71ed136d3ca1f69b1e05fac82dc9c7cdda6c4
4
- data.tar.gz: 85bf874a2ed62f4793bd5a1ac0d0a8d2e322d6b2bef9d15aa6ed26246a517c0c
3
+ metadata.gz: c2e46d1583d18b098fe5b5e15f14fd1c7cfd7c777d656cfd9848d30707b295f0
4
+ data.tar.gz: e004738d88222a5488e489b247184b98914645abb1fb3062f609b27a17111af0
5
5
  SHA512:
6
- metadata.gz: c099e0bb79b50dfb23128451840afafd868d629c6d4b712d472265afb533c26c288ff32239cf353a55446e5f86dd3f0cccb1d7064ef20c0f911cb1474ded368a
7
- data.tar.gz: c9ec5ce9b2ad8e8a619f79a6e141d385144ae373b3134213982debeb698ce4a6c29e41c8ccc0a5cf4f84f80d3795afa98f22af708689e7feb8341edd2ef46a0a
6
+ metadata.gz: 7cb1368c7f61de9b26efb85a29e4146c72121fa448801bdef74fd0a64ee4ae2668f83a4779fa032131eaaa7530625f76c85c2ff4f53e6caf1f7cf3e26a356047
7
+ data.tar.gz: ddb71c7d249b391ba49efbb257293e21ffbfafcd179f8e162ba2128d53be29bd615ac947ba1f8ed25e9467b6a9c9424bdbf2df2164a0c214c3a0dcf766fa517b
data/CHANGELOG.md CHANGED
@@ -1,10 +1,12 @@
1
+ ## v0.87.0, 2 January 2019
2
+
3
+ - Go (modules): reorg
4
+ - JS: Handle requirements with an || when bumping versions
5
+
1
6
  ## v0.86.25, 2 January 2019
2
7
 
3
8
  - Raise RepoNotFound errors when creating PRs
4
- - Merge pull request #875 from dependabot/dependabot/composer/helpers/php/friendsofphp/php-cs-fixer-2.13.2
5
- - Bump friendsofphp/php-cs-fixer from 2.13.1 to 2.13.2 in /helpers/php
6
9
  - Python: Don't treat post-releases as pre-releases
7
- - Save a couple of lines
8
10
 
9
11
  ## v0.86.24, 1 January 2019
10
12
 
data/helpers/go/go.mod CHANGED
@@ -2,8 +2,7 @@ module github.com/dependabot/dependabot-core/helpers/go
2
2
 
3
3
  require (
4
4
  github.com/Masterminds/vcs v1.12.0
5
- github.com/dependabot/dependabot-core/helpers/go/updater v0.0.0
6
- github.com/dependabot/gomodules-extracted v0.0.0-20181020215834-1b2f850478a3
5
+ github.com/dependabot/dependabot-core/helpers/go/importresolver v0.0.0
7
6
  )
8
7
 
9
- replace github.com/dependabot/dependabot-core/helpers/go/updater => ./updater
8
+ replace github.com/dependabot/dependabot-core/helpers/go/importresolver => ./importresolver
data/helpers/go/go.sum CHANGED
@@ -1,5 +1,2 @@
1
1
  github.com/Masterminds/vcs v1.12.0 h1:bt9Hb4XlfmEfLnVA0MVz2NO0GFuMN5vX8iOWW38Xde4=
2
2
  github.com/Masterminds/vcs v1.12.0/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA=
3
- github.com/dependabot/dependabot-core v0.74.6 h1:SB2Oyie+Ex9ARXLHbFrnoQSWSixAG4ORHA+s6YEvVag=
4
- github.com/dependabot/gomodules-extracted v0.0.0-20181020215834-1b2f850478a3 h1:Xj2leY0FVyZuo+p59vkIWG3dIqo+QtjskT5O1iTiywA=
5
- github.com/dependabot/gomodules-extracted v0.0.0-20181020215834-1b2f850478a3/go.mod h1:+dRXSrUymjpT4yzKtn1QmeknT1S/yAHRr35en18dHp8=
@@ -0,0 +1 @@
1
+ module github.com/dependabot/dependabot-core/helpers/go/importresolver
data/helpers/go/main.go CHANGED
@@ -7,8 +7,6 @@ import (
7
7
  "os"
8
8
 
9
9
  "github.com/dependabot/dependabot-core/helpers/go/importresolver"
10
- "github.com/dependabot/dependabot-core/helpers/go/updatechecker"
11
- "github.com/dependabot/dependabot-core/helpers/go/updater"
12
10
  )
13
11
 
14
12
  type HelperParams struct {
@@ -33,14 +31,6 @@ func main() {
33
31
  funcErr error
34
32
  )
35
33
  switch helperParams.Function {
36
- case "getUpdatedVersion":
37
- var args updatechecker.Args
38
- parseArgs(helperParams.Args, &args)
39
- funcOut, funcErr = updatechecker.GetUpdatedVersion(&args)
40
- case "updateDependencyFile":
41
- var args updater.Args
42
- parseArgs(helperParams.Args, &args)
43
- funcOut, funcErr = updater.UpdateDependencyFile(&args)
44
34
  case "getVcsRemoteForImport":
45
35
  var args importresolver.Args
46
36
  parseArgs(helperParams.Args, &args)
@@ -5,7 +5,6 @@ require "dependabot/file_fetchers/java_script/npm_and_yarn"
5
5
  require "dependabot/file_fetchers/php/composer"
6
6
  require "dependabot/file_fetchers/elixir/hex"
7
7
  require "dependabot/file_fetchers/go/dep"
8
- require "dependabot/file_fetchers/go/modules"
9
8
 
10
9
  module Dependabot
11
10
  module FileFetchers
@@ -14,8 +13,7 @@ module Dependabot
14
13
  "npm_and_yarn" => FileFetchers::JavaScript::NpmAndYarn,
15
14
  "composer" => FileFetchers::Php::Composer,
16
15
  "hex" => FileFetchers::Elixir::Hex,
17
- "dep" => FileFetchers::Go::Dep,
18
- "go_modules" => FileFetchers::Go::Modules
16
+ "dep" => FileFetchers::Go::Dep
19
17
  }
20
18
 
21
19
  def self.for_package_manager(package_manager)
@@ -5,7 +5,6 @@ require "dependabot/file_parsers/java_script/npm_and_yarn"
5
5
  require "dependabot/file_parsers/php/composer"
6
6
  require "dependabot/file_parsers/elixir/hex"
7
7
  require "dependabot/file_parsers/go/dep"
8
- require "dependabot/file_parsers/go/modules"
9
8
 
10
9
  module Dependabot
11
10
  module FileParsers
@@ -14,8 +13,7 @@ module Dependabot
14
13
  "npm_and_yarn" => FileParsers::JavaScript::NpmAndYarn,
15
14
  "composer" => FileParsers::Php::Composer,
16
15
  "hex" => FileParsers::Elixir::Hex,
17
- "dep" => FileParsers::Go::Dep,
18
- "go_modules" => FileParsers::Go::Modules
16
+ "dep" => FileParsers::Go::Dep
19
17
  }
20
18
 
21
19
  def self.for_package_manager(package_manager)
@@ -5,7 +5,6 @@ require "dependabot/file_updaters/java_script/npm_and_yarn"
5
5
  require "dependabot/file_updaters/php/composer"
6
6
  require "dependabot/file_updaters/elixir/hex"
7
7
  require "dependabot/file_updaters/go/dep"
8
- require "dependabot/file_updaters/go/modules"
9
8
 
10
9
  module Dependabot
11
10
  module FileUpdaters
@@ -14,8 +13,7 @@ module Dependabot
14
13
  "npm_and_yarn" => FileUpdaters::JavaScript::NpmAndYarn,
15
14
  "composer" => FileUpdaters::Php::Composer,
16
15
  "hex" => FileUpdaters::Elixir::Hex,
17
- "dep" => FileUpdaters::Go::Dep,
18
- "go_modules" => FileUpdaters::Go::Modules
16
+ "dep" => FileUpdaters::Go::Dep
19
17
  }
20
18
 
21
19
  def self.for_package_manager(package_manager)
@@ -13,8 +13,7 @@ module Dependabot
13
13
  "npm_and_yarn" => MetadataFinders::JavaScript::NpmAndYarn,
14
14
  "composer" => MetadataFinders::Php::Composer,
15
15
  "hex" => MetadataFinders::Elixir::Hex,
16
- "dep" => MetadataFinders::Go::Dep,
17
- "go_modules" => MetadataFinders::Go::Dep
16
+ "dep" => MetadataFinders::Go::Dep
18
17
  }
19
18
 
20
19
  def self.for_package_manager(package_manager)
@@ -47,12 +47,8 @@ module Dependabot
47
47
  annotate_pull_request(pull_request)
48
48
 
49
49
  pull_request
50
- rescue Octokit::Forbidden => error
51
- raise unless error.message.include?("Repository was archived")
52
- raise RepoArchived
53
- rescue Octokit::NotFound => error
54
- raise if repo_exists?
55
- raise RepoNotFound
50
+ rescue Octokit::Error => error
51
+ handle_error(error)
56
52
  end
57
53
 
58
54
  private
@@ -241,6 +237,21 @@ module Dependabot
241
237
  signature_key: signature_key
242
238
  ).signature
243
239
  end
240
+
241
+ def handle_error(error)
242
+ case error
243
+ when Octokit::Forbidden
244
+ raise error unless error.message.include?("Repository was archived")
245
+
246
+ raise RepoArchived
247
+ when Octokit::NotFound
248
+ raise error if repo_exists?
249
+
250
+ raise RepoNotFound
251
+ else
252
+ raise error
253
+ end
254
+ end
244
255
  end
245
256
  end
246
257
  end
@@ -5,7 +5,6 @@ require "dependabot/update_checkers/java_script/npm_and_yarn"
5
5
  require "dependabot/update_checkers/php/composer"
6
6
  require "dependabot/update_checkers/elixir/hex"
7
7
  require "dependabot/update_checkers/go/dep"
8
- require "dependabot/update_checkers/go/modules"
9
8
 
10
9
  module Dependabot
11
10
  module UpdateCheckers
@@ -14,8 +13,7 @@ module Dependabot
14
13
  "npm_and_yarn" => UpdateCheckers::JavaScript::NpmAndYarn,
15
14
  "composer" => UpdateCheckers::Php::Composer,
16
15
  "hex" => UpdateCheckers::Elixir::Hex,
17
- "dep" => UpdateCheckers::Go::Dep,
18
- "go_modules" => UpdateCheckers::Go::Modules
16
+ "dep" => UpdateCheckers::Go::Dep
19
17
  }
20
18
 
21
19
  def self.for_package_manager(package_manager)
@@ -90,7 +90,8 @@ module Dependabot
90
90
  return req.merge(requirement: updated_req)
91
91
  end
92
92
 
93
- req.merge(requirement: update_version_string(current_requirement))
93
+ reqs = current_requirement.strip.split(SEPARATOR).map(&:strip)
94
+ req.merge(requirement: update_version_string(reqs.first))
94
95
  end
95
96
 
96
97
  def update_version_requirement_if_needed(req)
@@ -22,8 +22,7 @@ module Dependabot
22
22
  "npm_and_yarn" => Utils::JavaScript::Version,
23
23
  "composer" => Utils::Php::Version,
24
24
  "hex" => Utils::Elixir::Version,
25
- "dep" => Utils::Go::Version,
26
- "go_modules" => Utils::Go::Version
25
+ "dep" => Utils::Go::Version
27
26
  }
28
27
 
29
28
  def self.version_class_for_package_manager(package_manager)
@@ -44,8 +43,7 @@ module Dependabot
44
43
  "npm_and_yarn" => Utils::JavaScript::Requirement,
45
44
  "composer" => Utils::Php::Requirement,
46
45
  "hex" => Utils::Elixir::Requirement,
47
- "dep" => Utils::Go::Requirement,
48
- "go_modules" => Utils::Go::Requirement
46
+ "dep" => Utils::Go::Requirement
49
47
  }
50
48
 
51
49
  def self.requirement_class_for_package_manager(package_manager)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dependabot
4
- VERSION = "0.86.25"
4
+ VERSION = "0.87.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.86.25
4
+ version: 0.87.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -307,13 +307,9 @@ files:
307
307
  - helpers/go/Makefile
308
308
  - helpers/go/go.mod
309
309
  - helpers/go/go.sum
310
+ - helpers/go/importresolver/go.mod
310
311
  - helpers/go/importresolver/main.go
311
312
  - helpers/go/main.go
312
- - helpers/go/updatechecker/main.go
313
- - helpers/go/updater/go.mod
314
- - helpers/go/updater/go.sum
315
- - helpers/go/updater/helpers.go
316
- - helpers/go/updater/main.go
317
313
  - helpers/npm/.eslintrc
318
314
  - helpers/npm/bin/run.js
319
315
  - helpers/npm/lib/helpers.js
@@ -377,7 +373,6 @@ files:
377
373
  - lib/dependabot/file_fetchers/base.rb
378
374
  - lib/dependabot/file_fetchers/elixir/hex.rb
379
375
  - lib/dependabot/file_fetchers/go/dep.rb
380
- - lib/dependabot/file_fetchers/go/modules.rb
381
376
  - lib/dependabot/file_fetchers/java_script/npm_and_yarn.rb
382
377
  - lib/dependabot/file_fetchers/java_script/npm_and_yarn/path_dependency_builder.rb
383
378
  - lib/dependabot/file_fetchers/php/composer.rb
@@ -391,8 +386,6 @@ files:
391
386
  - lib/dependabot/file_parsers/base/dependency_set.rb
392
387
  - lib/dependabot/file_parsers/elixir/hex.rb
393
388
  - lib/dependabot/file_parsers/go/dep.rb
394
- - lib/dependabot/file_parsers/go/modules.rb
395
- - lib/dependabot/file_parsers/go/modules/go_mod_parser.rb
396
389
  - lib/dependabot/file_parsers/java_script/npm_and_yarn.rb
397
390
  - lib/dependabot/file_parsers/php/composer.rb
398
391
  - lib/dependabot/file_parsers/ruby/bundler.rb
@@ -410,8 +403,6 @@ files:
410
403
  - lib/dependabot/file_updaters/go/dep.rb
411
404
  - lib/dependabot/file_updaters/go/dep/lockfile_updater.rb
412
405
  - lib/dependabot/file_updaters/go/dep/manifest_updater.rb
413
- - lib/dependabot/file_updaters/go/modules.rb
414
- - lib/dependabot/file_updaters/go/modules/go_mod_updater.rb
415
406
  - lib/dependabot/file_updaters/java_script/npm_and_yarn.rb
416
407
  - lib/dependabot/file_updaters/java_script/npm_and_yarn/npm_lockfile_updater.rb
417
408
  - lib/dependabot/file_updaters/java_script/npm_and_yarn/npmrc_builder.rb
@@ -466,7 +457,6 @@ files:
466
457
  - lib/dependabot/update_checkers/go/dep/latest_version_finder.rb
467
458
  - lib/dependabot/update_checkers/go/dep/requirements_updater.rb
468
459
  - lib/dependabot/update_checkers/go/dep/version_resolver.rb
469
- - lib/dependabot/update_checkers/go/modules.rb
470
460
  - lib/dependabot/update_checkers/java_script/npm_and_yarn.rb
471
461
  - lib/dependabot/update_checkers/java_script/npm_and_yarn/latest_version_finder.rb
472
462
  - lib/dependabot/update_checkers/java_script/npm_and_yarn/library_detector.rb
@@ -1,107 +0,0 @@
1
- package updatechecker
2
-
3
- import (
4
- "errors"
5
- "io/ioutil"
6
-
7
- "github.com/dependabot/gomodules-extracted/cmd/go/_internal_/modfetch"
8
- "github.com/dependabot/gomodules-extracted/cmd/go/_internal_/modfile"
9
- "github.com/dependabot/gomodules-extracted/cmd/go/_internal_/modload"
10
- "github.com/dependabot/gomodules-extracted/cmd/go/_internal_/semver"
11
- )
12
-
13
- type Dependency struct {
14
- Name string `json:"name"`
15
- Version string `json:"version"`
16
- Indirect bool `json:"indirect"`
17
- }
18
-
19
- type IgnoreRange struct {
20
- MinVersionInclusive string `json:"min_version_inclusive"`
21
- MaxVersionExclusive string `json:"max_version_exclusive"`
22
- }
23
-
24
- type Args struct {
25
- Dependency *Dependency `json:"dependency"`
26
- IgnoreRanges []*IgnoreRange `json:"ignore_ranges"`
27
- }
28
-
29
- func GetUpdatedVersion(args *Args) (interface{}, error) {
30
- if args.Dependency == nil {
31
- return nil, errors.New("Expected args.dependency to not be nil")
32
- }
33
-
34
- modload.InitMod()
35
-
36
- repo, err := modfetch.Lookup(args.Dependency.Name)
37
- if err != nil {
38
- return nil, err
39
- }
40
-
41
- versions, err := repo.Versions("")
42
- if err != nil {
43
- return nil, err
44
- }
45
-
46
- excludes, err := goModExcludes(args.Dependency.Name)
47
- if err != nil {
48
- return nil, err
49
- }
50
-
51
- currentVersion := args.Dependency.Version
52
- currentMajor := semver.Major(currentVersion)
53
- currentPrerelease := semver.Prerelease(currentVersion)
54
- latestVersion := args.Dependency.Version
55
-
56
- Outer:
57
- for _, v := range versions {
58
- if semver.Major(v) != currentMajor {
59
- continue
60
- }
61
-
62
- if semver.Compare(v, latestVersion) < 1 {
63
- continue
64
- }
65
-
66
- if currentPrerelease == "" && semver.Prerelease(v) != "" {
67
- continue
68
- }
69
-
70
- for _, exclude := range excludes {
71
- if v == exclude {
72
- continue Outer
73
- }
74
- }
75
-
76
- latestVersion = v
77
- }
78
-
79
- return latestVersion, nil
80
- }
81
-
82
- func goModExcludes(dependency string) ([]string, error) {
83
- data, err := ioutil.ReadFile("go.mod")
84
- if err != nil {
85
- return nil, err
86
- }
87
-
88
- var f *modfile.File
89
- // TODO library detection - don't consider exclude etc for libraries
90
- if "library" == "true" {
91
- f, err = modfile.ParseLax("go.mod", data, nil)
92
- } else {
93
- f, err = modfile.Parse("go.mod", data, nil)
94
- }
95
- if err != nil {
96
- return nil, err
97
- }
98
-
99
- var excludes []string
100
- for _, e := range f.Exclude {
101
- if e.Mod.Path == dependency {
102
- excludes = append(excludes, e.Mod.Version)
103
- }
104
- }
105
-
106
- return excludes, nil
107
- }
@@ -1,3 +0,0 @@
1
- module github.com/dependabot/dependabot-core/helpers/go/updater
2
-
3
- require github.com/dependabot/gomodules-extracted v0.0.0-20181020215834-1b2f850478a3
@@ -1,2 +0,0 @@
1
- github.com/dependabot/gomodules-extracted v0.0.0-20181020215834-1b2f850478a3 h1:Xj2leY0FVyZuo+p59vkIWG3dIqo+QtjskT5O1iTiywA=
2
- github.com/dependabot/gomodules-extracted v0.0.0-20181020215834-1b2f850478a3/go.mod h1:+dRXSrUymjpT4yzKtn1QmeknT1S/yAHRr35en18dHp8=
@@ -1,57 +0,0 @@
1
- package updater
2
-
3
- import (
4
- "strings"
5
-
6
- "github.com/dependabot/gomodules-extracted/cmd/go/_internal_/modfile"
7
- )
8
-
9
- // Private methods lifted from the `modfile` package
10
-
11
- // setIndirect sets line to have (or not have) a "// indirect" comment.
12
- func setIndirect(line *modfile.Line, indirect bool) {
13
- if isIndirect(line) == indirect {
14
- return
15
- }
16
- if indirect {
17
- // Adding comment.
18
- if len(line.Suffix) == 0 {
19
- // New comment.
20
- line.Suffix = []modfile.Comment{{Token: "// indirect", Suffix: true}}
21
- return
22
- }
23
- // Insert at beginning of existing comment.
24
- com := &line.Suffix[0]
25
- space := " "
26
- if len(com.Token) > 2 && com.Token[2] == ' ' || com.Token[2] == '\t' {
27
- space = ""
28
- }
29
- com.Token = "// indirect;" + space + com.Token[2:]
30
- return
31
- }
32
-
33
- // Removing comment.
34
- f := strings.Fields(line.Suffix[0].Token)
35
- if len(f) == 2 {
36
- // Remove whole comment.
37
- line.Suffix = nil
38
- return
39
- }
40
-
41
- // Remove comment prefix.
42
- com := &line.Suffix[0]
43
- i := strings.Index(com.Token, "indirect;")
44
- com.Token = "//" + com.Token[i+len("indirect;"):]
45
- }
46
-
47
- // isIndirect reports whether line has a "// indirect" comment,
48
- // meaning it is in go.mod only for its effect on indirect dependencies,
49
- // so that it can be dropped entirely once the effective version of the
50
- // indirect dependency reaches the given minimum version.
51
- func isIndirect(line *modfile.Line) bool {
52
- if len(line.Suffix) == 0 {
53
- return false
54
- }
55
- f := strings.Fields(line.Suffix[0].Token)
56
- return (len(f) == 2 && f[1] == "indirect" || len(f) > 2 && f[1] == "indirect;") && f[0] == "//"
57
- }
@@ -1,48 +0,0 @@
1
- package updater
2
-
3
- import (
4
- "io/ioutil"
5
-
6
- "github.com/dependabot/gomodules-extracted/cmd/go/_internal_/modfile"
7
- )
8
-
9
- type Dependency struct {
10
- Name string `json:"name"`
11
- Version string `json:"version"`
12
- Indirect bool `json:"indirect"`
13
- }
14
-
15
- type Args struct {
16
- Dependencies []Dependency `json:"dependencies"`
17
- }
18
-
19
- func UpdateDependencyFile(args *Args) (interface{}, error) {
20
- data, err := ioutil.ReadFile("go.mod")
21
- if err != nil {
22
- return nil, err
23
- }
24
-
25
- f, err := modfile.Parse("go.mod", data, nil)
26
- if err != nil {
27
- return nil, err
28
- }
29
-
30
- for _, dep := range args.Dependencies {
31
- f.AddRequire(dep.Name, dep.Version)
32
- }
33
-
34
- for _, r := range f.Require {
35
- for _, dep := range args.Dependencies {
36
- if r.Mod.Path == dep.Name {
37
- setIndirect(r.Syntax, dep.Indirect)
38
- }
39
- }
40
- }
41
-
42
- f.SortBlocks()
43
- f.Cleanup()
44
-
45
- newModFile, _ := f.Format()
46
-
47
- return string(newModFile), nil
48
- }
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dependabot/file_fetchers/base"
4
-
5
- module Dependabot
6
- module FileFetchers
7
- module Go
8
- class Modules < Dependabot::FileFetchers::Base
9
- def self.required_files_in?(filenames)
10
- filenames.include?("go.mod")
11
- end
12
-
13
- def self.required_files_message
14
- "Repo must contain a go.mod."
15
- end
16
-
17
- private
18
-
19
- def fetch_files
20
- unless go_mod
21
- raise(
22
- Dependabot::DependencyFileNotFound,
23
- File.join(directory, "go.mod")
24
- )
25
- end
26
-
27
- fetched_files = [go_mod]
28
-
29
- # Fetch the (optional) go.sum
30
- fetched_files << go_sum if go_sum
31
-
32
- # Fetch the main.go file if present, as this will later identify
33
- # this repo as an app.
34
- fetched_files << main if main
35
-
36
- fetched_files
37
- end
38
-
39
- def go_mod
40
- @go_mod ||= fetch_file_if_present("go.mod")
41
- end
42
-
43
- def go_sum
44
- @go_sum ||= fetch_file_if_present("go.sum")
45
- end
46
-
47
- def main
48
- return @main if @main
49
-
50
- go_files = repo_contents.select { |f| f.name.end_with?(".go") }
51
-
52
- go_files.each do |go_file|
53
- file = fetch_file_from_host(go_file.name, type: "package_main")
54
- next unless file.content.match?(/\s*package\s+main/)
55
-
56
- return @main = file.tap { |f| f.support_file = true }
57
- end
58
-
59
- nil
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dependabot/file_parsers/base"
4
-
5
- module Dependabot
6
- module FileParsers
7
- module Go
8
- class Modules < Dependabot::FileParsers::Base
9
- require_relative "modules/go_mod_parser"
10
-
11
- def parse
12
- go_mod_dependencies.dependencies
13
- end
14
-
15
- private
16
-
17
- def go_mod_dependencies
18
- @go_mod_dependencies ||=
19
- Modules::GoModParser.
20
- new(dependency_files: dependency_files, credentials: credentials).
21
- dependency_set
22
- end
23
-
24
- def go_mod
25
- @go_mod ||= get_original_file("go.mod")
26
- end
27
-
28
- def check_required_files
29
- raise "No go.mod!" unless go_mod
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,134 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "open3"
4
- require "dependabot/dependency"
5
- require "dependabot/file_parsers/base/dependency_set"
6
- require "dependabot/file_parsers/go/modules"
7
- require "dependabot/utils/go/path_converter"
8
- require "dependabot/errors"
9
-
10
- module Dependabot
11
- module FileParsers
12
- module Go
13
- class Modules
14
- class GoModParser
15
- GIT_VERSION_REGEX = /^v\d+\.\d+\.\d+-.*-(?<sha>[0-9a-f]{12})$/.freeze
16
-
17
- def initialize(dependency_files:, credentials:)
18
- @dependency_files = dependency_files
19
- @credentials = credentials
20
- end
21
-
22
- def dependency_set
23
- dependencies = Dependabot::FileParsers::Base::DependencySet.new
24
-
25
- i = 0
26
- chunks = module_info(go_mod).lines.
27
- group_by { |line| line == "{\n" ? i += 1 : i }
28
- deps = chunks.values.map { |chunk| JSON.parse(chunk.join) }
29
-
30
- deps.each do |dep|
31
- # The project itself appears in this list as "Main"
32
- next if dep["Main"]
33
-
34
- dependency = dependency_from_details(dep)
35
- dependencies << dependency if dependency
36
- end
37
-
38
- dependencies
39
- end
40
-
41
- private
42
-
43
- attr_reader :dependency_files, :credentials
44
-
45
- def dependency_from_details(details)
46
- source =
47
- if rev_identifier?(details) then git_source(details)
48
- else { type: "default", source: details["Path"] }
49
- end
50
-
51
- version = details["Version"]&.sub(/^v?/, "")
52
-
53
- reqs = [{
54
- requirement: rev_identifier?(details) ? nil : details["Version"],
55
- file: go_mod.name,
56
- source: source,
57
- groups: []
58
- }]
59
-
60
- Dependency.new(
61
- name: details["Path"],
62
- version: version,
63
- requirements: details["Indirect"] ? [] : reqs,
64
- package_manager: "dep"
65
- )
66
- end
67
-
68
- def module_info(go_mod)
69
- @module_info ||=
70
- SharedHelpers.in_a_temporary_directory do |path|
71
- SharedHelpers.with_git_configured(credentials: credentials) do
72
- File.write("go.mod", go_mod.content)
73
-
74
- command = "GO111MODULE=on go mod edit -print > /dev/null"
75
- command += " && GO111MODULE=on go list -m -json all"
76
- stdout, stderr, status = Open3.capture3(command)
77
- handle_parser_error(path, stderr) unless status.success?
78
- stdout
79
- end
80
- end
81
- end
82
-
83
- def handle_parser_error(path, stderr)
84
- case stderr
85
- when /go: .*: unknown revision/
86
- line = stderr.lines.grep(/unknown revision/).first
87
- raise Dependabot::DependencyFileNotResolvable, line.strip
88
- when /go: .*: unrecognized import path/
89
- line = stderr.lines.grep(/unrecognized import/).first
90
- raise Dependabot::DependencyFileNotResolvable, line.strip
91
- when /go: errors parsing go.mod/
92
- msg = stderr.gsub(path.to_s, "").strip
93
- raise Dependabot::DependencyFileNotParseable.new(go_mod.path, msg)
94
- else
95
- msg = stderr.gsub(path.to_s, "").strip
96
- raise Dependabot::DependencyFileNotParseable.new(go_mod.path, msg)
97
- end
98
- end
99
-
100
- def rev_identifier?(dep)
101
- dep["Version"]&.match?(GIT_VERSION_REGEX)
102
- end
103
-
104
- def git_source(dep)
105
- url = Utils::Go::PathConverter.git_url_for_path(dep["Path"])
106
-
107
- # Currently, we have no way of knowing whether the commit tagged
108
- # is being used because a branch is being followed or because a
109
- # particular ref is in use. We *assume* that a particular ref is in
110
- # use (which means we'll only propose updates when its included in
111
- # a release)
112
- {
113
- type: "git",
114
- url: url || dep["Path"],
115
- ref: git_revision(dep),
116
- branch: nil
117
- }
118
- end
119
-
120
- def git_revision(dep)
121
- raw_version = dep.fetch("Version")
122
- return raw_version unless raw_version.match?(GIT_VERSION_REGEX)
123
-
124
- raw_version.match(GIT_VERSION_REGEX).named_captures.fetch("sha")
125
- end
126
-
127
- def go_mod
128
- @go_mod ||= dependency_files.find { |f| f.name == "go.mod" }
129
- end
130
- end
131
- end
132
- end
133
- end
134
- end
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dependabot/shared_helpers"
4
- require "dependabot/file_updaters/base"
5
-
6
- module Dependabot
7
- module FileUpdaters
8
- module Go
9
- class Modules < Dependabot::FileUpdaters::Base
10
- require_relative "modules/go_mod_updater"
11
-
12
- def self.updated_files_regex
13
- [
14
- /^go\.mod$/,
15
- /^go\.sum$/
16
- ]
17
- end
18
-
19
- def updated_dependency_files
20
- updated_files = []
21
-
22
- if go_mod && file_changed?(go_mod)
23
- updated_files <<
24
- updated_file(
25
- file: go_mod,
26
- content: file_updater.updated_go_mod_content
27
- )
28
-
29
- if go_sum && go_sum.content != file_updater.updated_go_sum_content
30
- updated_files <<
31
- updated_file(
32
- file: go_sum,
33
- content: file_updater.updated_go_sum_content
34
- )
35
- end
36
- end
37
-
38
- raise "No files changed!" if updated_files.none?
39
-
40
- updated_files
41
- end
42
-
43
- private
44
-
45
- def check_required_files
46
- return if go_mod
47
-
48
- raise "No go.mod!"
49
- end
50
-
51
- def go_mod
52
- @go_mod ||= get_original_file("go.mod")
53
- end
54
-
55
- def go_sum
56
- @go_sum ||= get_original_file("go.sum")
57
- end
58
-
59
- def file_updater
60
- @file_updater ||=
61
- Modules::GoModUpdater.new(
62
- dependencies: dependencies,
63
- go_mod: go_mod,
64
- go_sum: go_sum,
65
- credentials: credentials
66
- )
67
- end
68
- end
69
- end
70
- end
71
- end
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dependabot/file_updaters/go/modules"
4
- require "dependabot/utils/go/shared_helper"
5
-
6
- module Dependabot
7
- module FileUpdaters
8
- module Go
9
- class Modules
10
- class GoModUpdater
11
- def initialize(dependencies:, go_mod:, go_sum:, credentials:)
12
- @dependencies = dependencies
13
- @go_mod = go_mod
14
- @go_sum = go_sum
15
- @credentials = credentials
16
- end
17
-
18
- def updated_go_mod_content
19
- @updated_go_mod_content ||=
20
- SharedHelpers.in_a_temporary_directory do
21
- SharedHelpers.with_git_configured(credentials: credentials) do
22
- File.write("go.mod", go_mod.content)
23
-
24
- deps = dependencies.map do |dep|
25
- {
26
- name: dep.name,
27
- version: "v" + dep.version.sub(/^v/i, ""),
28
- indirect: dep.requirements.empty?
29
- }
30
- end
31
-
32
- SharedHelpers.run_helper_subprocess(
33
- command: Utils::Go::SharedHelper.path,
34
- function: "updateDependencyFile",
35
- args: { dependencies: deps }
36
- )
37
- end
38
- end
39
- end
40
-
41
- def updated_go_sum_content
42
- return nil unless go_sum
43
-
44
- # This needs to be run separately so we don't nest subprocess calls
45
- updated_go_mod_content
46
-
47
- @updated_go_sum_content ||=
48
- SharedHelpers.in_a_temporary_directory do
49
- SharedHelpers.with_git_configured(credentials: credentials) do
50
- File.write("go.mod", updated_go_mod_content)
51
- File.write("go.sum", go_sum.content)
52
- File.write("main.go", dummy_main_go)
53
-
54
- `GO111MODULE=on go get -d`
55
- unless $CHILD_STATUS.success?
56
- raise Dependabot::DependencyFileNotParseable, go_sum.path
57
- end
58
-
59
- File.read("go.sum")
60
- end
61
- end
62
- end
63
-
64
- private
65
-
66
- def dummy_main_go
67
- lines = ["package main", "import ("]
68
- dependencies.each do |dep|
69
- lines << "_ \"#{dep.name}\""
70
- end
71
- lines << ")"
72
- lines << "func main() {}"
73
- lines.join("\n")
74
- end
75
-
76
- attr_reader :dependencies, :go_mod, :go_sum, :credentials
77
- end
78
- end
79
- end
80
- end
81
- end
@@ -1,112 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "toml-rb"
4
- require "dependabot/update_checkers/base"
5
- require "dependabot/shared_helpers"
6
- require "dependabot/errors"
7
- require "dependabot/utils/go/version"
8
- require "dependabot/utils/go/shared_helper"
9
-
10
- module Dependabot
11
- module UpdateCheckers
12
- module Go
13
- class Modules < Dependabot::UpdateCheckers::Base
14
- def latest_resolvable_version
15
- @latest_resolvable_version ||=
16
- version_class.new(find_latest_resolvable_version.gsub(/^v/, ""))
17
- end
18
-
19
- # This is currently used to short-circuit latest_resolvable_version,
20
- # with the assumption that it'll be quicker than checking
21
- # resolvability. As this is quite quick in Go anyway, we just alias.
22
- def latest_version
23
- latest_resolvable_version
24
- end
25
-
26
- def latest_resolvable_version_with_no_unlock
27
- # Irrelevant, since Go modules uses a single dependency file
28
- nil
29
- end
30
-
31
- def updated_requirements
32
- dependency.requirements.map do |req|
33
- req.merge(requirement: latest_version)
34
- end
35
- end
36
-
37
- private
38
-
39
- def find_latest_resolvable_version
40
- SharedHelpers.in_a_temporary_directory do
41
- SharedHelpers.with_git_configured(credentials: credentials) do
42
- File.write("go.mod", go_mod.content)
43
-
44
- SharedHelpers.run_helper_subprocess(
45
- command: "GO111MODULE=on #{Utils::Go::SharedHelper.path}",
46
- function: "getUpdatedVersion",
47
- args: {
48
- dependency: {
49
- name: dependency.name,
50
- version: "v" + dependency.version,
51
- indirect: dependency.requirements.empty?
52
- }
53
- }
54
- )
55
- end
56
- end
57
- end
58
-
59
- def latest_version_resolvable_with_full_unlock?
60
- # Full unlock checks aren't implemented for Go (yet)
61
- false
62
- end
63
-
64
- def updated_dependencies_after_full_unlock
65
- raise NotImplementedError
66
- end
67
-
68
- # Override the base class's check for whether this is a git dependency,
69
- # since not all dep git dependencies have a SHA version (sometimes their
70
- # version is the tag)
71
- def existing_version_is_sha?
72
- git_dependency?
73
- end
74
-
75
- def library?
76
- dependency_files.none? { |f| f.type == "package_main" }
77
- end
78
-
79
- def version_from_tag(tag)
80
- # To compare with the current version we either use the commit SHA
81
- # (if that's what the parser picked up) of the tag name.
82
- if dependency.version&.match?(/^[0-9a-f]{40}$/)
83
- return tag&.fetch(:commit_sha)
84
- end
85
-
86
- tag&.fetch(:tag)
87
- end
88
-
89
- def git_dependency?
90
- git_commit_checker.git_dependency?
91
- end
92
-
93
- def default_source
94
- { type: "default", source: dependency.name }
95
- end
96
-
97
- def go_mod
98
- @go_mod ||= dependency_files.find { |f| f.name == "go.mod" }
99
- end
100
-
101
- def git_commit_checker
102
- @git_commit_checker ||=
103
- GitCommitChecker.new(
104
- dependency: dependency,
105
- credentials: credentials,
106
- ignored_versions: ignored_versions
107
- )
108
- end
109
- end
110
- end
111
- end
112
- end