getv 1.5.0 → 1.7.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: eecf3794e494d199c44abee7e7c1813bf4cdb1ba4a3df0b1e84de43933c4b769
4
- data.tar.gz: df3ef755f0275ba9dea7b06181156391d82a3dd456677d27eb2bc7849f8e2d30
3
+ metadata.gz: d49b33dd0cac92da670d6e87cd932f4fbd60b6cb5d1db7f9ea2448a295f1f9b5
4
+ data.tar.gz: c8d460259782dbd03a353f79e7be1cee0d1e1f65124f06e04084931bcd880fad
5
5
  SHA512:
6
- metadata.gz: 3cfe705be77258d3ad2fcef502d32a788134fbd6ef574725d1a2b8154b179b2652e6b6db060503d4b568c0e1524c602f726afdc275cf948f7fa6ee10c3d5c023
7
- data.tar.gz: 84f5e7c13dd5e875f32b84203e1cba6aaadb8caa2919fd5ed54e20ce413ffa9ca0a73971ed812d08096b03e64d24bea085c0319dab66216932333ef77f84c358
6
+ metadata.gz: ef3b8cdbf5e974ff3c1663f3ec46eabc8b894aaea5e5f082ac5aa4c6d82d4c7e2ff3134cbc4e56f0da4fafe7eafb483eb0241d611b8d6b65370e50e8a66a86c8
7
+ data.tar.gz: b641600ab4ba600a5b337b06036c7779c9d89520cd11a5c4a38c1665073d082b7cd056120e417c8acf597ba2bb773798f8cd53c230635191208e89133f0d674d
data/README.md CHANGED
@@ -39,15 +39,16 @@ SYNOPSIS
39
39
 
40
40
 
41
41
  VERSION
42
- 1.5.0
42
+ 1.7.0
43
43
 
44
44
 
45
45
 
46
46
  GLOBAL OPTIONS
47
- --help - Show this message
48
- -j, --json - Output in json
49
- -l, --latest - Latest version
50
- --version - Display the program version
47
+ --help - Show this message
48
+ -j, --json - Output in json
49
+ -l, --latest - Latest version
50
+ -p, --proxy=arg - Web proxy (default: none)
51
+ --version - Display the program version
51
52
 
52
53
 
53
54
 
@@ -58,6 +59,7 @@ COMMANDS
58
59
  github_commit - Get package versions from GitHub commits
59
60
  github_release - Get package versions from GitHub releases
60
61
  github_tag - Get package versions from GitHub tags
62
+ helm - Get package versions from a Helm chart repository
61
63
  help - Shows a list of commands or help for one command
62
64
  index - Get package versions from web page of links
63
65
  npm - Get package versions from npm at registry.npmjs.org
@@ -70,7 +72,7 @@ Show the latest available version of the `getv` gem:
70
72
 
71
73
  ```console
72
74
  $ getv --latest gem getv
73
- 1.5.0
75
+ 1.7.0
74
76
  ```
75
77
 
76
78
  Show all `dep` GitHub release versions in JSON:
data/exe/getv CHANGED
@@ -38,7 +38,7 @@ class App # rubocop:disable Metrics/ClassLength
38
38
 
39
39
  desc 'Get package versions from a Docker or OCI container image registry'
40
40
  arg_name 'package_name'
41
- command :docker do |c|
41
+ command :docker do |c| # rubocop:disable Metrics/BlockLength
42
42
  defaults = (Getv::Package.new 'name', type: c.name.to_s).opts
43
43
  c.flag %i[select_search], desc: 'Regex version selection search', default_value: defaults[:select_search]
44
44
  c.flag %i[select_replace], desc: 'Regex version selection replace', default_value: defaults[:select_replace]
@@ -47,10 +47,11 @@ class App # rubocop:disable Metrics/ClassLength
47
47
  c.flag %i[semantic_select], desc: 'Semantic version selection (comma delimited)',
48
48
  default_value: defaults[:semantic_select]
49
49
  c.flag %i[owner], desc: 'Repository owner',
50
- default_value: "'<owner>' if package_name is in format '<owner>/<repo>', otherwise just package_name" # rubocop:disable Layout/LineLength
50
+ default_value: "'<owner>' if package_name is in format '<registry>/<owner>/<repo>' or '<owner>/<repo>', otherwise just package_name" # rubocop:disable Layout/LineLength
51
51
  c.flag %i[repo], desc: 'Repository name',
