avm-tools 0.140.0 → 0.142.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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/projects/stereotypes.rb +4 -0
  3. data/lib/avm/tools/runner/files/format.rb +2 -2
  4. data/lib/avm/tools/runner/git/commit.rb +2 -2
  5. data/lib/avm/tools/runner/git/deploy.rb +2 -2
  6. data/lib/avm/tools/runner/git.rb +2 -2
  7. data/lib/avm/tools/runner/launcher_stereotypes/list.rb +42 -0
  8. data/lib/avm/tools/runner/launcher_stereotypes.rb +16 -0
  9. data/lib/avm/tools/version.rb +1 -1
  10. metadata +10 -39
  11. data/lib/avm/launcher/git/base/class_methods.rb +0 -28
  12. data/lib/avm/launcher/git/base/dirty_files.rb +0 -23
  13. data/lib/avm/launcher/git/base/remotes.rb +0 -40
  14. data/lib/avm/launcher/git/base/subrepo.rb +0 -44
  15. data/lib/avm/launcher/git/base/underlying.rb +0 -63
  16. data/lib/avm/launcher/git/base.rb +0 -86
  17. data/lib/avm/launcher/git/error.rb +0 -13
  18. data/lib/avm/launcher/git/mirror_update.rb +0 -38
  19. data/lib/avm/launcher/git/publish_base.rb +0 -125
  20. data/lib/avm/launcher/git/remote.rb +0 -55
  21. data/lib/avm/launcher/git/sub_warp_base.rb +0 -33
  22. data/lib/avm/launcher/git/warp_base.rb +0 -67
  23. data/lib/avm/launcher/git.rb +0 -7
  24. data/lib/avm/launcher/ruby/gem/build.rb +0 -125
  25. data/lib/avm/launcher/ruby/gem/specification.rb +0 -63
  26. data/lib/avm/launcher/ruby/gem.rb +0 -4
  27. data/lib/avm/launcher/ruby.rb +0 -3
  28. data/lib/avm/projects/stereotype.rb +0 -63
  29. data/lib/avm/projects/stereotypes/git/local_project_mixin.rb +0 -19
  30. data/lib/avm/projects/stereotypes/git/publish.rb +0 -15
  31. data/lib/avm/projects/stereotypes/git/warp.rb +0 -27
  32. data/lib/avm/projects/stereotypes/git.rb +0 -25
  33. data/lib/avm/projects/stereotypes/git_subrepo/publish.rb +0 -14
  34. data/lib/avm/projects/stereotypes/git_subrepo/warp.rb +0 -88
  35. data/lib/avm/projects/stereotypes/git_subrepo.rb +0 -34
  36. data/lib/avm/projects/stereotypes/git_subtree/publish.rb +0 -14
  37. data/lib/avm/projects/stereotypes/git_subtree/warp.rb +0 -32
  38. data/lib/avm/projects/stereotypes/git_subtree.rb +0 -51
  39. data/lib/avm/projects/stereotypes/ruby_gem/local_project_mixin.rb +0 -28
  40. data/lib/avm/projects/stereotypes/ruby_gem/publish.rb +0 -129
  41. data/lib/avm/projects/stereotypes/ruby_gem.rb +0 -30
