capistrano-jira 0.2.0 → 0.3.1

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: ca992eb03cd4d34fe9624b50930ad8d32d7fa5cc
4
- data.tar.gz: 7dfd66877aab0380606fc9d067180f3437611bfd
3
+ metadata.gz: 23ffb16ae911a6116dec0b954f7a89019eb8d2fa
4
+ data.tar.gz: 54ba25bf57f58e6dd02d2a14a183747afea81e08
5
5
  SHA512:
6
- metadata.gz: 35d7cac445e0a03a37f8b560577bd8fc06e1b9c1ef1541182e346b8f4b49f7a858dbcf260c3e809bb1c8af9f0b2d5defe2c1030af0abf39f88e9c72cb30cde70
7
- data.tar.gz: 600204753da6c7e156118f432ae7871e96876693693c9aa462001d60ad7161a90c6c7b0082accc4a2119a7bf6f450ade8d7109feb574a46fc06c6f67523325f0
6
+ metadata.gz: e3202cd4e0b5dc9383014b7b8dd04e0fb2c0d9b5aef076953f1914c23d0330ae505686a8ad612e64f72120373a6b71ff1421c947c33b103cddea7c6d7ec7627d
7
+ data.tar.gz: fdc9339bc4d210de20dd16c8131c5dce5e80e6b3b4e0b4a384021aa37b3a23f3a087c83c0e59f88b372dad68a51d27c3bfb9f61165dc1709a4eef243a7f86d38
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
+ /.idea/
3
4
  /Gemfile.lock
4
5
  /_yardoc/
5
6
  /coverage/
@@ -1,3 +1,6 @@
1
+ ## 0.3.0
2
+ - Filter transited issues by commit messages
3
+
1
4
  ## 0.2.0
2
5
 
