avm-tools 0.59.0 → 0.62.2

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/cached_download.rb +39 -0
  3. data/lib/avm/eac_redmine_base0/core_update.rb +110 -0
  4. data/lib/avm/eac_redmine_base0/data_unit.rb +27 -0
  5. data/lib/avm/eac_redmine_base0/deploy.rb +36 -0
  6. data/lib/avm/eac_redmine_base0/instance.rb +38 -0
  7. data/lib/avm/launcher/context/instance_manager.rb +76 -0
  8. data/lib/avm/launcher/context/instance_manager/cached_instance.rb +37 -0
  9. data/lib/avm/launcher/context/instance_manager/cached_instances.rb +35 -0
  10. data/lib/avm/launcher/errors/base.rb +10 -0
  11. data/lib/avm/launcher/errors/non_project.rb +15 -0
  12. data/lib/avm/launcher/instances/base.rb +94 -0
  13. data/lib/avm/launcher/instances/base/cache.rb +43 -0
  14. data/lib/avm/local_projects/instance.rb +8 -1
  15. data/lib/avm/local_projects/jobs/update.rb +29 -0
  16. data/lib/avm/projects/stereotype.rb +17 -10
  17. data/lib/avm/projects/stereotypes/git/local_project_mixin.rb +19 -0
  18. data/lib/avm/projects/stereotypes/git_subrepo/warp.rb +5 -4
  19. data/lib/avm/projects/stereotypes/ruby_gem/local_project_mixin.rb +19 -0
  20. data/lib/avm/projects/stereotypes/ruby_gem/update.rb +59 -0
  21. data/lib/avm/stereotypes/eac_webapp_base0/runner/deploy.rb +3 -1
  22. data/lib/avm/sync.rb +94 -0
  23. data/lib/avm/tools/runner/eac_redmine_base0.rb +2 -2
  24. data/lib/avm/tools/runner/eac_redmine_base0/core_update.rb +67 -0
  25. data/lib/avm/tools/runner/eac_redmine_base0/deploy.rb +1 -1
  26. data/lib/avm/tools/runner/git/issue.rb +43 -4
  27. data/lib/avm/tools/runner/local_project.rb +1 -1
  28. data/lib/avm/tools/runner/local_project/update.rb +26 -0
  29. data/lib/avm/tools/version.rb +1 -1
  30. data/lib/eac_launcher/context.rb +2 -2
  31. data/lib/eac_launcher/context/instance_discovery.rb +2 -2
  32. data/lib/eac_launcher/git/base/dirty_files.rb +5 -14
  33. data/lib/eac_launcher/git/sub_warp_base.rb +3 -2
  34. data/lib/eac_launcher/instances.rb +2 -2
  35. data/lib/eac_launcher/instances/error.rb +7 -3
  36. data/lib/eac_launcher/paths/logical.rb +2 -2
  37. data/lib/eac_launcher/publish/base.rb +2 -2
  38. data/template/avm/{stereotypes/eac_redmine_base0 → eac_redmine_base0}/deploy/config/install.sh.template +0 -0
  39. data/template/avm/{stereotypes/eac_redmine_base0 → eac_redmine_base0}/deploy/config/secrets.yml +0 -0
  40. data/vendor/eac_git/lib/eac_git/local.rb +1 -1
  41. data/vendor/eac_git/lib/eac_git/local/dirty_files.rb +38 -0
  42. data/vendor/eac_git/lib/eac_git/version.rb +1 -1
  43. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb +1 -1
  44. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/identity_file.rb +2 -0
  45. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/quiet.rb +2 -0
  46. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/terminal.rb +2 -0
  47. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/list.rb +5 -0
  48. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/require_sub.rb +8 -8
  49. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  50. metadata +25 -11
  51. data/lib/avm/stereotypes/eac_redmine_base0/data_unit.rb +0 -29
  52. data/lib/avm/stereotypes/eac_redmine_base0/deploy.rb +0 -38
  53. data/lib/avm/stereotypes/eac_redmine_base0/instance.rb +0 -40
  54. data/lib/eac_launcher/context/instance_manager.rb +0 -94
  55. data/lib/eac_launcher/instances/base.rb +0 -91
  56. data/lib/eac_launcher/instances/base/cache.rb +0 -41
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'eac_ruby_utils/console/docopt_runner'
4
4
  require 'eac_ruby_utils/simple_cache'
5
- require 'avm/stereotypes/eac_redmine_base0/instance'
5
+ require 'avm/eac_redmine_base0/instance'
6
6
  require 'eac_ruby_utils/require_sub'
7
7
  ::EacRubyUtils.require_sub(__FILE__)
8
8
 
