eac_tools 0.87.1 → 0.89.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +27 -32
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/sub/avm/lib/avm/applications/base/local_source.rb +6 -1
  5. data/sub/avm/lib/avm/launcher/context/instance_discovery/root_instance_paths.rb +53 -0
  6. data/sub/avm/lib/avm/launcher/context/instance_discovery.rb +25 -6
  7. data/sub/avm/lib/avm/launcher/context.rb +3 -3
  8. data/sub/avm/lib/avm/rspec/setup.rb +2 -1
  9. data/sub/avm/lib/avm/rspec/shared_examples/entries_values.rb +1 -3
  10. data/sub/avm/lib/avm/rspec/shared_examples/with_config.rb +11 -0
  11. data/sub/avm/lib/avm/version.rb +1 -1
  12. data/sub/avm/spec/lib/avm/launcher/context_spec.rb +11 -0
  13. data/sub/avm/spec/lib/avm/launcher/context_spec_files/config.yml +9 -0
  14. data/sub/avm/spec/lib/avm/launcher/instances/base_spec.rb +7 -8
  15. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/config.yml +5 -0
  16. data/sub/avm/spec/spec_helper/{eac_launcher.rb → launcher_context.rb} +34 -11
  17. metadata +12 -75
  18. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/avm-tools_stub/avm-tools.gemspec +0 -29
  19. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/avm-tools_stub/lib/avm/tools/version.rb +0 -7
  20. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/avm-tools_stub/lib/avm/tools.rb +0 -6
  21. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/ruby_gem_stub/lib/ruby_gem_stub/version.rb +0 -5
  22. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/ruby_gem_stub/lib/ruby_gem_stub.rb +0 -3
  23. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/ruby_gem_stub/ruby_gem_stub.gemspec +0 -16
  24. data/sub/avm-eac_redmine_base0/Gemfile +0 -8
  25. data/sub/avm-eac_redmine_base0/avm-eac_redmine_base0.gemspec +0 -27
  26. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/apache_host.rb +0 -12
  27. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/database.rb +0 -30
  28. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/files.rb +0 -22
  29. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/gitolite.rb +0 -55
  30. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/install.rb +0 -46
  31. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/nodejs.rb +0 -22
  32. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/web.rb +0 -20
  33. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base.rb +0 -59
  34. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/deploy.rb +0 -19
  35. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/docker_image.rb +0 -106
  36. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/entity_base.rb +0 -35
  37. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/project.rb +0 -26
  38. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/root.rb +0 -21
  39. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/wiki_page.rb +0 -54
  40. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api.rb +0 -14
  41. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/docker.rb +0 -17
  42. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page/read.rb +0 -27
  43. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page/write.rb +0 -70
  44. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page.rb +0 -30
  45. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project.rb +0 -26
  46. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project_rename.rb +0 -56
  47. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners.rb +0 -14
  48. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances.rb +0 -11
  49. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/base.rb +0 -36
  50. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/core_update.rb +0 -131
  51. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/runners/core_update.rb +0 -65
  52. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/runners/docker.rb +0 -19
  53. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/runners.rb +0 -13
  54. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources.rb +0 -11
  55. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/version.rb +0 -7
  56. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0.rb +0 -9
  57. data/sub/avm-eac_redmine_base0/locale/en.yml +0 -6
  58. data/sub/avm-eac_redmine_base0/locale/pt-BR.yml +0 -6
  59. data/sub/avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0/instances/apache_host_spec.rb +0 -22
  60. data/sub/avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0/instances/apache_host_spec_files/apache_host_spec_no_ssl_content.conf +0 -11
  61. data/sub/avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0/instances/base/gitolite_spec.rb +0 -26
  62. data/sub/avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0/instances/base/gitolite_spec_files/config.yml +0 -10
  63. data/sub/avm-eac_redmine_base0/spec/rubocop_spec.rb +0 -3
  64. data/sub/avm-eac_redmine_base0/spec/spec_helper.rb +0 -5
  65. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/deploy/config/install.sh.template +0 -45
  66. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/deploy/config/secrets.yml +0 -8
  67. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/Dockerfile.template +0 -33
  68. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_host_dockerfile +0 -8
  69. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_http_virtualhost.conf.template +0 -10
  70. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_https_virtualhost.conf.template +0 -16
  71. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_path_dockerfile +0 -5
  72. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/start.sh.template +0 -52
  73. /data/sub/avm/spec/spec_helper/{eac_launcher → launcher_context}/settings.yml +0 -0
