ruboty-capistrano 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0f1cb596f87b71458a2783696b4bd0bc340d4705
4
- data.tar.gz: c6dd46e793ff38b271dc1fe03e1381c2e1b3bd92
3
+ metadata.gz: 2f1ecfbcec27de756e885dbcc48a1f6e1619d921
4
+ data.tar.gz: 4723bc8ba7bb77f3d04f418bc5368e2c036fa150
5
5
  SHA512:
6
- metadata.gz: 38213f80b138755ac65944bf312d57360bf23eab9a68280b8b18aea6066638e70d7f2cc95d04dac87f6f7c9b3fae781f0b80173738b32dc0fe8892813ab0a7f3
7
- data.tar.gz: a1c447e7fa0fd1c13a50a562131ff8a2e7c1c7e6a364f77b658b9e40e0e9b0115f33546c9579124a5edaf7adc0c59f0778624d01dd14b8bc5d12a5c5f30037e5
6
+ metadata.gz: 3e905af00a7eb9f90a4b8ecd6b59a4dbb61beb995f0787f3c4581ec9fb507969ec7d1299d84be44aca9b9cd1b71e57d14ab54ed9ac513d6e7869a63dd005ef65
7
+ data.tar.gz: 4230b3736a12505c88b0f53917f0da2f617eac21b2de5f0037b3d08f218ef712dc3529d14bbf53cec34c8293ec74023134912bd75b83dab902b9a1b1c3d5261c
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruboty-capistrano (0.1.2)
4
+ ruboty-capistrano (0.1.3)
5
+ octokit
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
@@ -11,10 +12,26 @@ GEM
11
12
  i18n (~> 0.7)
12
13
  minitest (~> 5.1)
13
14
  tzinfo (~> 1.1)
15
+ addressable (2.5.0)
16
+ public_suffix (~> 2.0, >= 2.0.2)
17
+ coderay (1.1.1)
14
18
  concurrent-ruby (1.0.2)
15
19
  diff-lcs (1.2.5)
20
+ dotenv (2.1.1)
21
+ faraday (0.10.0)
22
+ multipart-post (>= 1.2, < 3)
16
23
  i18n (0.7.0)
24
+ mem (0.1.5)
25
+ method_source (0.8.2)
17
26
  minitest (5.9.0)
27
+ multipart-post (2.0.0)
28
+ octokit (4.6.2)
29
+ sawyer (~> 0.8.0, >= 0.5.3)
30
+ pry (0.10.4)
31
+ coderay (~> 1.1.0)
32
+ method_source (~> 0.8.1)
33
+ slop (~> 3.4)
34
+ public_suffix (2.0.4)
18
35
  rake (10.5.0)
19
36
  rspec (3.4.0)
20
37
  rspec-core (~> 3.4.0)
@@ -29,6 +46,16 @@ GEM
29
46
  diff-lcs (>= 1.2.0, < 2.0)
30
47
  rspec-support (~> 3.4.0)
31
48
  rspec-support (3.4.1)
49
+ ruboty (1.2.4)
50
+ activesupport
51
+ bundler
52
+ dotenv
53
+ mem
54
+ slop
55
+ sawyer (0.8.1)
56
+ addressable (>= 2.3.5, < 2.6)
57
+ faraday (~> 0.8, < 1.0)
58
+ slop (3.6.0)
32
59
  thread_safe (0.3.5)
33
60
  tzinfo (1.2.2)
34
61
  thread_safe (~> 0.1)
@@ -39,9 +66,11 @@ PLATFORMS
39
66
  DEPENDENCIES
40
67
  activesupport
41
68
  bundler (~> 1.12)
69
+ pry
42
70
  rake (~> 10.0)
43
71
  rspec (~> 3.0)
72
+ ruboty
44
73
  ruboty-capistrano!
45
74
 
46
75
  BUNDLED WITH