@@ -26,7 +26,7 @@ module Avm
26
26
  private
27
27
 
28
28
  def instance_uncached
29
- ::Avm::Stereotypes::EacRedmineBase0::Instance.by_id(options['<instance_id>'])
29
+ ::Avm::EacRedmineBase0::Instance.by_id(options['<instance_id>'])
30
30
  end
31
31
  end
32
32
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_redmine_base0/core_update'
4
+ require 'eac_cli/default_runner'
5
+ require 'eac_ruby_utils/console/docopt_runner'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module Avm
9
+ module Tools
10
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
11
+ class EacRedmineBase0 < ::EacRubyUtils::Console::DocoptRunner
12
+ class CoreUpdate < ::EacRubyUtils::Console::DocoptRunner
13
+ include ::EacCli::DefaultRunner
14
+
15
+ runner_definition do
16
+ arg_opt '-u', '--url', 'Core\'s package URL.'
17
+ arg_opt '-v', '--version', 'Core\'s version.'
18
+ desc 'Update instance\' core.'
19
+ end
20
+
21
+ def run
22
+ start_banner
23
+ validate
24
+ update
25
+ end
26
+
27
+ private
28
+
29
+ def start_banner
30
+ infov 'URL', url
31
+ infov 'Version', version
32
+ end
33
+
34
+ def update
35
+ ::Avm::EacRedmineBase0::CoreUpdate.new(context(:instance), version, url).run
36
+ end
37
+
38
+ def url
39
+ options.fetch('--url') || url_by_version
40
+ end
41
+
42
+ def url_by_version
43
+ options.fetch('--version').if_present do |v|
44
+ "https://www.redmine.org/releases/redmine-#{v}.tar.gz"
45
+ end
46
+ end
47
+
48
+ def validate
49
+ %w[url version].each do |attr|
50
+ fatal_error "\"#{attr}\" is blank. See avaiable options." if send(attr).blank?
51
+ end
52
+ end
53
+
54
+ def version
55
+ options.fetch('--version') || version_by_url
56
+ end
57
+
58
+ def version_by_url
59
+ options.fetch('--url').if_present do |v|
60
+ /(\d+.\d+.\d+)/.if_match(v, false) { |m| m[1] }
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/stereotypes/eac_redmine_base0/deploy'
3
+ require 'avm/eac_redmine_base0/deploy'
4
4
  require 'avm/stereotypes/eac_webapp_base0/runner/deploy'
5
5
 
6
6
  module Avm
@@ -9,6 +9,7 @@ module Avm
9
9
  class Runner < ::EacRubyUtils::Console::DocoptRunner
10
10
  class Git < ::EacRubyUtils::Console::DocoptRunner
11
11
  class Issue < ::EacRubyUtils::Console::DocoptRunner
12
+ enable_simple_cache
12
13
  include ::EacRubyUtils::Console::Speaker
13
14
 
14
15
  DOC = <<~DOCOPT
@@ -20,6 +21,8 @@ module Avm
20
21
 
21
22
  Options:
22
23
  -h --help Show this screen.
24
+ -f --uncomplete-unfail Do not exit with error if issue is not completed
25
+ or is invalid.
23
26
  -s --skip-validations=<validations> Does not validate conditions on <validations>
24
27
  (Comma separated value).
25
28
  -y --yes Does not ask for user confirmation.
@@ -28,11 +31,30 @@ module Avm
28
31
  %%VALIDATIONS%%
29
32
  DOCOPT
30
33
 
31
- def run
32
- complete = ::Avm::Git::Issue::Complete.new(git_complete_issue_options)
34
+ UNCOMPLETE_MESSAGE =
35
+
36
+ def run
37
+ banner
38
+ return unless validate
39
+
40
+ run_complete if options.fetch('complete')
41
+ success('Done!')
42
+ end
43
+
44
+ def banner
33
45
  complete.start_banner
34
- fatal_error('Some validation did not pass') unless complete.valid?
35
- complete.run if options.fetch('complete') && confirm?
46
+ end
47
+
48
+ def validate
49
+ return true if complete.valid?
50
+
51
+ uncomplete_message('Some validation did not pass')
52
+ end
53
+
54
+ def run_complete
55
+ return complete.run if confirm?
56
+
57
+ uncomplete_message('Issue was not completed')
36
58
  end
37
59
 
38
60
  def doc
@@ -41,6 +63,10 @@ module Avm
41
63
 
42
64
  private
43
65
 
66
+ def complete_uncached
67
+ ::Avm::Git::Issue::Complete.new(git_complete_issue_options)
68
+ end
69
+
44
70
  def confirm?
45
71
  options.fetch('--yes') || request_input('Confirm issue completion?', bool: true)
