licensed 3.2.2 → 3.4.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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +52 -1
  3. data/Rakefile +5 -3
  4. data/docs/adding_a_new_source.md +32 -3
  5. data/docs/commands/README.md +1 -1
  6. data/docs/sources/cargo.md +19 -0
  7. data/docs/sources/yarn.md +5 -4
  8. data/lib/licensed/commands/cache.rb +4 -2
  9. data/lib/licensed/commands/command.rb +5 -2
  10. data/lib/licensed/reporters/status_reporter.rb +1 -1
  11. data/lib/licensed/sources/bundler/missing_specification.rb +10 -7
  12. data/lib/licensed/sources/cargo.rb +70 -0
  13. data/lib/licensed/sources/manifest.rb +17 -22
  14. data/lib/licensed/sources/npm.rb +17 -7
  15. data/lib/licensed/sources/nuget.rb +2 -2
  16. data/lib/licensed/sources/source.rb +22 -3
  17. data/lib/licensed/sources/yarn/berry.rb +79 -0
  18. data/lib/licensed/sources/yarn/v1.rb +146 -0
  19. data/lib/licensed/sources/yarn.rb +15 -130
  20. data/lib/licensed/sources.rb +1 -0
  21. data/lib/licensed/version.rb +1 -1
  22. data/licensed.gemspec +1 -1
  23. metadata +6 -32
  24. data/.github/dependabot.yml +0 -19
  25. data/.github/workflows/release.yml +0 -213
  26. data/.github/workflows/test.yml +0 -528
  27. data/.gitignore +0 -57
  28. data/.licensed.yml +0 -7
  29. data/.rubocop.yml +0 -8
  30. data/.ruby-version +0 -1
  31. data/docker/Dockerfile.build-linux +0 -15
  32. data/script/bootstrap +0 -6
  33. data/script/cibuild +0 -7
  34. data/script/console +0 -15
  35. data/script/package +0 -20
  36. data/script/packages/build +0 -95
  37. data/script/packages/linux +0 -57
  38. data/script/packages/mac +0 -41
  39. data/script/setup +0 -5
  40. data/script/source-setup/bower +0 -17
  41. data/script/source-setup/bundler +0 -20
  42. data/script/source-setup/cabal +0 -19
  43. data/script/source-setup/composer +0 -38
  44. data/script/source-setup/git_submodule +0 -39
  45. data/script/source-setup/go +0 -31
  46. data/script/source-setup/mix +0 -19
  47. data/script/source-setup/npm +0 -34
  48. data/script/source-setup/nuget +0 -17
  49. data/script/source-setup/pip +0 -29
  50. data/script/source-setup/pipenv +0 -21
  51. data/script/source-setup/swift +0 -22
  52. data/script/source-setup/yarn +0 -17
  53. data/script/test +0 -16
