avm-eac_redmine_base0 0.14.0 → 0.16.0
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.
- checksums.yaml +4 -4
- data/lib/avm/eac_redmine_base0/instances/apache_host.rb +12 -0
- data/lib/avm/eac_redmine_base0/instances/base/database.rb +30 -0
- data/lib/avm/eac_redmine_base0/instances/base/gitolite.rb +42 -0
- data/lib/avm/eac_redmine_base0/instances/base/web.rb +20 -0
- data/lib/avm/eac_redmine_base0/instances/base.rb +7 -5
- data/lib/avm/eac_redmine_base0/instances/data_unit.rb +53 -0
- data/lib/avm/eac_redmine_base0/instances/deploy.rb +2 -2
- data/lib/avm/eac_redmine_base0/instances/docker_image.rb +2 -6
- data/lib/avm/eac_redmine_base0/{rest_api.rb → instances/rest_api.rb} +3 -1
- data/lib/avm/eac_redmine_base0/instances/runners/project_rename.rb +1 -1
- data/lib/avm/eac_redmine_base0/runners/base.rb +1 -1
- data/lib/avm/eac_redmine_base0/sources/core_update.rb +120 -0
- data/lib/avm/eac_redmine_base0/sources/runners/core_update.rb +3 -2
- data/lib/avm/eac_redmine_base0/version.rb +1 -1
- data/template/avm/eac_redmine_base0/instances/deploy/config/install.sh.template +11 -3
- metadata +13 -10
- data/lib/avm/eac_redmine_base0/apache_host.rb +0 -10
- data/lib/avm/eac_redmine_base0/core_update.rb +0 -118
- data/lib/avm/eac_redmine_base0/data_unit.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30d851b9a2e5895bffd9830f752d05e18957b897e44398026c61916ecc3955b7
|
4
|
+
data.tar.gz: b744ea2ec75dc9f349475c66a94a5611a38d208b4c53b8116e3029d87aba2858
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdeb8c77b40dacf07dfaf1f738eed19e1f255f562030f487aecce8bc25b765b8e49a95d773a25bb5518e9b3a715e3fbf5698770e17b360e3b711d1934aa47cd3
|
7
|
+
data.tar.gz: 0ba34fcbe7f3ceee0b31c8025ef4168ccd7b4d985aed23089a4c547b7cba1ee32ec3199ffb6595546ee0a02a7ce162ae0fa10228d916be6048cd05fd5f2cf034
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/eac_rails_base1/instances/base'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module EacRedmineBase0
|
8
|
+
module Instances
|
9
|
+
class Base < ::Avm::EacRailsBase1::Instances::Base
|
10
|
+
module Database
|
11
|
+
DATABASE_INTERNAL_HOSTNAME = 'localhost'
|
12
|
+
DEFAULT_POSTGRESQL_VERSION = '12'
|
13
|
+
|
14
|
+
common_concern do
|
15
|
+
uri_components_entries_values 'postgresql', %w[version]
|
16
|
+
end
|
17
|
+
|
18
|
+
def database_internal
|
19
|
+
entry(::Avm::Instances::EntryKeys::DATABASE_HOSTNAME).value ==
|
20
|
+
DATABASE_INTERNAL_HOSTNAME
|
21
|
+
end
|
22
|
+
|
23
|
+
def postgresql_version_default_value
|
24
|
+
DEFAULT_POSTGRESQL_VERSION
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/eac_rails_base1/instances/base'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module EacRedmineBase0
|
8
|
+
module Instances
|
9
|
+
class Base < ::Avm::EacRailsBase1::Instances::Base
|
10
|
+
module Gitolite
|
11
|
+
GITOLITE_ENTRY_KEYS_PREFIX = 'gitolite'
|
12
|
+
DEFAULT_HOSTNAME = 'localhost'
|
13
|
+
DEFAULT_PATH_PARENT = '/var/lib'
|
14
|
+
DEFAULT_SCHEME = 'file'
|
15
|
+
DEFAULT_USERNAME = 'git'
|
16
|
+
|
17
|
+
common_concern do
|
18
|
+
uri_components_entries_values GITOLITE_ENTRY_KEYS_PREFIX
|
19
|
+
end
|
20
|
+
|
21
|
+
def gitolite_hostname_default_value
|
22
|
+
DEFAULT_HOSTNAME
|
23
|
+
end
|
24
|
+
|
25
|
+
def gitolite_path_default_value
|
26
|
+
read_entry_optional([GITOLITE_ENTRY_KEYS_PREFIX, 'username']).if_present do |v|
|
27
|
+
::File.join(DEFAULT_PATH_PARENT, v)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def gitolite_scheme_default_value
|
32
|
+
DEFAULT_SCHEME
|
33
|
+
end
|
34
|
+
|
35
|
+
def gitolite_username_default_value
|
36
|
+
DEFAULT_USERNAME
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/eac_rails_base1/instances/base'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module EacRedmineBase0
|
8
|
+
module Instances
|
9
|
+
class Base < ::Avm::EacRailsBase1::Instances::Base
|
10
|
+
module Web
|
11
|
+
def web_authority
|
12
|
+
web_hostname.if_present do |h|
|
13
|
+
h.to_s + web_port_optional.if_present('') { |p| ":#{p}" }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,15 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'addressable/uri'
|
4
|
-
require 'avm/eac_redmine_base0/data_unit'
|
4
|
+
require 'avm/eac_redmine_base0/instances/data_unit'
|
5
5
|
require 'avm/eac_redmine_base0/instances/docker_image'
|
6
|
-
require 'avm/eac_redmine_base0/
|
6
|
+
require 'avm/eac_redmine_base0/instances/runners'
|
7
|
+
require 'avm/eac_redmine_base0/instances/rest_api'
|
7
8
|
require 'avm/eac_rails_base1/instances/base'
|
8
9
|
|
9
10
|
module Avm
|
10
11
|
module EacRedmineBase0
|
11
12
|
module Instances
|
12
13
|
class Base < ::Avm::EacRailsBase1::Instances::Base
|
14
|
+
require_sub __FILE__, include_modules: true
|
13
15
|
enable_simple_cache
|
14
16
|
|
15
17
|
FILES_UNITS = { files: 'files' }.freeze
|
@@ -32,7 +34,7 @@ module Avm
|
|
32
34
|
@data_package ||= ::Avm::Data::Instance::Package.new(
|
33
35
|
self,
|
34
36
|
units: {
|
35
|
-
all: ::Avm::EacRedmineBase0::DataUnit.new(self)
|
37
|
+
all: ::Avm::EacRedmineBase0::Instances::DataUnit.new(self)
|
36
38
|
}
|
37
39
|
)
|
38
40
|
end
|
@@ -46,11 +48,11 @@ module Avm
|
|
46
48
|
|
47
49
|
private
|
48
50
|
|
49
|
-
# @return [Avm::EacRedmineBase0::RestApi]
|
51
|
+
# @return [Avm::EacRedmineBase0::Instances::RestApi]
|
50
52
|
def rest_api_uncached
|
51
53
|
url = root_url
|
52
54
|
url.query_values = { key: read_entry('api.key') }
|
53
|
-
::Avm::EacRedmineBase0::RestApi.new(url)
|
55
|
+
::Avm::EacRedmineBase0::Instances::RestApi.new(url)
|
54
56
|
end
|
55
57
|
end
|
56
58
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/data/instance/unit'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'curb'
|
6
|
+
require 'open-uri'
|
7
|
+
|
8
|
+
module Avm
|
9
|
+
module EacRedmineBase0
|
10
|
+
module Instances
|
11
|
+
class DataUnit < ::Avm::Data::Instance::Unit
|
12
|
+
common_constructor :instance
|
13
|
+
|
14
|
+
EXPORT_PATH = '/backup/export'
|
15
|
+
EXTENSION = '.tar'
|
16
|
+
IMPORT_PATH = '/backup/import.json'
|
17
|
+
|
18
|
+
def do_dump(data_path)
|
19
|
+
::File.open(data_path, 'wb') do |file|
|
20
|
+
file << export_request.response.body_data_or_raise
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def do_load(data_path)
|
25
|
+
do_load_by_web(data_path) || do_load_by_rake(data_path) || raise('Failed to load')
|
26
|
+
end
|
27
|
+
|
28
|
+
def do_load_by_web(data_path)
|
29
|
+
c = Curl::Easy.new(import_url)
|
30
|
+
c.multipart_form_post = true
|
31
|
+
c.http_post(Curl::PostField.file('redmine_with_git_tableless_load[path]', data_path))
|
32
|
+
c.perform
|
33
|
+
true
|
34
|
+
rescue Curl::Err::ConnectionFailedError
|
35
|
+
false
|
36
|
+
end
|
37
|
+
|
38
|
+
def do_load_by_rake(data_path)
|
39
|
+
instance.bundle('exec', 'rake', "redmine_with_git:load:all[#{data_path}]").system
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
def export_request
|
44
|
+
instance.rest_api.request(EXPORT_PATH)
|
45
|
+
end
|
46
|
+
|
47
|
+
def import_url
|
48
|
+
instance.rest_api.build_service_url(IMPORT_PATH).to_s
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'avm/eac_webapp_base0/deploy'
|
3
|
+
require 'avm/eac_webapp_base0/instances/deploy'
|
4
4
|
require 'eac_ruby_utils/ruby'
|
5
5
|
|
6
6
|
module Avm
|
7
7
|
module EacRedmineBase0
|
8
8
|
module Instances
|
9
|
-
class Deploy < ::Avm::EacWebappBase0::Deploy
|
9
|
+
class Deploy < ::Avm::EacWebappBase0::Instances::Deploy
|
10
10
|
set_callback :assert_instance_branch, :after, :run_installer
|
11
11
|
|
12
12
|
def run_installer
|
@@ -14,9 +14,10 @@ module Avm
|
|
14
14
|
BASE_IMAGE = 'ubuntu:20.04'
|
15
15
|
INSTALLER_TARGET_TASK_WITH_WEB_PATH_BLANK = 'redmine_as_apache_base'
|
16
16
|
INSTALLER_TARGET_TASK_WITH_WEB_PATH_PRESENT = 'redmine_as_apache_path'
|
17
|
-
DATABASE_INTERNAL_HOSTNAME = 'localhost'
|
18
17
|
REDMINE_SOURCE_HOST_SUBPATH = 'redmine_source'
|
19
18
|
|
19
|
+
delegate :database_internal, to: :instance
|
20
|
+
|
20
21
|
def avm_fs_cache_object_id
|
21
22
|
instance.id
|
22
23
|
end
|
@@ -31,11 +32,6 @@ module Avm
|
|
31
32
|
eac_ubuntu_base0_instance.docker_image.provide.id
|
32
33
|
end
|
33
34
|
|
34
|
-
def database_internal
|
35
|
-
instance.entry(::Avm::Instances::EntryKeys::DATABASE_HOSTNAME).value ==
|
36
|
-
DATABASE_INTERNAL_HOSTNAME
|
37
|
-
end
|
38
|
-
|
39
35
|
def installer_target_task
|
40
36
|
if web_path_present?
|
41
37
|
INSTALLER_TARGET_TASK_WITH_WEB_PATH_PRESENT
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'avm/eac_redmine_base0/instances/base'
|
4
4
|
require 'avm/eac_redmine_base0/instances/deploy'
|
5
|
-
require 'avm/eac_redmine_base0/apache_host'
|
5
|
+
require 'avm/eac_redmine_base0/instances/apache_host'
|
6
6
|
require 'avm/eac_rails_base1/runner'
|
7
7
|
require 'eac_ruby_utils/core_ext'
|
8
8
|
|
@@ -0,0 +1,120 @@
|
|
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].freeze
|
22
|
+
|
23
|
+
def run
|
24
|
+
::EacRubyUtils::Fs::Temp.on_directory do |dir|
|
25
|
+
@tempdir = dir
|
26
|
+
assert_source_package
|
27
|
+
extract_package_to_tempdir
|
28
|
+
sync_content
|
29
|
+
change_git_ignore
|
30
|
+
validate_empty_dir
|
31
|
+
end
|
32
|
+
git_commit
|
33
|
+
success 'Done!'
|
34
|
+
end
|
35
|
+
|
36
|
+
def assert_source_package
|
37
|
+
infom 'Asserting source package...'
|
38
|
+
source_package.assert
|
39
|
+
infov 'Package cache path', source_package.path
|
40
|
+
infov 'Package size', source_package.path.size
|
41
|
+
end
|
42
|
+
|
43
|
+
def fs_object_id
|
44
|
+
[source.path, version].join('_').variableize
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
attr_reader :tempdir
|
50
|
+
|
51
|
+
def change_git_ignore
|
52
|
+
file = target_path.join('.gitignore')
|
53
|
+
file.write(
|
54
|
+
(file.read.each_line.map(&:strip).reject { |line| GITIGNORE_DEL.include?(line) } +
|
55
|
+
['', '#eac_redmine_base0'] + GITIGNORE_ADD).map { |line| "#{line}\n" }.join
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
def extract_package_to_tempdir
|
60
|
+
infom "Extracting package to tempdir #{tempdir}..."
|
61
|
+
::EacRubyUtils::Envs.local.command(
|
62
|
+
'tar', '-xf', source_package.path.to_path, '-C', tempdir.to_path,
|
63
|
+
'--strip-components', '1'
|
64
|
+
).execute!
|
65
|
+
end
|
66
|
+
|
67
|
+
def git_commit
|
68
|
+
if git_repo.dirty?
|
69
|
+
infom 'Git commiting...'
|
70
|
+
git_repo.command('add', '--', target_path).execute!
|
71
|
+
git_repo.command('commit', '-m', git_commit_message, '--', target_path).execute!
|
72
|
+
else
|
73
|
+
infom 'Nothing to commit'
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def git_commit_message
|
78
|
+
i18n_translate(__method__, version: version, __locale: source.locale)
|
79
|
+
end
|
80
|
+
|
81
|
+
def git_repo_uncached
|
82
|
+
::EacGit::Local.new(target_path)
|
83
|
+
end
|
84
|
+
|
85
|
+
def sync_content
|
86
|
+
::Avm::Sync.new(source_path, target_path)
|
87
|
+
.add_exclude('/*').add_includes(*target_files_to_remove).move_mode(true).run
|
88
|
+
end
|
89
|
+
|
90
|
+
# @return [EacFs::CachedDownload]
|
91
|
+
def source_package_uncached
|
92
|
+
::EacFs::CachedDownload.new(url, fs_cache)
|
93
|
+
end
|
94
|
+
|
95
|
+
def validate_empty_dir
|
96
|
+
if source_path.children.empty?
|
97
|
+
infom 'No content left in source directory'
|
98
|
+
else
|
99
|
+
fatal_error 'Found entries in source directory: ' +
|
100
|
+
source_path.children.map { |c| c.basename.to_path }.join(', ')
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def source_path_uncached
|
105
|
+
::Pathname.new(tempdir.to_path)
|
106
|
+
end
|
107
|
+
|
108
|
+
def target_files_to_remove
|
109
|
+
git_repo.command('ls-files').execute!
|
110
|
+
.each_line.map { |v| "/#{v.strip}" }
|
111
|
+
.without(*TARGET_KEEP)
|
112
|
+
end
|
113
|
+
|
114
|
+
def target_path_uncached
|
115
|
+
source.path
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'avm/eac_rails_base1/sources/base'
|
4
|
-
require 'avm/eac_redmine_base0/core_update'
|
4
|
+
require 'avm/eac_redmine_base0/sources/core_update'
|
5
5
|
require 'eac_cli/core_ext'
|
6
6
|
|
7
7
|
module Avm
|
@@ -29,7 +29,8 @@ module Avm
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def update
|
32
|
-
::Avm::EacRedmineBase0::CoreUpdate
|
32
|
+
::Avm::EacRedmineBase0::Sources::CoreUpdate
|
33
|
+
.new(runner_context.call(:subject), version, url).run
|
33
34
|
end
|
34
35
|
|
35
36
|
def url
|
@@ -1,10 +1,17 @@
|
|
1
|
+
# Ruby
|
2
|
+
export rvm_ruby='ruby-%%RUBY.VERSION%%'
|
3
|
+
|
4
|
+
# Database
|
5
|
+
export postgresql_internal='%%DATABASE_INTERNAL%%'
|
6
|
+
export postgresql_host='%%DATABASE.HOSTNAME%%'
|
7
|
+
export postgresql_port='%%DATABASE.PORT%%'
|
1
8
|
export postgresql_database='%%DATABASE.NAME%%'
|
2
|
-
export postgresql_database_test='%%DATABASE.NAME%%_test'
|
3
9
|
export postgresql_user='%%DATABASE.USERNAME%%'
|
4
10
|
export postgresql_password='%%DATABASE.PASSWORD%%'
|
5
11
|
export postgresql_version='%%POSTGRESQL.VERSION%%'
|
6
|
-
export
|
7
|
-
|
12
|
+
export postgresql_extra_settings='%%DATABASE.EXTRA%%'
|
13
|
+
|
14
|
+
# Web
|
8
15
|
if [ '%%WEB.SCHEME%%' == 'https' ]; then
|
9
16
|
export address_https='true'
|
10
17
|
else
|
@@ -17,6 +24,7 @@ export address_path='%%WEB.PATH%%'
|
|
17
24
|
export git_repositories_hierarchical_organisation=false
|
18
25
|
export gitolite_user='%%GIT.USERNAME%%'
|
19
26
|
export gitolite_user_home="/var/lib/${gitolite_user}"
|
27
|
+
export redmine_git_hosting_ssh_key_name=redmine_git_hosting_id
|
20
28
|
|
21
29
|
# Mail settings
|
22
30
|
export smtp_server='%%MAILER.SMTP.ADDRESS%%'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avm-eac_redmine_base0
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Put here the authors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: avm
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.44'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.44'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: avm-eac_generic_base0
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,14 +132,14 @@ dependencies:
|
|
132
132
|
requirements:
|
133
133
|
- - "~>"
|
134
134
|
- !ruby/object:Gem::Version
|
135
|
-
version: '0.
|
135
|
+
version: '0.104'
|
136
136
|
type: :runtime
|
137
137
|
prerelease: false
|
138
138
|
version_requirements: !ruby/object:Gem::Requirement
|
139
139
|
requirements:
|
140
140
|
- - "~>"
|
141
141
|
- !ruby/object:Gem::Version
|
142
|
-
version: '0.
|
142
|
+
version: '0.104'
|
143
143
|
- !ruby/object:Gem::Dependency
|
144
144
|
name: eac_ruby_gem_support
|
145
145
|
requirement: !ruby/object:Gem::Requirement
|
@@ -161,21 +161,24 @@ extensions: []
|
|
161
161
|
extra_rdoc_files: []
|
162
162
|
files:
|
163
163
|
- lib/avm/eac_redmine_base0.rb
|
164
|
-
- lib/avm/eac_redmine_base0/apache_host.rb
|
165
|
-
- lib/avm/eac_redmine_base0/core_update.rb
|
166
|
-
- lib/avm/eac_redmine_base0/data_unit.rb
|
167
164
|
- lib/avm/eac_redmine_base0/instances.rb
|
165
|
+
- lib/avm/eac_redmine_base0/instances/apache_host.rb
|
168
166
|
- lib/avm/eac_redmine_base0/instances/base.rb
|
167
|
+
- lib/avm/eac_redmine_base0/instances/base/database.rb
|
168
|
+
- lib/avm/eac_redmine_base0/instances/base/gitolite.rb
|
169
|
+
- lib/avm/eac_redmine_base0/instances/base/web.rb
|
170
|
+
- lib/avm/eac_redmine_base0/instances/data_unit.rb
|
169
171
|
- lib/avm/eac_redmine_base0/instances/deploy.rb
|
170
172
|
- lib/avm/eac_redmine_base0/instances/docker_image.rb
|
173
|
+
- lib/avm/eac_redmine_base0/instances/rest_api.rb
|
171
174
|
- lib/avm/eac_redmine_base0/instances/runners.rb
|
172
175
|
- lib/avm/eac_redmine_base0/instances/runners/docker.rb
|
173
176
|
- lib/avm/eac_redmine_base0/instances/runners/project_rename.rb
|
174
|
-
- lib/avm/eac_redmine_base0/rest_api.rb
|
175
177
|
- lib/avm/eac_redmine_base0/runners.rb
|
176
178
|
- lib/avm/eac_redmine_base0/runners/base.rb
|
177
179
|
- lib/avm/eac_redmine_base0/sources.rb
|
178
180
|
- lib/avm/eac_redmine_base0/sources/base.rb
|
181
|
+
- lib/avm/eac_redmine_base0/sources/core_update.rb
|
179
182
|
- lib/avm/eac_redmine_base0/sources/runners.rb
|
180
183
|
- lib/avm/eac_redmine_base0/sources/runners/core_update.rb
|
181
184
|
- lib/avm/eac_redmine_base0/sources/runners/docker.rb
|
@@ -1,118 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'avm/eac_redmine_base0/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
|
-
class CoreUpdate
|
12
|
-
enable_speaker
|
13
|
-
enable_simple_cache
|
14
|
-
common_constructor :source, :version, :url
|
15
|
-
|
16
|
-
GITIGNORE_ADD = %w[/public/assets/**/* /config/install.sh /config/secrets_key.txt
|
17
|
-
/log/**/*].freeze
|
18
|
-
GITIGNORE_DEL = %w[/Gemfile.lock /plugins/* /public/themes/*].freeze
|
19
|
-
TARGET_KEEP = ::Avm::Sources::Base::Configuration::CONFIGURATION_FILENAMES
|
20
|
-
.map { |b| "/#{b}" } + %w[/Gemfile.lock].freeze
|
21
|
-
|
22
|
-
def run
|
23
|
-
::EacRubyUtils::Fs::Temp.on_directory do |dir|
|
24
|
-
@tempdir = dir
|
25
|
-
assert_source_package
|
26
|
-
extract_package_to_tempdir
|
27
|
-
sync_content
|
28
|
-
change_git_ignore
|
29
|
-
validate_empty_dir
|
30
|
-
end
|
31
|
-
git_commit
|
32
|
-
success 'Done!'
|
33
|
-
end
|
34
|
-
|
35
|
-
def assert_source_package
|
36
|
-
infom 'Asserting source package...'
|
37
|
-
source_package.assert
|
38
|
-
infov 'Package cache path', source_package.path
|
39
|
-
infov 'Package size', source_package.path.size
|
40
|
-
end
|
41
|
-
|
42
|
-
def fs_object_id
|
43
|
-
[source.path, version].join('_').variableize
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
attr_reader :tempdir
|
49
|
-
|
50
|
-
def change_git_ignore
|
51
|
-
file = target_path.join('.gitignore')
|
52
|
-
file.write(
|
53
|
-
(file.read.each_line.map(&:strip).reject { |line| GITIGNORE_DEL.include?(line) } +
|
54
|
-
['', '#eac_redmine_base0'] + GITIGNORE_ADD).map { |line| "#{line}\n" }.join
|
55
|
-
)
|
56
|
-
end
|
57
|
-
|
58
|
-
def extract_package_to_tempdir
|
59
|
-
infom "Extracting package to tempdir #{tempdir}..."
|
60
|
-
::EacRubyUtils::Envs.local.command(
|
61
|
-
'tar', '-xf', source_package.path.to_path, '-C', tempdir.to_path,
|
62
|
-
'--strip-components', '1'
|
63
|
-
).execute!
|
64
|
-
end
|
65
|
-
|
66
|
-
def git_commit
|
67
|
-
if git_repo.dirty?
|
68
|
-
infom 'Git commiting...'
|
69
|
-
git_repo.command('add', '--', target_path).execute!
|
70
|
-
git_repo.command('commit', '-m', git_commit_message, '--', target_path).execute!
|
71
|
-
else
|
72
|
-
infom 'Nothing to commit'
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def git_commit_message
|
77
|
-
i18n_translate(__method__, version: version, __locale: source.locale)
|
78
|
-
end
|
79
|
-
|
80
|
-
def git_repo_uncached
|
81
|
-
::EacGit::Local.new(target_path)
|
82
|
-
end
|
83
|
-
|
84
|
-
def sync_content
|
85
|
-
::Avm::Sync.new(source_path, target_path)
|
86
|
-
.add_exclude('/*').add_includes(*target_files_to_remove).move_mode(true).run
|
87
|
-
end
|
88
|
-
|
89
|
-
# @return [EacFs::CachedDownload]
|
90
|
-
def source_package_uncached
|
91
|
-
::EacFs::CachedDownload.new(url, fs_cache)
|
92
|
-
end
|
93
|
-
|
94
|
-
def validate_empty_dir
|
95
|
-
if source_path.children.empty?
|
96
|
-
infom 'No content left in source directory'
|
97
|
-
else
|
98
|
-
fatal_error 'Found entries in source directory: ' +
|
99
|
-
source_path.children.map { |c| c.basename.to_path }.join(', ')
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def source_path_uncached
|
104
|
-
::Pathname.new(tempdir.to_path)
|
105
|
-
end
|
106
|
-
|
107
|
-
def target_files_to_remove
|
108
|
-
git_repo.command('ls-files').execute!
|
109
|
-
.each_line.map { |v| "/#{v.strip}" }
|
110
|
-
.without(*TARGET_KEEP)
|
111
|
-
end
|
112
|
-
|
113
|
-
def target_path_uncached
|
114
|
-
source.path
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'avm/data/instance/unit'
|
4
|
-
require 'eac_ruby_utils/core_ext'
|
5
|
-
require 'curb'
|
6
|
-
require 'open-uri'
|
7
|
-
|
8
|
-
module Avm
|
9
|
-
module EacRedmineBase0
|
10
|
-
class DataUnit < ::Avm::Data::Instance::Unit
|
11
|
-
common_constructor :instance
|
12
|
-
|
13
|
-
EXPORT_PATH = '/backup/export'
|
14
|
-
EXTENSION = '.tar'
|
15
|
-
IMPORT_PATH = '/backup/import.json'
|
16
|
-
|
17
|
-
def do_dump(data_path)
|
18
|
-
::File.open(data_path, 'wb') do |file|
|
19
|
-
file << export_request.response.body_data_or_raise
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def do_load(data_path)
|
24
|
-
do_load_by_web(data_path) || do_load_by_rake(data_path) || raise('Failed to load')
|
25
|
-
end
|
26
|
-
|
27
|
-
def do_load_by_web(data_path)
|
28
|
-
c = Curl::Easy.new(import_url)
|
29
|
-
c.multipart_form_post = true
|
30
|
-
c.http_post(Curl::PostField.file('redmine_with_git_tableless_load[path]', data_path))
|
31
|
-
c.perform
|
32
|
-
true
|
33
|
-
rescue Curl::Err::ConnectionFailedError
|
34
|
-
false
|
35
|
-
end
|
36
|
-
|
37
|
-
def do_load_by_rake(data_path)
|
38
|
-
instance.bundle('exec', 'rake', "redmine_with_git:load:all[#{data_path}]").system
|
39
|
-
true
|
40
|
-
end
|
41
|
-
|
42
|
-
def export_request
|
43
|
-
instance.rest_api.request(EXPORT_PATH)
|
44
|
-
end
|
45
|
-
|
46
|
-
def import_url
|
47
|
-
instance.rest_api.build_service_url(IMPORT_PATH).to_s
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|