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 +4 -4
- data/lib/avm/eac_ruby_base1/launcher/gem/build.rb +125 -0
- data/lib/avm/eac_ruby_base1/launcher/gem/specification.rb +63 -0
- data/lib/avm/eac_ruby_base1/launcher/gem.rb +13 -0
- data/lib/avm/eac_ruby_base1/launcher.rb +11 -0
- data/lib/avm/eac_ruby_base1/launcher_stereotypes/base/local_project_mixin.rb +28 -0
- data/lib/avm/eac_ruby_base1/launcher_stereotypes/base/publish.rb +129 -0
- data/lib/avm/eac_ruby_base1/launcher_stereotypes/base.rb +30 -0
- data/lib/avm/eac_ruby_base1/launcher_stereotypes.rb +11 -0
- data/lib/avm/eac_ruby_base1/version.rb +1 -1
- metadata +12 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: adacad1ecbdcfe873f0aa0a594f3e684da7e334c1a1467b26c9ce6a18dfd57e6
|
4
|
+
data.tar.gz: 1869c4e09e6aa4f04a61dfae8ce11a9544715759595af028dc5025334baa9bd9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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,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
|
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.
|
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-
|
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.
|
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.
|
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
|