@@ -0,0 +1,146 @@
1
+ # frozen_string_literal: true
2
+ require "json"
3
+
4
+ module Licensed
5
+ module Sources
6
+ class Yarn::V1 < Source
7
+ include Licensed::Sources::Yarn
8
+
9
+ # `yarn licenses list --json` returns data in a table format with header
10
+ # ordering specified in the output. Look for these specific headers and use
11
+ # their indices to get data from the table body
12
+ YARN_NAME_HEAD = "Name".freeze
13
+ YARN_VERSION_HEAD = "Version".freeze
14
+ YARN_URL_HEAD = "URL".freeze
15
+
16
+ def self.version_requirement
17
+ Gem::Requirement.new("< 2.0")
18
+ end
19
+
20
+ def enumerate_dependencies
21
+ packages.map do |name, package|
22
+ Dependency.new(
23
+ name: name,
24
+ version: package["version"],
25
+ path: package["path"],
26
+ metadata: {
27
+ "type" => self.class.type,
28
+ "name" => package["name"],
29
+ "homepage" => dependency_urls[package["id"]]
30
+ }
31
+ )
32
+ end
33
+ end
34
+
35
+ # Finds packages that the current project relies on
36
+ def packages
37
+ return [] if yarn_package_tree.nil?
38
+ all_dependencies = {}
39
+ recursive_dependencies(yarn_package_tree).each do |name, results|
40
+ results.uniq! { |package| package["version"] }
41
+ if results.size == 1
42
+ # if there is only one package for a name, reference it by name
43
+ all_dependencies[name] = results[0]
44
+ else
45
+ # if there is more than one package for a name, reference each by
46
+ # "<name>-<version>"
47
+ results.each do |package|
48
+ all_dependencies["#{name}-#{package["version"]}"] = package
49
+ end
50
+ end
51
+ end
52
+
53
+ all_dependencies
54
+ end
55
+
56
+ # Recursively parse dependency JSON data. Returns a hash mapping the
57
+ # package name to it's metadata
58
+ def recursive_dependencies(dependencies, result = {})
59
+ dependencies.each do |dependency|
60
+ # "shadow" indicate a dependency requirement only, not a
61
+ # resolved package identifier
62
+ next if dependency["shadow"]
63
+ name, _, version = dependency["name"].rpartition("@")
64
+
65
+ (result[name] ||= []) << {
66
+ "id" => dependency["name"],
67
+ "name" => name,
68
+ "version" => version,
69
+ "path" => dependency_paths[dependency["name"]]
70
+ }
71
+ recursive_dependencies(dependency["children"], result)
72
+ end
73
+ result
74
+ end
75
+
76
+ # Returns a hash that maps all dependency names to their location on disk
77
+ # by parsing every package.json file under node_modules.
78
+ def dependency_paths
79
+ @dependency_paths ||= Dir.glob(config.pwd.join("node_modules/**/package.json")).each_with_object({}) do |file, hsh|
80
+ dirname = File.dirname(file)
81
+ json = JSON.parse(File.read(file))
82
+ hsh["#{json["name"]}@#{json["version"]}"] = dirname
83
+ end
84
+ end
85
+
86
+ # Finds and returns the yarn package tree listing from `yarn list` output
87
+ def yarn_package_tree
88
+ return @yarn_package_tree if defined?(@yarn_package_tree)
89
+ @yarn_package_tree = begin
90
+ # parse all lines of output to json and find one that is "type": "tree"
91
+ tree = yarn_list_command.lines
92
+ .map(&:strip)
93
+ .map(&JSON.method(:parse))
94
+ .find { |json| json["type"] == "tree" }
95
+ tree&.dig("data", "trees")
96
+ end
97
+ end
98
+
99
+ # Returns a mapping of unique dependency identifiers to urls
100
+ def dependency_urls
101
+ @dependency_urls ||= begin
102
+ table = yarn_licenses_command.lines
103
+ .map(&:strip)
104
+ .map(&JSON.method(:parse))
105
+ .find { |json| json["type"] == "table" }
106
+ return {} if table.nil?
107
+
108
+ head = table.dig("data", "head")
109
+ return {} if head.nil?
110
+
111
+ name_index = head.index YARN_NAME_HEAD
112
+ version_index = head.index YARN_VERSION_HEAD
113
+ url_index = head.index YARN_URL_HEAD
114
+ return {} if name_index.nil? || version_index.nil? || url_index.nil?
115
+
116
+ body = table.dig("data", "body")
117
+ return {} if body.nil?
118
+
119
+ body.each_with_object({}) do |row, hsh|
120
+ id = "#{row[name_index]}@#{row[version_index]}"
121
+ hsh[id] = row[url_index]
122
+ end
123
+ end
124
+ end
125
+
126
+ # Returns the output from running `yarn list` to get project dependencies
127
+ def yarn_list_command
128
+ args = %w(--json -s --no-progress)
129
+ args << "--production" unless include_non_production?
130
+ Licensed::Shell.execute("yarn", "list", *args, allow_failure: true)
131
+ end
132
+
133
+ # Returns the output from running `yarn licenses list` to get project urls
134
+ def yarn_licenses_command
135
+ args = %w(--json -s --no-progress)
136
+ args << "--production" unless include_non_production?
137
+ Licensed::Shell.execute("yarn", "licenses", "list", *args, allow_failure: true)
138
+ end
139
+
140
+ # Returns whether to include non production dependencies based on the licensed configuration settings
141
+ def include_non_production?
142
+ config.dig("yarn", "production_only") == false
143
+ end
144
+ end
145
+ end
146
+ end
@@ -1,146 +1,31 @@
1
1
  # frozen_string_literal: true
2
- require "json"
3
2
 
4
3
  module Licensed
5
4
  module Sources