47
- 1.12.5
76
+ 1.13.6
data/README.md CHANGED
@@ -26,23 +26,25 @@ Or install it yourself as:
26
26
  ### Deploy
27
27
 
28
28
  ```
29
- @bot_name deploy environment branch_name
29
+ @bot_name deploy role branch_name
30
30
  ```
31
31
 
32
32
  ### Rollback
33
33
 
34
34
  ```
35
- @bot_name rollback environment
35
+ @bot_name rollback role
36
36
  ```
37
37
 
38
38
  ## Env
39
39
 
40
40
  ```
41
41
  RUBOTY_ENV - deploy先の環境を指定する
42
- DEFAULT_BRANCH - deploy時において、branch指定されていなかった場合に、deployするdefaultのbranch
43
- DEPLOY_REPOSITORY_PATH - deploy対象のrepositoryのpath
42
+ LOCAL_REPOSITORY_PATH - deploy対象が存在しているディレクトリパス
44
43
  (ex: "sample:/path/to/sample;admin:/path/to/admin")
45
44
  DEPLOY_LOG_PATH - deploy時のログを残すpath
45
+ GITHUB_ACCESS_TOKEN - GitHubのアクセストークン(GitHubのAPIを用いるため)
46
+ REMOTE_REPOSITORY_PATH - deploy対象のGitHubのrepository
47
+ (ex: "sample:hoge/sample-repo;admin:hoge/admin-repo")
46
48
  ```
47
49
 
48
50
  ## License
@@ -0,0 +1,51 @@
1
+ module Ruboty
2
+ module Capistrano
3
+ module Actions
4
+ class Deployment < Ruboty::Actions::Base
5
+ include Ruboty::Capistrano::GitHubRepositoryValidator
6
+
7
+ attr_reader :role, :branch, :errors
8
+
9
+ def initialize(role: , branch:)
10
+ @role = role
11
+ @branch = branch
12
+ @errors = []
13
+ end
14
+
15
+ def run
16
+ return unless validates
17
+
18
+ deploy
19
+ errors.empty?
20
+ end
21
+
22
+ def message_before_deploy
23
+ "#{env}環境の#{role}にBRANCH:#{branch}をdeployします"
24
+ end
25
+
26
+ def message_after_deploy
27
+ "#{env}環境の#{role}にBRANCH:#{branch}をdeployしました"
28
+ end
29
+
30
+ private
31
+
32
+ def env
33
+ Ruboty::Capistrano.config.env
34
+ end
35
+
36
+ def repo_path
37
+ Ruboty::Capistrano.config.local_repo_path[role]
38
+ end
39
+
40
+ def deploy
41
+ cmd = "cd #{repo_path} && bundle && bundle exec cap #{env} deploy BRANCH=#{branch}"
42
+ out, err, status = Bundler.with_clean_env { Open3.capture3(cmd) }
43
+ return if err.empty?
44
+
45
+ Ruboty::Capistrano.logger err
46
+ errors << 'deploy中にエラーが発生しました'
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -10,7 +10,7 @@ module Ruboty
10
10
  @message = message
11
11
  @env = Ruboty::Capistrano.config.env
12
12
  @role = message.match_data[1]
13
- @path = Ruboty::Capistrano.config.repository_path[@role]
13
+ @path = Ruboty::Capistrano.config.local_repo_path[@role]
14
14
  end
15
15
 
16
16
  def call
@@ -3,15 +3,21 @@ module Ruboty
3
3
  class Config
4
4
  include ActiveSupport::Configurable
5
5
 
6
- configure do |config|
7
- config.env = ENV['RUBOTY_ENV']
8
- config.log_path = ENV['DEPLOY_LOG_PATH']
9
- config.repository_path = ENV['DEPLOY_REPOSITORY_PATH'].split(';').inject({}) do |hash, s|
6
+ extract = lambda do |env_str|
7
+ env_str.split(';').inject({}) do |hash, s|
10
8
  key, value = s.split(":").first, s.split(":").last
