avm 0.5.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/data/package/dump.rb +3 -3
  3. data/lib/avm/{files → data}/rotate.rb +1 -1
  4. data/lib/avm/docker/runner.rb +8 -0
  5. data/lib/avm/instances/application.rb +25 -0
  6. data/lib/avm/instances/base/auto_values/access.rb +40 -0
  7. data/lib/avm/instances/base/auto_values/admin.rb +19 -0
  8. data/lib/avm/instances/base/auto_values/data.rb +26 -0
  9. data/lib/avm/instances/base/auto_values/database.rb +76 -0
  10. data/lib/avm/instances/base/auto_values/filesystem.rb +45 -0
  11. data/lib/avm/instances/base/auto_values/mailer.rb +34 -0
  12. data/lib/avm/instances/base/auto_values/ruby.rb +15 -0
  13. data/lib/avm/instances/base/auto_values/source.rb +15 -0
  14. data/lib/avm/instances/base/auto_values/system.rb +23 -0
  15. data/lib/avm/instances/base/auto_values/web.rb +46 -0
  16. data/lib/avm/instances/base/auto_values.rb +21 -0
  17. data/lib/avm/instances/base/dockerizable.rb +45 -0
  18. data/lib/avm/instances/base/entry_keys.rb +22 -0
  19. data/lib/avm/instances/base.rb +64 -0
  20. data/lib/avm/instances/entries.rb +43 -0
  21. data/lib/avm/instances/entry.rb +54 -0
  22. data/lib/avm/instances/entry_keys.rb +57 -0
  23. data/lib/avm/instances/runner.rb +38 -0
  24. data/lib/avm/instances.rb +8 -0
  25. data/lib/avm/jobs/base.rb +1 -0
  26. data/lib/avm/registry/base.rb +65 -0
  27. data/lib/avm/registry.rb +29 -0
  28. data/lib/avm/rspec/setup.rb +22 -0
  29. data/lib/avm/rspec/shared_examples/in_avm_registry.rb +11 -0
  30. data/lib/avm/rspec/shared_examples/not_in_avm_registry.rb +14 -0
  31. data/lib/avm/{git/organize.rb → rspec.rb} +2 -4
  32. data/lib/avm/runners/base.rb +31 -0
  33. data/lib/avm/scms/base.rb +28 -0
  34. data/lib/avm/scms/commit.rb +43 -0
  35. data/lib/avm/self/docker_image.rb +14 -0
  36. data/lib/avm/self/instance/entry_keys.rb +12 -0
  37. data/lib/avm/self/instance.rb +24 -0
  38. data/lib/avm/source_stereotypes/base.rb +21 -0
  39. data/lib/avm/sources/base.rb +22 -0
  40. data/lib/avm/version.rb +1 -1
  41. metadata +58 -67
  42. data/lib/avm/files/appendable/file_content.rb +0 -24
  43. data/lib/avm/files/appendable/plain_directory.rb +0 -25
  44. data/lib/avm/files/appendable/resource_base.rb +0 -13
  45. data/lib/avm/files/appendable/tar_output_command.rb +0 -26
  46. data/lib/avm/files/appendable/templatized_directory.rb +0 -29
  47. data/lib/avm/files/appendable.rb +0 -55
  48. data/lib/avm/files/appender.rb +0 -11
  49. data/lib/avm/files/deploy.rb +0 -71
  50. data/lib/avm/files/formatter/formats/base.rb +0 -62
  51. data/lib/avm/files/formatter/formats/generic_plain.rb +0 -34
  52. data/lib/avm/files/formatter/formats/html.rb +0 -45
  53. data/lib/avm/files/formatter/formats/javascript.rb +0 -24
  54. data/lib/avm/files/formatter/formats/json.rb +0 -27
  55. data/lib/avm/files/formatter/formats/php.rb +0 -22
  56. data/lib/avm/files/formatter/formats/python.rb +0 -22
  57. data/lib/avm/files/formatter/formats/ruby.rb +0 -22
  58. data/lib/avm/files/formatter/formats/xml.rb +0 -28
  59. data/lib/avm/files/formatter/formats.rb +0 -13
  60. data/lib/avm/files/formatter/utf8_assert.rb +0 -74
  61. data/lib/avm/files/formatter.rb +0 -90
  62. data/lib/avm/files.rb +0 -9
  63. data/lib/avm/git/auto_commit/commit_info.rb +0 -23
  64. data/lib/avm/git/auto_commit/rules/base.rb +0 -39
  65. data/lib/avm/git/auto_commit/rules/last.rb +0 -19
  66. data/lib/avm/git/auto_commit/rules/manual.rb +0 -45
  67. data/lib/avm/git/auto_commit/rules/new.rb +0 -24
  68. data/lib/avm/git/auto_commit/rules/nth.rb +0 -31
  69. data/lib/avm/git/auto_commit/rules/unique.rb +0 -21
  70. data/lib/avm/git/auto_commit/rules.rb +0 -31
  71. data/lib/avm/git/auto_commit_path/ruby.rb +0 -20
  72. data/lib/avm/git/auto_commit_path.rb +0 -28
  73. data/lib/avm/git/commit/class_methods.rb +0 -31
  74. data/lib/avm/git/commit/deploy.rb +0 -38
  75. data/lib/avm/git/commit/deploy_methods.rb +0 -19
  76. data/lib/avm/git/commit/diff_tree_line.rb +0 -32
  77. data/lib/avm/git/commit/file.rb +0 -46
  78. data/lib/avm/git/commit.rb +0 -59
  79. data/lib/avm/git/file_auto_fixup.rb +0 -83
  80. data/lib/avm/git/issue/complete/commits.rb +0 -42
  81. data/lib/avm/git/issue/complete/git_subrepos.rb +0 -23
  82. data/lib/avm/git/issue/complete/local_branch.rb +0 -54
  83. data/lib/avm/git/issue/complete/local_tag.rb +0 -39
  84. data/lib/avm/git/issue/complete/push.rb +0 -54
  85. data/lib/avm/git/issue/complete/remote.rb +0 -33
  86. data/lib/avm/git/issue/complete/test.rb +0 -45
  87. data/lib/avm/git/issue/complete/tracker.rb +0 -28
  88. data/lib/avm/git/issue/complete/validation.rb +0 -31
  89. data/lib/avm/git/issue/complete/validations.rb +0 -53
  90. data/lib/avm/git/issue/complete/working_tree.rb +0 -19
  91. data/lib/avm/git/issue/complete.rb +0 -51
  92. data/lib/avm/git/issue/deliver.rb +0 -56
  93. data/lib/avm/git/issue.rb +0 -11
  94. data/lib/avm/git/organize/reference_update.rb +0 -34
  95. data/lib/avm/git/organize/repository.rb +0 -76
  96. data/lib/avm/git/revision_test.rb +0 -105
  97. data/lib/avm/git/subrepo_check/parent.rb +0 -51
  98. data/lib/avm/git/subrepo_check/remote.rb +0 -89
  99. data/lib/avm/git/subrepo_check/show_result.rb +0 -32
  100. data/lib/avm/git/subrepo_check.rb +0 -38
  101. data/lib/avm/git/subrepo_checks.rb +0 -59
  102. data/lib/avm/git.rb +0 -10
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/tools/core_ext'
4
- require 'clipboard'
5
-
6
- module Avm
7
- module Git
8
- module Issue
9
- class Deliver
10
- enable_simple_cache
11
- enable_speaker
12
-
13
- common_constructor :git_repo
14
-
15
- def run
16
- push
17
- clipboard_copy_tracker_message
18
- true
19
- end
20
-
21
- def start_banner
22
- infov 'Branch name', branch_name
23
- infov 'Commit ID', branch_commit_id
24
- infov 'Push arguments', ::Shellwords.join(push_args)
25
- end
26
-
27
- private
28
-
29
- def branch_commit_id
30
- git_repo.rev_parse(branch_name)
31
- end
32
-
33
- def branch_name_uncached
34
- git_repo.command('rev-parse', '--abbrev-ref', 'HEAD').execute!.strip
35
- end
36
-
37
- def clipboard_copy_tracker_message
38
- ::Clipboard.copy(textile_tracker_message)
39
- infov 'Copied to clipboard', textile_tracker_message
40
- end
41
-
42
- def push
43
- git_repo.command(*push_args).system!
44
- end
45
-
46
- def push_args
47
- %w[push origin --force] + ["#{branch_name}:refs/heads/#{branch_name}"]
48
- end
49
-
50
- def textile_tracker_message
51
- "#{branch_name}: commit:#{branch_commit_id}."
52
- end
53
- end
54
- end
55
- end
56
- end
data/lib/avm/git/issue.rb DELETED
@@ -1,11 +0,0 @@
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
- module Issue
9
- end
10
- end
11
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module Avm
6
- module Git
7
- module Organize
8
- class ReferenceUpdate
9
- enable_listable
10
- lists.add_symbol :operation, :remove
11
-
12
- common_constructor :repository, :reference, :operation
13
-
14
- def run_operation
15
- send("run_operation_#{operation}")
16
- end
17
-
18
- def to_s
19
- "#{reference} [#{operation}]"
20
- end
21
-
22
- private
23
-
24
- def reference_pathname
25
- repository.refs_root.join(reference)
26
- end
27
-
28
- def run_operation_remove
29
- reference_pathname.unlink
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module Avm
6
- module Git
7
- module Organize
8
- class Repository
9
- enable_simple_cache
10
- common_constructor :eac_git_local
11
-
12
- def collected_references
13
- @collected_references || []
14
- end
15
-
16
- def collect_subrepos
17
- collect_references_with_pattern(
18
- %r{\Asubrepo/},
19
- ::Avm::Git::Organize::ReferenceUpdate::OPERATION_REMOVE
20
- )
21
- collect_references_with_pattern(
22
- %r{\Aheads/subrepo/},
23
- ::Avm::Git::Organize::ReferenceUpdate::OPERATION_REMOVE
24
- )
25
- end
26
-
27
- def collect_originals
28
- collect_references_with_pattern(
29
- %r{\Aoriginal/},
30
- ::Avm::Git::Organize::ReferenceUpdate::OPERATION_REMOVE
31
- )
32
- end
33
-
34
- def all_branches
35
- eac_git_local.execute!
36
- end
37
-
38
- delegate :to_s, to: :eac_git_local
39
-
40
- private
41
-
42
- def all_references
43
- ::Pathname.glob("#{refs_root}/**/*").select(&:file?)
44
- .map { |p| p.relative_path_from(refs_root).to_path }
45
- end
46
-
47
- def reference_update_by_ref(reference)
48
- collected_references.find { |ru| ru.reference == reference }
49
- end
50
-
51
- def collect_reference(reference, operation)
52
- new_ru = ::Avm::Git::Organize::ReferenceUpdate.new(self, reference, operation)
53
- reference_update_by_ref(new_ru.reference).if_present do |ru_found|
54
- raise "Reference #{new_ru} already added (#{ru_found})"
55
- end
56
- @collected_references ||= []
57
- @collected_references << new_ru
58
- end
59
-
60
- def collect_references_with_pattern(pattern, operation)
61
- references_with_pattern(pattern).each do |reference|
62
- collect_reference(reference, operation)
63
- end
64
- end
65
-
66
- def references_with_pattern(pattern)
67
- all_references.select { |reference| pattern.if_match(reference, false) }
68
- end
69
-
70
- def refs_root_uncached
71
- eac_git_local.root_path / '.git' / 'refs'
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,105 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
- require 'eac_ruby_utils/ruby'
5
-
6
- module Avm
7
- module Git
8
- class RevisionTest
9
- enable_simple_cache
10
- enable_speaker
11
- common_constructor :git, :sha1, :options
12
-
13
- def banner
14
- infov 'Revision to test', sha1
15
- ::EacRubyUtils::Speaker.context.on(::EacCli::Speaker.new(err_line_prefix: ' ')) do
16
- revision_banner
17
- end
18
- end
19
-
20
- def successful_label
21
- successful?.to_s.send((successful? ? :green : :red))
22
- end
23
-
24
- def to_s
25
- sha1
26
- end
27
-
28
- def successful?
29
- successful
30
- end
31
-
32
- private
33
-
34
- def checkout_revision
35
- infom 'Checking out revision...'
36
- git.execute!('checkout', sha1)
37
- end
38
-
39
- def commit_uncached
40
- ::Avm::Git::Commit.new(git, sha1)
41
- end
42
-
43
- def git_absolute_path
44
- ::File.expand_path(git.to_s)
45
- end
46
-
47
- def revision_banner
48
- infov '* Subject', commit.subject
49
- infov '* Success?', successful_label
50
- infov '* STDOUT', stdout_cache.content_path
51
- infov '* STDERR', stderr_cache.content_path
52
- end
53
-
54
- def root_cache
55
- fs_cache.child(git_absolute_path.parameterize, sha1,
56
- options.fetch(:test_command).to_s.parameterize)
57
- end
58
-
59
- def run_test
60
- infom "Running test command \"#{::Shellwords.join(test_command_args)}\"" \
61
- " on \"#{git_absolute_path}\"..."
62
- result = ::EacRubyUtils::Ruby.on_clean_environment { test_command.execute }
63
- infom 'Test done'
64
- write_result_cache(result)
65
- end
66
-
67
- def stdout_cache
68
- root_cache.child('stdout')
69
- end
70
-
71
- def stderr_cache
72
- root_cache.child('stderr')
73
- end
74
-
75
- def successful_cache
76
- root_cache.child('successful')
77
- end
78
-
79
- def successful_uncached
80
- if options.fetch(:no_cache) || !successful_cache.cached?
81
- checkout_revision
82
- run_test
83
- end
84
- successful_cache.read == 'true'
85
- end
86
-
87
- def test_command
88
- ::EacRubyUtils::Envs.local.command(*test_command_args).chdir(git.to_s)
89
- end
90
-
91
- def test_command_args
92
- r = ::Shellwords.split(options.fetch(:test_command).to_s)
93
- return r if r.any?
94
-
95
- raise 'No command found'
96
- end
97
-
98
- def write_result_cache(result)
99
- stdout_cache.write(result[:stdout])
100
- stderr_cache.write(result[:stderr])
101
- successful_cache.write(result[:exit_code].zero? ? 'true' : 'false')
102
- end
103
- end
104
- end
105
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/result'
4
- require 'eac_ruby_utils/core_ext'
5
-
6
- module Avm
7
- module Git
8
- class SubrepoCheck
9
- module Parent
10
- def fix_parent
11
- return if parent_result.success?
12
-
13
- info(' Fixing...')
14
- self.parent_hash = expected_parent_hash
15
- info_banner
16
- end
17
-
18
- private
19
-
20
- def expected_parent_hash_uncached
21
- subrepo.local.rev_parse("#{last_file_change_rev}^")
22
- end
23
-
24
- def last_file_change_rev
25
- subrepo.local.command('log', '-n', '1', '--pretty=format:%H', '--',
26
- subrepo.config_relative_path.to_path).execute!.strip
27
- end
28
-
29
- def parent_hash
30
- subrepo.parent_commit_id
31
- end
32
-
33
- def parent_hash=(new_hash)
34
- subrepo.config.parent_commit_id = new_hash
35
- subrepo.write_config
36
- end
37
-
38
- def parent_hash_ok?
39
- return false if expected_parent_hash.blank? || parent_hash.blank?
40
-
41
- expected_parent_hash == parent_hash
42
- end
43
-
44
- def parent_result_uncached
45
- ::Avm::Result.success_or_error(parent_hash_ok?,
46
- parent_hash.presence || blank_text)
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,89 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/result'
4
- require 'eac_ruby_utils/core_ext'
5
-
6
- module Avm
7
- module Git
8
- class SubrepoCheck
9
- module Remote
10
- private
11
-
12
- def fetch_uncached
13
- subrepo.command('clean').execute!
14
- subrepo.command('fetch').execute!
15
- end
16
-
17
- def check_remote_disabled?
18
- !check_remote?
19
- end
20
-
21
- def check_remote_disabled_result
22
- ::Avm::Result.neutral('Check remote disabled')
23
- end
24
-
25
- def local_descend_remote?
26
- local_id.present? && remote_id.present? && subrepo.local.descendant?(local_id, remote_id)
27
- end
28
-
29
- def local_descend_remote_result
30
- ::Avm::Result.pending(remote_result_value)
31
- end
32
-
33
- def local_id_uncached
34
- fetch
35
- subrepo.command('branch', '--force').execute!
36
- subrepo.local.rev_parse("subrepo/#{subrepo.subpath}")
37
- end
38
-
39
- def remote_descend_local?
40
- local_id.present? && remote_id.present? && subrepo.local.descendant?(remote_id, local_id)
41
- end
42
-
43
- def remote_descend_local_result
44
- ::Avm::Result.outdated(remote_result_value)
45
- end
46
-
47
- def remote_branches
48
- ['', 'refs/heads/', 'refs/tags/'].map { |prefix| "#{prefix}#{subrepo.remote_branch}" }
49
- end
50
-
51
- def remote_id_uncached
52
- ls_result = subrepo.remote.ls
53
- remote_branches.each do |b|
54
- return ls_result[b] if ls_result[b].present?
55
- end
56
- nil
57
- end
58
-
59
- def remote_result_uncached
60
- %w[check_remote_disabled same_ids local_descend_remote remote_descend_local]
61
- .each do |condition|
62
- return send("#{condition}_result") if send("#{condition}?")
63
- end
64
-
65
- ::Avm::Result.error(remote_result_value)
66
- end
67
-
68
- def remote_result_value
69
- local_s = local_id.presence || blank_text
70
- remote_s = remote_id.presence || blank_text
71
-
72
- if local_s == remote_s
73
- "[L/R=#{local_s}]"
74
- else
75
- "[L=#{local_s}, R=#{remote_s}]"
76
- end
77
- end
78
-
79
- def same_ids?
80
- local_id.present? && remote_id.present? && local_id == remote_id
81
- end
82
-
83
- def same_ids_result
84
- ::Avm::Result.success(remote_result_value)
85
- end
86
- end
87
- end
88
- end
89
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module Avm
6
- module Git
7
- class SubrepoCheck
8
- module ShowResult
9
- def show_result
10
- out(subrepo.subpath.to_path.cyan)
11
- out_attr('parent', parent_result.label)
12
- run_fix_parent
13
- out_attr('remote', remote_result.label)
14
- out("\n")
15
- end
16
-
17
- def run_fix_parent
18
- return unless fix_parent?
19
- return unless parent_result.error?
20
-
21
- out('|Fixing...'.white)
22
- self.parent_hash = expected_parent_hash
23
- out_attr('new parent', parent_result.label)
24
- end
25
-
26
- def out_attr(key, value)
27
- out('|' + "#{key}=".white + value)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,38 +0,0 @@
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
@@ -1,59 +0,0 @@
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 DELETED
@@ -1,10 +0,0 @@
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