deploy_pin 1.3.6 → 1.3.8
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 +48 -2
- data/lib/deploy_pin/collector.rb +18 -8
- data/lib/deploy_pin/runner.rb +3 -18
- data/lib/deploy_pin/task.rb +10 -6
- data/lib/deploy_pin/version.rb +1 -1
- data/lib/deploy_pin.rb +2 -0
- data/lib/generators/deploy_pin/install/templates/deploy_pin.rb +23 -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: e3d6aa336c010d58ff4462cc64038351fa67432faf2f4dd3e094b12d3c912c9e
|
4
|
+
data.tar.gz: a9e8d29ac5e8db0c207f2e40a59f6d77013c98efbf7e9cb38c5b1e1b6840f577
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf2efc8fd1cc48f8e1bf5568bb11544d6a20510e7bbfa2ae81f63f831da6776945b6dc22e5d9befa444c77d042b3d6a9a87bb9b40f246c4a54e9801fd960069a
|
7
|
+
data.tar.gz: 1527b98cccfec97dad84286cea3063c9a76a051f9286a8be01181bb1bd1c6032e94693b57ed1f3cfea7b1286a2849d5fa2e36a0d8e7a1fe90f41dba946212c63
|
data/README.md
CHANGED
@@ -110,7 +110,7 @@ A default value must be defined in the deploy_pin initializer. Ex.:
|
|
110
110
|
# config/initializers/deploy_pin.rb
|
111
111
|
DeployPin.setup do
|
112
112
|
statement_timeout 0.2.second # 200 ms
|
113
|
-
end
|
113
|
+
end
|
114
114
|
```
|
115
115
|
|
116
116
|
In order to not use the default value, it's required to use explicitly in the task, like:
|
@@ -127,7 +127,7 @@ end
|
|
127
127
|
|
128
128
|
To know more about the params, please check the documentation [here](lib/deploy_pin/database.rb).
|
129
129
|
|
130
|
-
|
130
|
+
## Parallel
|
131
131
|
To run parallel tasks using timeout, it's required to use the parallel wrapper, which mimics parallel interface,
|
132
132
|
but adding the timeout option.
|
133
133
|
|
@@ -142,6 +142,52 @@ end
|
|
142
142
|
|
143
143
|
Check the documentation [here](lib/deploy_pin/parallel_wrapper.rb).
|
144
144
|
|
145
|
+
## Formatting
|
146
|
+
`run_formatter` is used to format the output of a `run` task
|
147
|
+
`list_formatter` is used to format the output of a `list` task
|
148
|
+
|
149
|
+
A default value must be defined in the deploy_pin initializer. Ex.:
|
150
|
+
```ruby
|
151
|
+
# config/initializers/deploy_pin.rb
|
152
|
+
DeployPin.setup do
|
153
|
+
run_formatter(
|
154
|
+
lambda do |index, task_count, task, executable, start, duration = nil|
|
155
|
+
end_of_msg = if executable
|
156
|
+
start ? '(Started)' : "(Done in #{duration})\n\n"
|
157
|
+
else
|
158
|
+
"(Skipped)\n\n"
|
159
|
+
end
|
160
|
+
|
161
|
+
puts("[#{index + 1}/#{task_count}] Task #{task.title} #{task.uuid}##{task.group} #{end_of_msg}".blue.bold)
|
162
|
+
end
|
163
|
+
)
|
164
|
+
list_formatter(
|
165
|
+
lambda do |index, task|
|
166
|
+
puts("======= Task ##{index} ========".blue.bold)
|
167
|
+
|
168
|
+
# print details
|
169
|
+
task.details.each do |key, value|
|
170
|
+
puts("#{key}:\t\t#{value}")
|
171
|
+
end
|
172
|
+
|
173
|
+
puts("\n<<<\n#{task.script.strip.green}\n>>>\n\n")
|
174
|
+
end
|
175
|
+
)
|
176
|
+
end
|
177
|
+
```
|
178
|
+
|
179
|
+
In order to not use the default value, it's required to use explicitly in the task, like:
|
180
|
+
```ruby
|
181
|
+
# Some deploy_pin task
|
182
|
+
# 20190401135040:I
|
183
|
+
# task_title: Execute some query with timeout
|
184
|
+
|
185
|
+
# === task code goes down here ===
|
186
|
+
DeployPin::Database::execute_with_timeout do
|
187
|
+
ActiveRecord::Base.connection.execute("select * from shipments;")
|
188
|
+
end
|
189
|
+
```
|
190
|
+
|
145
191
|
## Contributing
|
146
192
|
Contribution directions go here.
|
147
193
|
|
data/lib/deploy_pin/collector.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# executes tasks
|
4
4
|
module DeployPin
|
5
5
|
class Collector
|
6
|
-
attr_reader :identifiers
|
6
|
+
attr_reader :identifiers, :formatter
|
7
7
|
|
8
8
|
def initialize(identifiers:)
|
9
9
|
@identifiers = identifiers
|
@@ -16,13 +16,15 @@ module DeployPin
|
|
16
16
|
# run only uniq tasks
|
17
17
|
executable = _tasks[0..index].none? { |_task| task.eql?(_task) }
|
18
18
|
|
19
|
-
|
19
|
+
DeployPin.run_formatter.call(index, _tasks.count, task, executable, true)
|
20
20
|
|
21
21
|
# run if executable
|
22
22
|
if executable
|
23
|
-
|
24
|
-
task.run
|
23
|
+
duration = execution_duration do
|
24
|
+
run_with_timeout(task) { task.run }
|
25
25
|
end
|
26
|
+
|
27
|
+
DeployPin.run_formatter.call(index, _tasks.count, task, executable, false, duration)
|
26
28
|
end
|
27
29
|
|
28
30
|
# mark each task as done
|
@@ -33,11 +35,11 @@ module DeployPin
|
|
33
35
|
def list
|
34
36
|
_tasks = tasks
|
35
37
|
_tasks.each_with_index do |task, index|
|
36
|
-
|
38
|
+
DeployPin.list_formatter.call(index, task)
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
40
|
-
def
|
42
|
+
def executable
|
41
43
|
# cache tasks
|
42
44
|
_tasks = tasks
|
43
45
|
_tasks.map.with_index do |task, index|
|
@@ -71,10 +73,18 @@ module DeployPin
|
|
71
73
|
end
|
72
74
|
|
73
75
|
# :reek:UtilityFunction and :reek:ControlParameter
|
74
|
-
def run_with_timeout(
|
75
|
-
return yield unless under_timeout
|
76
|
+
def run_with_timeout(task, &block)
|
77
|
+
return yield unless task.under_timeout?
|
76
78
|
|
77
79
|
DeployPin::Database.execute_with_timeout(DeployPin.statement_timeout, **{}, &block)
|
78
80
|
end
|
81
|
+
|
82
|
+
def execution_duration
|
83
|
+
start_time = Time.now
|
84
|
+
|
85
|
+
yield
|
86
|
+
|
87
|
+
Time.now - start_time
|
88
|
+
end
|
79
89
|
end
|
80
90
|
end
|
data/lib/deploy_pin/runner.rb
CHANGED
@@ -4,32 +4,17 @@
|
|
4
4
|
module DeployPin
|
5
5
|
module Runner
|
6
6
|
def self.run(identifiers:)
|
7
|
-
DeployPin::Collector.new(identifiers: identifiers).run
|
8
|
-
self.print("[#{index + 1}/#{count}] Task #{task.title} #{task.uuid}##{task.group} (#{executable ? 'run' : 'skip'})")
|
9
|
-
end
|
7
|
+
DeployPin::Collector.new(identifiers: identifiers).run
|
10
8
|
end
|
11
9
|
|
12
10
|
def self.list(identifiers:)
|
13
|
-
DeployPin::Collector.new(identifiers: identifiers).list
|
14
|
-
self.print("======= Task ##{index} ========".white)
|
15
|
-
|
16
|
-
# print details
|
17
|
-
task.details.each do |key, value|
|
18
|
-
self.print("#{key}:\t\t#{value}")
|
19
|
-
end
|
20
|
-
|
21
|
-
self.print('')
|
22
|
-
self.print('<<<')
|
23
|
-
self.print task.script.strip.green
|
24
|
-
self.print('>>>')
|
25
|
-
self.print('')
|
26
|
-
end
|
11
|
+
DeployPin::Collector.new(identifiers: identifiers).list
|
27
12
|
end
|
28
13
|
|
29
14
|
def self.summary(identifiers:)
|
30
15
|
# print summary
|
31
16
|
self.print('======= Summary ========')
|
32
|
-
self.print("
|
17
|
+
self.print("Tasks number: #{DeployPin::Collector.new(identifiers: identifiers).tasks_count}")
|
33
18
|
end
|
34
19
|
|
35
20
|
def self.print(msg)
|
data/lib/deploy_pin/task.rb
CHANGED
@@ -37,12 +37,8 @@ module DeployPin
|
|
37
37
|
DeployPin::Record.where(uuid: uuid).exists?
|
38
38
|
end
|
39
39
|
|
40
|
-
def
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
def parallel?
|
45
|
-
@parallel
|
40
|
+
def under_timeout?
|
41
|
+
!explicit_timeout? && !parallel?
|
46
42
|
end
|
47
43
|
|
48
44
|
def parse_file
|
@@ -85,5 +81,13 @@ module DeployPin
|
|
85
81
|
def group_index
|
86
82
|
DeployPin.groups.index(group)
|
87
83
|
end
|
84
|
+
|
85
|
+
def explicit_timeout?
|
86
|
+
@explicit_timeout
|
87
|
+
end
|
88
|
+
|
89
|
+
def parallel?
|
90
|
+
@parallel
|
91
|
+
end
|
88
92
|
end
|
89
93
|
end
|
data/lib/deploy_pin/version.rb
CHANGED
data/lib/deploy_pin.rb
CHANGED
@@ -4,6 +4,28 @@ DeployPin.setup do
|
|
4
4
|
tasks_path 'lib/deploy_pin'
|
5
5
|
groups %w[I II III]
|
6
6
|
fallback_group 'II'
|
7
|
-
|
8
7
|
statement_timeout 10.minutes
|
8
|
+
run_formatter(
|
9
|
+
lambda do |index, task_count, task, executable, start, duration = nil|
|
10
|
+
end_of_msg = if executable
|
11
|
+
start ? '(Started)' : "(Done in #{duration})\n\n"
|
12
|
+
else
|
13
|
+
"(Skipped)\n\n"
|
14
|
+
end
|
15
|
+
|
16
|
+
puts("[#{index + 1}/#{task_count}] Task #{task.title} #{task.uuid}##{task.group} #{end_of_msg}".blue.bold)
|
17
|
+
end
|
18
|
+
)
|
19
|
+
list_formatter(
|
20
|
+
lambda do |index, task|
|
21
|
+
puts("======= Task ##{index} ========".blue.bold)
|
22
|
+
|
23
|
+
# print details
|
24
|
+
task.details.each do |key, value|
|
25
|
+
puts("#{key}:\t\t#{value}")
|
26
|
+
end
|
27
|
+
|
28
|
+
puts("\n<<<\n#{task.script.strip.green}\n>>>\n\n")
|
29
|
+
end
|
30
|
+
)
|
9
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deploy_pin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Viktor Sych
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|