3
6
  - Handle errors without exiting deployment (*wojw5*, #2)
data/README.md CHANGED
@@ -28,11 +28,13 @@ require 'capistrano/jira'
28
28
 
29
29
  - Set general parameters in `config/deploy.rb`
30
30
  ```ruby
31
- set :jira_username, 'john.doe@exalmple.com' # default: ENV['CAPISTRANO_JIRA_USERNAME']
32
- set :jira_password, 'p@55w0rD' # default: ENV['CAPISTRANO_JIRA_PASSWORD']
33
- set :jira_site, 'https://example.atlassian.net' # default: ENV['CAPISTRANO_JIRA_SITE']
34
- set :jira_comment_on_transition, false # default: true
35
- set :jira_project_key, 'PROJ' # required
31
+ set :jira_username, 'john.doe@exalmple.com' # default: ENV['CAPISTRANO_JIRA_USERNAME']
32
+ set :jira_password, 'p@55w0rD' # default: ENV['CAPISTRANO_JIRA_PASSWORD']
33
+ set :jira_site, 'https://example.atlassian.net' # default: ENV['CAPISTRANO_JIRA_SITE']
34
+ set :jira_comment_on_transition, false # default: true
35
+ set :jira_project_key, 'PROJ' # required
36
+ set :jira_validate_commit_messages, true # default: false; transit issues only if key found in commit messages
37
+ set :jira_commit_messages_limit, 123 # default: 1000; last commits messages lookup limit
36
38
  ```
37
39
 
38
40
  - Set parameters for specific environment (for example `config/deploy/staging.rb`)
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'capistrano/jira/version'
@@ -17,9 +16,10 @@ Gem::Specification.new do |spec|
17
16
  .split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
17
  spec.require_paths = ['lib']
19
18
 
20
- spec.add_dependency 'capistrano', '~> 3.7'
21
- spec.add_dependency 'jira-ruby', '~> 1.2'
19
+ spec.add_dependency 'capistrano' , '~> 3.7'
20
+ spec.add_dependency 'jira-ruby' , '~> 1.2'
21
+ spec.add_dependency 'activesupport', '~> 5.1'
22
22
 
23
23
  spec.add_development_dependency 'bundler', '~> 1.12'
24
- spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'rake' , '~> 10.0'
25
25
  end
@@ -1,5 +1,9 @@
1
+ require 'active_support'
1
2
  require 'capistrano/jira/version'
2
3
  require 'capistrano/jira/errors'
4
+ require 'capistrano/jira/commit'
5
+ require 'capistrano/jira/finder'
6
+ require 'capistrano/jira/commit_finder'
3
7
  require 'capistrano/jira/issue_finder'
4
8
  require 'capistrano/jira/issue_transiter'
5
9
  require 'jira-ruby'
@@ -0,0 +1,12 @@
1
+ module Capistrano
2
+ module Jira
3
+ class Commit
4
+ attr_reader :message, :hash
5
+
6
+ def initialize(log)
7
+ @hash= log[0...8]
8
+ @message = log[9..-1]
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Capistrano
2
+ module Jira
3
+ class CommitFinder
4
+ include Finder
5
+
6
+ execute do
7
+ `git log -n#{fetch(:jira_commit_messages_limit)} --no-merges --pretty=format:"%h %s"`
8
+ .split("\n").map { |log| Commit.new(log) }
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,30 @@
1
+ module Capistrano
2
+ module Jira
3
+ module Finder
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ attr_reader :items
8
+
9
+ def find!
10
+ return unless self.class.finder_block
11
+ @items = self.class.finder_block.call
12
+ end
13
+
14
+ def find
15
+ return unless self.class.finder_block
16
+ @items ||= self.class.finder_block.call
17
+ end
18
+ end
19
+
20
+ class_methods do
21
+ attr_reader :finder_block
22
+
23
+ def execute(&block)
24
+ return unless block_given?
25
+ @finder_block = block
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,33 +1,26 @@
1
1
  module Capistrano
2
2
  module Jira
3
3
  class IssueFinder
4
- attr_reader :issues
5
-
4
+ include Finder
6
5
  include ErrorHelpers
7
6
 
8
- def find!
9
- @issues = execute
10
- end
11
-
12
- def find
13
- @issues ||= execute
7
+ execute do
8
+ begin
9
+ Jira.client.Issue.jql(jql, fields: ['status'], max_results: 1_000_000)
10
+ rescue JIRA::HTTPError => e
11
+ raise FinderError, error_message(e)
12
+ end
14
13
  end
15
14
 
16
15
  private
17
16
 
18
- def jql
17
+ def self.jql
19
18
  [
20
19
  "project = #{fetch(:jira_project_key)}",
21
20
  "status = #{fetch(:jira_status_name)}",
22
21
  fetch(:jira_filter_jql)
23
22
  ].compact.join(' AND ')
24
23
  end
25
-
26
- def execute
27
- Jira.client.Issue.jql(jql, fields: ['status'], max_results: 1_000_000)
28
- rescue JIRA::HTTPError => e
29
- raise FinderError, error_message(e)
30
- end
31
24
  end
32
25
  end
33
26
  end
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Jira
3
- VERSION = '0.2.0'.freeze
3
+ VERSION = '0.3.1'.freeze
4
4
  end
5
5
  end
@@ -1,13 +1,15 @@
1
1
  namespace :load do
2
2
  task :defaults do
3
- set :jira_username, ENV['CAPISTRANO_JIRA_USERNAME']
4
- set :jira_password, ENV['CAPISTRANO_JIRA_PASSWORD']
5
- set :jira_site, ENV['CAPISTRANO_JIRA_SITE']
6
- set :jira_project_key, nil
7
- set :jira_status_name, nil
8
- set :jira_transition_name, nil
9
- set :jira_filter_jql, nil
10
- set :jira_comment_on_transition, true
3
+ set :jira_username, ENV['CAPISTRANO_JIRA_USERNAME']
4
+ set :jira_password, ENV['CAPISTRANO_JIRA_PASSWORD']
5
+ set :jira_site, ENV['CAPISTRANO_JIRA_SITE']
6
+ set :jira_project_key, nil
7
+ set :jira_status_name, nil
8
+ set :jira_transition_name, nil
9
+ set :jira_filter_jql, nil
10
+ set :jira_comment_on_transition, true
11
+ set :jira_validate_commit_messages, false
12
+ set :jira_commit_messages_limit, 1000
11
13
  end
12
14
  end
13
15
 
@@ -15,13 +17,29 @@ namespace :jira do
15
17
  desc 'Find and transit possible JIRA issues'
16
18
  task :find_and_transit do |_t|
17
19
  on :all do |_host|
20
+ if fetch(:jira_validate_commit_messages)
21
+ info 'Finding commit messages'
22
+ commits = Capistrano::Jira::CommitFinder.new.find
23
+ end
24
+
18
25
  info 'Looking for issues'
19
26
  begin
20
27
  issues = Capistrano::Jira::IssueFinder.new.find
28
+
21
29
  issues.each do |issue|
22
30
  begin
23
- Capistrano::Jira::IssueTransiter.new(issue).transit
24
- info "#{issue.key}\t\u{2713} Transited"
31
+ if fetch(:jira_validate_commit_messages)
32
+ commit = commits.find { |c| c.message.include?(issue.key)}
33
+ if commit
34
+ Capistrano::Jira::IssueTransiter.new(issue).transit
35
+ info "#{issue.key}\t\u{2713} Transited\tCommit: #{commit.hash}"
36
+ else
37
+ info "#{issue.key}\t\u{21B7} Skipped"
38
+ end
39
+ else
40
+ Capistrano::Jira::IssueTransiter.new(issue).transit
41
+ info "#{issue.key}\t\u{2713} Transited"
42
+ end
25
43
  rescue Capistrano::Jira::TransitionError => e
26
44
  warn "#{issue.key}\t\u{2717} #{e.message}"
27
45
  end
@@ -36,8 +54,8 @@ namespace :jira do
36
54
  task :check do
37
55
  errored = false
38
56
  required_params =
39
- %i(jira_username jira_password jira_site jira_project_key
40
- jira_status_name jira_transition_name jira_comment_on_transition)
57
+ %i[jira_username jira_password jira_site jira_project_key
58
+ jira_status_name jira_transition_name jira_comment_on_transition]
41
59
 
42
60
  puts '=> Required params'
43
61
  required_params.each do |param|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-jira
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wojciech Widenka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-06 00:00:00.000000000 Z
11
+ date: 2018-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.1'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +96,10 @@ files:
82
96
  - capistrano-jira.gemspec
83
97
  - lib/capistrano-jira.rb
84
98
  - lib/capistrano/jira.rb
99
+ - lib/capistrano/jira/commit.rb
100
+ - lib/capistrano/jira/commit_finder.rb
85
101
  - lib/capistrano/jira/errors.rb
102
+ - lib/capistrano/jira/finder.rb
86
103
  - lib/capistrano/jira/issue_finder.rb
87
104
  - lib/capistrano/jira/issue_transiter.rb
88
105
  - lib/capistrano/jira/version.rb
@@ -106,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
123
  version: '0'
107
124
  requirements: []
108
125
  rubyforge_project:
109
- rubygems_version: 2.5.1
126
+ rubygems_version: 2.6.14
110
127
  signing_key:
111
128
  specification_version: 4
112
129
  summary: Automated JIRA issues transitions after deployment with Capistrano