licensed 1.5.1 → 1.5.2

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
  SHA1:
3
- metadata.gz: 1985113209d911393981eb8f69dfaae7f5924593
4
- data.tar.gz: e7ba321109bae085d9345e41c599370e24547fb2
3
+ metadata.gz: 87be3d9de274a4f66698f8880f5c858c2733c35f
4
+ data.tar.gz: eb8125c0b348a042e814bf72732e1fbdce0e4426
5
5
  SHA512:
6
- metadata.gz: a5046d1ebce6f3b386d94b8e0606e3ad1b7d93eba73bc94d37e2fa933129f649ea3efca557fe828386aedda310e40d796b32ddac9aa1f2dbaa95bc0c0ca8db1d
7
- data.tar.gz: ec5ccf83bb05ba32038a7a45092f236be2835e1947959c3fcd8c67c8f0d25b92d1e7ff82cfe927204af3d1c5fe2c19ca1fb9afd6d680e058d4bc3530ec4fdbb4
6
+ metadata.gz: 53376c057796cd662142d49b5122101d70d6ffc759f945d2da2d26ef0c72f403e5b07a92c8d367aecfcd1f0efa4706a893035d6f9671cb3bddaa948707b05b1b
7
+ data.tar.gz: ceff661d0fdfda3bfb0920cf246cce9220a13c7675e1547b8be6c3ae8d9f29bb2e78e5541e56c3af3d388a16b5944adb11324e6191afb19d9c9cf95c8aa7086f
data/.gitignore CHANGED
@@ -18,6 +18,7 @@ test/fixtures/npm/package-lock.json
18
18
  test/fixtures/go/src/*
19
19
  test/fixtures/go/pkg
20
20
  !test/fixtures/go/src/test
21
+ !test/fixtures/go/src/modules_test
21
22
  test/fixtures/cabal/*
22
23
  !test/fixtures/cabal/app*
23
24
  test/fixtures/git_submodule/*
@@ -13,14 +13,20 @@ matrix:
13
13
  go: "1.7.x"
14
14
  before_script: ./script/source-setup/go
15
15
  script: ./script/test go
16
- env: NAME="go"
16
+ env: NAME="go 1.7.x"
17
17
 
18
18
  # go 1.10 tests
19
19
  - language: go
20
20
  go: "1.10.x"
21
21
  before_script: ./script/source-setup/go
22
22
  script: ./script/test go
23
- env: NAME="go"
23
+ env: NAME="go 1.10.x"
24
+
25
+ - language: go
26
+ go: "1.11.1"
27
+ before_script: ./script/source-setup/go
28
+ script: ./script/test go
29
+ env: NAME="go 1.11.1"
24
30
 
25
31
  # dep tests
26
32
  - language: go
@@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## 1.5.2 - 2018-12-27
10
+
11
+ ### Changes
12
+ - Go source added support for Go modules and Golang 1.11+ (https://github.com/github/licensed/pull/113)
13
+
14
+ ### Fixed
15
+ - Licensed will have a non-zero exit code when commands fail (:tada: @parkr https://github.com/github/licensed/pull/111)
16
+
9
17
  ## 1.5.1 - 2018-10-30
10
18
 
11
19
  ### Fixed
@@ -104,4 +112,4 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
104
112
 
105
113
  Initial release :tada:
106
114
 
107
- [Unreleased]: https://github.com/github/licensed/compare/1.5.1...HEAD
115
+ [Unreleased]: https://github.com/github/licensed/compare/1.5.2...HEAD
data/README.md CHANGED
@@ -91,16 +91,16 @@ See the [configuration file documentation](./docs/configuration.md) for more det
91
91
 
92
92
  ### Sources
93
93
 
94
- Dependencies will be automatically detected for
95
- 1. [Bower](./docs/sources/bower.md)
94
+ Dependencies will be automatically detected for all of the following sources by default.
95
+ 1. [Bower (bower)](./docs/sources/bower.md)
96
96
  2. [Bundler (rubygem)](./docs/sources/bundler.md)
97
- 3. [Cabal](./docs/sources/cabal.md)
98
- 4. [Go](./docs/sources/go.md)
99
- 5. [Go Dep](./docs/sources/dep.md)
100
- 6. [Manifest lists](./docs/sources/manifests.md)
101
- 7. [NPM](./docs/sources/npm.md)
102
- 8. [Pip](./docs/sources/pip.md)
103
- 9. [Git Submodules](./docs/sources/git_submodule.md)
97
+ 3. [Cabal (cabal)](./docs/sources/cabal.md)
98
+ 4. [Go (go)](./docs/sources/go.md)
99
+ 5. [Go Dep (dep)](./docs/sources/dep.md)
100
+ 6. [Manifest lists (manifests)](./docs/sources/manifests.md)
101
+ 7. [NPM (npm)](./docs/sources/npm.md)
102
+ 8. [Pip (pip)](./docs/sources/pip.md)
103
+ 9. [Git Submodules (git_submodule)](./docs/sources/git_submodule.md)
104
104
 
105
105
  You can disable any of them in the configuration file:
106
106
 
@@ -16,6 +16,7 @@ _note_: `<your_venv_dir>` path should be relative to the repository root or can
16
16
  #### virtual_env_dir (Required)
17
17
 
18
18
  The `pip` command will be sourced from this directory.
19
+ You have to add this setting to your licensed configuration file.
19
20
  An example usage of this might look like:
20
21
  ```yaml
21
22
  python:
@@ -37,6 +37,11 @@ module Licensed
37
37
  run Licensed::Command::Version.new
38
38
  end
39
39
 
40
+ # If an error occurs (e.g. a missing command or argument), exit 1.
41
+ def self.exit_on_failure?
42
+ true
43
+ end
44
+
40
45
  private
41
46
 
42
47
  # Returns a configuration object for the CLI command
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  require "json"
3
- require "English"
4
3
  require "pathname"
5
4
 
6
5
  module Licensed
@@ -20,15 +19,8 @@ module Licensed
20
19
 
21
20
  def dependencies
22
21
  @dependencies ||= with_configured_gopath do
23
- packages.map do |package_name|
24
- package = package_info(package_name)
25
- import_path = non_vendored_import_path(package_name)
26
-
27
- if package.empty?
28
- next if @config.ignored?("type" => Go.type, "name" => package_name)
29
- raise "couldn't find package for #{import_path}"
30
- end
31
-
22
+ packages.map do |package|
23
+ import_path = non_vendored_import_path(package["ImportPath"])
32
24
  package_dir = package["Dir"]
33
25
  Dependency.new(package_dir, {
34
26
  "type" => Go.type,
@@ -36,19 +28,88 @@ module Licensed
36
28
  "summary" => package["Doc"],
37
29
  "homepage" => homepage(import_path),
38
30
  "search_root" => search_root(package_dir),
39
- "version" => package_version(package_dir)
31
+ "version" => package_version(package)
40
32
  })
41
- end.compact
33
+ end
34
+ end
35
+ end
36
+
37
+ # Returns an array of dependency package import paths
38
+ def packages
39
+ dependency_packages = if go_version < Gem::Version.new("1.11.0")
40
+ root_package_deps
41
+ else
42
+ go_list_deps
43
+ end
44
+
45
+ # don't include go std packages
46
+ # don't include packages under the root project that aren't vendored
47
+ dependency_packages
48
+ .reject { |pkg| go_std_package?(pkg) }
49
+ .reject { |pkg| local_package?(pkg) }
50
+ end
51
+
52
+ # Returns non-ignored packages found from the root packages "Deps" property
53
+ def root_package_deps
54
+ # check for ignored packages to avoid raising errors calling `go list`
55
+ # when ignored package is not found
56
+ Array(root_package["Deps"])
57
+ .reject { |name| @config.ignored?("type" => Go.type, "name" => name) }
58
+ .map { |name| package_info(name) }
59
+ end
60
+
61
+ # Returns the list of dependencies as returned by "go list -json -deps"
62
+ # available in go 1.11
63
+ def go_list_deps
64
+ @go_list_deps ||= begin
65
+ deps = package_info_command("-deps")
66
+ # the CLI command returns packages in a pretty-printed JSON format but
67
+ # not separated by commas. this gsub adds commas after all non-indented
68
+ # "}" that close root level objects.
69
+ # (?!\z) uses negative lookahead to not match the final "}"
70
+ deps.gsub!(/^}(?!\z)$/m, "},")
71
+ JSON.parse("[#{deps}]")
72
+ .reject { |pkg| @config.ignored?("type" => Go.type, "name" => pkg["ImportPath"]) }
73
+ .each { |pkg| raise pkg.dig("Error", "Err") if pkg["Error"] }
42
74
  end
43
75
  end
44
76
 
45
- # Returns the most recent git SHA for a package, or nil if SHA is
46
- # not available
77
+ # Returns whether the given package import path belongs to the
78
+ # go std library or not
47
79
  #
48
- # package_directory - package location
49
- def package_version(package_directory)
80
+ # package - package to check as part of the go standard library
81
+ def go_std_package?(package)
82
+ return false unless package
83
+ return true if package["Standard"]
84
+
85
+ import_path = package["ImportPath"]
86
+ return false unless import_path
87
+
88
+ # modify the import path to look like the import path `go list` returns for vendored std packages
89
+ std_vendor_import_path = import_path.sub(%r{^#{root_package["ImportPath"]}/vendor/golang.org}, "vendor/golang_org")
90
+ go_std_packages.include?(import_path) || go_std_packages.include?(std_vendor_import_path)
91
+ end
92
+
93
+ # Returns whether the package is local to the current project
94
+ def local_package?(package)
95
+ return false unless package && package["ImportPath"]
96
+ import_path = package["ImportPath"]
97
+ import_path.start_with?(root_package["ImportPath"]) && !vendored_path?(import_path)
98
+ end
99
+
100
+ # Returns the version for a given package
101
+ #
102
+ # package - package to get version of
103
+ def package_version(package)
104
+ # use module version if it exists
105
+ go_mod = package["Module"]
106
+ return go_mod["Version"] if go_mod
107
+
108
+ package_directory = package["Dir"]
50
109
  return unless package_directory
51
110
 
111
+ # find most recent git SHA for a package, or nil if SHA is
112
+ # not available
52
113
  Dir.chdir package_directory do
53
114
  Licensed::Git.version(".")
54
115
  end
@@ -64,25 +125,6 @@ module Licensed
64
125
  "https://#{import_path}"
65
126
  end
66
127
 
67
- # Returns an array of dependency package import paths
68
- def packages
69
- return [] unless root_package["Deps"]
70
-
71
- # don't include go std packages
72
- # don't include packages under the root project that aren't vendored
73
- root_package["Deps"]
74
- .uniq
75
- .select { |d| !go_std_packages.include?(d) }
76
- .select { |d| !d.start_with?(root_package["ImportPath"]) || vendored_path?(d) }
77
- .select do |d|
78
- # this removes the packages listed in `go list std` as "vendor/golang_org/*" but are vendored
79
- # as "vendor/golang.org/*"
80
- go_std_packages.none? do |std_pkg|
81
- std_pkg.sub(%r{^vendor/golang_org/}, "#{root_package["ImportPath"]}/vendor/golang.org/") == d
82
- end
83
- end
84
- end
85
-
86
128
  # Returns the root directory to search for a package license
87
129
  #
88
130
  # package - package object obtained from package_info
@@ -112,31 +154,28 @@ module Licensed
112
154
  import_path.split("vendor/")[1]
113
155
  end
114
156
 
115
- # Returns package information, or {} if package isn't found
157
+ # Returns a hash of information about the package with a given import path
116
158
  #
117
- # package - Go package import path
118
- def package_info(package = nil)
119
- info = package_info_command(package)
120
- return {} if info.empty?
121
- JSON.parse(info)
159
+ # import_path - Go package import path
160
+ def package_info(import_path)
161
+ JSON.parse(package_info_command(import_path))
122
162
  end
123
163
 
124
164
  # Returns package information as a JSON string
125
165
  #
126
- # package - Go package import path
127
- def package_info_command(package)
128
- package ||= ""
129
- Licensed::Shell.execute("go", "list", "-json", package, allow_failure: true)
166
+ # args - additional arguments to `go list`, e.g. Go package import path
167
+ def package_info_command(*args)
168
+ Licensed::Shell.execute("go", "list", "-json", *Array(args)).strip
130
169
  end
131
170
 
132
171
  # Returns the info for the package under test
133
172
  def root_package
134
- @root_package ||= package_info
173
+ @root_package ||= package_info(".")
135
174
  end
136
175
 
137
176
  # Returns whether go source is found
138
177
  def go_source?
139
- @go_source ||= with_configured_gopath { Licensed::Shell.success?("go", "doc") }
178
+ with_configured_gopath { Licensed::Shell.success?("go", "doc") }
140
179
  end
141
180
 
142
181
  # Returns a list of go standard packages
@@ -162,6 +201,15 @@ module Licensed
162
201
  end
163
202
  end
164
203
 
204
+ # Returns the current version of go available, as a Gem::Version
205
+ def go_version
206
+ @go_version ||= begin
207
+ full_version = Licensed::Shell.execute("go", "version").strip
208
+ version_string = full_version.gsub(%r{.*go(\d+\.\d+(\.\d+)?).*}, "\\1")
209
+ Gem::Version.new(version_string)
210
+ end
211
+ end
212
+
165
213
  private
166
214
 
167
215
  # Execute a block with ENV["GOPATH"] set to the value of #gopath.
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Licensed
3
- VERSION = "1.5.1".freeze
3
+ VERSION = "1.5.2".freeze
4
4
  end
@@ -12,8 +12,20 @@ export GOPATH="$BASE_PATH/test/fixtures/go"
12
12
  cd $BASE_PATH/test/fixtures/go
13
13
 
14
14
  if [ "$1" == "-f" ]; then
15
- find . -not -regex "\.*" -and -not -path "*/src/test*" -and -not -path "*/src" -print0 | xargs -0 rm -rf
15
+ find . -not -regex "\.*" \
16
+ -and -not -path "*/src/test*" \
17
+ -and -not -path "*/src/modules_test*" \
18
+ -and -not -path "*/pkg/mod*" \
19
+ -and -not -path "*/pkg" \
20
+ -and -not -path "*/src" \
21
+ -print0 | xargs -0 rm -rf
22
+
23
+ if go help mod >/dev/null; then
24
+ go clean -modcache
25
+ fi
16
26
  fi
17
27
 
18
- cd src/test
19
- go get
28
+ (cd src/test && go get)
29
+ if go help mod >/dev/null; then
30
+ (cd src/modules_test && GO111MODULE=on go mod download)
31
+ fi
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: licensed
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-30 00:00:00.000000000 Z
11
+ date: 2018-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: licensee