6
- class Yarn < Source
7
- # `yarn licenses list --json` returns data in a table format with header
8
- # ordering specified in the output. Look for these specific headers and use
9
- # their indices to get data from the table body
10
- YARN_NAME_HEAD = "Name".freeze
11
- YARN_VERSION_HEAD = "Version".freeze
12
- YARN_URL_HEAD = "URL".freeze
13
-
14
- def enabled?
15
- return unless Licensed::Shell.tool_available?("yarn")
16
-
17
- config.pwd.join("package.json").exist? && config.pwd.join("yarn.lock").exist?
18
- end
19
-
20
- def enumerate_dependencies
21
- packages.map do |name, package|
22
- Dependency.new(
23
- name: name,
24
- version: package["version"],
25
- path: package["path"],
26
- metadata: {
27
- "type" => Yarn.type,
28
- "name" => package["name"],
29
- "homepage" => dependency_urls[package["id"]]
30
- }
31
- )
32
- end
33
- end
34
-
35
- # Finds packages that the current project relies on
36
- def packages
37
- return [] if yarn_package_tree.nil?
38
- all_dependencies = {}
39
- recursive_dependencies(yarn_package_tree).each do |name, results|
40
- results.uniq! { |package| package["version"] }
41
- if results.size == 1
42
- # if there is only one package for a name, reference it by name
43
- all_dependencies[name] = results[0]
44
- else
45
- # if there is more than one package for a name, reference each by
46
- # "<name>-<version>"
47
- results.each do |package|
48
- all_dependencies["#{name}-#{package["version"]}"] = package
49
- end
50
- end
51
- end
52
-
53
- all_dependencies
54
- end
55
-
56
- # Recursively parse dependency JSON data. Returns a hash mapping the
57
- # package name to it's metadata
58
- def recursive_dependencies(dependencies, result = {})
59
- dependencies.each do |dependency|
60
- # "shadow" indicate a dependency requirement only, not a
61
- # resolved package identifier
62
- next if dependency["shadow"]
63
- name, _, version = dependency["name"].rpartition("@")
64
-
65
- (result[name] ||= []) << {
66
- "id" => dependency["name"],
67
- "name" => name,
68
- "version" => version,
69
- "path" => dependency_paths[dependency["name"]]
70
- }
71
- recursive_dependencies(dependency["children"], result)
5
+ module Yarn
6
+ module ClassMethods
7
+ def type
8
+ "yarn"
72
9
  end
73
- result
74
10
  end
75
11
 
76
- # Returns a hash that maps all dependency names to their location on disk
77
- # by parsing every package.json file under node_modules.
78
- def dependency_paths
79
- @dependency_paths ||= Dir.glob(config.pwd.join("node_modules/**/package.json")).each_with_object({}) do |file, hsh|
80
- dirname = File.dirname(file)
81
- json = JSON.parse(File.read(file))
82
- hsh["#{json["name"]}@#{json["version"]}"] = dirname
83
- end
12
+ def self.included(klass)
13
+ klass.extend ClassMethods
84
14
  end
85
15
 
86
- # Finds and returns the yarn package tree listing from `yarn list` output
87
- def yarn_package_tree
88
- return @yarn_package_tree if defined?(@yarn_package_tree)
89
- @yarn_package_tree = begin
90
- # parse all lines of output to json and find one that is "type": "tree"
91
- tree = yarn_list_command.lines
92
- .map(&:strip)
93
- .map(&JSON.method(:parse))
94
- .find { |json| json["type"] == "tree" }
95
- tree&.dig("data", "trees")
96
- end
97
- end
98
-
99
- # Returns a mapping of unique dependency identifiers to urls
100
- def dependency_urls
101
- @dependency_urls ||= begin
102
- table = yarn_licenses_command.lines
103
- .map(&:strip)
104
- .map(&JSON.method(:parse))
105
- .find { |json| json["type"] == "table" }
106
- return [] if table.nil?
107
-
108
- head = table.dig("data", "head")
109
- return [] if head.nil?
110
-
111
- name_index = head.index YARN_NAME_HEAD
112
- version_index = head.index YARN_VERSION_HEAD
113
- url_index = head.index YARN_URL_HEAD
114
- return [] if name_index.nil? || version_index.nil? || url_index.nil?
115
-
116
- body = table.dig("data", "body")
117
- return [] if body.nil?
118
-
119
- body.each_with_object({}) do |row, hsh|
120
- id = "#{row[name_index]}@#{row[version_index]}"
121
- hsh[id] = row[url_index]
122
- end
123
- end
124
- end
125
-
126
- # Returns the output from running `yarn list` to get project dependencies
127
- def yarn_list_command
128
- args = %w(--json -s --no-progress)
129
- args << "--production" unless include_non_production?
130
- Licensed::Shell.execute("yarn", "list", *args, allow_failure: true)
131
- end
16
+ def enabled?
17
+ return unless Licensed::Shell.tool_available?("yarn")
18
+ return unless self.class.version_requirement.satisfied_by?(yarn_version)
132
19
 
