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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46972e3ae1de0473d6bc9cfa562d1278bc4063a1023586c677edaa9bf8b47466
4
- data.tar.gz: c31626b6f0711cf7d7db14258ff4a64c1bca3b96058bf2dcbeb810eccb38fa45
3
+ metadata.gz: a760ef5554d4821d4e57eca80bd547a24f5456c7e2bd27768fc2d62db3bad25e
4
+ data.tar.gz: 33e218e88444b4362b29d7f506fcdc455f07c07b4c6760228043b5f403687948
5
5
  SHA512:
6
- metadata.gz: 906f19ce26ce0bdd3d29b124ea5e4327f53f8ad5c24945a630a00320348263831457939155cbf1ffde7035bd334f282b74ee2adc125f23f0e5e880f9e1486f84
7
- data.tar.gz: 447c61ad0c2eddc0af71f1b2eee7cf74b65857567c631ada48e71762d599e2bff15209cc2c4f4820a58738d85fba35b75718303d3c4a45a81613ae4871845aa8
6
+ metadata.gz: fbae2f1401711aabf1e88e3e01daeb2b8a1e07a4f3072fb8d54eb9f0f40f0bb74a4eaaed7859cd4119574544a2814393a44dcb7297808db6f89dd7e659d03220
7
+ data.tar.gz: cb8203f11fefb55c2e525fb2b6a2ca82e0d8791b69c64717d3f830bf2c5a3cf91977cb3e3842d780aa6084171795154eb548546a610798a60c53938b35f7173b
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/deploy_pin.svg)](https://badge.fury.io/rb/deploy_pin)
2
2
  ![](https://ruby-gem-downloads-badge.herokuapp.com/deploy_pin)
3
- [![Build Status](https://travis-ci.org/skcc321/deploy_pin.svg?branch=master)](https://travis-ci.org/skcc321/deploy_pin)
3
+ ![example workflow](https://github.com/skcc321/deploy_pin/actions/workflows/verify.yml/badge.svg)
4
4
  [![Maintainability](https://api.codeclimate.com/v1/badges/c0a9ca97c1f9c0478ffc/maintainability)](https://codeclimate.com/github/skcc321/deploy_pin/maintainability)
5
5
  [![Test Coverage](https://api.codeclimate.com/v1/badges/c0a9ca97c1f9c0478ffc/test_coverage)](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
- ### Groupped tasks
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
- ### then generate configuration file
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
- begin
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 'rdoc/task'
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
- require 'rake/testtask'
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'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class DeployPin::ApplicationRecord < ActiveRecord::Base
2
4
  self.abstract_class = true
3
5
  end
@@ -3,4 +3,3 @@
3
3
  class DeployPin::Record < DeployPin::ApplicationRecord
4
4
  self.table_name = 'deploy_pins'
5
5
  end
6
-
@@ -3,26 +3,10 @@
3
3
  # executes tasks
4
4
  module DeployPin
5
5
  class Collector
6
- attr_reader :groups
6
+ attr_reader :identifiers
7
7
 
8
- def initialize(groups:)
9
- @groups = groups
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeployPin
2
4
  class Engine < ::Rails::Engine
3
5
  isolate_namespace DeployPin
@@ -3,14 +3,14 @@
3
3
  # executes tasks
4
4
  module DeployPin
5
5
  module Runner
6
- def self.run(groups:)
7
- DeployPin::Collector.new(groups: groups).run do |index, count, task, executable|
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(groups:)
13
- DeployPin::Collector.new(groups: groups).list do |index, count, task|
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(groups:)
29
+ def self.summary(identifiers:)
30
30
  # print summary
31
- self.print("======= Summary ========")
32
- self.print("tasks number: #{DeployPin::Collector.new(groups: groups).tasks.count}")
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)
@@ -4,17 +4,17 @@
4
4
  module DeployPin
5
5
  class Task
6
6
  attr_reader :file,
7
- :uuid,
8
- :group,
9
- :title,
10
- :script
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 = $1
39
- @group = $2
38
+ @uuid = Regexp.last_match(1)
39
+ @group = Regexp.last_match(2)
40
40
  when /\A# task_title:(.+)/
41
- @title = $1.strip
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?(task_b)
56
+ def eql?(other)
57
57
  # same script & different uuid
58
- script == task_b.script && uuid != task_b.uuid
58
+ script == other.script && uuid != other.uuid
59
59
  end
60
60
 
61
61
  protected
62
62
 
63
- # for sorting
64
- def <=>(task_b)
65
- group_index <=> task_b.group_index
66
- end
63
+ # for sorting
64
+ def <=>(other)
65
+ group_index <=> other.group_index
66
+ end
67
67
 
68
- def group_index
69
- DeployPin.groups.index(group)
70
- end
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeployPin
2
- VERSION = '1.1.3'
4
+ VERSION = '1.3.0'
3
5
  end
data/lib/deploy_pin.rb CHANGED
@@ -1,17 +1,22 @@
1
- require "deploy_pin/runner"
2
- require "deploy_pin/collector"
3
- require "deploy_pin/task"
4
- require "deploy_pin/engine"
5
- require "parallel"
6
- require "ruby-progressbar"
7
- require "colorize"
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 "Add the migration & initializer for DeployPin"
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 "create_deploy_pins.rb", "db/migrate/create_deploy_pins.rb"
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 "deploy_pin.rb", "config/initializers/deploy_pin.rb"
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
  class CreateDeployPins < ActiveRecord::Migration[5.2]
2
4
  def change
3
5
  create_table :deploy_pins do |t|
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  DeployPin.setup do
4
- tasks_path "lib/deploy_pin"
5
- groups ["I", "II", "III"]
6
- fallback_group "II"
4
+ tasks_path 'lib/deploy_pin'
5
+ groups %w[I II III]
6
+ fallback_group 'II'
7
+
8
+ statement_timeout 10.minutes
7
9
  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 "run pending tasks"
3
- task :run, [:groups] => :environment do |t, args|
4
- args.with_defaults(groups: DeployPin.groups)
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(args)
9
+ DeployPin::Runner.run(identifiers: attributes)
7
10
  end
8
11
 
9
- task :list, [:groups] => :environment do |t, args|
10
- args.with_defaults(groups: DeployPin.groups)
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.1.3
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
- - rafael
8
- autorequire:
7
+ - Viktor Sych
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-09 00:00:00.000000000 Z
11
+ date: 2022-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: colorize
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.2'
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: '4.2'
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: ruby-progressbar
42
+ name: rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.10'
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: '1.10'
54
+ version: 6.0.1
55
55
  - !ruby/object:Gem::Dependency
56
- name: rake
56
+ name: ruby-progressbar
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '12.3'
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: '12.3'
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: 12.3.2
68
+ version: '1.10'
75
69
  - !ruby/object:Gem::Dependency
76
- name: colorize
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: :runtime
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: simplecov
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: '1.17'
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: '1.17'
96
+ version: '0'
117
97
  - !ruby/object:Gem::Dependency
118
- name: pry
98
+ name: mysql2
119
99
  requirement: !ruby/object:Gem::Requirement
120
100
  requirements:
121
- - - "~>"
101
+ - - ">="
122
102
  - !ruby/object:Gem::Version
123
- version: '0.12'
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.12'
110
+ version: '0'
131
111
  - !ruby/object:Gem::Dependency
132
- name: minitest
112
+ name: pg
133
113
  requirement: !ruby/object:Gem::Requirement
134
114
  requirements:
135
- - - "~>"
115
+ - - ">="
136
116
  - !ruby/object:Gem::Version
137
- version: '5.0'
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: '5.0'
124
+ version: '0'
145
125
  - !ruby/object:Gem::Dependency
146
- name: mysql2
126
+ name: pry
147
127
  requirement: !ruby/object:Gem::Requirement
148
128
  requirements:
149
- - - "~>"
129
+ - - ">="
150
130
  - !ruby/object:Gem::Version
151
- version: 0.5.2
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.5.2
138
+ version: '0'
159
139
  - !ruby/object:Gem::Dependency
160
- name: pg
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.18.4
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.18.4
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.0.2
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: []