11
9
  hash[key] = value
12
10
  hash
13
11
  end
14
12
  end
13
+
14
+ configure do |config|
15
+ config.env = ENV['RUBOTY_ENV']
16
+ config.github_access_token = ENV['GITHUB_ACCESS_TOKEN']
17
+ config.log_path = ENV['DEPLOY_LOG_PATH']
18
+ config.remote_repo_path = extract.call(ENV['REMOTE_REPOSITORY_PATH'])
19
+ config.local_repo_path = extract.call(ENV['LOCAL_REPOSITORY_PATH'])
20
+ end
15
21
  end
16
22
  end
17
23
  end
@@ -0,0 +1,24 @@
1
+ module Ruboty::Capistrano
2
+ module GitHubRepositoryValidator
3
+ def self.included(klass)
4
+ raise 'wrong include error' unless klass.ancestors.include?(Ruboty::Actions::Base)
5
+ end
6
+
7
+ def validates
8
+ !!github_client.branch(repo, branch)
9
+ rescue Octokit::NotFound => e
10
+ errors << e.message
11
+ false
12
+ end
13
+
14
+ private
15
+
16
+ def github_client
17
+ Octokit::Client.new(access_token: Ruboty::Capistrano.config.github_access_token)
18
+ end
19
+
20
+ def repo
21
+ Ruboty::Capistrano.config.remote_repo_path[role]
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  module Ruboty
2
2
  module Capistrano
3
- VERSION = "0.1.2"
3
+ VERSION = '0.1.3'
4
4
  end
5
5
  end
@@ -1,8 +1,12 @@
1
1
  require 'open3'
2
2
  require 'active_support/all'
3
3
  require 'date'
4
+ require 'octokit'
4
5
  require 'ruboty/capistrano/version'
6
+ require 'ruboty/capistrano/github_repository_validators'
5
7
  require 'ruboty/handlers/capistrano'
8
+ require 'ruboty/capistrano/actions/deployment'
9
+ require 'ruboty/capistrano/actions/rollback'
6
10
 
7
11
  module Ruboty
8
12
  module Capistrano
@@ -11,5 +15,13 @@ module Ruboty
11
15
  def self.config
12
16
  @config ||= Ruboty::Capistrano::Config.config
13
17
  end
18
+
19
+ def self.loggers
20
+ return STDOUT if Ruboty::Capistrano.config.log_path.to_s.empty?
21
+ return @logger if @logger
22
+
23
+ log_path = File.join(Ruboty::Capistrano.config.log_path, "#{DateTime.now.strftime('%Y%m%d%H%M')}.log")
24
+ @logger = Logger.new(deploy_log_path)
25
+ end
14
26
  end
15
27
  end
@@ -1,21 +1,32 @@
1
- require 'ruboty/capistrano/actions/deploy'
2
- require 'ruboty/capistrano/actions/rollback'
3
-
4
1
  module Ruboty
5
2
  module Handlers
6
3
  class Capistrano < Base
7
- env :DEPLOY_REPOSITORY_PATH, 'Deploy用の Repository Path を設定する'
4
+ env :LOCAL_REPOSITORY_PATH, 'Deploy用の Repository Path を設定する'
8
5
 
9
6
  on(/deploy\s+(.*)\s+(.*)/m, name: 'deploy', description: 'deployする')
10
7
  on(/rollback\s+(.*)/m, name: 'rollback', description: 'rollbackする')
11
8
 
12
9
  def deploy(message)
13
- Ruboty::Capistrano::Actions::Deploy.new(message).call
10
+ deployment = Ruboty::Capistrano::Actions::Deployment.new(deploy_params(message))
11
+ message.reply(deployment.message_before_deploy)
12
+
13
+ if deployment.run
14
+ message.reply(deployment.message_after_deploy)
15
+ else
16
+ message.reply(deployment.errors.join(','))
17
+ end
14
18
  end