52
- default_value: "'<repo>' if package_name is in format '<owner>/<repo>', otherwise just package_name" # rubocop:disable Layout/LineLength
53
- c.flag %i[url], desc: 'URL', default_value: defaults[:url]
52
+ default_value: "'<repo>' if package_name is in format '<registry>/<owner>/<repo>' or <owner>/<repo>, otherwise just package_name" # rubocop:disable Layout/LineLength
53
+ c.flag %i[url], desc: 'URL',
54
+ default_value: "'https://<registry>' if package_name is in format '<registry>/<owner>/<repo>', otherwise #{defaults[:url]}" # rubocop:disable Layout/LineLength
54
55
  c.flag %i[user], desc: 'Username', default_value: defaults[:user]
55
56
  c.flag %i[password], desc: 'Password', default_value: defaults[:password]
56
57
  c.action do |global_options, options, args|
@@ -195,6 +196,34 @@ class App # rubocop:disable Metrics/ClassLength
195
196
  end
196
197
  end
197
198
 
199
+ desc 'Get package versions from a Helm chart repository'
200
+ arg_name 'package_name'
201
+ command :helm do |c|
202
+ defaults = (Getv::Package.new 'name', type: c.name.to_s).opts
203
+ c.flag %i[select_search], desc: 'Regex version selection search', default_value: defaults[:select_search]
204
+ c.flag %i[select_replace], desc: 'Regex version selection replace', default_value: defaults[:select_replace]
205
+ c.flag %i[reject], desc: 'Regex version rejection', default_value: defaults[:reject]
206
+ c.switch %i[invalid_versions], desc: 'Include invalid semantic versions', negatable: false, default_value: false
207
+ c.flag %i[semantic_select], desc: 'Semantic version selection (comma delimited)',
208
+ default_value: defaults[:semantic_select]
209
+ c.flag %i[chart], desc: 'Chart name', default_value: 'package_name'
210
+ c.flag %i[url], desc: 'URL', default_value: defaults[:url]
211
+ c.flag %i[user], desc: 'Username', default_value: defaults[:user]
212
+ c.flag %i[password], desc: 'Password', default_value: defaults[:password]
213
+ c.action do |global_options, options, args|
214
+ help_now! unless args.size == 1
215
+
216
+ opts = global_options.merge(options)
217
+ opts = opts.slice :select_search, :select_replace, :reject, :semantic_only, :semantic_select, :chart, :url,
218
+ :user, :password, :proxy
219
+ opts = opts.delete_if { |k, v| v.nil? || v == c.flags[k].default_value }
220
+ opts[:semantic_only] = !options[:invalid_versions]
221
+ opts[:semantic_select] = opts[:semantic_select].split(',') unless opts.fetch(:semantic_select, nil).nil?
222
+ package = Getv::Package.new args[0], { type: c.name.to_s }.merge(opts)
223
+ Getv::Cli.output(package, latest: global_options[:latest], json: global_options[:json])
224
+ end
225
+ end
226
+
198
227
  desc 'Get package versions from web page of links'
199
228
  arg_name 'package_name'
200
229
  command :index do |c|
data/lib/getv/package.rb CHANGED
@@ -9,11 +9,11 @@ module Getv
9
9
  @name = name
10
10
  case name
11
11
  when /rubygem-.*/
12
- opts = { 'type' => 'gem' }.merge(opts)
12
+ opts = { type: 'gem' }.merge(opts)
13
13
  when /nodejs-.*/
14
- opts = { 'type' => 'npm' }.merge(opts)
14
+ opts = { type: 'npm' }.merge(opts)
15
15
  when /python.*-.*/
16
- opts = { 'type' => 'pypi' }.merge(opts)
16
+ opts = { type: 'pypi' }.merge(opts)
17
17
  end
18
18
  if opts[:type] == 'github_commit'
19
19
  opts = {
@@ -33,23 +33,37 @@ module Getv
33
33
  versions: nil,
34
34
  latest_version: nil
35
35
  }.merge(opts)
36
- if (opts[:type] == 'docker' || opts[:type] =~ /github.*/) && (name.count('/') == 1)
37
- opts = { owner: name.split('/')[0], repo: name.split('/')[1] }.merge(opts)
38
- end
39
36
  case opts[:type]
