eac_tools 0.110.0 → 0.111.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/Gemfile.lock +55 -51
- data/lib/eac_tools/version.rb +1 -1
- data/sub/avm-eac_rails_base1/avm-eac_rails_base1.gemspec +3 -3
- data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/base/install.rb +25 -0
- data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/base.rb +2 -0
- data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/version.rb +1 -1
- data/sub/avm-eac_rails_base1/template/avm/eac_rails_base1/instances/apache_path/extra_content.conf +1 -0
- data/sub/avm-eac_redmine_base0/avm-eac_redmine_base0.gemspec +26 -0
- data/sub/{avm-eac_rails_base0/lib/avm/eac_rails_base0 → avm-eac_redmine_base0/lib/avm/eac_redmine_base0}/instances/apache_host.rb +1 -1
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/database.rb +27 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/files.rb +18 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/gitolite.rb +52 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/install.rb +43 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/nodejs.rb +19 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/web.rb +17 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base.rb +63 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/deploy.rb +16 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/docker_image.rb +110 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/entity_base.rb +31 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/project.rb +21 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/root.rb +17 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/wiki_page.rb +50 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api.rb +10 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/docker.rb +15 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page/read.rb +25 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page/write.rb +68 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page.rb +26 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project.rb +22 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project_rename.rb +53 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/base/default_settings.rb +40 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/base.rb +34 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/core_update.rb +125 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/runners/core_update.rb +61 -0
- data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/runners/docker.rb +16 -0
- data/sub/{avm-eac_rails_base0/lib/avm/eac_rails_base0 → avm-eac_redmine_base0/lib/avm/eac_redmine_base0}/version.rb +2 -2
- data/sub/{avm-eac_rails_base0/lib/avm/eac_rails_base0.rb → avm-eac_redmine_base0/lib/avm/eac_redmine_base0.rb} +6 -1
- data/sub/avm-eac_redmine_base0/locale/en.yml +6 -0
- data/sub/avm-eac_redmine_base0/locale/pt-BR.yml +6 -0
- data/sub/{avm-eac_rails_base0/spec/lib/avm/eac_rails_base0 → avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0}/instances/apache_host_spec.rb +2 -2
- data/sub/avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0/instances/base/gitolite_spec.rb +24 -0
- data/sub/avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0/instances/base/gitolite_spec_files/config.yml +10 -0
- data/sub/{avm-eac_rails_base0 → avm-eac_redmine_base0}/spec/spec_helper.rb +1 -1
- data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/deploy/config/install.sh.template +46 -0
- data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/deploy/config/secrets.yml +8 -0
- data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/Dockerfile.template +37 -0
- data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_host_dockerfile +8 -0
- data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_http_virtualhost.conf.template +10 -0
- data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_https_virtualhost.conf.template +16 -0
- data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_path_dockerfile +5 -0
- data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/start.sh.template +53 -0
- data/sub/avm-eac_webapp_base0/avm-eac_webapp_base0.gemspec +2 -2
- data/sub/avm-eac_webapp_base0/lib/avm/eac_webapp_base0/instances/base/deploy.rb +1 -5
- data/sub/avm-eac_webapp_base0/lib/avm/eac_webapp_base0/instances/base/install.rb +6 -1
- data/sub/avm-eac_webapp_base0/lib/avm/eac_webapp_base0/instances/deploy.rb +2 -4
- data/sub/avm-eac_webapp_base0/lib/avm/eac_webapp_base0/version.rb +1 -1
- metadata +59 -93
- data/sub/avm-eac_postgresql_base0/avm-eac_postgresql_base0.gemspec +0 -20
- data/sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb +0 -75
- data/sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/commands.rb +0 -70
- data/sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/data_unit.rb +0 -63
- data/sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance.rb +0 -46
- data/sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance_with.rb +0 -22
- data/sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/version.rb +0 -7
- data/sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0.rb +0 -11
- data/sub/avm-eac_postgresql_base0/spec/spec_helper.rb +0 -5
- data/sub/avm-eac_rails_base0/Gemfile +0 -8
- data/sub/avm-eac_rails_base0/avm-eac_rails_base0.gemspec +0 -20
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/instances/apache_path.rb +0 -10
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/instances/base.rb +0 -21
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/instances/deploy.rb +0 -51
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/source_generators/base.rb +0 -10
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/sources/base.rb +0 -37
- data/sub/avm-eac_rails_base0/spec/lib/avm/eac_rails_base0/instances/apache_path_spec.rb +0 -20
- data/sub/avm-eac_rails_base0/spec/lib/avm/eac_rails_base0/instances/apache_path_spec_files/stub-app_0_apache_path.conf +0 -12
- data/sub/avm-eac_rails_base0/spec/meta/rubocop_spec.rb +0 -3
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/instances/deploy/config/database.yml.template +0 -21
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/instances/deploy/config/envvars.d/email.yml.template +0 -11
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/Gemfile +0 -11
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/Rakefile +0 -8
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/app/assets/config/manifest.js +0 -3
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/app/assets/javascripts/application.js +0 -1
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/app/assets/stylesheets/application.scss +0 -1
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/app/controllers/application_controller.rb +0 -4
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/app/controllers/welcome_controller.rb +0 -5
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/app/views/welcome/index.html.erb +0 -1
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/bin/bundle +0 -5
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/bin/rails +0 -11
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/bin/rake +0 -11
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/bin/yarn +0 -11
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/config/application.rb +0 -11
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/config/boot.rb +0 -5
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/config/cable.yml +0 -8
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/config/credentials.yml.enc +0 -1
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/config/environment.rb +0 -7
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/config/puma.rb +0 -39
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/config/routes.rb +0 -5
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/config/spring.rb +0 -8
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/config.ru +0 -7
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/db/schema.rb +0 -1
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/lib/ability.rb +0 -20
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/lib/ability_mapping.rb +0 -10
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/public/favicon.ico +0 -0
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/spec/code/rubocop_spec.rb +0 -3
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/source_generators/base/spec/spec_helper.rb +0 -8
- data/sub/avm-eac_webapp_base0/lib/avm/eac_webapp_base0/instances/runners/data/load.rb +0 -57
- /data/sub/{avm-eac_postgresql_base0 → avm-eac_redmine_base0}/Gemfile +0 -0
- /data/sub/{avm-eac_rails_base0/spec/lib/avm/eac_rails_base0 → avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0}/instances/apache_host_spec_files/apache_host_spec_no_ssl_content.conf +0 -0
- /data/sub/{avm-eac_postgresql_base0 → avm-eac_redmine_base0}/spec/meta/rubocop_spec.rb +0 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Instances
|
|
6
|
+
class DockerImage < ::Avm::Instances::DockerImage
|
|
7
|
+
enable_simple_cache
|
|
8
|
+
|
|
9
|
+
APACHE_HOST_DOCKERFILE_SUBPATH = 'apache_host_dockerfile'
|
|
10
|
+
APACHE_PATH_DOCKERFILE_SUBPATH = 'apache_path_dockerfile'
|
|
11
|
+
INSTALLER_TARGET_TASK_WITH_WEB_PATH_BLANK = 'redmine_as_apache_base'
|
|
12
|
+
INSTALLER_TARGET_TASK_WITH_WEB_PATH_PRESENT = 'redmine_as_apache_path'
|
|
13
|
+
REDMINE_SOURCE_HOST_SUBPATH = 'redmine_source'
|
|
14
|
+
SSH_SERVER_INSTALL = <<~CODE
|
|
15
|
+
RUN sudo apt-get install -y openssh-server
|
|
16
|
+
EXPOSE 22/tcp
|
|
17
|
+
CODE
|
|
18
|
+
|
|
19
|
+
delegate :database_internal, to: :instance
|
|
20
|
+
|
|
21
|
+
def avm_fs_cache_object_id
|
|
22
|
+
instance.id
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def apache_setup
|
|
26
|
+
template.child(apache_setup_dockerfile).apply(self)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @return [String]
|
|
30
|
+
def apache_setup_dockerfile
|
|
31
|
+
web_path_present? ? APACHE_PATH_DOCKERFILE_SUBPATH : APACHE_HOST_DOCKERFILE_SUBPATH
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def base_image
|
|
35
|
+
eac_ubuntu_base0_instance.docker_image.provide.id
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def installer_target_task
|
|
39
|
+
if web_path_present?
|
|
40
|
+
INSTALLER_TARGET_TASK_WITH_WEB_PATH_PRESENT
|
|
41
|
+
else
|
|
42
|
+
INSTALLER_TARGET_TASK_WITH_WEB_PATH_BLANK
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def redmine_user
|
|
47
|
+
eac_ubuntu_base0_instance.docker_image.user_name
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def redmine_user_home
|
|
51
|
+
eac_ubuntu_base0_instance.docker_image.user_home
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def redmine_path
|
|
55
|
+
"#{redmine_user_home}/redmine_app"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def skip_database
|
|
59
|
+
ENV.fetch('SKIP_DATABASE', nil)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Optionally install the SSH server.
|
|
63
|
+
# @return [String]
|
|
64
|
+
def ssh_server_install
|
|
65
|
+
ENV.fetch('SSH_SERVER', false).to_bool ? SSH_SERVER_INSTALL : ''
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def start_path
|
|
69
|
+
'/start.sh'
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def web_path_present?
|
|
73
|
+
::Addressable::URI.parse(instance.web_url).path.present?
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def write_in_provide_dir
|
|
77
|
+
super
|
|
78
|
+
|
|
79
|
+
::Avm::EacRedmineBase0::Instances::Deploy.template.child('config')
|
|
80
|
+
.child('install.sh')
|
|
81
|
+
.apply_to_file(variables_source, provide_dir.join('install_settings.sh'))
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
private
|
|
85
|
+
|
|
86
|
+
def eac_ubuntu_base0_instance
|
|
87
|
+
r = ::Avm::EacUbuntuBase0::Instances::Base.by_id(instance.id)
|
|
88
|
+
r.docker_image_options = instance.docker_image_options
|
|
89
|
+
r
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def git_repo_uncached
|
|
93
|
+
::EacGit::Local.new(instance.source_instance.install_path)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def redmine_source_git_id
|
|
97
|
+
git_repo.rev_parse('HEAD')
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def redmine_source_path_uncached
|
|
101
|
+
r = provide_dir.join(REDMINE_SOURCE_HOST_SUBPATH)
|
|
102
|
+
::FileUtils.rm_rf(r.to_path)
|
|
103
|
+
r.mkpath
|
|
104
|
+
git_repo.commit(redmine_source_git_id).archive_to_dir(r).system!
|
|
105
|
+
REDMINE_SOURCE_HOST_SUBPATH
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Instances
|
|
6
|
+
class RestApi < ::EacRest::Api
|
|
7
|
+
class EntityBase < ::EacRest::Entity
|
|
8
|
+
def build_request(url_suffix)
|
|
9
|
+
api.request_json("#{url_suffix}.json")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def data_from_response(response)
|
|
13
|
+
raise "\"#{response.url}\" returned non-ok status: #{response.status}" unless
|
|
14
|
+
response.status.to_s.start_with?('2')
|
|
15
|
+
|
|
16
|
+
return {} if response.body_str.blank?
|
|
17
|
+
|
|
18
|
+
response.body_data
|
|
19
|
+
rescue ::JSON::ParserError
|
|
20
|
+
raise "\"#{response.url}\" returned invalid JSON: \"#{response.body_str}\" " \
|
|
21
|
+
"(Status: #{response.status})"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def fetch_data(url_suffix)
|
|
25
|
+
data_from_response(build_request(url_suffix).response)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Instances
|
|
6
|
+
class RestApi < ::EacRest::Api
|
|
7
|
+
class Project < ::Avm::EacRedmineBase0::Instances::RestApi::EntityBase
|
|
8
|
+
# @return [String]
|
|
9
|
+
def prefix
|
|
10
|
+
"/projects/#{id}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# @return [Avm::EacRedmineBase0::Instances::RestApi::WikiPage]
|
|
14
|
+
def wiki_page(name)
|
|
15
|
+
child_entity(::Avm::EacRedmineBase0::Instances::RestApi::WikiPage, name)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Instances
|
|
6
|
+
class RestApi < ::EacRest::Api
|
|
7
|
+
class Root < ::Avm::EacRedmineBase0::Instances::RestApi::EntityBase
|
|
8
|
+
# @param id_or_identifier [String]
|
|
9
|
+
# @return [Avm::EacRedmineBase0::Instances::RestApi::Project]
|
|
10
|
+
def project(id_or_identifier)
|
|
11
|
+
api.entity(::Avm::EacRedmineBase0::Instances::RestApi::Project, id_or_identifier)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Instances
|
|
6
|
+
class RestApi < ::EacRest::Api
|
|
7
|
+
class WikiPage < ::Avm::EacRedmineBase0::Instances::RestApi::EntityBase
|
|
8
|
+
enable_simple_cache
|
|
9
|
+
|
|
10
|
+
# @return [Hash]
|
|
11
|
+
def data_from_id
|
|
12
|
+
fetch_data(prefix)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @return [String]
|
|
16
|
+
def data_root
|
|
17
|
+
'wiki_page'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @return [String]
|
|
21
|
+
def prefix
|
|
22
|
+
"#{parent_entity.prefix}/wiki/#{id}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @return [String]
|
|
26
|
+
def read
|
|
27
|
+
data.fetch(data_root).fetch('text')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @param content [String]
|
|
31
|
+
# @return [+self+]
|
|
32
|
+
def write(text)
|
|
33
|
+
data_from_response(
|
|
34
|
+
build_request(prefix).verb(:put).header('Content-type', 'application/json')
|
|
35
|
+
.body_data(write_data(text).to_json).response
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @param text [String]
|
|
40
|
+
# @return [Hash]
|
|
41
|
+
def write_data(text)
|
|
42
|
+
{
|
|
43
|
+
data_root => { 'text' => text }
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page/read.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Instances
|
|
6
|
+
module Runners
|
|
7
|
+
class Project
|
|
8
|
+
class WikiPage
|
|
9
|
+
class Read
|
|
10
|
+
runner_with :help, :output
|
|
11
|
+
|
|
12
|
+
def run
|
|
13
|
+
run_output
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def output_content
|
|
17
|
+
runner_context.call(:wiki_page_content)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Instances
|
|
6
|
+
module Runners
|
|
7
|
+
class Project
|
|
8
|
+
class WikiPage
|
|
9
|
+
class Write
|
|
10
|
+
runner_with :help, :confirmation, :input do
|
|
11
|
+
bool_opt '-f', '--force'
|
|
12
|
+
end
|
|
13
|
+
delegate :force?, to: :parsed
|
|
14
|
+
|
|
15
|
+
def run
|
|
16
|
+
start_banner
|
|
17
|
+
if write?
|
|
18
|
+
run_write
|
|
19
|
+
else
|
|
20
|
+
success 'Content unchanged, no further action will be taken'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def start_banner
|
|
25
|
+
infov 'Content'
|
|
26
|
+
infov ' * Current', current_content
|
|
27
|
+
infov ' * New', new_content
|
|
28
|
+
infov ' * Changed?', content_changed?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @return [Boolean]
|
|
32
|
+
def content_changed?
|
|
33
|
+
new_content != current_content
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def run_write
|
|
37
|
+
if confirm?('Write?')
|
|
38
|
+
infom 'Writing...'
|
|
39
|
+
runner_context.call(:wiki_page).write(new_content)
|
|
40
|
+
success('Writed!')
|
|
41
|
+
else
|
|
42
|
+
success('Unconfirmed, no further action will be taken')
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @return [Boolean]
|
|
47
|
+
def write?
|
|
48
|
+
parsed.force? || content_changed?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
# @return [String]
|
|
54
|
+
def current_content_uncached
|
|
55
|
+
runner_context.call(:wiki_page_content)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# @return [String]
|
|
59
|
+
def new_content_uncached
|
|
60
|
+
input_content
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Instances
|
|
6
|
+
module Runners
|
|
7
|
+
class Project
|
|
8
|
+
class WikiPage
|
|
9
|
+
runner_with :help, :subcommands do
|
|
10
|
+
pos_arg :name
|
|
11
|
+
subcommands
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def wiki_page
|
|
15
|
+
runner_context.call(:project).wiki_page(parsed.name)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def wiki_page_content
|
|
19
|
+
wiki_page.read
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Instances
|
|
6
|
+
module Runners
|
|
7
|
+
class Project
|
|
8
|
+
runner_with :help, :subcommands do
|
|
9
|
+
pos_arg :id_or_identifier
|
|
10
|
+
subcommands
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def project_uncached
|
|
16
|
+
runner_context.call(:instance).rest_api.root_entity.project(parsed.id_or_identifier)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Instances
|
|
6
|
+
module Runners
|
|
7
|
+
class ProjectRename
|
|
8
|
+
runner_with :help, ::Avm::EacRailsBase1::RunnerWith::Bundle do
|
|
9
|
+
pos_arg :from
|
|
10
|
+
pos_arg :to
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def run
|
|
14
|
+
bundle_run
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def start_banner
|
|
18
|
+
infov 'From', from
|
|
19
|
+
infov 'To', to
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
delegate :from, :to, to: :parsed
|
|
23
|
+
|
|
24
|
+
def bundle_args
|
|
25
|
+
%w[exec rails runner] + [code]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def code
|
|
29
|
+
<<~CODE
|
|
30
|
+
from_arg = '#{from}'
|
|
31
|
+
to_arg = '#{to}'
|
|
32
|
+
project = ::Project.where(identifier: from_arg).first
|
|
33
|
+
if project.present?
|
|
34
|
+
puts "Project found: \#{project}"
|
|
35
|
+
puts "Renaming..."
|
|
36
|
+
project.update_column(:identifier, to_arg)
|
|
37
|
+
puts "Renamed. Testing..."
|
|
38
|
+
project = ::Project.where(identifier: to_arg).first
|
|
39
|
+
if project
|
|
40
|
+
puts "Project found: \#{project}"
|
|
41
|
+
else
|
|
42
|
+
fail "After rename: project not found with identifier \\"\#{to_arg}\\""
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
fail "Before rename: project not found with identifier \\"\#{from_arg}\\""
|
|
46
|
+
end
|
|
47
|
+
CODE
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Sources
|
|
6
|
+
class Base < ::Avm::EacRailsBase1::Sources::Base
|
|
7
|
+
module DefaultSettings
|
|
8
|
+
common_concern
|
|
9
|
+
|
|
10
|
+
DEFAULT_RUBY_VERSION_PARSER = /ruby_version='([^']+)'/.to_parser { |m| m[1] }
|
|
11
|
+
INSTALLER_PLUGIN_DEFAULT_SETTINGS_PATH =
|
|
12
|
+
'plugins/redmine_installer/installer/default_settings.sh'
|
|
13
|
+
|
|
14
|
+
# @return [ActiveSupport::Duration]
|
|
15
|
+
def default_passenger_start_timeout
|
|
16
|
+
default_setting_value('passenger_start_timeout').to_i.seconds
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# @return [Avm::VersionNumber]
|
|
20
|
+
def default_ruby_version
|
|
21
|
+
::Avm::VersionNumber.new(default_setting_value('ruby_version'))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @param key [String]
|
|
25
|
+
# @return [String]
|
|
26
|
+
def default_setting_value(key)
|
|
27
|
+
default_setting_parser(key)
|
|
28
|
+
.parse!(path.join(INSTALLER_PLUGIN_DEFAULT_SETTINGS_PATH).read)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @param key [String]
|
|
32
|
+
# @return [EacRubyUtils::RegexpParser]
|
|
33
|
+
def default_setting_parser(key)
|
|
34
|
+
/#{::Regexp.quote(key)}='([^']+)'/.to_parser { |m| m[1] }
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Sources
|
|
6
|
+
class Base < ::Avm::EacRailsBase1::Sources::Base
|
|
7
|
+
DEFAULT_TEST_COMMANDS = {}.freeze
|
|
8
|
+
REDMINE_LIB_SUBPATH = 'lib/redmine.rb'
|
|
9
|
+
SUBS_INCLUDE_PATHS_DEFAULT = ['plugins/*'].freeze
|
|
10
|
+
|
|
11
|
+
# Return a empty hash (No tests).
|
|
12
|
+
#
|
|
13
|
+
# @return [Hash<String, EacRubyUtils::Envs::Command].
|
|
14
|
+
def default_test_commands
|
|
15
|
+
DEFAULT_TEST_COMMANDS
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def redmine_lib_path
|
|
19
|
+
path.join(REDMINE_LIB_SUBPATH)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def subs_include_paths_default
|
|
23
|
+
SUBS_INCLUDE_PATHS_DEFAULT
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def valid?
|
|
27
|
+
super && redmine_lib_path.exist?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
require_sub __FILE__, include_modules: true
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Avm
|
|
4
|
+
module EacRedmineBase0
|
|
5
|
+
module Sources
|
|
6
|
+
class CoreUpdate
|
|
7
|
+
enable_speaker
|
|
8
|
+
enable_simple_cache
|
|
9
|
+
common_constructor :source, :version, :url
|
|
10
|
+
|
|
11
|
+
GITIGNORE_ADD = %w[/public/assets/**/* /config/install.sh /config/secrets_key.txt
|
|
12
|
+
/log/**/*].freeze
|
|
13
|
+
GITIGNORE_DEL = %w[/Gemfile.lock /plugins/* /public/themes/*].freeze
|
|
14
|
+
TARGET_KEEP = ::Avm::Sources::Base::Configuration::CONFIGURATION_FILENAMES
|
|
15
|
+
.map { |b| "/#{b}" } + %w[/Gemfile.lock /plugins/*/**
|
|
16
|
+
/public/themes/*/**].freeze
|
|
17
|
+
TARGET_REMOVE = %w[alternate classic].map { |t| "/public/themes/#{t}/**" }
|
|
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
|
+
def fs_object_id
|
|
40
|
+
[source.path, version].join('_').variableize
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
attr_reader :tempdir
|
|
46
|
+
|
|
47
|
+
def change_git_ignore
|
|
48
|
+
file = target_path.join('.gitignore')
|
|
49
|
+
file.write(
|
|
50
|
+
(file.read.each_line.map(&:strip).reject { |line| GITIGNORE_DEL.include?(line) } +
|
|
51
|
+
['', '#eac_redmine_base0'] + GITIGNORE_ADD).map { |line| "#{line}\n" }.join
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def extract_package_to_tempdir
|
|
56
|
+
infom "Extracting package to tempdir #{tempdir}..."
|
|
57
|
+
::EacRubyUtils::Envs.local.command(
|
|
58
|
+
'tar', '-xf', source_package.path.to_path, '-C', tempdir.to_path,
|
|
59
|
+
'--strip-components', '1'
|
|
60
|
+
).execute!
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def git_commit
|
|
64
|
+
if git_repo.dirty?
|
|
65
|
+
infom 'Git commiting...'
|
|
66
|
+
git_repo.command('add', '--', target_path).execute!
|
|
67
|
+
git_repo.command('commit', '-m', git_commit_message, '--', target_path).execute!
|
|
68
|
+
else
|
|
69
|
+
infom 'Nothing to commit'
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def git_commit_message
|
|
74
|
+
i18n_translate(__method__, version: version, __locale: source.locale)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def git_repo_uncached
|
|
78
|
+
::EacGit::Local.new(target_path)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def sync_content
|
|
82
|
+
::Avm::Sync.new(source_path, target_path)
|
|
83
|
+
.add_exclude('/*').add_includes(*target_files_to_remove).move_mode(true).run
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# @return [EacFs::CachedDownload]
|
|
87
|
+
def source_package_uncached
|
|
88
|
+
::EacFs::CachedDownload.new(url, fs_cache)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def validate_empty_dir
|
|
92
|
+
if source_path.children.empty?
|
|
93
|
+
infom 'No content left in source directory'
|
|
94
|
+
else
|
|
95
|
+
fatal_error 'Found entries in source directory: ' + # rubocop:disable Style/StringConcatenation
|
|
96
|
+
source_path.children.map { |c| c.basename.to_path }.join(', ')
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def source_path_uncached
|
|
101
|
+
::Pathname.new(tempdir.to_path)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# @return [Enumerable<String>]
|
|
105
|
+
def target_files_to_remove
|
|
106
|
+
git_repo.command('ls-files').execute!
|
|
107
|
+
.each_line.map { |v| "/#{v.strip}" }
|
|
108
|
+
.reject { |tpath| target_keep?(tpath) }
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# @param tpath [String]
|
|
112
|
+
# @return [Boolean]
|
|
113
|
+
def target_keep?(tpath)
|
|
114
|
+
tpath = tpath.to_pathname
|
|
115
|
+
TARGET_REMOVE.none? { |target_remove| tpath.fnmatch?(target_remove) }
|
|
116
|
+
TARGET_KEEP.any? { |target_keep| tpath.fnmatch?(target_keep) }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def target_path_uncached
|
|
120
|
+
source.path
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|