46
72
  end
@@ -56,6 +82,19 @@ module Avm
56
82
  def doc_validations_list
57
83
  ::Avm::Git::Issue::Complete::VALIDATIONS.keys.map { |k| " * #{k}" }.join("\n")
58
84
  end
85
+
86
+ def uncomplete_unfail?
87
+ options.fetch('--uncomplete-unfail')
88
+ end
89
+
90
+ def uncomplete_message(message)
91
+ if uncomplete_unfail?
92
+ warn(message)
93
+ else
94
+ fatal_error(message)
95
+ end
96
+ false
97
+ end
59
98
  end
60
99
  end
61
100
  end
@@ -20,7 +20,7 @@ module Avm
20
20
  private
21
21
 
22
22
  def instance_uncached
23
- ::Avm::LocalProject::Instance.new(instance_path)
23
+ ::Avm::LocalProjects::Instance.new(instance_path)
24
24
  end
25
25
 
26
26
  def instance_path_uncached
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/local_projects/jobs/update'
4
+ require 'eac_ruby_utils/console/docopt_runner'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module Tools
9
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
10
+ class LocalProject < ::EacRubyUtils::Console::DocoptRunner
11
+ class Update < ::EacRubyUtils::Console::DocoptRunner
12
+ include ::EacCli::DefaultRunner
13
+
14
+ runner_definition do
15
+ desc 'Update local project.'
16
+ end
17
+
18
+ def run
19
+ infov 'Path', context(:instance).path
20
+ ::Avm::LocalProjects::Jobs::Update.new(context(:instance)).run
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Tools
5
- VERSION = '0.59.0'
5
+ VERSION = '0.62.2'
6
6
  end
7
7
  end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/core_ext/hash/indifferent_access'
4
+ require 'avm/launcher/context/instance_manager'
4
5
  require 'eac_ruby_utils/simple_cache'
5
6
  require 'eac_ruby_utils/console/speaker'
6
7
  require 'eac_launcher/context/instance_discovery'
7
- require 'eac_launcher/context/instance_manager'
8
8
  require 'eac_launcher/context/settings'
9
9
  require 'eac_launcher/paths/logical'
10
10
  require 'eac_launcher/project'
@@ -39,7 +39,7 @@ module EacLauncher
39
39
  @settings = ::EacLauncher::Context::Settings.new(build_option(:settings_file))
40
40
  @cache_root = build_option(:cache_root)
41
41
  @publish_options = { new: false, confirm: false, stereotype: nil }
42
- @instance_manager = ::EacLauncher::Context::InstanceManager.new(self)
42
+ @instance_manager = ::Avm::Launcher::Context::InstanceManager.new(self)
43
43
  @recache = false
44
44
  end
45
45
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'ruby-progressbar'
4
- require 'eac_launcher/instances/base'
4
+ require 'avm/launcher/instances/base'
5
5
 
6
6
  module EacLauncher
7
7
  class Context
@@ -22,7 +22,7 @@ module EacLauncher
22
22
  update_progress_format(path)
23
23
  on_rescued_path_instances(path) do |r|
24
24
  if path.project?
25
- parent_instance = ::EacLauncher::Instances::Base.instanciate(path, parent_instance)
25
+ parent_instance = ::Avm::Launcher::Instances::Base.instanciate(path, parent_instance)
26
26
  r << path
27
27
  end
28
28
  children = path.children
@@ -6,24 +6,15 @@ module EacLauncher
6
6
  module Git
7
7
  class Base < ::EacLauncher::Paths::Real
8
8
  module DirtyFiles
9
- def dirty?
10
- dirty_files.any?
11
- end
9
+ delegate :dirty, to: :eac_git
12
10
 
13
11
  def dirty_files
14
- execute!('status', '--porcelain', '--untracked-files').each_line.map do |line|
15
- parse_status_line(line.gsub(/\n\z/, ''))
12
+ eac_git.dirty_files.map do |df|
13
+ ::OpenStruct.new(
14
+ df.to_h.merge(path: df.path.to_path, absolute_path: df.absolute_path.to_path)
15
+ )
16
16
  end
17
17
  end
18
-
19
- private
20
-
21
- def parse_status_line(line)
22
- m = /\A(.)(.)\s(.+)\z/.match(line)
23
- ::Kernel.raise "Status pattern does not match \"#{line}\"" unless m
24
- ::OpenStruct.new(index: m[1], worktree: m[2], path: m[3],
25
- absolute_path: ::File.expand_path(m[3], self))
26
- end
27
18
  end
28
19
  end
29
20
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_launcher/instances/error'
3
+ require 'avm/projects/stereotype'
4
+ require 'avm/launcher/errors/base'
4
5
 