@@ -1,88 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/simple_cache'
4
- require 'avm/launcher/git/sub_warp_base'
5
- require 'avm/launcher/errors/base'
6
- require 'avm/launcher/paths/real'
7
- require 'avm/git/vendor/github'
8
-
9
- module Avm
10
- module Projects
11
- module Stereotypes
12
- class GitSubrepo
13
- class Warp < ::Avm::Launcher::Paths::Real
14
- include ::Avm::Launcher::Git::SubWarpBase
15
- include ::EacRubyUtils::SimpleCache
16
-
17
- attr_reader :instance
18
-
19
- def initialize(instance)
20
- @instance = instance
21
- check_parent
22
- init_aux
23
- push_to_aux
24
- reset
25
- assert_target_remote
26
- super(warped_git)
27
- end
28
-
29
- private
30
-
31
- def check_parent
32
- return if parent_git_warped.rev_parse(subrepo_parent_hash) &&
33
- parent_git_warped.descendant?('HEAD', subrepo_parent_hash)
34
-
35
- raise Avm::Launcher::Errors::Base,
36
- "Subrepo parent hash \"#{subrepo_parent_hash}\"" \
37
- " not found in \"#{parent_git_warped}\""
38
- end
39
-
40
- def subrepo_parent_hash
41
- data = parent_git_warped.subrepo_status(to_parent_git_path)
42
- h = data['Pull Parent']
43
- return h if h.present?
44
-
45
- raise Avm::Launcher::Errors::Base, "Subrepo parent hash is blank: #{data}"
46
- end
47
-
48
- def init_aux
49
- ::Avm::Launcher::Git::Base.new(aux_path).init_bare
50
- end
51
-
52
- def parent_git_warped_uncached
53
- ::Avm::Launcher::Git::Base.new(parent_instance.warped)
54
- end
55
-
56
- def aux_path
57
- instance.cache_path('subrepo_aux_git_repository')
58
- end
59
-
60
- def warped_git_uncached
61
- ::Avm::Launcher::Git::Base.new(instance.cache_path('git_repository'))
62
- end
63
-
64
- def push_to_aux
65
- parent_git_warped.execute!('subrepo', 'branch', to_parent_git_path, '-fF')
66
- h = parent_git_warped.rev_parse("subrepo/#{to_parent_git_path}", true)
67
- parent_git_warped.execute!('push', aux_path, "#{h}:refs/heads/master", '--force')
68
- end
69
-
70
- def reset
71
- ::Avm::Launcher::Git::MirrorUpdate.new(warped_git, aux_path, 'master')
72
- end
73
-
74
- def assert_target_remote
75
- warped_git.assert_remote_url(::Avm::Launcher::Git::WarpBase::TARGET_REMOTE,
76
- target_remote_url)
77
- end
78
-
79
- def target_remote_url
80
- ::Avm::Git::Vendor::Github.to_ssh_url(
81
- parent_git_warped.subrepo_remote_url(to_parent_git_path)
82
- )
83
- end
84
- end
85
- end
86
- end
87
- end
88
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/launcher/git/error'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'avm/projects/stereotype'
6
-
7
- module Avm
8
- module Projects
9
- module Stereotypes
10
- class GitSubrepo
11
- require_sub __FILE__
12
- include Avm::Projects::Stereotype
13
-
14
- class << self
15
- def match?(path)
16
- File.exist?(path.real.subpath('.gitrepo')) && subrepo_url(path.real) != 'none'
17
- end
18
-
19
- def color
20
- :light_cyan
21
- end
22
-
23
- def subrepo_url(path)
24
- File.read(path.subpath('.gitrepo')).each_line do |l|
25
- m = /remote\s*=\s(.+)/.match(l)
26
- return m[1] if m
27
- end
28
- raise ::Avm::Launcher::Git::Error.new(path, '"remote = ... " not found')
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/launcher/git/publish_base'
4
-
5
- module Avm
6
- module Projects
7
- module Stereotypes
8
- class GitSubtree
9
- class Publish < ::Avm::Launcher::Git::PublishBase
10
- end
11
- end
12
- end
13
- end
14
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/launcher/git/warp_base'
4
- require 'avm/launcher/git/sub_warp_base'
5
-
6
- module Avm
7
- module Projects
8
- module Stereotypes
9
- class GitSubtree
10
- class Warp < ::Avm::Launcher::Git::WarpBase
11
- include ::Avm::Launcher::Git::SubWarpBase
12
-
13
- private
14
-
15
- def current_ref
16
- instance.cache_key("git_subtree.parent.#{cache_git.git.object('HEAD').sha}") do
17
- cache_git.subtree_split(to_parent_git_path)
18
- end
19
- end
20
-
21
- def source_instance
22
- parent_instance
23
- end
24
-
25
- def source_remote_name
26
- instance.project_name
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/projects/stereotype'
4
- require 'avm/projects/stereotypes/git'
5
- require 'eac_ruby_utils/core_ext'
6
-
7
- module Avm
8
- module Projects
9
- module Stereotypes
10
- class GitSubtree
11
- require_sub __FILE__
12
- include Avm::Projects::Stereotype
13
-
14
- class << self
15
- def match?(path)
16
- return false if other_git_stereotype?(path)
17
- return false unless other_nogit_stereotype?(path)
18
-
19
- parent = parent_git(path.parent_path)
20
- return false unless parent
21
-
22
- ::Git.open(parent.real).remote(path.real.basename).url ? true : false
23
- end
24
-
25
- def color
26
- :green
27
- end
28
-
29
- def parent_git(parent_path)
30
- return nil unless parent_path
31
-
32
- if ::Avm::Projects::Stereotypes::Git.match?(parent_path)
33
- parent_path
34
- else
35
- parent_git(parent_path.parent_path)
36
- end
37
- end
38
-
39
- def other_git_stereotype?(path)
40
- ::Avm::Projects::Stereotypes::Git.match?(path) ||
41
- ::Avm::Projects::Stereotypes::GitSubrepo.match?(path)
42
- end
43
-
44
- def other_nogit_stereotype?(path)
45
- Avm::Projects::Stereotype.nogit_stereotypes.any? { |s| s.match?(path) }
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,28 +0,0 @@
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 Projects
9
- module Stereotypes
10
- class RubyGem
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
@@ -1,129 +0,0 @@
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/launcher/ruby/gem'
11
-
12
- module Avm
13
- module Projects
14
- module Stereotypes
15
- class RubyGem
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::Projects::Stereotypes::RubyGem.load_gemspec(gemspec)
71
- end
72
-
73
- def gem_build_uncached
74
- ::Avm::Launcher::Ruby::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
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/projects/stereotype'
4
- require 'avm/launcher/ruby/gem/specification'
5
- require 'eac_ruby_utils/core_ext'
6
-
7
- module Avm
8
- module Projects
9
- module Stereotypes
10
- class RubyGem
11
- require_sub __FILE__
12
- include Avm::Projects::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::Launcher::Ruby::Gem::Specification.new(gemspec_file)
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end