avm-eac_ruby_base1 0.22.0 → 0.24.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: 3dbe022e931d72a6273d17350c232661bb943b57a7b69f432e43fba5083088cf
4
- data.tar.gz: 6315d5afaff312e6a410e1f06cfa13f064e1f2a571c4e4d8362d1622154aa378
3
+ metadata.gz: adacad1ecbdcfe873f0aa0a594f3e684da7e334c1a1467b26c9ce6a18dfd57e6
4
+ data.tar.gz: 1869c4e09e6aa4f04a61dfae8ce11a9544715759595af028dc5025334baa9bd9
5
5
  SHA512:
6
- metadata.gz: d005ee107b7eadcfd496e76ec2a88afeefdba7443f819d9a8b3d2f96c3d27d37bacde960ce9e44055dc847cfc1a68df457b161a6a407d14db0d4109cf5d3bc58
7
- data.tar.gz: 228237474272dbc10f48062e96fa9adafce13709607d32e36d4fe195ce04456bce87fcf476d8693b74b5df73817dd5e35da0f644b9d96cf73ef7eb5b81f74ce6
6
+ metadata.gz: 9f34d02740e45b8b2fa741906db2cdee1b8348d5cd314c136a0b99d08a18a29a845c2221bb6cfdeb8757c25485b47e58a394374b042e45fdea6d96da8d703e47
7
+ data.tar.gz: 14a3051c6e9c101104eee12d21718593c25f1bf63ec25db027d139141d346854a192cd5debd879f1fd118c3cbb55e6b91c543b178d1742c29af60088047a6ce8
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tmpdir'
4
+ require 'eac_cli/speaker'
5
+ require 'eac_ruby_utils/envs'
6
+ require 'avm/eac_ruby_base1/launcher/gem/specification'
7
+
8
+ module Avm
9
+ module EacRubyBase1
10
+ module Launcher
11
+ module Gem
12
+ class Build
13
+ enable_speaker
14
+
15
+ def initialize(original_gem_root)
16
+ @original_gem_root = original_gem_root
17
+ end
18
+
19
+ def output_file
20
+ return nil unless @gem_root
21
+
22
+ @gem_root.find_files_with_extension('.gem').first
23
+ end
24
+
25
+ def builded?
26
+ output_file.present? && ::File.exist?(output_file)
27
+ end
28
+
29
+ def build
30
+ return if builded?
31
+
32
+ copy_gem_files
33
+ build_gem
34
+ check_gem_empty_size
35
+ check_gem_version
36
+ end
37
+
38
+ def close
39
+ ::FileUtils.remove_entry(@gem_root) if @gem_root && ::File.directory?(@gem_root)
40
+ @gem_root = nil
41
+ end
42
+
43
+ private
44
+
45
+ def copy_gem_files
46
+ @gem_root = ::Avm::Launcher::Paths::Real.new(::Dir.mktmpdir)
47
+ FileUtils.cp_r "#{@original_gem_root}/.", @gem_root
48
+ end
49
+
50
+ def build_gem
51
+ info("Building gemspec #{gemspec_file}...")
52
+ clear_gems
53
+ Dir.chdir @gem_root do
54
+ isolated_build_gem
55
+ end
56
+ end
57
+
58
+ def isolated_build_gem
59
+ on_clean_ruby do
60
+ EacRubyUtils::Envs.local.command('gem', 'build', gemspec_file).execute!
61
+ end
62
+ end
63
+
64
+ def check_gem_empty_size
65
+ Dir.mktmpdir do |dir|
66
+ Dir.chdir dir do
67
+ EacRubyUtils::Envs.local.command('gem', 'unpack', gem).system
68
+ gs = File.join(dir, File.basename(gem, '.gem'))
69
+ if (Dir.entries(gs) - %w[. ..]).empty?
70
+ raise "\"#{dir}\" (Unpacked from #{gem}) has no source code"
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ def clear_gems
77
+ @gem_root.find_files_with_extension('.gem').each do |f|
78
+ FileUtils.rm_rf(f)
79
+ end
80
+ end
81
+
82
+ def gemspec_file
83
+ @gem_root.find_file_with_extension('.gemspec')
84
+ end
85
+
86
+ def gem
87
+ @gem_root.find_file_with_extension('.gem')
88
+ end
89
+
90
+ def check_gem_version
91
+ spec = ::Avm::EacRubyBase1::Launcher::Gem::Specification.new(gemspec_file)
92
+ return if ::File.basename(output_file, '.gem') == spec.full_name
93
+
94
+ raise("Builded gem is not the same version of gemspec (#{spec}, #{output_file})")
95
+ end
96
+
97
+ def bundle_dependencies
98
+ gemfile = @gem_root.subpath('Gemfile')
99
+ return unless ::File.exist?(gemfile)
100
+
101
+ Dir.chdir(@gem_root) do
102
+ EacRubyUtils::Envs.local.command('bundle', 'install').execute!
103
+ end
104
+ end
105
+
106
+ def on_clean_ruby
107
+ on_clear_envvars('BUNDLE', 'RUBY') { yield }
108
+ end
109
+
110
+ def on_clear_envvars(*start_with_vars)
111
+ old_values = envvars_starting_with(start_with_vars)
112
+ old_values.each_key { |k| ENV.delete(k) }
113
+ yield
114
+ ensure
115
+ old_values&.each { |k, v| ENV[k] = v }
116
+ end
117
+
118
+ def envvars_starting_with(start_with_vars)
119
+ ENV.select { |k, _v| start_with_vars.any? { |var| k.start_with?(var) } }
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/object'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Launcher
8
+ module Gem
9
+ class Specification
10
+ class << self
11
+ def parse_version_file(file)
12
+ s = ::File.read(file)
13
+ m = /VERSION\s*=\s*[\'\"]([^\'\"]+)[\'\"]/.match(s)
14
+ m ? m[1] : nil
15
+ end
16
+ end
17
+
18
+ attr_reader :gemspec_file
19
+
20
+ def initialize(gemspec_file)
21
+ @gemspec_file = gemspec_file
22
+ end
23
+
24
+ def version
25
+ v = self.class.parse_version_file(version_file)
26
+ return v if v.present?
27
+
28
+ raise "Version not found on file \"#{version_file}\""
29
+ end
30
+
31
+ def name
32
+ ::File.basename(gemspec_file).gsub(/\.gemspec\z/, '')
33
+ end
34
+
35
+ def full_name
36
+ "#{name}-#{version}"
37
+ end
38
+
39
+ def to_s
40
+ full_name
41
+ end
42
+
43
+ private
44
+
45
+ def gem_root
46
+ ::File.dirname(gemspec_file)
47
+ end
48
+
49
+ def version_file
50
+ f = ::File.join(gem_root, 'lib', *namespace_parts, 'version.rb')
51
+ return f if ::File.exist?(f)
52
+
53
+ raise "Version file \"#{f}\" does not exist"
54
+ end
55
+
56
+ def namespace_parts
57
+ name.split('-')
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Launcher
8
+ module Gem
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Launcher
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_ruby_base1/sources/base'
4
+ require 'avm/version_number'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module EacRubyBase1
9
+ module LauncherStereotypes
10
+ class Base
11
+ module LocalProjectMixin
12
+ # @return [Avm::EacRubyBase1::Sources::Base]
13
+ def ruby_gem
14
+ @ruby_gem ||= ::Avm::EacRubyBase1::Sources::Base.new(path)
15
+ end
16
+
17
+ def version
18
+ ruby_gem.version.if_present { |v| ::Avm::VersionNumber.new(v) }
19
+ end
20
+
21
+ def version=(value)
22
+ ruby_gem.version_file.value = value
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'curb'
4
+ require 'json'
5
+ require 'eac_ruby_utils/simple_cache'
6
+ require 'rubygems'
7
+ require 'eac_cli/speaker'
8
+ require 'avm/launcher/publish/base'
9
+ require 'avm/launcher/publish/check_result'
10
+ require 'avm/eac_ruby_base1/launcher/gem'
11
+
12
+ module Avm
13
+ module EacRubyBase1
14
+ module LauncherStereotypes
15
+ class Base
16
+ class Publish < ::Avm::Launcher::Publish::Base
17
+ include ::EacRubyUtils::SimpleCache
18
+ enable_speaker
19
+
20
+ protected
21
+
22
+ def internal_check
23
+ gem_published? ? internal_check_gem_published : internal_check_gem_unpublished
24
+ end
25
+
26
+ private
27
+
28
+ def internal_check_gem_published
29
+ if version_published?
30
+ outdated_version? ? outdated_version_check_result : version_published_check_result
31
+ else
32
+ version_unpublished_check_result
33
+ end
34
+ end
35
+
36
+ def internal_check_gem_unpublished
37
+ if new_gem_allowed?
38
+ version_unpublished_check_result
39
+ else
40
+ new_gem_disallowed_check_result
41
+ end
42
+ end
43
+
44
+ def new_gem_disallowed_check_result
45
+ ::Avm::Launcher::Publish::CheckResult.blocked(
46
+ "#{gem_spec.full_name} does not exist in RubyGems"
47
+ )
48
+ end
49
+
50
+ def version_published_check_result
51
+ ::Avm::Launcher::Publish::CheckResult.updated("#{gem_spec.full_name} already pushed")
52
+ end
53
+
54
+ def outdated_version_check_result
55
+ ::Avm::Launcher::Publish::CheckResult.outdated(
56
+ "#{gem_spec.full_name} is outdated (Max: #{gem_version_max})"
57
+ )
58
+ end
59
+
60
+ def version_unpublished_check_result
61
+ ::Avm::Launcher::Publish::CheckResult.pending("#{gem_spec.full_name} not found " \
62
+ 'in RubyGems')
63
+ end
64
+
65
+ def source_uncached
66
+ instance.warped
67
+ end
68
+
69
+ def gem_spec_uncached
70
+ ::Avm::EacRubyBase1::LauncherStereotypes::Base.load_gemspec(gemspec)
71
+ end
72
+
73
+ def gem_build_uncached
74
+ ::Avm::EacRubyBase1::Launcher::Gem::Build.new(source)
75
+ end
76
+
77
+ def publish
78
+ gem_build.build
79
+ push_gem
80
+ ensure
81
+ gem_build.close
82
+ end
83
+
84
+ def new_gem_allowed?
85
+ ::Avm::Launcher::Context.current.publish_options[:new]
86
+ end
87
+
88
+ def gem_published?
89
+ gem_versions.any?
90
+ end
91
+
92
+ def version_published?
93
+ gem_versions.any? { |v| v['number'] == gem_spec.version }
94
+ end
95
+
96
+ def outdated_version?
97
+ gem_version_max.present? && ::Gem::Version.new(gem_spec.version) < gem_version_max
98
+ end
99
+
100
+ def gem_versions_uncached
101
+ http = Curl.get("https://rubygems.org/api/v1/versions/#{gem_spec.name}.json")
102
+ return JSON.parse!(http.body_str) if /\A2/ =~ http.status
103
+ return [] if /\A4/ =~ http.status
104
+
105
+ raise "#{http} code error: #{http.status}"
106
+ end
107
+
108
+ def gem_version_max_uncached
109
+ gem_versions.map { |v| ::Gem::Version.new(v['number']) }.max
110
+ end
111
+
112
+ def push_gem
113
+ info("Pushing gem #{gem_spec}...")
114
+ command = ['gem', 'push', gem_build.output_file]
115
+ unless ::Avm::Launcher::Context.current.publish_options[:confirm]
116
+ command = %w[echo] + command + %w[(Dry-run)]
117
+ end
118
+ EacRubyUtils::Envs.local.command(command).system
119
+ info('Pushed!')
120
+ end
121
+
122
+ def gemspec_uncached
123
+ source.find_file_with_extension('.gemspec')
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/launcher/stereotype'
4
+ require 'avm/eac_ruby_base1/launcher/gem/specification'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module EacRubyBase1
9
+ module LauncherStereotypes
10
+ class Base
11
+ require_sub __FILE__
12
+ include ::Avm::Launcher::Stereotype
13
+
14
+ class << self
15
+ def match?(path)
16
+ Dir.glob(File.join(path.real, '*.gemspec')).any?
17
+ end
18
+
19
+ def color
20
+ :red
21
+ end
22
+
23
+ def load_gemspec(gemspec_file)
24
+ ::Avm::EacRubyBase1::Launcher::Gem::Specification.new(gemspec_file)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module LauncherStereotypes
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module EacRubyBase1
5
- VERSION = '0.22.0'
5
+ VERSION = '0.24.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm-eac_ruby_base1
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.0
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Put here the authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-02 00:00:00.000000000 Z
11
+ date: 2022-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avm
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.45'
19
+ version: '0.49'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.45'
26
+ version: '0.49'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: avm-eac_generic_base0
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -105,6 +105,14 @@ files:
105
105
  - lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_factory.rb
106
106
  - lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_parser_base.rb
107
107
  - lib/avm/eac_ruby_base1/bundler/incompatible_parser/version_requirement.rb
108
+ - lib/avm/eac_ruby_base1/launcher.rb
109
+ - lib/avm/eac_ruby_base1/launcher/gem.rb
110
+ - lib/avm/eac_ruby_base1/launcher/gem/build.rb
111
+ - lib/avm/eac_ruby_base1/launcher/gem/specification.rb
112
+ - lib/avm/eac_ruby_base1/launcher_stereotypes.rb
113
+ - lib/avm/eac_ruby_base1/launcher_stereotypes/base.rb
114
+ - lib/avm/eac_ruby_base1/launcher_stereotypes/base/local_project_mixin.rb
115
+ - lib/avm/eac_ruby_base1/launcher_stereotypes/base/publish.rb
108
116
  - lib/avm/eac_ruby_base1/preferred_version_requirements.rb
109
117
  - lib/avm/eac_ruby_base1/rubocop.rb
110
118
  - lib/avm/eac_ruby_base1/rubocop/configured.rb