avm-tools 0.140.0 → 0.142.0

Sign up to get free protection for your applications and to get access to all the features.
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