15
19
 
16
20
  def rollback(message)
17
21
  Ruboty::Capistrano::Actions::Rollback.new(message).call
18
22
  end
23
+
24
+ private
25
+
26
+ def deploy_params(message)
27
+ role, branch = message.match_data[1..2]
28
+ { role: role, branch: branch }
29
+ end
19
30
  end
20
31
  end
21
32
  end
@@ -20,6 +20,9 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ["lib"]
21
21
  spec.add_development_dependency "activesupport"
22
22
  spec.add_development_dependency "bundler", "~> 1.12"
23
+ spec.add_dependency 'octokit'
24
+ spec.add_development_dependency "pry"
23
25
  spec.add_development_dependency "rake", "~> 10.0"
24
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
+ spec.add_development_dependency "ruboty"
25
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruboty-capistrano
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Morioka Shuhei
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-18 00:00:00.000000000 Z
11
+ date: 2016-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: octokit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +94,20 @@ dependencies:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
96
  version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: ruboty
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
69
111
  description: " Ruboty plugin for deploy application via capistrano."
70
112
  email:
71
113
  - selmertsx@gmail.com
@@ -83,9 +125,10 @@ files:
83
125
  - bin/console
84
126
  - bin/setup
85
127
  - lib/ruboty/capistrano.rb
86
- - lib/ruboty/capistrano/actions/deploy.rb
128
+ - lib/ruboty/capistrano/actions/deployment.rb
87
129
  - lib/ruboty/capistrano/actions/rollback.rb
88
130
  - lib/ruboty/capistrano/config.rb
131
+ - lib/ruboty/capistrano/github_repository_validators.rb
89
132
  - lib/ruboty/capistrano/version.rb
90
133
  - lib/ruboty/handlers/capistrano.rb
91
134
  - ruboty-capistrano.gemspec
@@ -1,51 +0,0 @@
1
- module Ruboty
2
- module Capistrano
3
- module Actions
4
- class Deploy < Ruboty::Actions::Base
5
- class DeployError < StandardError; end
6
-
7
- attr_reader :message, :path, :env, :branch, :role
8
-
9
- def initialize(message)
10
- @message = message
11
- @env = Ruboty::Capistrano.config.env
12
- @role = message.match_data[1]
13
- @path = Ruboty::Capistrano.config.repository_path[@role]
14
- @branch = message.match_data[2] || ENV['DEFAULT_BRANCH']
15
- @logger = Logger.new(deploy_log_path)
16
- end
17
-
18
- def call
19
- message.reply("#{@env}環境の#{@role}にBRANCH:#{@branch}をdeployします")
20
- deploy
21
- message.reply("#{@env}環境の#{@role}にBRANCH:#{@branch}をdeploy完了しました")
22
- rescue => e
23
- err_message = <<~TEXT
24
- :cop:問題が発生しました:cop:
25
- TEXT
26
-
27
- @logger.error e.message
28
- message.reply(err_message)
29
- end
30
-
31
- private
32
- def deploy
33
- if @env == 'production' && @branch != 'master'
34
- raise InvalidDeploySettingError.new('production環境はmaster以外でdeploy出来ません')
35
- end
36
-
37
- cmd = "cd #{path} && bundle && bundle exec cap #{@env} deploy BRANCH=#{@branch}"
38
- out, err, status = Bundler.with_clean_env { Open3.capture3(cmd) }
39
- @logger.info out
40
- raise DeployError.new(err) unless err.empty?
41
- end
42
-
43
- def deploy_log_path
44
- return STDOUT if Ruboty::Capistrano.config.log_path.to_s.empty?
45
-
46
- File.join(Ruboty::Capistrano.config.log_path, "#{DateTime.now.strftime('%Y%m%d%H%M')}.log")
47
- end
48
- end
49
- end
50
- end
51
- end