avm 0.0.0 → 0.3.1

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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/docker/container.rb +50 -0
  3. data/lib/avm/docker/image.rb +71 -0
  4. data/lib/avm/docker/runner.rb +117 -0
  5. data/lib/avm/docker.rb +9 -0
  6. data/lib/avm/executables.rb +24 -0
  7. data/lib/avm/files/appendable/file_content.rb +24 -0
  8. data/lib/avm/files/appendable/plain_directory.rb +25 -0
  9. data/lib/avm/files/appendable/resource_base.rb +13 -0
  10. data/lib/avm/files/appendable/tar_output_command.rb +26 -0
  11. data/lib/avm/files/appendable/templatized_directory.rb +29 -0
  12. data/lib/avm/files/appendable.rb +55 -0
  13. data/lib/avm/files/appender.rb +11 -0
  14. data/lib/avm/files/deploy.rb +71 -0
  15. data/lib/avm/files/formatter/formats/base.rb +62 -0
  16. data/lib/avm/files/formatter/formats/generic_plain.rb +34 -0
  17. data/lib/avm/files/formatter/formats/html.rb +45 -0
  18. data/lib/avm/files/formatter/formats/javascript.rb +23 -0
  19. data/lib/avm/files/formatter/formats/json.rb +27 -0
  20. data/lib/avm/files/formatter/formats/php.rb +21 -0
  21. data/lib/avm/files/formatter/formats/python.rb +21 -0
  22. data/lib/avm/files/formatter/formats/ruby.rb +22 -0
  23. data/lib/avm/files/formatter/formats/xml.rb +27 -0
  24. data/lib/avm/files/formatter/formats.rb +13 -0
  25. data/lib/avm/files/formatter/utf8_assert.rb +72 -0
  26. data/lib/avm/files/formatter.rb +90 -0
  27. data/lib/avm/files/info.rb +24 -0
  28. data/lib/avm/files/rotate.rb +107 -0
  29. data/lib/avm/files.rb +9 -0
  30. data/lib/avm/git/auto_commit/commit_info.rb +23 -0
  31. data/lib/avm/git/auto_commit/rules/base.rb +39 -0
  32. data/lib/avm/git/auto_commit/rules/last.rb +19 -0
  33. data/lib/avm/git/auto_commit/rules/manual.rb +45 -0
  34. data/lib/avm/git/auto_commit/rules/new.rb +24 -0
  35. data/lib/avm/git/auto_commit/rules/nth.rb +31 -0
  36. data/lib/avm/git/auto_commit/rules/unique.rb +21 -0
  37. data/lib/avm/git/auto_commit/rules.rb +31 -0
  38. data/lib/avm/git/auto_commit_path/ruby.rb +20 -0
  39. data/lib/avm/git/auto_commit_path.rb +28 -0
  40. data/lib/avm/git/commit/class_methods.rb +31 -0
  41. data/lib/avm/git/commit/deploy.rb +38 -0
  42. data/lib/avm/git/commit/deploy_methods.rb +19 -0
  43. data/lib/avm/git/commit/diff_tree_line.rb +32 -0
  44. data/lib/avm/git/commit/file.rb +46 -0
  45. data/lib/avm/git/commit.rb +59 -0
  46. data/lib/avm/git/file_auto_fixup.rb +83 -0
  47. data/lib/avm/git/issue/complete/commits.rb +42 -0
  48. data/lib/avm/git/issue/complete/git_subrepos.rb +23 -0
  49. data/lib/avm/git/issue/complete/local_branch.rb +54 -0
  50. data/lib/avm/git/issue/complete/local_tag.rb +39 -0
  51. data/lib/avm/git/issue/complete/push.rb +54 -0
  52. data/lib/avm/git/issue/complete/remote.rb +33 -0
  53. data/lib/avm/git/issue/complete/test.rb +45 -0
  54. data/lib/avm/git/issue/complete/tracker.rb +28 -0
  55. data/lib/avm/git/issue/complete/validation.rb +31 -0
  56. data/lib/avm/git/issue/complete/validations.rb +53 -0
  57. data/lib/avm/git/issue/complete/working_tree.rb +19 -0
  58. data/lib/avm/git/issue/complete.rb +51 -0
  59. data/lib/avm/git/issue/deliver.rb +56 -0
  60. data/lib/avm/git/issue.rb +11 -0
  61. data/lib/avm/git/organize/reference_update.rb +34 -0
  62. data/lib/avm/git/organize/repository.rb +76 -0
  63. data/lib/avm/git/organize.rb +11 -0
  64. data/lib/avm/git/revision_test.rb +106 -0
  65. data/lib/avm/git/subrepo_check/parent.rb +51 -0
  66. data/lib/avm/git/subrepo_check/remote.rb +89 -0
  67. data/lib/avm/git/subrepo_check/show_result.rb +32 -0
  68. data/lib/avm/git/subrepo_check.rb +38 -0
  69. data/lib/avm/git/subrepo_checks.rb +59 -0
  70. data/lib/avm/git.rb +10 -0
  71. data/lib/avm/instances/docker_image.rb +15 -0
  72. data/lib/avm/result.rb +86 -0
  73. data/lib/avm/version.rb +1 -1
  74. data/lib/avm/version_number.rb +45 -0
  75. metadata +143 -3
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Git
7
+ class SubrepoCheck
8
+ require_sub __FILE__, include_modules: true
9
+ enable_speaker
10
+ enable_simple_cache
11
+
12
+ BLANK_TEXT = 'BLANK'
13
+
14
+ common_constructor :subrepo, :options
15
+
16
+ def blank_text
17
+ BLANK_TEXT
18
+ end
19
+
20
+ def check_remote?
21
+ options.fetch(:check_remote) ? true : false
22
+ end
23
+
24
+ def fix_parent?
25
+ options.fetch(:fix_parent) ? true : false
26
+ end
27
+
28
+ private
29
+
30
+ def result_uncached
31
+ return ::Avm::Result.error('Parent failed') if parent_result.error?
32
+ return ::Avm::Result.error('Remote failed') if remote_result.error?
33
+
34
+ ::Avm::Result.success('Parent and remote ok')
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/git/subrepo_check'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module Git
8
+ class SubrepoChecks
9
+ enable_speaker
10
+ enable_simple_cache
11
+ attr_accessor :check_remote, :fix_parent
12
+ common_constructor :repository
13
+
14
+ def add_all_subrepos
15
+ add_subrepos(
16
+ *repository.command('subrepo', '-q', 'status').execute!.split("\n").map(&:strip)
17
+ .select(&:present?)
18
+ )
19
+ end
20
+
21
+ def add_subrepos(*subpath_list)
22
+ subpath_list.each do |subpath|
23
+ subpaths.add(subpath)
24
+ end
25
+ reset_cache
26
+ self
27
+ end
28
+
29
+ def check_options
30
+ { fix_parent: fix_parent, check_remote: check_remote }
31
+ end
32
+
33
+ def show_result
34
+ checks.each(&:show_result)
35
+ infov 'Result', result.label
36
+ end
37
+
38
+ private
39
+
40
+ def checks_uncached
41
+ subpaths.map do |subpath|
42
+ ::Avm::Git::SubrepoCheck.new(repository.subrepo(subpath), check_options)
43
+ end
44
+ end
45
+
46
+ def result_uncached
47
+ error_count = checks.count { |check| check.result.error? }
48
+ ::Avm::Result.success_or_error(
49
+ error_count.zero?,
50
+ "#{error_count} of #{checks.count} subrepos failed"
51
+ )
52
+ end
53
+
54
+ def subpaths
55
+ @subpaths ||= ::Set.new
56
+ end
57
+ end
58
+ end
59
+ end
data/lib/avm/git.rb ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+ ::EacRubyUtils.require_sub(__FILE__)
5
+
6
+ module Avm
7
+ module Git
8
+ DEFAULT_REMOTE_NAME = 'origin'
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/docker/image'
4
+
5
+ module Avm
6
+ module Instances
7
+ class DockerImage < ::Avm::Docker::Image
8
+ attr_accessor :instance
9
+
10
+ def stereotype_tag
11
+ instance.id
12
+ end
13
+ end
14
+ end
15
+ end
data/lib/avm/result.rb ADDED
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'colorized_string'
4
+ require 'eac_ruby_utils/listable'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ class Result < ::SimpleDelegator
9
+ include ::EacRubyUtils::Listable
10
+
11
+ lists.add_string :type, :success, :error, :neutral, :pending, :outdated
12
+
13
+ lists.type.values.each do |type| # rubocop:disable Style/HashEachMethods
14
+ class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
15
+ def self.#{type}(value)
16
+ new(value, TYPE_#{type.upcase})
17
+ end
18
+ RUBY_EVAL
19
+ end
20
+
21
+ TYPE_SUCCESS_COLOR = 'green'
22
+ TYPE_ERROR_COLOR = 'red'
23
+ TYPE_NEUTRAL_COLOR = 'light_black'
24
+ TYPE_PENDING_COLOR = 'yellow'
25
+ TYPE_OUTDATED_COLOR = 'blue'
26
+
27
+ class << self
28
+ # Return Avm::Result.success(success_value) if +success+ is truthy.
29
+ # Return Avm::Result.error(error_value || success_value) if +success+ is falsely.
30
+ # @return [Avm::Result]
31
+ def success_or_error(success, success_value, error_value = nil)
32
+ if success
33
+ self.success(success_value)
34
+ else
35
+ error(error_value.presence || success_value)
36
+ end
37
+ end
38
+ end
39
+
40
+ attr_reader :type
41
+
42
+ def initialize(value, type)
43
+ super(value)
44
+ validate_type(type)
45
+ @type = type
46
+ end
47
+
48
+ def label
49
+ label_fg
50
+ end
51
+
52
+ def label_fg
53
+ ColorizedString.new(to_s).send(type_color)
54
+ end
55
+
56
+ def label_bg
57
+ ColorizedString.new(to_s).light_white.send("on_#{type_color}")
58
+ end
59
+
60
+ def type_color
61
+ self.class.const_get("type_#{type}_color".upcase)
62
+ end
63
+
64
+ lists.type.values.each do |type| # rubocop:disable Style/HashEachMethods
65
+ class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
66
+ def #{type}?
67
+ @type == '#{type}'
68
+ end
69
+ RUBY_EVAL
70
+ end
71
+
72
+ private
73
+
74
+ def validate_type(type)
75
+ return if self.class.lists.type.values.include?(type)
76
+
77
+ raise "Tipo desconhecido: \"#{type}\" (Válido: #{self.class.lists.type.values.join(', ')})"
78
+ end
79
+
80
+ class Error < StandardError
81
+ def to_result
82
+ ::Avm::Result.error(message)
83
+ end
84
+ end
85
+ end
86
+ end
data/lib/avm/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Avm
4
- VERSION = '0.0.0'
4
+ VERSION = '0.3.1'
5
5
  end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ # A sequence of segments of integer versions (Ex.: 2, 1.0.1, 3.0.0.0.0).
5
+ class VersionNumber
6
+ include ::Comparable
7
+
8
+ SEGMENT_SEPARATOR = '.'
9
+
10
+ class << self
11
+ def segments_from_mixed(segments)
12
+ (segments.is_a?(::Enumerable) ? segments.to_a : segments.to_s.split(SEGMENT_SEPARATOR))
13
+ .map(&:to_i)
14
+ end
15
+ end
16
+
17
+ attr_reader :segments
18
+
19
+ def initialize(segments)
20
+ @segments = self.class.segments_from_mixed(segments).freeze
21
+ end
22
+
23
+ delegate :[], to: :segments
24
+
25
+ def <=>(other)
26
+ segments <=> other.segments
27
+ end
28
+
29
+ def to_s
30
+ segments.join(SEGMENT_SEPARATOR)
31
+ end
32
+
33
+ # @return [Avm::Version]
34
+ def increment_segment(segment_index)
35
+ x = [segments.count, segment_index + 1].max.times.map do |index|
36
+ value = index < segments.count ? segments[index] : 0
37
+ next value if index < segment_index
38
+ next value + 1 if index == segment_index
39
+
40
+ 0
41
+ end
42
+ self.class.new x
43
+ end
44
+ end
45
+ end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo H. Bogoni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-04 00:00:00.000000000 Z
11
+ date: 2021-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: eac_docker
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: eac_git
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.6'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.6'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: eac_ruby_utils
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +52,46 @@ dependencies:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
54
  version: '0.68'
55
+ - !ruby/object:Gem::Dependency
56
+ name: eac_templates
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.1'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 0.1.1
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '0.1'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 0.1.1
75
+ - !ruby/object:Gem::Dependency
76
+ name: aranha-parsers
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.7'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 0.7.2
85
+ type: :development
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '0.7'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 0.7.2
27
95
  - !ruby/object:Gem::Dependency
28
96
  name: eac_ruby_gem_support
29
97
  requirement: !ruby/object:Gem::Requirement
@@ -45,7 +113,79 @@ extensions: []
45
113
  extra_rdoc_files: []
46
114
  files:
47
115
  - lib/avm.rb
116
+ - lib/avm/docker.rb
117
+ - lib/avm/docker/container.rb
118
+ - lib/avm/docker/image.rb
119
+ - lib/avm/docker/runner.rb
120
+ - lib/avm/executables.rb
121
+ - lib/avm/files.rb
122
+ - lib/avm/files/appendable.rb
123
+ - lib/avm/files/appendable/file_content.rb
124
+ - lib/avm/files/appendable/plain_directory.rb
125
+ - lib/avm/files/appendable/resource_base.rb
126
+ - lib/avm/files/appendable/tar_output_command.rb
127
+ - lib/avm/files/appendable/templatized_directory.rb
128
+ - lib/avm/files/appender.rb
129
+ - lib/avm/files/deploy.rb
130
+ - lib/avm/files/formatter.rb
131
+ - lib/avm/files/formatter/formats.rb
132
+ - lib/avm/files/formatter/formats/base.rb
133
+ - lib/avm/files/formatter/formats/generic_plain.rb
134
+ - lib/avm/files/formatter/formats/html.rb
135
+ - lib/avm/files/formatter/formats/javascript.rb
136
+ - lib/avm/files/formatter/formats/json.rb
137
+ - lib/avm/files/formatter/formats/php.rb
138
+ - lib/avm/files/formatter/formats/python.rb
139
+ - lib/avm/files/formatter/formats/ruby.rb
140
+ - lib/avm/files/formatter/formats/xml.rb
141
+ - lib/avm/files/formatter/utf8_assert.rb
142
+ - lib/avm/files/info.rb
143
+ - lib/avm/files/rotate.rb
144
+ - lib/avm/git.rb
145
+ - lib/avm/git/auto_commit/commit_info.rb
146
+ - lib/avm/git/auto_commit/rules.rb
147
+ - lib/avm/git/auto_commit/rules/base.rb
148
+ - lib/avm/git/auto_commit/rules/last.rb
149
+ - lib/avm/git/auto_commit/rules/manual.rb
150
+ - lib/avm/git/auto_commit/rules/new.rb
151
+ - lib/avm/git/auto_commit/rules/nth.rb
152
+ - lib/avm/git/auto_commit/rules/unique.rb
153
+ - lib/avm/git/auto_commit_path.rb
154
+ - lib/avm/git/auto_commit_path/ruby.rb
155
+ - lib/avm/git/commit.rb
156
+ - lib/avm/git/commit/class_methods.rb
157
+ - lib/avm/git/commit/deploy.rb
158
+ - lib/avm/git/commit/deploy_methods.rb
159
+ - lib/avm/git/commit/diff_tree_line.rb
160
+ - lib/avm/git/commit/file.rb
161
+ - lib/avm/git/file_auto_fixup.rb
162
+ - lib/avm/git/issue.rb
163
+ - lib/avm/git/issue/complete.rb
164
+ - lib/avm/git/issue/complete/commits.rb
165
+ - lib/avm/git/issue/complete/git_subrepos.rb
166
+ - lib/avm/git/issue/complete/local_branch.rb
167
+ - lib/avm/git/issue/complete/local_tag.rb
168
+ - lib/avm/git/issue/complete/push.rb
169
+ - lib/avm/git/issue/complete/remote.rb
170
+ - lib/avm/git/issue/complete/test.rb
171
+ - lib/avm/git/issue/complete/tracker.rb
172
+ - lib/avm/git/issue/complete/validation.rb
173
+ - lib/avm/git/issue/complete/validations.rb
174
+ - lib/avm/git/issue/complete/working_tree.rb
175
+ - lib/avm/git/issue/deliver.rb
176
+ - lib/avm/git/organize.rb
177
+ - lib/avm/git/organize/reference_update.rb
178
+ - lib/avm/git/organize/repository.rb
179
+ - lib/avm/git/revision_test.rb
180
+ - lib/avm/git/subrepo_check.rb
181
+ - lib/avm/git/subrepo_check/parent.rb
182
+ - lib/avm/git/subrepo_check/remote.rb
183
+ - lib/avm/git/subrepo_check/show_result.rb
184
+ - lib/avm/git/subrepo_checks.rb
185
+ - lib/avm/instances/docker_image.rb
186
+ - lib/avm/result.rb
48
187
  - lib/avm/version.rb
188
+ - lib/avm/version_number.rb
49
189
  homepage:
50
190
  licenses: []
51
191
  metadata: {}
@@ -64,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
204
  - !ruby/object:Gem::Version
65
205
  version: '0'
66
206
  requirements: []
67
- rubygems_version: 3.0.9
207
+ rubygems_version: 3.1.6
68
208
  signing_key:
69
209
  specification_version: 4
70
210
  summary: Ruby base library for Agora Vai! Methodology (https://avm.esquiloazul.tech).