133
- # Returns the output from running `yarn licenses list` to get project urls
134
- def yarn_licenses_command
135
- args = %w(--json -s --no-progress)
136
- args << "--production" unless include_non_production?
137
- Licensed::Shell.execute("yarn", "licenses", "list", *args, allow_failure: true)
20
+ config.pwd.join("package.json").exist? && config.pwd.join("yarn.lock").exist?
138
21
  end
139
22
 
140
- # Returns whether to include non production dependencies based on the licensed configuration settings
141
- def include_non_production?
142
- config.dig("yarn", "production_only") == false
23
+ def yarn_version
24
+ Gem::Version.new(Licensed::Shell.execute("yarn", "-v"))
143
25
  end
144
26
  end
145
27
  end
146
28
  end
29
+
30
+ require "licensed/sources/yarn/v1"
31
+ require "licensed/sources/yarn/berry"
@@ -5,6 +5,7 @@ module Licensed
5
5
  require "licensed/sources/bower"
6
6
  require "licensed/sources/bundler"
7
7
  require "licensed/sources/cabal"
8
+ require "licensed/sources/cargo"
8
9
  require "licensed/sources/composer"
9
10
  require "licensed/sources/dep"
10
11
  require "licensed/sources/git_submodule"
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module Licensed
3
- VERSION = "3.2.2".freeze
3
+ VERSION = "3.4.0".freeze
4
4
 
5
5
  def self.previous_major_versions
6
6
  major_version = Gem::Version.new(Licensed::VERSION).segments.first
data/licensed.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
16
16
  spec.homepage = "https://github.com/github/licensed"
17
17
  spec.license = "MIT"
18
18
 
19
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test/|script/|docker/|\..+)}) }
20
20
  spec.bindir = "exe"
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
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: 3.2.2
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-10 00:00:00.000000000 Z
11
+ date: 2021-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: licensee
@@ -238,13 +238,6 @@ executables:
238
238
  extensions: []
239
239
  extra_rdoc_files: []
240
240
  files:
241
- - ".github/dependabot.yml"
242
- - ".github/workflows/release.yml"
243
- - ".github/workflows/test.yml"
244
- - ".gitignore"
245
- - ".licensed.yml"
246
- - ".rubocop.yml"
247
- - ".ruby-version"
248
241
  - CHANGELOG.md
249
242
  - CODE_OF_CONDUCT.md
250
243
  - CONTRIBUTING.md
@@ -252,7 +245,6 @@ files:
252
245
  - LICENSE
253
246
  - README.md
254
247
  - Rakefile
255
- - docker/Dockerfile.build-linux
256
248
  - docs/adding_a_new_source.md
257
249
  - docs/commands/README.md
258
250
  - docs/commands/cache.md
@@ -280,6 +272,7 @@ files:
280
272
  - docs/sources/bower.md
281
273
  - docs/sources/bundler.md
282
274
  - docs/sources/cabal.md
275
+ - docs/sources/cargo.md
283
276
  - docs/sources/composer.md
284
277
  - docs/sources/dep.md
285
278
  - docs/sources/git_submodule.md
@@ -326,6 +319,7 @@ files:
326
319
  - lib/licensed/sources/bundler/definition.rb
327
320
  - lib/licensed/sources/bundler/missing_specification.rb
328
321
  - lib/licensed/sources/cabal.rb
322
+ - lib/licensed/sources/cargo.rb
329
323
  - lib/licensed/sources/composer.rb
330
324
  - lib/licensed/sources/dep.rb
331
325
  - lib/licensed/sources/git_submodule.rb
@@ -341,31 +335,11 @@ files:
341
335
  - lib/licensed/sources/source.rb
342
336
  - lib/licensed/sources/swift.rb
343
337
  - lib/licensed/sources/yarn.rb
338
+ - lib/licensed/sources/yarn/berry.rb
339
+ - lib/licensed/sources/yarn/v1.rb
344
340
  - lib/licensed/ui/shell.rb
345
341
  - lib/licensed/version.rb
346
342
  - licensed.gemspec
