deploy_pin 1.1.3 → 1.3.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 +21 -4
- data/Rakefile +3 -23
- data/app/models/deploy_pin/application_record.rb +2 -0
- data/app/models/deploy_pin/record.rb +0 -1
- data/lib/deploy_pin/collector.rb +28 -20
- data/lib/deploy_pin/database.rb +96 -0
- data/lib/deploy_pin/engine.rb +2 -0
- data/lib/deploy_pin/runner.rb +11 -11
- data/lib/deploy_pin/task.rb +18 -18
- data/lib/deploy_pin/task_criteria.rb +29 -0
- data/lib/deploy_pin/version.rb +3 -1
- data/lib/deploy_pin.rb +15 -10
- data/lib/generators/deploy_pin/install/install_generator.rb +5 -3
- data/lib/generators/deploy_pin/install/templates/create_deploy_pins.rb +2 -0
- data/lib/generators/deploy_pin/install/templates/deploy_pin.rb +5 -3
- data/lib/generators/deploy_pin/task/templates/parallel_task.rb.erb +8 -0
- data/lib/generators/deploy_pin/task/templates/task.rb.erb +8 -0
- data/lib/tasks/deploy_pin_tasks.rake +11 -8
- metadata +45 -69
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a760ef5554d4821d4e57eca80bd547a24f5456c7e2bd27768fc2d62db3bad25e
|
4
|
+
data.tar.gz: 33e218e88444b4362b29d7f506fcdc455f07c07b4c6760228043b5f403687948
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbae2f1401711aabf1e88e3e01daeb2b8a1e07a4f3072fb8d54eb9f0f40f0bb74a4eaaed7859cd4119574544a2814393a44dcb7297808db6f89dd7e659d03220
|
7
|
+
data.tar.gz: cb8203f11fefb55c2e525fb2b6a2ca82e0d8791b69c64717d3f830bf2c5a3cf91977cb3e3842d780aa6084171795154eb548546a610798a60c53938b35f7173b
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
[](https://badge.fury.io/rb/deploy_pin)
|
2
2
|

|
3
|
-
|
3
|
+

|
4
4
|
[](https://codeclimate.com/github/skcc321/deploy_pin/maintainability)
|
5
5
|
[](https://codeclimate.com/github/skcc321/deploy_pin/test_coverage)
|
6
6
|
|
@@ -36,9 +36,9 @@ To run all pending tasks
|
|
36
36
|
rake deploy_pin:run
|
37
37
|
```
|
38
38
|
|
39
|
-
|
40
|
-
~~~ please define allowed groups in config/initializers/deploy_pin.rb ~~~
|
39
|
+
## Groupped tasks
|
41
40
|
|
41
|
+
Please define allowed groups in `config/initializers/deploy_pin.rb`
|
42
42
|
if you want to group tasks around "allowed_group"
|
43
43
|
|
44
44
|
```bash
|
@@ -57,7 +57,24 @@ To run all pending tasks
|
|
57
57
|
rake deploy_pin:run[allowed_group]
|
58
58
|
```
|
59
59
|
|
60
|
+
## Run by uuid
|
61
|
+
|
62
|
+
To run some specific task by uuid
|
63
|
+
```bash
|
64
|
+
rake deploy_pin:run['uuid_1, uuid_2']
|
65
|
+
```
|
66
|
+
Or you can combine uuid and group
|
67
|
+
```bash
|
68
|
+
rake deploy_pin:run['uuid, allowed_group']
|
69
|
+
```
|
70
|
+
In case if you want to rerun task you should add exclamation mark in the end of uuid
|
71
|
+
```bash
|
72
|
+
rake deploy_pin:run['uuid_1!, uuid_2!']
|
73
|
+
```
|
74
|
+
|
60
75
|
## Installation
|
76
|
+
|
77
|
+
|
61
78
|
Add this line to your application's Gemfile:
|
62
79
|
|
63
80
|
```ruby
|
@@ -74,7 +91,7 @@ Or install it yourself as:
|
|
74
91
|
$ gem install deploy_pin
|
75
92
|
```
|
76
93
|
|
77
|
-
|
94
|
+
then generate configuration file
|
78
95
|
```bash
|
79
96
|
rails g deploy_pin:install
|
80
97
|
```
|
data/Rakefile
CHANGED
@@ -1,27 +1,7 @@
|
|
1
|
-
|
2
|
-
require 'bundler/setup'
|
3
|
-
rescue LoadError
|
4
|
-
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
-
end
|
1
|
+
# frozen_string_literal: true
|
6
2
|
|
7
|
-
require '
|
8
|
-
|
9
|
-
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
-
rdoc.rdoc_dir = 'rdoc'
|
11
|
-
rdoc.title = 'DeployPin'
|
12
|
-
rdoc.options << '--line-numbers'
|
13
|
-
rdoc.rdoc_files.include('README.md')
|
14
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
-
end
|
3
|
+
require 'bundler/setup'
|
16
4
|
|
17
5
|
require 'bundler/gem_tasks'
|
18
6
|
|
19
|
-
|
20
|
-
|
21
|
-
Rake::TestTask.new(:test) do |t|
|
22
|
-
t.libs << 'test'
|
23
|
-
t.pattern = 'test/**/*_test.rb'
|
24
|
-
t.verbose = false
|
25
|
-
end
|
26
|
-
|
27
|
-
task default: :test
|
7
|
+
import 'test/dummy/Rakefile'
|
data/lib/deploy_pin/collector.rb
CHANGED
@@ -3,26 +3,10 @@
|
|
3
3
|
# executes tasks
|
4
4
|
module DeployPin
|
5
5
|
class Collector
|
6
|
-
attr_reader :
|
6
|
+
attr_reader :identifiers
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
10
|
-
end
|
11
|
-
|
12
|
-
def files
|
13
|
-
Dir["#{DeployPin.tasks_path}/*.rb"]
|
14
|
-
end
|
15
|
-
|
16
|
-
def tasks
|
17
|
-
files.map do |file|
|
18
|
-
task = DeployPin::Task.new(file)
|
19
|
-
task.parse_file
|
20
|
-
|
21
|
-
next if task.done? # task is done
|
22
|
-
next unless groups.include?(task.group) # group mismatch
|
23
|
-
|
24
|
-
task
|
25
|
-
end.compact.sort # sort by group position in config
|
8
|
+
def initialize(identifiers:)
|
9
|
+
@identifiers = identifiers
|
26
10
|
end
|
27
11
|
|
28
12
|
def run
|
@@ -38,7 +22,7 @@ module DeployPin
|
|
38
22
|
task.run if executable
|
39
23
|
|
40
24
|
# mark each task as done
|
41
|
-
task.mark
|
25
|
+
task.mark unless task.done?
|
42
26
|
end
|
43
27
|
end
|
44
28
|
|
@@ -56,5 +40,29 @@ module DeployPin
|
|
56
40
|
task if _tasks[0..index].none? { |_task| task.eql?(_task) }
|
57
41
|
end.compact
|
58
42
|
end
|
43
|
+
|
44
|
+
def tasks_count
|
45
|
+
tasks.count
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def files
|
51
|
+
Dir["#{DeployPin.tasks_path}/*.rb"]
|
52
|
+
end
|
53
|
+
|
54
|
+
def tasks
|
55
|
+
files.map do |file|
|
56
|
+
task = DeployPin::Task.new(file)
|
57
|
+
task.parse_file
|
58
|
+
|
59
|
+
# check if task is suitable
|
60
|
+
task if task_criteria.suitable?(task)
|
61
|
+
end.compact.sort # sort by group position in config
|
62
|
+
end
|
63
|
+
|
64
|
+
def task_criteria
|
65
|
+
@task_criteria ||= DeployPin::TaskCriteria.new(identifiers: identifiers)
|
66
|
+
end
|
59
67
|
end
|
60
68
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DeployPin
|
4
|
+
module Database
|
5
|
+
extend self
|
6
|
+
|
7
|
+
# Run a block under a sql maximum timeout.
|
8
|
+
#
|
9
|
+
# A default timeout will be get from DeployPin.setup
|
10
|
+
#
|
11
|
+
# # config/initializers/deploy_pin.rb
|
12
|
+
# DeployPin.setup do
|
13
|
+
# statement_timeout 0.2.second # 200 ms
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# # <app root>/deploy_pin/20190401135040_task.rb
|
17
|
+
# # 20190401135040:I
|
18
|
+
# # task_title: Execute some query with timeout
|
19
|
+
#
|
20
|
+
# # === task code goes down here ===
|
21
|
+
# DeployPin::Database::execute_with_timeout do
|
22
|
+
# ActiveRecord::Base.connection.execute("select * from shipments;")
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# A timeout can be passed as param as well:
|
26
|
+
#
|
27
|
+
# DeployPin::Database::execute_with_timeout 10.minutes do
|
28
|
+
# ActiveRecord::Base.connection.execute("select * from shipments;")
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# In order to connect to multiple databases, pass the +connected_to+ keyword into the params.
|
32
|
+
# The +connected_to+ will use the +ActiveRecord::Base.connected_to+.
|
33
|
+
# To connect to a replica database, for example:
|
34
|
+
#
|
35
|
+
# DeployPin::Database::execute_with_timeout 1.seconds, connected_to: { role: :reading } do
|
36
|
+
# Shipment.all # Get all record from replica
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# Or a specific database:
|
40
|
+
#
|
41
|
+
# DeployPin::Database.execute_with_timeout 30.second, connected_to: { database: :test_mysql } do
|
42
|
+
# ActiveRecord::Base.connection.execute("<some mysql query>")
|
43
|
+
# end
|
44
|
+
def execute_with_timeout(timeout = DeployPin.statement_timeout, **params, &blk)
|
45
|
+
raise ArgumentError, 'timeout must be greater than zero' if timeout.to_f <= 0
|
46
|
+
|
47
|
+
return call_block_under_timeout(timeout, &blk) unless params.key? :connected_to
|
48
|
+
|
49
|
+
klass = params[:connected_to].key? :database ? ActiveRecord::Base : ::ApplicationRecord
|
50
|
+
klass.connected_to(**params[:connected_to]) do
|
51
|
+
call_block_under_timeout(timeout, &blk)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def call_block_under_timeout(timeout)
|
58
|
+
set_max_timeout(timeout)
|
59
|
+
|
60
|
+
yield
|
61
|
+
end
|
62
|
+
|
63
|
+
def set_max_timeout(timeout)
|
64
|
+
timeout_in_milliseconds = timeout.to_f.in_milliseconds.ceil # Make sure is always at least 1. 0 turns this off
|
65
|
+
|
66
|
+
timeout_statement =
|
67
|
+
if postgresql?
|
68
|
+
postgresql_timeout_statement
|
69
|
+
elsif mysql?
|
70
|
+
mysql_timeout_statement
|
71
|
+
end
|
72
|
+
|
73
|
+
connection.select_all "#{timeout_statement} #{connection.quote(timeout_in_milliseconds)}"
|
74
|
+
end
|
75
|
+
|
76
|
+
def postgresql?
|
77
|
+
connection.adapter_name =~ /postg/i
|
78
|
+
end
|
79
|
+
|
80
|
+
def postgresql_timeout_statement
|
81
|
+
"SET statement_timeout TO"
|
82
|
+
end
|
83
|
+
|
84
|
+
def mysql?
|
85
|
+
connection.adapter_name =~ /mysql/i
|
86
|
+
end
|
87
|
+
|
88
|
+
def mysql_timeout_statement
|
89
|
+
"SET max_execution_time ="
|
90
|
+
end
|
91
|
+
|
92
|
+
def connection
|
93
|
+
ActiveRecord::Base.connection
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/lib/deploy_pin/engine.rb
CHANGED
data/lib/deploy_pin/runner.rb
CHANGED
@@ -3,14 +3,14 @@
|
|
3
3
|
# executes tasks
|
4
4
|
module DeployPin
|
5
5
|
module Runner
|
6
|
-
def self.run(
|
7
|
-
DeployPin::Collector.new(
|
6
|
+
def self.run(identifiers:)
|
7
|
+
DeployPin::Collector.new(identifiers: identifiers).run do |index, count, task, executable|
|
8
8
|
self.print("[#{index + 1}/#{count}] Task #{task.title} #{task.uuid}##{task.group} (#{executable ? 'run' : 'skip'})")
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
def self.list(
|
13
|
-
DeployPin::Collector.new(
|
12
|
+
def self.list(identifiers:)
|
13
|
+
DeployPin::Collector.new(identifiers: identifiers).list do |index, _count, task|
|
14
14
|
self.print("======= Task ##{index} ========".white)
|
15
15
|
|
16
16
|
# print details
|
@@ -18,18 +18,18 @@ module DeployPin
|
|
18
18
|
self.print("#{key}:\t\t#{value}")
|
19
19
|
end
|
20
20
|
|
21
|
-
self.print(
|
22
|
-
self.print(
|
21
|
+
self.print('')
|
22
|
+
self.print('<<<')
|
23
23
|
self.print task.script.strip.green
|
24
|
-
self.print(
|
25
|
-
self.print(
|
24
|
+
self.print('>>>')
|
25
|
+
self.print('')
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
def self.summary(
|
29
|
+
def self.summary(identifiers:)
|
30
30
|
# print summary
|
31
|
-
self.print(
|
32
|
-
self.print("tasks number: #{DeployPin::Collector.new(
|
31
|
+
self.print('======= Summary ========')
|
32
|
+
self.print("tasks number: #{DeployPin::Collector.new(identifiers: identifiers).tasks_count}")
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.print(msg)
|
data/lib/deploy_pin/task.rb
CHANGED
@@ -4,17 +4,17 @@
|
|
4
4
|
module DeployPin
|
5
5
|
class Task
|
6
6
|
attr_reader :file,
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
:uuid,
|
8
|
+
:group,
|
9
|
+
:title,
|
10
|
+
:script
|
11
11
|
|
12
12
|
def initialize(file)
|
13
13
|
@file = file
|
14
14
|
@uuid = nil
|
15
15
|
@group = nil
|
16
|
-
@title =
|
17
|
-
@script =
|
16
|
+
@title = ''
|
17
|
+
@script = ''
|
18
18
|
end
|
19
19
|
|
20
20
|
def run
|
@@ -35,10 +35,10 @@ module DeployPin
|
|
35
35
|
File.foreach(file) do |line|
|
36
36
|
case line.strip
|
37
37
|
when /\A# (\d+):(\w+)/
|
38
|
-
@uuid =
|
39
|
-
@group =
|
38
|
+
@uuid = Regexp.last_match(1)
|
39
|
+
@group = Regexp.last_match(2)
|
40
40
|
when /\A# task_title:(.+)/
|
41
|
-
@title =
|
41
|
+
@title = Regexp.last_match(1).strip
|
42
42
|
when /\A[^#].*/
|
43
43
|
@script += line
|
44
44
|
end
|
@@ -53,20 +53,20 @@ module DeployPin
|
|
53
53
|
}
|
54
54
|
end
|
55
55
|
|
56
|
-
def eql?(
|
56
|
+
def eql?(other)
|
57
57
|
# same script & different uuid
|
58
|
-
script ==
|
58
|
+
script == other.script && uuid != other.uuid
|
59
59
|
end
|
60
60
|
|
61
61
|
protected
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
63
|
+
# for sorting
|
64
|
+
def <=>(other)
|
65
|
+
group_index <=> other.group_index
|
66
|
+
end
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
68
|
+
def group_index
|
69
|
+
DeployPin.groups.index(group)
|
70
|
+
end
|
71
71
|
end
|
72
72
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# check task criteria
|
4
|
+
module DeployPin
|
5
|
+
class TaskCriteria
|
6
|
+
SKIP_REGEXEP = /\A-(.+[^!])\z/
|
7
|
+
FORCE_REGEXP = /\A([^-].+)!\z/
|
8
|
+
COMMON_REGEXP = /(^[^-]*.+[^!]*$)/
|
9
|
+
|
10
|
+
attr_reader :identifiers
|
11
|
+
|
12
|
+
def initialize(identifiers:)
|
13
|
+
@identifiers = identifiers
|
14
|
+
end
|
15
|
+
|
16
|
+
def suitable?(task)
|
17
|
+
task_cover = lambda { |task, regexp|
|
18
|
+
items = identifiers.flat_map { |x| x.to_s.scan(regexp) }.flatten
|
19
|
+
|
20
|
+
items & [task.group, task.uuid]
|
21
|
+
}
|
22
|
+
|
23
|
+
return false if task_cover.call(task, SKIP_REGEXEP).any?
|
24
|
+
return true if task_cover.call(task, FORCE_REGEXP).any?
|
25
|
+
|
26
|
+
task_cover.call(task, COMMON_REGEXP).any? && !task.done?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/deploy_pin/version.rb
CHANGED
data/lib/deploy_pin.rb
CHANGED
@@ -1,17 +1,22 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'deploy_pin/runner'
|
4
|
+
require 'deploy_pin/collector'
|
5
|
+
require 'deploy_pin/task'
|
6
|
+
require 'deploy_pin/task_criteria'
|
7
|
+
require 'deploy_pin/engine'
|
8
|
+
require 'deploy_pin/database'
|
9
|
+
require 'parallel'
|
10
|
+
require 'ruby-progressbar'
|
11
|
+
require 'colorize'
|
8
12
|
|
9
13
|
module DeployPin
|
10
|
-
OPTIONS = %i
|
14
|
+
OPTIONS = %i[
|
11
15
|
tasks_path
|
12
16
|
fallback_group
|
13
17
|
groups
|
14
|
-
|
18
|
+
statement_timeout
|
19
|
+
].freeze
|
15
20
|
|
16
21
|
OPTIONS.each do |option|
|
17
22
|
instance_eval %{
|
@@ -20,7 +25,7 @@ module DeployPin
|
|
20
25
|
|
21
26
|
@@#{option} = val
|
22
27
|
end
|
23
|
-
}
|
28
|
+
}, __FILE__, __LINE__ - 6
|
24
29
|
end
|
25
30
|
|
26
31
|
def self.setup(&block)
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class DeployPin::InstallGenerator < Rails::Generators::Base
|
2
4
|
include Rails::Generators::Migration
|
3
5
|
|
4
6
|
source_root File.expand_path('templates', __dir__)
|
5
|
-
desc
|
7
|
+
desc 'Add the migration & initializer for DeployPin'
|
6
8
|
|
7
9
|
def self.next_migration_number(path)
|
8
10
|
next_migration_number = current_migration_number(path) + 1
|
@@ -10,10 +12,10 @@ class DeployPin::InstallGenerator < Rails::Generators::Base
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def copy_migrations
|
13
|
-
migration_template
|
15
|
+
migration_template 'create_deploy_pins.rb', 'db/migrate/create_deploy_pins.rb'
|
14
16
|
end
|
15
17
|
|
16
18
|
def copy_initializer
|
17
|
-
template
|
19
|
+
template 'deploy_pin.rb', 'config/initializers/deploy_pin.rb'
|
18
20
|
end
|
19
21
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# <%= @uuid %>:<%= group %>
|
2
4
|
# task_title: super duper task
|
3
5
|
|
@@ -9,4 +11,10 @@ Parallel.each(DeployPin::Record.where(uuid: "hello"), progress: "Doing stuff") d
|
|
9
11
|
pin.update_attribute(:uuid, "new uuid")
|
10
12
|
end
|
11
13
|
sleep(0.2)
|
14
|
+
|
15
|
+
# DeployPin::Database::execute_with_timeout 10.minutes do
|
16
|
+
# ActiveRecord::Base.connection.execute("select * from shipments;")
|
17
|
+
# or
|
18
|
+
# Shipment.all
|
19
|
+
# end
|
12
20
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# <%= @uuid %>:<%= group %>
|
2
4
|
# task_title: super duper task
|
3
5
|
|
@@ -5,3 +7,9 @@
|
|
5
7
|
progressbar = ProgressBar.create(title: "Doing stuff", total: 20, format: '%t |%E | %B | %a')
|
6
8
|
|
7
9
|
20.times { progressbar.increment; sleep(0.2) }
|
10
|
+
|
11
|
+
# DeployPin::Database::execute_with_timeout 10.minutes do
|
12
|
+
# ActiveRecord::Base.connection.execute("select * from shipments;")
|
13
|
+
# or
|
14
|
+
# Shipment.all
|
15
|
+
# end
|
@@ -1,15 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
namespace :deploy_pin do
|
2
|
-
desc
|
3
|
-
task :run, [:
|
4
|
-
args.
|
4
|
+
desc 'run pending tasks'
|
5
|
+
task :run, [:identifiers] => :environment do |_t, args|
|
6
|
+
identifiers = args.identifiers
|
7
|
+
attributes = identifiers.nil? ? DeployPin.groups : identifiers.split(/\s*,\s*/)
|
5
8
|
|
6
|
-
DeployPin::Runner.run(
|
9
|
+
DeployPin::Runner.run(identifiers: attributes)
|
7
10
|
end
|
8
11
|
|
9
|
-
task :list, [:
|
10
|
-
args.with_defaults(
|
12
|
+
task :list, [:identifiers] => :environment do |_t, args|
|
13
|
+
args.with_defaults(identifiers: DeployPin.groups)
|
11
14
|
|
12
|
-
DeployPin::Runner.list(args)
|
13
|
-
DeployPin::Runner.summary(args)
|
15
|
+
DeployPin::Runner.list(**args)
|
16
|
+
DeployPin::Runner.summary(**args)
|
14
17
|
end
|
15
18
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deploy_pin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
autorequire:
|
7
|
+
- Viktor Sych
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: colorize
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
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: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: parallel
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,47 +39,41 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.16'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 6.0.1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 6.0.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: ruby-progressbar
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
62
|
-
- - ">="
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: 12.3.2
|
61
|
+
version: '1.10'
|
65
62
|
type: :runtime
|
66
63
|
prerelease: false
|
67
64
|
version_requirements: !ruby/object:Gem::Requirement
|
68
65
|
requirements:
|
69
66
|
- - "~>"
|
70
67
|
- !ruby/object:Gem::Version
|
71
|
-
version: '
|
72
|
-
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: 12.3.2
|
68
|
+
version: '1.10'
|
75
69
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
70
|
+
name: bundler
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
78
72
|
requirements:
|
79
73
|
- - ">="
|
80
74
|
- !ruby/object:Gem::Version
|
81
75
|
version: '0'
|
82
|
-
type: :
|
76
|
+
type: :development
|
83
77
|
prerelease: false
|
84
78
|
version_requirements: !ruby/object:Gem::Requirement
|
85
79
|
requirements:
|
@@ -87,95 +81,75 @@ dependencies:
|
|
87
81
|
- !ruby/object:Gem::Version
|
88
82
|
version: '0'
|
89
83
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - "~>"
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: 0.16.0
|
96
|
-
type: :development
|
97
|
-
prerelease: false
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - "~>"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: 0.16.0
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: bundler
|
84
|
+
name: minitest
|
105
85
|
requirement: !ruby/object:Gem::Requirement
|
106
86
|
requirements:
|
107
|
-
- - "
|
87
|
+
- - ">="
|
108
88
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
89
|
+
version: '0'
|
110
90
|
type: :development
|
111
91
|
prerelease: false
|
112
92
|
version_requirements: !ruby/object:Gem::Requirement
|
113
93
|
requirements:
|
114
|
-
- - "
|
94
|
+
- - ">="
|
115
95
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
96
|
+
version: '0'
|
117
97
|
- !ruby/object:Gem::Dependency
|
118
|
-
name:
|
98
|
+
name: mysql2
|
119
99
|
requirement: !ruby/object:Gem::Requirement
|
120
100
|
requirements:
|
121
|
-
- - "
|
101
|
+
- - ">="
|
122
102
|
- !ruby/object:Gem::Version
|
123
|
-
version: '0
|
103
|
+
version: '0'
|
124
104
|
type: :development
|
125
105
|
prerelease: false
|
126
106
|
version_requirements: !ruby/object:Gem::Requirement
|
127
107
|
requirements:
|
128
|
-
- - "
|
108
|
+
- - ">="
|
129
109
|
- !ruby/object:Gem::Version
|
130
|
-
version: '0
|
110
|
+
version: '0'
|
131
111
|
- !ruby/object:Gem::Dependency
|
132
|
-
name:
|
112
|
+
name: pg
|
133
113
|
requirement: !ruby/object:Gem::Requirement
|
134
114
|
requirements:
|
135
|
-
- - "
|
115
|
+
- - ">="
|
136
116
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
117
|
+
version: '0'
|
138
118
|
type: :development
|
139
119
|
prerelease: false
|
140
120
|
version_requirements: !ruby/object:Gem::Requirement
|
141
121
|
requirements:
|
142
|
-
- - "
|
122
|
+
- - ">="
|
143
123
|
- !ruby/object:Gem::Version
|
144
|
-
version: '
|
124
|
+
version: '0'
|
145
125
|
- !ruby/object:Gem::Dependency
|
146
|
-
name:
|
126
|
+
name: pry
|
147
127
|
requirement: !ruby/object:Gem::Requirement
|
148
128
|
requirements:
|
149
|
-
- - "
|
129
|
+
- - ">="
|
150
130
|
- !ruby/object:Gem::Version
|
151
|
-
version: 0
|
131
|
+
version: '0'
|
152
132
|
type: :development
|
153
133
|
prerelease: false
|
154
134
|
version_requirements: !ruby/object:Gem::Requirement
|
155
135
|
requirements:
|
156
|
-
- - "
|
136
|
+
- - ">="
|
157
137
|
- !ruby/object:Gem::Version
|
158
|
-
version: 0
|
138
|
+
version: '0'
|
159
139
|
- !ruby/object:Gem::Dependency
|
160
|
-
name:
|
140
|
+
name: rubocop
|
161
141
|
requirement: !ruby/object:Gem::Requirement
|
162
142
|
requirements:
|
163
|
-
- - "~>"
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: '0.18'
|
166
143
|
- - ">="
|
167
144
|
- !ruby/object:Gem::Version
|
168
|
-
version: 0
|
145
|
+
version: '0'
|
169
146
|
type: :development
|
170
147
|
prerelease: false
|
171
148
|
version_requirements: !ruby/object:Gem::Requirement
|
172
149
|
requirements:
|
173
|
-
- - "~>"
|
174
|
-
- !ruby/object:Gem::Version
|
175
|
-
version: '0.18'
|
176
150
|
- - ">="
|
177
151
|
- !ruby/object:Gem::Version
|
178
|
-
version: 0
|
152
|
+
version: '0'
|
179
153
|
description: pin some task around deployment to execute them during deployment circle
|
180
154
|
email:
|
181
155
|
- skcc321@gmail.com
|
@@ -190,9 +164,11 @@ files:
|
|
190
164
|
- app/models/deploy_pin/record.rb
|
191
165
|
- lib/deploy_pin.rb
|
192
166
|
- lib/deploy_pin/collector.rb
|
167
|
+
- lib/deploy_pin/database.rb
|
193
168
|
- lib/deploy_pin/engine.rb
|
194
169
|
- lib/deploy_pin/runner.rb
|
195
170
|
- lib/deploy_pin/task.rb
|
171
|
+
- lib/deploy_pin/task_criteria.rb
|
196
172
|
- lib/deploy_pin/version.rb
|
197
173
|
- lib/generators/deploy_pin/install/USAGE
|
198
174
|
- lib/generators/deploy_pin/install/install_generator.rb
|
@@ -208,7 +184,7 @@ licenses:
|
|
208
184
|
- MIT
|
209
185
|
metadata:
|
210
186
|
allowed_push_host: https://rubygems.org
|
211
|
-
post_install_message:
|
187
|
+
post_install_message:
|
212
188
|
rdoc_options: []
|
213
189
|
require_paths:
|
214
190
|
- lib
|
@@ -223,8 +199,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
199
|
- !ruby/object:Gem::Version
|
224
200
|
version: '0'
|
225
201
|
requirements: []
|
226
|
-
rubygems_version: 3.
|
227
|
-
signing_key:
|
202
|
+
rubygems_version: 3.2.22
|
203
|
+
signing_key:
|
228
204
|
specification_version: 4
|
229
205
|
summary: pin some task around deployment
|
230
206
|
test_files: []
|