rexer 0.3.0 → 0.4.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/README.md +12 -0
- data/lib/rexer/commands/install.rb +7 -7
- data/lib/rexer/definition/data.rb +3 -2
- data/lib/rexer/definition/dsl.rb +6 -1
- data/lib/rexer/definition/lock.rb +1 -1
- data/lib/rexer/definition.rb +11 -0
- data/lib/rexer/extension/plugin.rb +16 -3
- data/lib/rexer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4086f1f1bc3ef9be9579087c03f189f311e98276cadb9295acb2d33ae319e28e
|
4
|
+
data.tar.gz: 23b848de6c3e635b312ef127e5d7f6e616ee8d1a64d5e21dc4d90dc5196b48a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b0067a5d35d0ef2646f9e0a46da872be4b58bcce261be2a23cb9f57b314a612879af881628244dffa0dab11b4a2afc947317de2f0265e41807a62fd29cb85e1
|
7
|
+
data.tar.gz: 45fde51fb5bdf467cb0a8b00ef20d9498f7a06ebf39b555da6fa0435a0aef9a82ca2baa77ee9b8143e5200ab93ca36f516629b62c07f9c611a2320fae1ea1aef
|
data/README.md
CHANGED
@@ -120,6 +120,18 @@ plugin :redmica_s3, github: { repo: "redmica/redmica_s3" } do
|
|
120
120
|
end
|
121
121
|
```
|
122
122
|
|
123
|
+
## Configuring the command prefix
|
124
|
+
|
125
|
+
You can configure the command prefix for the commands that Rexer runs such as `bundle install` and `bin/rails redmine:plugins:migrate`.
|
126
|
+
|
127
|
+
```ruby
|
128
|
+
config command_prefix: "docker compose exec -T app"
|
129
|
+
|
130
|
+
plugin :some_plugin_with_db_migration, github: { repo: "some_plugin" }
|
131
|
+
```
|
132
|
+
|
133
|
+
In the above example, the `bin/rails redmine:plugins:migrate` command is executed as `docker compose exec -T app bin/rails redmine:plugins:migrate`.
|
134
|
+
|
123
135
|
## Developing
|
124
136
|
|
125
137
|
### Running tests
|
@@ -17,7 +17,7 @@ module Rexer
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def install_initially(definition)
|
20
|
-
install(definition.themes, definition.plugins)
|
20
|
+
install(definition.themes, definition.plugins, definition.config)
|
21
21
|
|
22
22
|
create_lock_file(definition.env)
|
23
23
|
print_state
|
@@ -26,8 +26,8 @@ module Rexer
|
|
26
26
|
def apply_diff(lock_definition, definition)
|
27
27
|
diff = lock_definition.diff(definition)
|
28
28
|
|
29
|
-
install(diff.added_themes, diff.added_plugins)
|
30
|
-
uninstall(diff.deleted_themes, diff.deleted_plugins)
|
29
|
+
install(diff.added_themes, diff.added_plugins, definition.config)
|
30
|
+
uninstall(diff.deleted_themes, diff.deleted_plugins, definition.config)
|
31
31
|
reload_source(diff.source_changed_themes, diff.source_changed_plugins)
|
32
32
|
|
33
33
|
create_lock_file(definition.env)
|
@@ -44,23 +44,23 @@ module Rexer
|
|
44
44
|
Definition::Lock.load_data if Definition::Lock.file.exist?
|
45
45
|
end
|
46
46
|
|
47
|
-
def install(themes, plugins)
|
47
|
+
def install(themes, plugins, config)
|
48
48
|
themes.each do
|
49
49
|
Extension::Theme::Installer.new(_1).install
|
50
50
|
end
|
51
51
|
|
52
52
|
plugins.each do
|
53
|
-
Extension::Plugin::Installer.new(_1).install
|
53
|
+
Extension::Plugin::Installer.new(_1, config).install
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
def uninstall(themes, plugins)
|
57
|
+
def uninstall(themes, plugins, config)
|
58
58
|
themes.each do
|
59
59
|
Extension::Theme::Uninstaller.new(_1).uninstall
|
60
60
|
end
|
61
61
|
|
62
62
|
plugins.each do
|
63
|
-
Extension::Plugin::Uninstaller.new(_1).uninstall
|
63
|
+
Extension::Plugin::Uninstaller.new(_1, config).uninstall
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
@@ -2,11 +2,12 @@ module Rexer
|
|
2
2
|
module Definition
|
3
3
|
class Data
|
4
4
|
attr_accessor :env
|
5
|
-
attr_reader :version
|
5
|
+
attr_reader :config, :version
|
6
6
|
|
7
|
-
def initialize(plugins, themes, env: nil, version: nil)
|
7
|
+
def initialize(plugins, themes, config, env: nil, version: nil)
|
8
8
|
@plugins = plugins
|
9
9
|
@themes = themes
|
10
|
+
@config = config
|
10
11
|
@env = env
|
11
12
|
@version = version
|
12
13
|
end
|
data/lib/rexer/definition/dsl.rb
CHANGED
@@ -5,6 +5,7 @@ module Rexer
|
|
5
5
|
@plugins = []
|
6
6
|
@themes = []
|
7
7
|
@env = env
|
8
|
+
@config = nil
|
8
9
|
end
|
9
10
|
|
10
11
|
def plugin(name, **opts, &hooks)
|
@@ -32,8 +33,12 @@ module Rexer
|
|
32
33
|
@themes += data.themes
|
33
34
|
end
|
34
35
|
|
36
|
+
def config(command_prefix: nil)
|
37
|
+
@config = Definition::Config.new(command_prefix)
|
38
|
+
end
|
39
|
+
|
35
40
|
def to_data
|
36
|
-
Definition::Data.new(@plugins, @themes)
|
41
|
+
Definition::Data.new(@plugins, @themes, @config)
|
37
42
|
end
|
38
43
|
|
39
44
|
private
|
data/lib/rexer/definition.rb
CHANGED
@@ -10,6 +10,17 @@ module Rexer
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
Config = ::Data.define(
|
14
|
+
# The prefix of the command such as bundle install and bin/rails redmine:plugins:migrate.
|
15
|
+
#
|
16
|
+
# For example, if the command_prefix is set "docker compose exec -T app",
|
17
|
+
# then bundle install will be executed as follows:
|
18
|
+
#
|
19
|
+
# docker compose exec -T app bundle install
|
20
|
+
#
|
21
|
+
:command_prefix
|
22
|
+
)
|
23
|
+
|
13
24
|
Source = ::Data.define(:type, :options)
|
14
25
|
|
15
26
|
Plugin = ::Data.define(:name, :source, :hooks, :env) do
|
@@ -8,15 +8,16 @@ module Rexer
|
|
8
8
|
end
|
9
9
|
|
10
10
|
class Base
|
11
|
-
def initialize(definition)
|
11
|
+
def initialize(definition, config = nil)
|
12
12
|
@definition = definition
|
13
13
|
@name = definition.name
|
14
14
|
@hooks = definition.hooks || {}
|
15
|
+
@config = config
|
15
16
|
end
|
16
17
|
|
17
18
|
private
|
18
19
|
|
19
|
-
attr_reader :name, :hooks, :definition
|
20
|
+
attr_reader :name, :hooks, :definition, :config
|
20
21
|
|
21
22
|
def plugin_dir
|
22
23
|
@plugin_dir ||= Plugin.dir.join(name.to_s)
|
@@ -36,7 +37,7 @@ module Rexer
|
|
36
37
|
return unless needs_db_migration?
|
37
38
|
|
38
39
|
envs = {"NAME" => name.to_s}.merge(extra_envs)
|
39
|
-
_, error, status = Open3.capture3(envs, "bin/rails redmine:plugins:migrate")
|
40
|
+
_, error, status = Open3.capture3(envs, cmd_with_prefix("bin/rails redmine:plugins:migrate"))
|
40
41
|
|
41
42
|
raise error unless status.success?
|
42
43
|
end
|
@@ -44,6 +45,10 @@ module Rexer
|
|
44
45
|
def source
|
45
46
|
@source ||= Source.from_definition(definition.source)
|
46
47
|
end
|
48
|
+
|
49
|
+
def cmd_with_prefix(command)
|
50
|
+
[config&.command_prefix, command].compact.join(" ")
|
51
|
+
end
|
47
52
|
end
|
48
53
|
|
49
54
|
class Installer < Base
|
@@ -51,6 +56,7 @@ module Rexer
|
|
51
56
|
return if plugin_exists?
|
52
57
|
|
53
58
|
load_from_source
|
59
|
+
run_bundle_install
|
54
60
|
run_db_migrate
|
55
61
|
hooks[:installed]&.call
|
56
62
|
end
|
@@ -60,6 +66,13 @@ module Rexer
|
|
60
66
|
def load_from_source
|
61
67
|
source.load(plugin_dir.to_s)
|
62
68
|
end
|
69
|
+
|
70
|
+
def run_bundle_install
|
71
|
+
return unless plugin_dir.join("Gemfile").exist?
|
72
|
+
|
73
|
+
_, error, status = Open3.capture3(cmd_with_prefix("bundle install"))
|
74
|
+
raise error unless status.success?
|
75
|
+
end
|
63
76
|
end
|
64
77
|
|
65
78
|
class Uninstaller < Base
|
data/lib/rexer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rexer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katsuya Hidaka
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|