5
6
  module EacLauncher
6
7
  module Git
@@ -11,7 +12,7 @@ module EacLauncher
11
12
  r = find_parent_instance(instance.parent)
12
13
  return r if r
13
14
 
14
- ::EacLauncher::Instances::Error.new('Git parent not found')
15
+ ::EacLauncher::Instances::Errors::Base.new('Git parent not found')
15
16
  end
16
17
 
17
18
  def find_parent_instance(current)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_launcher/instances/base'
4
- require 'eac_launcher/instances/error'
3
+ require 'avm/launcher/errors/base'
4
+ require 'avm/launcher/instances/base'
5
5
  require 'eac_launcher/instances/runner_helper'
6
6
  require 'eac_launcher/instances/settings'
@@ -1,8 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module EacLauncher
4
- module Instances
5
- class Error < StandardError
3
+ module Avm
4
+ module Launcher
5
+ module Instances
6
+ module Errors
7
+ class Error < StandardError
8
+ end
9
+ end
6
10
  end
7
11
  end
8
12
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/stereotypes'
3
+ require 'avm/projects/stereotypes'
4
4
  require 'eac_launcher/paths/real'
5
5
 
6
6
  module EacLauncher
@@ -68,7 +68,7 @@ module EacLauncher
68
68
  end
69
69
 
70
70
  def warped_uncached
71
- if is_a?(::EacLauncher::Instances::Base)
71
+ if is_a?(::Avm::Launcher::Instances::Base)
72
72
  stereotypes.each do |s|
73
73
  return s.warp_class.new(self) if s.warp_class
74
74
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_launcher/instances/error'
3
+ require 'avm/launcher/errors/base'
4
4
 
5
5
  module EacLauncher
6
6
  module Publish
@@ -35,7 +35,7 @@ module EacLauncher
35
35
 
36
36
  def check_with_rescue
37
37
  internal_check
38
- rescue ::EacLauncher::Instances::Error => e
38
+ rescue ::EacLauncher::Instances::Errors::Base => e
39
39
  ::EacLauncher::Publish::CheckResult.blocked("Error: #{e}")
40
40
  rescue ::EacLauncher::Git::Error => e
41
41
  ::EacLauncher::Publish::CheckResult.blocked("Git error: #{e}")
@@ -6,7 +6,7 @@ require 'eac_ruby_utils/core_ext'
6
6
  module EacGit
7
7
  # A Git repository in local filesystem.
8
8
  class Local
9
- require_sub __FILE__
9
+ require_sub __FILE__, include_modules: true
10
10
 
11
11
  common_constructor :root_path do
12
12
  self.root_path = root_path.to_pathname
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'ostruct'
5
+
6
+ module EacGit
7
+ class Local
8
+ module DirtyFiles
9
+ STATUS_LINE_PATTERN = /\A(.)(.)\s(.+)\z/.freeze
10
+
11
+ def dirty?
12
+ dirty_files.any?
13
+ end
14
+
15
+ def dirty_file?(path)
16
+ absolute_path = path.to_pathname.expand_path(root_path)
17
+ dirty_files.any? do |df|
18
+ df.absolute_path == absolute_path
19
+ end
20
+ end
21
+
22
+ def dirty_files
23
+ command('status', '--porcelain', '--untracked-files').execute!.each_line.map do |line|
24
+ parse_status_line(line.gsub(/\n\z/, ''))
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def parse_status_line(line)
31
+ STATUS_LINE_PATTERN.if_match(line) do |m|
32
+ ::OpenStruct.new(index: m[1], worktree: m[2], path: m[3].to_pathname,
33
+ absolute_path: m[3].to_pathname.expand_path(root_path))
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacGit
4
- VERSION = '0.2.0'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -3,7 +3,7 @@
3
3
  module EacRubyUtils
4
4
  module Console
5
5
  class DocoptRunner
6
- DOCOPT_ERROR_EXIT_CODE = 0x22220000
6
+ DOCOPT_ERROR_EXIT_CODE = 0xC0
7
7
 
8
8
  class << self
9
9
  def run(options = {})
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/concern'
4
+ require 'eac_ruby_utils/envs/ssh_env/dasho_options'
4
5
  require 'eac_ruby_utils/listable'
5
6
  require 'eac_ruby_utils/patches/object/if_present'
6
7
 
@@ -11,6 +12,7 @@ module EacRubyUtils
11
12
  extend ::ActiveSupport::Concern
12
13
 
13
14
  included do
15
+ include ::EacRubyUtils::Envs::SshEnv::DashoOptions
14
16
  add_nodasho_option('IdentityFile')
15
17
  end
16
18