347
- - script/bootstrap
348
- - script/cibuild
349
- - script/console
350
- - script/package
351
- - script/packages/build
352
- - script/packages/linux
353
- - script/packages/mac
354
- - script/setup
355
- - script/source-setup/bower
356
- - script/source-setup/bundler
357
- - script/source-setup/cabal
358
- - script/source-setup/composer
359
- - script/source-setup/git_submodule
360
- - script/source-setup/go
361
- - script/source-setup/mix
362
- - script/source-setup/npm
363
- - script/source-setup/nuget
364
- - script/source-setup/pip
365
- - script/source-setup/pipenv
366
- - script/source-setup/swift
367
- - script/source-setup/yarn
368
- - script/test
369
343
  homepage: https://github.com/github/licensed
370
344
  licenses:
371
345
  - MIT
@@ -1,19 +0,0 @@
1
- # To get started with Dependabot version updates, you'll need to specify which
2
- # package ecosystems to update and where the package manifests are located.
3
- # Please see the documentation for all configuration options:
4
- # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
-
6
- version: 2
7
- updates:
8
- - package-ecosystem: github-actions
9
- directory: /
10
- schedule:
11
- interval: daily
12
- - package-ecosystem: bundler
13
- directory: /
14
- schedule:
15
- interval: weekly
16
- - package-ecosystem: docker
17
- directory: docker
18
- schedule:
19
- interval: weekly
@@ -1,213 +0,0 @@
1
- name: Build and publish release assets
2
-
3
- on:
4
- release:
5
- types: [created]
6
- workflow_dispatch:
7
- inputs:
8
- version:
9
- description: 'Commit-like version of github/licensed to build package at'
10
- required: true
11
- release_tag:
12
- description: 'Release tag to upload built packages to'
13
- required: false
14
-
15
- jobs:
16
- vars:
17
- name: "Gather values for remainder of steps"
18
- runs-on: ubuntu-latest
19
- outputs:
20
- version: ${{ steps.get_version.outputs.result }}
21
- upload_url: ${{ steps.get_url.outputs.result }}
22
- ref: ${{ steps.get_ref.outputs.result }}
23
- steps:
24
- - id: get_version
25
- name: Get package version
26
- uses: actions/github-script@v4.1
27
- with:
28
- github-token: ${{ secrets.GITHUB_TOKEN }}
29
- result-encoding: string
30
- script: |
31
- let version = "${{ github.event.release.tag_name }}"
32
- if (!version) {
33
- version = "${{ github.event.inputs.version }}"
34
- }
35
-
36
- if (!version) {
37
- throw new Error("unable to find package build version")
38
- }
39
-
40
- return version
41
-
42
- - id: get_url
43
- name: Get release upload url
44
- uses: actions/github-script@v4.1
45
- with:
46
- github-token: ${{ secrets.GITHUB_TOKEN }}
47
- result-encoding: string
48
- script: |
49
- let uploadUrl = "${{ github.event.release.upload_url}}"
50
- const tag = "${{ github.event.inputs.release_tag }}"
51
- if (!uploadUrl && tag) {
52
- const { data: release } = await github.repos.getReleaseByTag({
53
- ...context.repo,
54
- tag
55
- })
56
-
57
- if (!release.upload_url) {
58
- throw new Error("unable to find a release upload url")
59
- }
60
-
61
- uploadUrl = release.upload_url
62
- }
63
-
64
- return uploadUrl
65
-
66
- - id: get_ref
67
- name: Get checkout ref for custom build scripts
68
- uses: actions/github-script@v4.1
69
- with:
70
- github-token: ${{ secrets.GITHUB_TOKEN }}
71
- result-encoding: string
72
- script: |
73
- let ref = "${{ github.event.release.tag_name }}"
74
- if (!ref) {
75
- ref = "${{ github.event.ref }}".replace(/refs\/[^\/]+\//, '')
76
- }
77
-
78
- if (!ref) {
79
- throw new Error("unable to find a ref for action")
80
- }
81
-
82
- return ref
83
-
84
- package_linux:
85
- needs: vars
86
- runs-on: ubuntu-18.04
87
- steps:
88
- - uses: actions/checkout@v2
89
- with:
90
- # checkout at the ref for the action, separate from the target build version
91
- # this allows running build scripts independent of the target version
92
- ref: ${{needs.vars.outputs.ref}}
93
- fetch-depth: 0
94
-
95
- - name: Set up Ruby 2.6
96
- uses: ruby/setup-ruby@v1
97
- with:
98
- ruby-version: 2.6
99
-
100
- - name: Build package
101
- run: script/packages/linux
102
- env:
103
- VERSION: ${{needs.vars.outputs.version}}
104
-
105
- - uses: actions/upload-artifact@v2
106
- with:
107
- name: ${{needs.vars.outputs.version}}-linux
108
- path: pkg/${{needs.vars.outputs.version}}/licensed-${{needs.vars.outputs.version}}-linux-x64.tar.gz
109
-
110
- package_mac:
111
- needs: vars
112
- runs-on: macOS-latest
113
- steps:
114
- - uses: actions/checkout@v2
115
- with:
116
- # checkout at the ref for the action, separate from the target build version
117
- # this allows running build scripts independent of the target version
118
- ref: ${{needs.vars.outputs.ref}}
119
- fetch-depth: 0
120
-
121
- - name: Set up Ruby 2.6
122
- uses: ruby/setup-ruby@v1
123
- with:
124
- ruby-version: 2.6
125
-
126
- - name: Build package
127
- run: script/packages/mac
128
- env:
129
- VERSION: ${{needs.vars.outputs.version}}
130
-
131
- - uses: actions/upload-artifact@v2
132
- with:
133
- name: ${{needs.vars.outputs.version}}-darwin
134
- path: pkg/${{needs.vars.outputs.version}}/licensed-${{needs.vars.outputs.version}}-darwin-x64.tar.gz
135
-
136
- build_gem:
137
- needs: vars
138
- runs-on: ubuntu-latest
139
- steps:
140
- - uses: actions/checkout@v2
141
- with:
142
- # building a gem doesn't use a different ref from the version input
143
- ref: ${{needs.vars.outputs.version}}
144
-
145
- - name: Set up Ruby 2.6
146
- uses: ruby/setup-ruby@v1
147
- with:
148
- ruby-version: 2.6
149
-
150
- - name: Build gem
151
- run: gem build licensed.gemspec -o licensed-${{needs.vars.outputs.version}}.gem
152
-
153
- - uses: actions/upload-artifact@v2
154
- with:
155
- name: ${{needs.vars.outputs.version}}-gem
156
- path: licensed-${{needs.vars.outputs.version}}.gem
157
-
158
- upload_packages:
159
- if: ${{ needs.vars.outputs.upload_url != '' }}
160
- runs-on: ubuntu-latest
161
- needs: [vars, package_linux, package_mac, build_gem]
162
-
163
- steps:
164
- - name: Set up Ruby 2.6
165
- uses: ruby/setup-ruby@v1
166
- with:
167
- ruby-version: 2.6
168
-
169
- - name: Download linux package
170
- uses: actions/download-artifact@v2
171
- with:
172
- name: ${{needs.vars.outputs.version}}-linux
173
-
174
- - name: Download macOS package
175
- uses: actions/download-artifact@v2
176
- with:
177
- name: ${{needs.vars.outputs.version}}-darwin
178
-
179
- - name: Download gem
180
- uses: actions/download-artifact@v2
181
- with:
182
- name: ${{needs.vars.outputs.version}}-gem
183
-
184
- - name: Publish linux package
185
- uses: actions/upload-release-asset@v1
186
- env:
187
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
188
- with:
189
- upload_url: ${{ needs.vars.outputs.upload_url }}
190
- asset_path: ./licensed-${{needs.vars.outputs.version}}-linux-x64.tar.gz
191
- asset_name: licensed-${{needs.vars.outputs.version}}-linux-x64.tar.gz
192
- asset_content_type: application/gzip
193
-
194
- - name: Publish mac package
195
- uses: actions/upload-release-asset@v1
196
- env:
197
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
198
- with:
199
- upload_url: ${{ needs.vars.outputs.upload_url }}
200
- asset_path: ./licensed-${{needs.vars.outputs.version}}-darwin-x64.tar.gz
201
- asset_name: licensed-${{needs.vars.outputs.version}}-darwin-x64.tar.gz
202
- asset_content_type: application/gzip
203
-
204
- - name: Publish gem to RubyGems
205
- run: |
206
- mkdir -p $HOME/.gem
207
- touch $HOME/.gem/credentials
208
- chmod 0600 $HOME/.gem/credentials
209
- printf -- "---\n:rubygems_api_key: ${RUBYGEMS_API_KEY}\n" > $HOME/.gem/credentials
210
- gem push $GEM
211
- env:
212
- RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_AUTH_TOKEN}}
213
- GEM: licensed-${{needs.vars.outputs.version}}.gem