@@ -1,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
- require 'avm/eac_redmine_base0/instances/deploy'
5
- require 'avm/eac_ubuntu_base0/instances/base'
6
- require 'avm/instances/docker_image'
7
- require 'eac_templates/core_ext'
8
-
9
- module Avm
10
- module EacRedmineBase0
11
- module Instances
12
- class DockerImage < ::Avm::Instances::DockerImage
13
- enable_simple_cache
14
-
15
- APACHE_HOST_DOCKERFILE_SUBPATH = 'apache_host_dockerfile'
16
- APACHE_PATH_DOCKERFILE_SUBPATH = 'apache_path_dockerfile'
17
- INSTALLER_TARGET_TASK_WITH_WEB_PATH_BLANK = 'redmine_as_apache_base'
18
- INSTALLER_TARGET_TASK_WITH_WEB_PATH_PRESENT = 'redmine_as_apache_path'
19
- REDMINE_SOURCE_HOST_SUBPATH = 'redmine_source'
20
-
21
- delegate :database_internal, to: :instance
22
-
23
- def avm_fs_cache_object_id
24
- instance.id
25
- end
26
-
27
- def apache_setup
28
- template.child(apache_setup_dockerfile).apply(self)
29
- end
30
-
31
- # @return [String]
32
- def apache_setup_dockerfile
33
- web_path_present? ? APACHE_PATH_DOCKERFILE_SUBPATH : APACHE_HOST_DOCKERFILE_SUBPATH
34
- end
35
-
36
- def base_image
37
- eac_ubuntu_base0_instance.docker_image.provide.id
38
- end
39
-
40
- def installer_target_task
41
- if web_path_present?
42
- INSTALLER_TARGET_TASK_WITH_WEB_PATH_PRESENT
43
- else
44
- INSTALLER_TARGET_TASK_WITH_WEB_PATH_BLANK
45
- end
46
- end
47
-
48
- def redmine_user
49
- eac_ubuntu_base0_instance.docker_image.user_name
50
- end
51
-
52
- def redmine_user_home
53
- eac_ubuntu_base0_instance.docker_image.user_home
54
- end
55
-
56
- def redmine_path
57
- "#{redmine_user_home}/redmine_app"
58
- end
59
-
60
- def skip_database
61
- ENV.fetch('SKIP_DATABASE', nil)
62
- end
63
-
64
- def start_path
65
- '/start.sh'
66
- end
67
-
68
- def web_path_present?
69
- ::Addressable::URI.parse(instance.web_url).path.present?
70
- end
71
-
72
- def write_in_provide_dir
73
- super
74
-
75
- ::Avm::EacRedmineBase0::Instances::Deploy.template.child('config')
76
- .child('install.sh.template')
77
- .apply_to_file(variables_source, provide_dir.join('install_settings.sh'))
78
- end
79
-
80
- private
81
-
82
- def eac_ubuntu_base0_instance
83
- r = ::Avm::EacUbuntuBase0::Instances::Base.by_id(instance.id)
84
- r.docker_image_options = instance.docker_image_options
85
- r
86
- end
87
-
88
- def git_repo_uncached
89
- ::EacGit::Local.new(instance.source_instance.install_path)
90
- end
91
-
92
- def redmine_source_git_id
93
- git_repo.rev_parse('HEAD')
94
- end
95
-
96
- def redmine_source_path_uncached
97
- r = provide_dir.join(REDMINE_SOURCE_HOST_SUBPATH)
98
- ::FileUtils.rm_rf(r.to_path)
99
- r.mkpath
100
- git_repo.commit(redmine_source_git_id).archive_to_dir(r).system!
101
- REDMINE_SOURCE_HOST_SUBPATH
102
- end
103
- end
104
- end
105
- end
106
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_rest/api'
4
- require 'eac_rest/entity'
5
- require 'eac_ruby_utils/core_ext'
6
-
7
- module Avm
8
- module EacRedmineBase0
9
- module Instances
10
- class RestApi < ::EacRest::Api
11
- class EntityBase < ::EacRest::Entity
12
- def build_request(url_suffix)
13
- api.request_json("#{url_suffix}.json")
14
- end
15
-
16
- def data_from_response(response)
17
- raise "\"#{response.url}\" returned non-ok status: #{response.status}" unless
18
- response.status.to_s.start_with?('2')
19
-
20
- return {} if response.body_str.blank?
21
-
22
- response.body_data
23
- rescue ::JSON::ParserError
24
- raise "\"#{response.url}\" returned invalid JSON: \"#{response.body_str}\" " \
25
- "(Status: #{response.status})"
26
- end
27
-
28
- def fetch_data(url_suffix)
29
- data_from_response(build_request(url_suffix).response)
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/eac_redmine_base0/instances/rest_api/entity_base'
4
- require 'avm/eac_redmine_base0/instances/rest_api/wiki_page'
5
- require 'eac_rest/api'
6
- require 'eac_ruby_utils/core_ext'
7
-
8
- module Avm
9
- module EacRedmineBase0
10
- module Instances
11
- class RestApi < ::EacRest::Api
12
- class Project < ::Avm::EacRedmineBase0::Instances::RestApi::EntityBase
13
- # @return [String]
14
- def prefix
15
- "/projects/#{id}"
16
- end
17
-
18
- # @return [Avm::EacRedmineBase0::Instances::RestApi::WikiPage]
19
- def wiki_page(name)
20
- child_entity(::Avm::EacRedmineBase0::Instances::RestApi::WikiPage, name)
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/eac_redmine_base0/instances/rest_api/entity_base'
4
- require 'eac_rest/api'
5
- require 'eac_ruby_utils/core_ext'
6
-
7
- module Avm
8
- module EacRedmineBase0
9
- module Instances
10
- class RestApi < ::EacRest::Api
11
- class Root < ::Avm::EacRedmineBase0::Instances::RestApi::EntityBase
12
- # @param id_or_identifier [String]
13
- # @return [Avm::EacRedmineBase0::Instances::RestApi::Project]
14
- def project(id_or_identifier)
15
- api.entity(::Avm::EacRedmineBase0::Instances::RestApi::Project, id_or_identifier)
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/eac_redmine_base0/instances/rest_api/entity_base'
4
- require 'eac_rest/api'
5
- require 'eac_ruby_utils/core_ext'
6
-
7
- module Avm
8
- module EacRedmineBase0
9
- module Instances
10
- class RestApi < ::EacRest::Api
11
- class WikiPage < ::Avm::EacRedmineBase0::Instances::RestApi::EntityBase
12
- enable_simple_cache
13
-
14
- # @return [Hash]
15
- def data_from_id
16
- fetch_data(prefix)
17
- end
18
-
19
- # @return [String]
20
- def data_root
21
- 'wiki_page'
22
- end
23
-
24
- # @return [String]
25
- def prefix
26
- "#{parent_entity.prefix}/wiki/#{id}"
27
- end
28
-
29
- # @return [String]
30
- def read
31
- data.fetch(data_root).fetch('text')
32
- end
33
-
34
- # @param content [String]
35
- # @return [+self+]
36
- def write(text)
37
- data_from_response(
38
- build_request(prefix).verb(:put).header('Content-type', 'application/json')
39
- .body_data(write_data(text).to_json).response
40
- )
41
- end
42
-
43
- # @param text [String]
44
- # @return [Hash]
45
- def write_data(text)
46
- {
47
- data_root => { 'text' => text }
48
- }
49
- end
50
- end
51
- end
52
- end
53
- end
54
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
- require 'eac_rest/api'
5
-
6
- module Avm
7
- module EacRedmineBase0
8
- module Instances
9
- class RestApi < ::EacRest::Api
10
- require_sub __FILE__
11
- end
12
- end
13
- end
14
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/docker/runner'
4
-
5
- module Avm
6
- module EacRedmineBase0
7
- module Instances
8
- module Runners
9
- class Docker < ::Avm::Docker::Runner
10
- def use_default_registry?
11
- false
12
- end
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_cli/core_ext'
4
-
5
- module Avm
6
- module EacRedmineBase0
7
- module Instances
8
- module Runners
9
- class Project
10
- class WikiPage
11
- class Read
12
- runner_with :help, :output
13
-
14
- def run
15
- run_output
16
- end
17
-
18
- def output_content
19
- runner_context.call(:wiki_page_content)
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_cli/core_ext'
4
-
5
- module Avm
6
- module EacRedmineBase0
7
- module Instances
8
- module Runners
9
- class Project
10
- class WikiPage
11
- class Write
12
- runner_with :help, :confirmation, :input do
13
- bool_opt '-f', '--force'
14
- end
15
- delegate :force?, to: :parsed
16
-
17
- def run
18
- start_banner
19
- if write?
20
- run_write
21
- else
22
- success 'Content unchanged, no further action will be taken'
23
- end
24
- end
25
-
26
- def start_banner
27
- infov 'Content'
28
- infov ' * Current', current_content
29
- infov ' * New', new_content
30
- infov ' * Changed?', content_changed?
31
- end
32
-
33
- # @return [Boolean]
34
- def content_changed?
35
- new_content != current_content
36
- end
37
-
38
- def run_write
39
- if confirm?('Write?')
40
- infom 'Writing...'
41
- runner_context.call(:wiki_page).write(new_content)
42
- success('Writed!')
43
- else
44
- success('Unconfirmed, no further action will be taken')
45
- end
46
- end
47
-
48
- # @return [Boolean]
49
- def write?
50
- parsed.force? || content_changed?
51
- end
52
-
53
- private
54
-
55
- # @return [String]
56
- def current_content_uncached
57
- runner_context.call(:wiki_page_content)
58
- end
59
-
60
- # @return [String]
61
- def new_content_uncached
62
- input_content
63
- end
64
- end
65
- end
66
- end
67
- end
68
- end
69
- end
70
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_cli/core_ext'
4
-
5
- module Avm
6
- module EacRedmineBase0
7
- module Instances
8
- module Runners
9
- class Project
10
- class WikiPage
11
- runner_with :help, :subcommands do
12
- pos_arg :name
13
- subcommands
14
- end
15
-
16
- def wiki_page
17
- runner_context.call(:project).wiki_page(parsed.name)
18
- end
19
-
20
- def wiki_page_content
21
- wiki_page.read
22
- end
23
-
24
- require_sub __FILE__
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_cli/core_ext'
4
-
5
- module Avm
6
- module EacRedmineBase0
7
- module Instances
8
- module Runners
9
- class Project
10
- runner_with :help, :subcommands do
11
- pos_arg :id_or_identifier
12
- subcommands
13
- end
14
-
15
- private
16
-
17
- def project_uncached
18
- runner_context.call(:instance).rest_api.root_entity.project(parsed.id_or_identifier)
19
- end
20
-
21
- require_sub __FILE__
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_cli/core_ext'
4
- require 'avm/eac_rails_base1/instances/runners/code_runner'
5
-
6
- module Avm
7
- module EacRedmineBase0
8
- module Instances
9
- module Runners
10
- class ProjectRename
11
- runner_with :help, ::Avm::EacRailsBase1::RunnerWith::Bundle do
12
- pos_arg :from
13
- pos_arg :to
14
- end
15
-
16
- def run
17
- bundle_run
18
- end
19
-
20
- def start_banner
21
- infov 'From', from
22
- infov 'To', to
23
- end
24
-
25
- delegate :from, :to, to: :parsed
26
-
27
- def bundle_args
28
- %w[exec rails runner] + [code]
29
- end
30
-
31
- def code
32
- <<~CODE
33
- from_arg = '#{from}'
34
- to_arg = '#{to}'
35
- project = ::Project.where(identifier: from_arg).first
36
- if project.present?
37
- puts "Project found: \#{project}"
38
- puts "Renaming..."
39
- project.update_column(:identifier, to_arg)
40
- puts "Renamed. Testing..."
41
- project = ::Project.where(identifier: to_arg).first
42
- if project
43
- puts "Project found: \#{project}"
44
- else
45
- fail "After rename: project not found with identifier \\"\#{to_arg}\\""
46
- end
47
- else
48
- fail "Before rename: project not found with identifier \\"\#{from_arg}\\""
49
- end
50
- CODE
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/eac_redmine_base0/instances/deploy'
4
- require 'eac_ruby_utils/core_ext'
5
-
6
- module Avm
7
- module EacRedmineBase0
8
- module Instances
9
- module Runners
10
- require_sub __FILE__
11
- end
12
- end
13
- end
14
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module Avm
6
- module EacRedmineBase0
7
- module Instances
8
- require_sub __FILE__
9
- end
10
- end
11
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/eac_rails_base1/sources/base'
4
- require 'avm/eac_redmine_base0/sources/runners'
5
- require 'eac_ruby_utils/core_ext'
6
-
7
- module Avm
8
- module EacRedmineBase0
9
- module Sources
10
- class Base < ::Avm::EacRailsBase1::Sources::Base
11
- DEFAULT_TEST_COMMANDS = {}.freeze
12
- REDMINE_LIB_SUBPATH = 'lib/redmine.rb'
13
- SUBS_INCLUDE_PATHS_DEFAULT = ['plugins/*'].freeze
14
-
15
- # Return a empty hash (No tests).
16
- #
17
- # @return [Hash<String, EacRubyUtils::Envs::Command].
18
- def default_test_commands
19
- DEFAULT_TEST_COMMANDS
20
- end
21
-
22
- def redmine_lib_path
23
- path.join(REDMINE_LIB_SUBPATH)
24
- end
25
-
26
- def subs_include_paths_default
27
- SUBS_INCLUDE_PATHS_DEFAULT
28
- end
29
-
30
- def valid?
31
- super && redmine_lib_path.exist?
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,131 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/eac_redmine_base0/sources/core_update'
4
- require 'avm/sources/base/configuration'
5
- require 'avm/sync'
6
- require 'eac_fs/cached_download'
7
- require 'eac_ruby_utils/core_ext'
8
-
9
- module Avm
10
- module EacRedmineBase0
11
- module Sources
12
- class CoreUpdate
13
- enable_speaker
14
- enable_simple_cache
15
- common_constructor :source, :version, :url
16
-
17
- GITIGNORE_ADD = %w[/public/assets/**/* /config/install.sh /config/secrets_key.txt
18
- /log/**/*].freeze
19
- GITIGNORE_DEL = %w[/Gemfile.lock /plugins/* /public/themes/*].freeze
20
- TARGET_KEEP = ::Avm::Sources::Base::Configuration::CONFIGURATION_FILENAMES
21
- .map { |b| "/#{b}" } + %w[/Gemfile.lock /plugins/*/**
22
- /public/themes/*/**].freeze
23
- TARGET_REMOVE = %w[alternate classic].map { |t| "/public/themes/#{t}/**" }
24
-
25
- def run
26
- ::EacRubyUtils::Fs::Temp.on_directory do |dir|
27
- @tempdir = dir
28
- assert_source_package
29
- extract_package_to_tempdir
30
- sync_content
31
- change_git_ignore
32
- validate_empty_dir
33
- end
34
- git_commit
35
- success 'Done!'
36
- end
37
-
38
- def assert_source_package
39
- infom 'Asserting source package...'
40
- source_package.assert
41
- infov 'Package cache path', source_package.path
42
- infov 'Package size', source_package.path.size
43
- end
44
-
45
- def fs_object_id
46
- [source.path, version].join('_').variableize
47
- end
48
-
49
- private
50
-
51
- attr_reader :tempdir
52
-
53
- def change_git_ignore
54
- file = target_path.join('.gitignore')
55
- file.write(
56
- (file.read.each_line.map(&:strip).reject { |line| GITIGNORE_DEL.include?(line) } +
57
- ['', '#eac_redmine_base0'] + GITIGNORE_ADD).map { |line| "#{line}\n" }.join
58
- )
59
- end
60
-
61
- def extract_package_to_tempdir
62
- infom "Extracting package to tempdir #{tempdir}..."
63
- ::EacRubyUtils::Envs.local.command(
64
- 'tar', '-xf', source_package.path.to_path, '-C', tempdir.to_path,
65
- '--strip-components', '1'
66
- ).execute!
67
- end
68
-
69
- def git_commit
70
- if git_repo.dirty?
71
- infom 'Git commiting...'
72
- git_repo.command('add', '--', target_path).execute!
73
- git_repo.command('commit', '-m', git_commit_message, '--', target_path).execute!
74
- else
75
- infom 'Nothing to commit'
76
- end
77
- end
78
-
79
- def git_commit_message
80
- i18n_translate(__method__, version: version, __locale: source.locale)
81
- end
82
-
83
- def git_repo_uncached
84
- ::EacGit::Local.new(target_path)
85
- end
86
-
87
- def sync_content
88
- ::Avm::Sync.new(source_path, target_path)
89
- .add_exclude('/*').add_includes(*target_files_to_remove).move_mode(true).run
90
- end
91
-
92
- # @return [EacFs::CachedDownload]
93
- def source_package_uncached
94
- ::EacFs::CachedDownload.new(url, fs_cache)
95
- end
96
-
97
- def validate_empty_dir
98
- if source_path.children.empty?
99
- infom 'No content left in source directory'
100
- else
101
- fatal_error 'Found entries in source directory: ' + # rubocop:disable Style/StringConcatenation
102
- source_path.children.map { |c| c.basename.to_path }.join(', ')
103
- end
104
- end
105
-
106
- def source_path_uncached
107
- ::Pathname.new(tempdir.to_path)
108
- end
109
-
110
- # @return [Enumerable<String>]
111
- def target_files_to_remove
112
- git_repo.command('ls-files').execute!
113
- .each_line.map { |v| "/#{v.strip}" }
114
- .reject { |tpath| target_keep?(tpath) }
115
- end
116
-
117
- # @param tpath [String]
118
- # @return [Boolean]
119
- def target_keep?(tpath)
120
- tpath = tpath.to_pathname
121
- TARGET_REMOVE.none? { |target_remove| tpath.fnmatch?(target_remove) }
122
- TARGET_KEEP.any? { |target_keep| tpath.fnmatch?(target_keep) }
123
- end
124
-
125
- def target_path_uncached
126
- source.path
127
- end
128
- end
129
- end
130
- end
131
- end