40
37
  when 'docker'
41
- opts = { owner: 'library', repo: name, url: 'https://registry.hub.docker.com', user: nil,
42
- password: nil }.merge(opts)
38
+ opts = { user: nil, password: nil }.merge(opts)
39
+ opts = case name.count('/')
40
+ when 0
41
+ { owner: 'library', repo: name, url: 'https://registry.hub.docker.com' }.merge(opts)
42
+ when 1
43
+ { owner: name.split('/')[0], repo: name.split('/')[1],
44
+ url: 'https://registry.hub.docker.com' }.merge(opts)
45
+ else
46
+ { owner: name.split('/')[1], repo: name.split('/')[2..-1].join('/'),
47
+ url: "https://#{name.split('/')[0]}" }.merge(opts)
48
+ end
43
49
  when 'gem'
44
50
  opts = { gem: name[/rubygem-(.*)/, 1] || name }.merge(opts)
45
51
  when /github.*/
46
- opts = { owner: name, repo: name, token: nil }.merge(opts)
52
+ opts = { token: nil }.merge(opts)
53
+ opts = case name.count('/')
54
+ when 1
55
+ { owner: name.split('/')[0], repo: name.split('/')[1] }.merge(opts)
56
+ else
57
+ { owner: name, repo: name }.merge(opts)
58
+ end
59
+ when 'helm'
60
+ opts = { chart: name, url: nil, user: nil, password: nil }.merge(opts)
47
61
  when 'index'
48
62
  opts = { link: 'content' }.merge(opts)
49
63
  when 'npm'
50
64
  opts = { npm: name[/nodejs-(.*)/, 1] || name }.merge(opts)
51
65
  when 'pypi'
52
- opts = { npm: name[/python.*-(.*)/, 1] || name }.merge(opts)
66
+ opts = { pypi: name[/python.*-(.*)/, 1] || name }.merge(opts)
53
67
  end
54
68
  @opts = opts
55
69
  end
@@ -91,12 +105,17 @@ module Getv
91
105
 
92
106
  private
93
107
 
94
- def get(url)
108
+ def get(url) # rubocop:disable Metrics/AbcSize
95
109
  require 'rest-client'
96
- RestClient::Request.execute(method: :get, url: url, proxy: opts[:proxy]).body
110
+ if opts[:user] && opts[:password]
111
+ RestClient::Request.execute(method: :get, url: url, proxy: opts[:proxy], user: opts[:user],
112
+ password: opts[:password]).body
113
+ else
114
+ RestClient::Request.execute(method: :get, url: url, proxy: opts[:proxy]).body
115
+ end
97
116
  end
98
117
 
99
- def versions_using_docker # rubocop:disable Metrics/AbcSize
118
+ def versions_using_docker # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
100
119
  require 'docker_registry2'
101
120
  docker_opts = {}
102
121
  docker_opts[:http_options] = { proxy: opts[:proxy] } unless opts[:proxy].nil?
@@ -106,6 +125,8 @@ module Getv
106
125
  end
107
126
  docker = DockerRegistry2.connect(opts[:url], docker_opts)
108
127
  docker.tags("#{opts[:owner]}/#{opts[:repo]}")['tags']
128
+ rescue DockerRegistry2::NotFound
129
+ []
109
130
  end
110
131
 
111
132
  def versions_using_gem
@@ -146,6 +167,11 @@ module Getv
146
167
  end
147
168
  end
148
169
 
170
+ def versions_using_helm
171
+ require 'yaml'
172
+ YAML.safe_load(get("#{opts[:url]}/index.yaml")).fetch('entries', {}).fetch(name, []).map { |e| e['version'] }
173
+ end
174
+
149
175
  def versions_using_index
150
176
  require 'nokogiri'
151
177
  Nokogiri::HTML(get(opts[:url])).css('a').map do |a|
data/lib/getv/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Getv
4
- VERSION = '1.5.0'
4
+ VERSION = '1.7.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: getv
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - harbottle
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-28 00:00:00.000000000 Z
11
+ date: 2022-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
166
  - !ruby/object:Gem::Version
167
167
  version: '0'
168
168
  requirements: []
169
- rubygems_version: 3.0.3
169
+ rubygems_version: 3.1.2
170
170
  signing_key:
171
171
  specification_version: 4
172
172
  summary: Pull package version numbers from the web in various ways.