avm-eac_redmine_base0 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 96cb101bbbfb3397e390b6120b126b5aab0f04abc3e3ebced5518162bd32f5da
4
+ data.tar.gz: 53cca61ba5273402ea1e1de68c1fdb1c797cb54e859046477ef7bcd1a27ede07
5
+ SHA512:
6
+ metadata.gz: 0f8b7648564e59e10cc2d02b21f712298dcc6ab766a3e075b50183c3cc8adb17b46fa2b6ac71dcad0df58c244b6ec7ab7f968f95b06154928cd2632c541d89fe
7
+ data.tar.gz: 83007b7a9f97b31a3b1670beb29879baa3f9cbba693289ae15502d9f0a3d96380fba7cd570becbe26e985112d4d4f2ba6859a91f309384da68d9c25d15b006b9
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRedmineBase0
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_rails_base1/apache_host'
4
+
5
+ module Avm
6
+ module EacRedmineBase0
7
+ class ApacheHost < ::Avm::EacRailsBase1::ApacheHost
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_redmine_base0/core_update'
4
+ require 'avm/cached_download'
5
+ require 'avm/sync'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module Avm
9
+ module EacRedmineBase0
10
+ class CoreUpdate
11
+ enable_speaker
12
+ enable_simple_cache
13
+ common_constructor :instance, :version, :url
14
+
15
+ GITIGNORE_ADD = %w[/public/assets/**/* /config/install.sh /log/**/*].freeze
16
+ GITIGNORE_DEL = %w[/Gemfile.lock /plugins/* /public/themes/*].freeze
17
+ TARGET_KEEP = %w[/Gemfile.lock].freeze
18
+
19
+ def run
20
+ ::EacRubyUtils::Fs::Temp.on_directory do |dir|
21
+ @tempdir = dir
22
+ assert_source_package
23
+ extract_package_to_tempdir
24
+ sync_content
25
+ change_git_ignore
26
+ validate_empty_dir
27
+ end
28
+ git_commit
29
+ success 'Done!'
30
+ end
31
+
32
+ def assert_source_package
33
+ infom 'Asserting source package...'
34
+ source_package.assert
35
+ infov 'Package cache path', source_package.path
36
+ infov 'Package size', source_package.path.size
37
+ end
38
+
39
+ private
40
+
41
+ attr_reader :tempdir
42
+
43
+ def change_git_ignore
44
+ file = target_path.join('.gitignore')
45
+ file.write(
46
+ (file.read.each_line.map(&:strip).reject { |line| GITIGNORE_DEL.include?(line) } +
47
+ ['', '#eac_redmine_base0'] + GITIGNORE_ADD).map { |line| "#{line}\n" }.join
48
+ )
49
+ end
50
+
51
+ def extract_package_to_tempdir
52
+ infom "Extracting package to tempdir #{tempdir}..."
53
+ ::EacRubyUtils::Envs.local.command(
54
+ 'tar', '-xf', source_package.path.to_path, '-C', tempdir.to_path,
55
+ '--strip-components', '1'
56
+ ).execute!
57
+ end
58
+
59
+ def git_commit
60
+ if git_repo.dirty?
61
+ infom 'Git commiting...'
62
+ git_repo.command('add', '--', target_path).execute!
63
+ git_repo.command('commit', '-m', git_commit_message, '--', target_path).execute!
64
+ else
65
+ infom 'Nothing to commit'
66
+ end
67
+ end
68
+
69
+ def git_commit_message
70
+ "Core: update to #{version}."
71
+ end
72
+
73
+ def git_repo_uncached
74
+ ::EacGit::Local.new(target_path)
75
+ end
76
+
77
+ def sync_content
78
+ ::Avm::Sync.new(source_path, target_path)
79
+ .add_exclude('/*').add_includes(*target_files_to_remove).move_mode(true).run
80
+ end
81
+
82
+ def source_package_uncached
83
+ ::Avm::CachedDownload.new(url, ::Avm.fs_cache.child('eac_redmine_base0', 'core_update'))
84
+ end
85
+
86
+ def validate_empty_dir
87
+ if source_path.children.empty?
88
+ infom 'No content left in source directory'
89
+ else
90
+ fatal_error 'Found entries in source directory: ' +
91
+ source_path.children.map { |c| c.basename.to_path }.join(', ')
92
+ end
93
+ end
94
+
95
+ def source_path_uncached
96
+ ::Pathname.new(tempdir.to_path)
97
+ end
98
+
99
+ def target_files_to_remove
100
+ git_repo.command('ls-files').execute!
101
+ .each_line.map { |v| "/#{v.strip}" }
102
+ .without(*TARGET_KEEP)
103
+ end
104
+
105
+ def target_path_uncached
106
+ instance.read_entry('fs_path').to_pathname
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,55 @@
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
+ EXTENSION = '.tar'
14
+
15
+ def do_dump(data_path)
16
+ ::File.open(data_path, 'wb') do |file|
17
+ file << URI.parse(export_url).read
18
+ end
19
+ end
20
+
21
+ def do_load(data_path)
22
+ do_load_by_web(data_path) || do_load_by_rake(data_path) || raise('Failed to load')
23
+ end
24
+
25
+ def do_load_by_web(data_path)
26
+ c = Curl::Easy.new(import_url)
27
+ c.multipart_form_post = true
28
+ c.http_post(Curl::PostField.file('redmine_with_git_tableless_load[path]', data_path))
29
+ c.perform
30
+ true
31
+ rescue Curl::Err::ConnectionFailedError
32
+ false
33
+ end
34
+
35
+ def do_load_by_rake(data_path)
36
+ instance.bundle('exec', 'rake', "redmine_with_git:load:all[#{data_path}]").system
37
+ true
38
+ end
39
+
40
+ def export_url
41
+ url('/backup/export')
42
+ end
43
+
44
+ def import_url
45
+ url('/backup/import.json')
46
+ end
47
+
48
+ def url(path)
49
+ uri = ::Addressable::URI.parse(instance.read_entry('web.url')) + path
50
+ uri.query_values = { key: instance.read_entry('admin.api_key') }
51
+ uri.to_s
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_webapp_base0/deploy'
4
+ require 'eac_ruby_utils/ruby'
5
+
6
+ module Avm
7
+ module EacRedmineBase0
8
+ class Deploy < ::Avm::EacWebappBase0::Deploy
9
+ set_callback :assert_instance_branch, :after, :run_installer
10
+
11
+ def run_installer
12
+ infom 'Running installer'
13
+ ::EacRubyUtils::Ruby.on_clean_environment do
14
+ installer_command.system!
15
+ end
16
+ end
17
+
18
+ def installer_command
19
+ instance.host_env.command(installer_path, install_task)
20
+ end
21
+
22
+ def installer_path
23
+ ::File.join(instance.read_entry(::Avm::Instances::EntryKeys::FS_PATH), 'plugins',
24
+ 'redmine_installer', 'installer', 'run.sh')
25
+ end
26
+
27
+ def install_task
28
+ if instance.read_entry_optional('web.path').present?
29
+ 'redmine_as_apache_path'
30
+ else
31
+ 'redmine_as_apache_base'
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_redmine_base0/data_unit'
4
+ require 'avm/eac_redmine_base0/instances/docker_image'
5
+ require 'avm/eac_webapp_base0/instance'
6
+ require 'avm/eac_rails_base1/instance'
7
+
8
+ module Avm
9
+ module EacRedmineBase0
10
+ class Instance < ::Avm::EacRailsBase1::Instance
11
+ FILES_UNITS = { files: 'files' }.freeze
12
+
13
+ def docker_image_class
14
+ ::Avm::EacRedmineBase0::Instances::DockerImage
15
+ end
16
+
17
+ def docker_run_arguments
18
+ [
19
+ '--volume',
20
+ "#{read_entry(::Avm::Instances::EntryKeys::FS_PATH)}:/home/myuser/eac_redmine_base0",
21
+ '--publish', "#{read_entry(:ssh_port)}:22",
22
+ '--publish', "#{read_entry(:http_port)}:80",
23
+ '--publish', "#{read_entry(:https_port)}:443"
24
+ ]
25
+ end
26
+
27
+ def data_package
28
+ @data_package ||= ::Avm::Data::Instance::Package.new(
29
+ self,
30
+ units: {
31
+ all: ::Avm::EacRedmineBase0::DataUnit.new(self)
32
+ }
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avm/instances/docker_image'
5
+ require 'avm/eac_redmine_base0/patches/object/template'
6
+
7
+ module Avm
8
+ module EacRedmineBase0
9
+ module Instances
10
+ class DockerImage < ::Avm::Instances::DockerImage
11
+ enable_simple_cache
12
+
13
+ REDMINE_SOURCE_HOST_SUBPATH = 'redmine_source'
14
+
15
+ def avm_fs_cache_object_id
16
+ instance.id
17
+ end
18
+
19
+ def redmine_user
20
+ 'redmine'
21
+ end
22
+
23
+ def redmine_user_home
24
+ "/home/#{redmine_user}"
25
+ end
26
+
27
+ def redmine_path
28
+ "#{redmine_user_home}/redmine_app"
29
+ end
30
+
31
+ def start_path
32
+ '/start.sh'
33
+ end
34
+
35
+ private
36
+
37
+ def git_repo_uncached
38
+ ::EacGit::Local.new(instance.source_instance.fs_path)
39
+ end
40
+
41
+ def redmine_source_git_id
42
+ git_repo.rev_parse('HEAD')
43
+ end
44
+
45
+ def redmine_source_path_uncached
46
+ r = provide_dir.join(REDMINE_SOURCE_HOST_SUBPATH)
47
+ ::FileUtils.rm_rf(r.to_path)
48
+ r.mkpath
49
+ git_repo.commit(redmine_source_git_id).archive_to_dir(r).system!
50
+ REDMINE_SOURCE_HOST_SUBPATH
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_templates/patches/object/template'
5
+
6
+ ::EacTemplates::Searcher.default.included_paths <<
7
+ __dir__.to_pathname.expand_path.parent_n(5).join('template')
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacRedmineBase0
5
+ VERSION = '0.1.0'
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: avm-eac_redmine_base0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Put here the authors
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-07-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: avm-eac_rails_base1
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: eac_ruby_utils
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.68'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.68'
41
+ - !ruby/object:Gem::Dependency
42
+ name: eac_ruby_gem_support
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.2'
55
+ description:
56
+ email:
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/avm/eac_redmine_base0.rb
62
+ - lib/avm/eac_redmine_base0/apache_host.rb
63
+ - lib/avm/eac_redmine_base0/core_update.rb
64
+ - lib/avm/eac_redmine_base0/data_unit.rb
65
+ - lib/avm/eac_redmine_base0/deploy.rb
66
+ - lib/avm/eac_redmine_base0/instance.rb
67
+ - lib/avm/eac_redmine_base0/instances/docker_image.rb
68
+ - lib/avm/eac_redmine_base0/patches/object/template.rb
69
+ - lib/avm/eac_redmine_base0/version.rb
70
+ homepage:
71
+ licenses: []
72
+ metadata: {}
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements: []
88
+ rubygems_version: 3.0.9
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: Put here de description.
92
+ test_files: []