pivotoolz 1.2.2 → 2.2.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: dce9f049813a75033d4a499da7caf119aadf0a369ad851882833e5e90ef28ffa
4
- data.tar.gz: 325b2049fd6e74137ccd18554935bdf78c69a50a6b2b853b4a00e8370cd43b79
3
+ metadata.gz: 94e90398170d1e718943d5deed60a7d79d8a61b9b5a365a56497a3c69058eb2a
4
+ data.tar.gz: d9eba00b2fca976d49f35cfc20dad9ad96c8b59dbc75edf6a682e0826be92839
5
5
  SHA512:
6
- metadata.gz: 2f0f4588c7b334c13b5bf8c43889cf572ca6eb5f9c02898c3fa58cf58799fdd2bab483a1e392f6599bf10b85e3cbf701fb4a1a6a8cadedb84af14b34fb8bd4ed
7
- data.tar.gz: ba1d55f64f7cb29f01056ccb28762652e8b282f362d9370441acb2b3b61e81f812421d6fba7c9a8c5999ca277cbdc2fe33f8e9c58a061fce3c83862d734fbb5e
6
+ metadata.gz: 95c19644a4959d37793779391d3340bb5fa7cae45447b8022e0b7a7cf0582229f327a355c8f4c32c0714751903e3ab17c98c326d10b85ee1212c882d711dc6ef
7
+ data.tar.gz: 78215c1d296e66a10702b9cbf81bd590cd0b9a46f7648f3506a88fe8930fde15559a45d7ab41adb7c0cea3cced68ee5a9c8dbbf7987d9a6b4e7e37e38f6af2a3
data/Gemfile.lock CHANGED
@@ -1,51 +1,53 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pivotoolz (0.1.3)
5
- rest-client (~> 2.0.2)
4
+ pivotoolz (2.2.0)
5
+ rest-client (~> 2.1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- diff-lcs (1.3)
11
- domain_name (0.5.20170404)
10
+ diff-lcs (1.4.4)
11
+ domain_name (0.5.20190701)
12
12
  unf (>= 0.0.5, < 1.0.0)
13
- http-cookie (1.0.3)
13
+ http-accept (1.7.0)
14
+ http-cookie (1.0.4)
14
15
  domain_name (~> 0.5)
15
- mime-types (3.1)
16
+ mime-types (3.3.1)
16
17
  mime-types-data (~> 3.2015)
17
- mime-types-data (3.2016.0521)
18
+ mime-types-data (3.2021.0901)
18
19
  netrc (0.11.0)
19
- rake (10.4.2)
20
- rest-client (2.0.2)
20
+ rake (13.0.6)
21
+ rest-client (2.1.0)
22
+ http-accept (>= 1.7.0, < 2.0)
21
23
  http-cookie (>= 1.0.2, < 2.0)
22
24
  mime-types (>= 1.16, < 4.0)
23
25
  netrc (~> 0.8)
24
- rspec (3.6.0)
25
- rspec-core (~> 3.6.0)
26
- rspec-expectations (~> 3.6.0)
27
- rspec-mocks (~> 3.6.0)
28
- rspec-core (3.6.0)
29
- rspec-support (~> 3.6.0)
30
- rspec-expectations (3.6.0)
26
+ rspec (3.10.0)
27
+ rspec-core (~> 3.10.0)
28
+ rspec-expectations (~> 3.10.0)
29
+ rspec-mocks (~> 3.10.0)
30
+ rspec-core (3.10.1)
31
+ rspec-support (~> 3.10.0)
32
+ rspec-expectations (3.10.1)
31
33
  diff-lcs (>= 1.2.0, < 2.0)
32
- rspec-support (~> 3.6.0)
33
- rspec-mocks (3.6.0)
34
+ rspec-support (~> 3.10.0)
35
+ rspec-mocks (3.10.2)
34
36
  diff-lcs (>= 1.2.0, < 2.0)
35
- rspec-support (~> 3.6.0)
36
- rspec-support (3.6.0)
37
+ rspec-support (~> 3.10.0)
38
+ rspec-support (3.10.2)
37
39
  unf (0.1.4)
38
40
  unf_ext
39
- unf_ext (0.0.7.4)
41
+ unf_ext (0.0.8)
40
42
 
41
43
  PLATFORMS
42
44
  ruby
43
45
 
44
46
  DEPENDENCIES
45
- bundler (~> 1.16)
47
+ bundler (~> 2.2)
46
48
  pivotoolz!
47
- rake (~> 10.0)
48
- rspec (~> 3.0)
49
+ rake (~> 13.0)
50
+ rspec (~> 3.10)
49
51
 
50
52
  BUNDLED WITH
51
- 1.16.1
53
+ 2.2.27
data/README.md CHANGED
@@ -189,11 +189,19 @@ Be sure to set your `PIVOTAL_TRACKER_API_TOKEN` env variable in your `.bashrc` f
189
189
  set your git config user initials like this: `git config --add user.initials af`. Otherwise it
190
190
  will take your `git config user.name` or `whoami` information.
191
191
 
192
- Example:
192
+ Example 1:
193
193
  ```bash
194
194
  pv-git-branch "#111222333"
195
195
  ```
196
- This would create and checkout a new branch: `af/features/building-someting-great-111222333`.
196
+ This would create and checkout a new branch:
197
+ `af/features/building-someting-great-111222333`.
198
+
199
+ Example 2 (appending values):
200
+ ```bash
201
+ pv-git-branch 12345678 version2 backend only
202
+ ```
203
+ This would create and checkout a new branch:
204
+ `af/features/building-something-awesome-12345678-version2-backend-only`
197
205
 
198
206
  If the branch had already been created, the command will automatically check out existing branch.
199
207
 
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'open-uri'
4
+ require 'json'
5
+
6
+ BASE_URL = ENV['JIRA_API_BASE_URL']
7
+
8
+ def get_story_info(story_id, flags = [], subdomain)
9
+ return nil if story_id.empty?
10
+
11
+ begin
12
+ include_owner_names = flags.any? { |f| f == '--owners' || f == '-O' }
13
+ url = BASE_URL + "#{story_id}" + "/#{include_owner_names ? '?fields=:default,owners' : ''}"
14
+ open(
15
+ url,
16
+ 'Authorization' => "Basic #{ENV['JIRA_API_BASIC_AUTH_BASE64_ENCODED']}"
17
+ ).read
18
+ rescue StandardError => e
19
+ story_link = "https://#{subdomain}.atlassian.net/browse/#{story_id}"
20
+
21
+ JSON.generate({
22
+ error: "Could not get story info for story #{story_id}: #{e.message}\n\nStory info may be available at #{story_link}",
23
+ story_link: story_link
24
+ })
25
+ end
26
+ end
27
+
28
+ if BASE_URL.nil? || BASE_URL.empty?
29
+ puts "Please set JIRA_API_BASE_URL. It looks something like 'https://YOUR-COMPANY.atlassian.net/rest/api/2/issue/'"
30
+ exit 1
31
+ end
32
+
33
+ begin
34
+ subdomain = URI.parse(BASE_URL).host.split('.atlassian.net').first
35
+ rescue => e
36
+ puts "Error determining your Jira subdomain. Please check your JIRA_API_BASE_URL environment variable"
37
+ exit 1
38
+ end
39
+
40
+ flags = ARGV.reduce([]) do |reduced, a|
41
+ reduced << a if a.include?('--') || a.include?('-')
42
+ reduced
43
+ end
44
+
45
+ flags.each { |f| ARGV.delete f }
46
+
47
+ stream = ARGV.any? ? ARGV : ARGF
48
+
49
+ if stream == ARGF && $stdin.tty?
50
+ puts "Usage:\nget-story-info-from-jira-id STORY_ID\n"
51
+ puts " OR\n"
52
+ puts "echo STORY_ID | get-story-info-from-id"
53
+ puts " OR\n"
54
+ exit 1
55
+ end
56
+
57
+ infos = stream.reduce([]) do |reduced, story_id|
58
+ next reduced unless story_id && story_id =~ /\d+/
59
+ reduced << get_story_info(story_id.strip, flags, subdomain)
60
+ end
61
+
62
+ puts infos.join("\n")
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'json'
4
+ require 'ostruct'
5
+
6
+ BASE_URL = ENV['JIRA_API_BASE_URL']
7
+
8
+ if BASE_URL.nil? || BASE_URL.empty?
9
+ puts "Please set JIRA_API_BASE_URL. It looks something like 'https://YOUR-COMPANY.atlassian.net/rest/api/2/issue/'"
10
+ exit 1
11
+ end
12
+
13
+ begin
14
+ subdomain = URI.parse(BASE_URL).host.split('.atlassian.net').first
15
+ rescue => e
16
+ puts "Error determining your Jira subdomain. Please check your JIRA_API_BASE_URL environment variable"
17
+ exit 1
18
+ end
19
+
20
+ environment_tag = ARGV[0]&.strip
21
+ if environment_tag.nil? || environment_tag.empty?
22
+ puts "Usage: stories-deployed ENVIRONMENT"
23
+ exit 1
24
+ end
25
+
26
+ flags = ARGV.select { |a| a.include?('--') || a.include?('-') }
27
+
28
+ include_owners = flags
29
+ .any? { |f| f == '--owners' || f == '-O' }
30
+
31
+ format_as_json = flags
32
+ .any? { |f| f == '--json' || f == '-j' }
33
+
34
+ deployed_story_infos = `jira-story-ids-deployed #{environment_tag} | get-story-info-from-jira-id #{flags.join(' ')}`
35
+
36
+ def as_json(story, include_owners, flags, subdomain)
37
+ if story.error
38
+ return {
39
+ title: story.error,
40
+ title_link: story.story_link
41
+ }.to_json
42
+ end
43
+
44
+ json = {
45
+ title: story.fields['summary']&.strip,
46
+ title_link: "https://#{subdomain}.atlassian.net/browse/#{story.key}",
47
+ mrkdwn_in: ["text", "pretext", "footer"]
48
+ }
49
+
50
+ if include_owners
51
+ if flags.include? '--owners-footer'
52
+ json.merge!(
53
+ footer: "\n\nBrought to you by: #{story_owner_names(story, flags)}"
54
+ )
55
+ else
56
+ json.merge!(
57
+ text: "\n\nBrought to you by: #{story_owner_names(story, flags)}"
58
+ )
59
+ end
60
+ end
61
+
62
+ json.to_json
63
+ end
64
+
65
+ def story_owner_names(story, flags)
66
+ owners = story
67
+ .owners
68
+ .compact
69
+ .map { |o| OpenStruct.new(o).name }
70
+
71
+ if flags.include? '--bold-owners'
72
+ return to_sentence(owners.map { |o| "*#{o}*" })
73
+ end
74
+
75
+ to_sentence(owners)
76
+ end
77
+
78
+ def to_sentence(array)
79
+ array.size > 2 ?
80
+ "#{array[0..-2].join(', ')} and #{array.last}" :
81
+ array.join(' and ')
82
+ end
83
+
84
+ stories_deployed = deployed_story_infos
85
+ .split("\n")
86
+ .compact
87
+ .reduce([]) do |reduced, story_info|
88
+ story = OpenStruct.new(JSON.parse(story_info))
89
+
90
+ if format_as_json
91
+ reduced << as_json(story, include_owners, flags, subdomain)
92
+ next reduced
93
+ end
94
+
95
+ reduced << "#{story.error}"
96
+ next reduced if story.error
97
+
98
+ reduced << "#{story.name&.strip}:\n#{story.url}"
99
+
100
+ if include_owners
101
+ reduced << "\nBrought to you by: #{story_owner_names(story, flags)}"
102
+ end
103
+
104
+ reduced
105
+ end
106
+
107
+ puts stories_deployed
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ environment_tag = ARGV[0]&.strip
4
+
5
+ if environment_tag.nil? || environment_tag.empty?
6
+ puts "Usage: story-ids-deployed ENVIRONMENT"
7
+ exit 1
8
+ end
9
+
10
+ commit_range = `git tag -l #{environment_tag}* | tail -n 2 | tr '\n' ' ' | sed -e 's/ /../'`.strip
11
+
12
+ if commit_range.nil? || commit_range.empty?
13
+ puts "Empty commit range! Are there any commits tagged with #{environment_tag}?"
14
+ exit 1
15
+ end
16
+
17
+ commit_message_bodies = `git log --pretty="%h %s" #{commit_range}`.strip
18
+ story_ids = commit_message_bodies.
19
+ # TODO: Make this configurable
20
+ scan(/(DI-\d+|ST-\d+)/).
21
+ flatten.
22
+ compact.
23
+ uniq
24
+
25
+ puts story_ids.join("\n")
@@ -2,47 +2,32 @@
2
2
 
3
3
  require 'rest-client'
4
4
  require 'json'
5
+ require_relative '../lib/pivotoolz/post_slack_message'
5
6
 
6
- URL = ENV['SLACK_WEBHOOK_URL']
7
+ URL = ENV.fetch('SLACK_WEBHOOK_URL') { '' }
8
+ CHANNEL_URL_MAP = ENV.fetch('SLACK_WEBHOOK_CHANNEL_URLS') { {} }
9
+
10
+ if URL.empty? && CHANNEL_URL_MAP.empty?
11
+ puts "Need either SLACK_WEBHOOK_URL or SLACK_WEBHOOK_CHANNEL_URLS to be defined!"
12
+ exit 0
13
+ end
7
14
 
8
15
  channel = ARGV.shift
16
+ if channel.to_s.empty?
17
+ puts "Channel to post to is required!!"
18
+ exit 0
19
+ end
20
+
9
21
  content = ARGV.empty? ? ARGF.read : StringIO.new(ARGV.join("\n")).read
10
22
  exit 0 if content.strip.empty?
11
23
 
12
- begin
13
- if attachments = JSON.parse(
14
- "[#{content.split("\n").slice(1..-1).join(",")}]"
15
- )
16
- begin
17
- RestClient.post(
18
- URL,
19
- payload: {
20
- username: ENV['SLACKBOT_USERNAME'] || 'slackbot',
21
- channel: channel,
22
- text: content.split("\n")&.first || '',
23
- attachments: attachments,
24
- icon_emoji: ":ghost:"
25
- }.to_json
26
- )
27
- rescue RestClient::Exceptions => e
28
- puts "Error posting to slack #{e.message}:\n#{e.backtrace}"
29
- end
30
-
31
- exit 0
32
- end
33
- rescue JSON::ParserError => e
34
- end
24
+ psm = PostSlackMessage.new
25
+ webhook_url = psm.select_webhook_url(URL, CHANNEL_URL_MAP, channel)
35
26
 
36
- begin
37
- RestClient.post(
38
- URL,
39
- payload: {
40
- username: ENV['SLACKBOT_USERNAME'] || 'slackbot',
41
- channel: channel,
42
- text: content,
43
- icon_emoji: ":ghost:"
44
- }.to_json
45
- )
46
- rescue RestClient::Exceptions => e
47
- puts "Error posting to slack #{e.message}:\n#{e.backtrace}"
27
+ if webhook_url.nil?
28
+ puts "Channel '#{channel}' webhook url not found! Please define it in SLACK_WEBHOOK_CHANNEL_URLS environment variable"
29
+ exit 0
48
30
  end
31
+
32
+ result = psm.post_message(webhook_url, channel, content)
33
+ puts result if !result.empty?
data/exe/pv-git-branch CHANGED
@@ -2,8 +2,9 @@
2
2
 
3
3
  require_relative '../lib/pivotoolz/git_branch'
4
4
 
5
- if ARGV.length != 1
5
+ if ARGV.length < 1
6
6
  puts "#{GitBranch.usage_message}"
7
7
  exit
8
8
  end
9
- puts GitBranch.new.generate(ARGV.first)
9
+ first_arg, *the_rest = ARGV
10
+ puts GitBranch.new.generate(first_arg, the_rest)
@@ -1,7 +1,7 @@
1
1
  require 'json'
2
2
 
3
3
  class GitBranch
4
- def generate(story_id)
4
+ def generate(story_id, *append)
5
5
  if !story_id
6
6
  puts "#{GitBranch.usage_message}"
7
7
  exit
@@ -13,8 +13,9 @@ class GitBranch
13
13
  category = set_category(story['story_type'])
14
14
  description = set_description(story['name'])
15
15
  pivotal_id = story['id']
16
+ append = set_append_values(append)
16
17
 
17
- create_branch("#{author}/#{category}/#{description}-#{pivotal_id}")
18
+ create_branch("#{author}/#{category}/#{description}-#{pivotal_id}#{append}")
18
19
  end
19
20
 
20
21
  private
@@ -38,9 +39,7 @@ class GitBranch
38
39
 
39
40
  def set_author
40
41
  author_name = get_author_initials || get_author_name || get_whoami || 'unknown'
41
- author_name.downcase!
42
- author_name.tr!('.@!#$%^\&*()', '')
43
- author_name.tr(' ', '+')
42
+ clean_text(author_name)
44
43
  end
45
44
 
46
45
  def get_author_initials
@@ -63,14 +62,24 @@ class GitBranch
63
62
  end
64
63
 
65
64
  def set_description(description)
66
- description.tr!(':_,/.&!@#$%^*()[]\'`<>"', '') # remove unwanted punctuation
67
- description.tr!('-', ' ') # replace dashes with space
68
- description.downcase! # convert to lowercase
69
- description.gsub!(/ +/,'-') # collapse spacing and replace spaces with dashes
70
- description[0 .. 45].gsub(/-$/, '')
65
+ clean_text(description)
66
+ end
67
+
68
+ def set_append_values(appendings)
69
+ return '' if appendings.empty?
70
+ clean_appendings = appendings.map{|appending| clean_text(appending) }
71
+ "-#{clean_appendings.join('-')}"
72
+ end
73
+
74
+ def clean_text(string_value)
75
+ string_value.tr!(':_,/.&!@#$%^*()[]\'`<>"', '') # remove unwanted punctuation
76
+ string_value.tr!('-', ' ') # replace dashes with space
77
+ string_value.downcase! # convert to lowercase
78
+ string_value.gsub!(/ +/,'-') # collapse spacing and replace spaces with dashes
79
+ string_value[0 .. 35].gsub(/-$/, '') # limit to 45 chars
71
80
  end
72
81
 
73
82
  def self.usage_message
74
- "Usage : pv-git-branch '[pivotal_story_id]'"
83
+ "Usage : pv-git-branch '<pivotal_story_id>' '[<appended_branchname_values>...]'"
75
84
  end
76
85
  end
@@ -0,0 +1,51 @@
1
+ class PostSlackMessage
2
+ def select_webhook_url(url, channel_map, channel)
3
+ return url if channel_map.empty?
4
+
5
+ channel_webhook_map = channel_map.split(',').reduce({}) do |reduced, channel_map_string|
6
+ c, url = channel_map_string.split('->')
7
+ reduced[c] = url
8
+ reduced["@#{c}"] = url if !c.start_with?('@')
9
+ reduced["##{c}"] = url if !c.start_with?('#')
10
+ reduced
11
+ end
12
+
13
+ channel_webhook_map[channel]
14
+ end
15
+
16
+ def post_message(url, channel, content)
17
+ begin
18
+ text, *json = content.split("\n")
19
+ return post_basic_message(url, channel, content) if json.empty?
20
+
21
+ post_data = json.any? { |s| s.include? 'blocks' } ? JSON.parse(json.first) : {attachments: json.map { |j| JSON.parse(j) }}
22
+ begin
23
+ RestClient.post(
24
+ url,
25
+ post_data.merge({text: text || ''}).to_json,
26
+ {content_type: :json, accept: :json}
27
+ )
28
+ rescue RestClient::Exceptions => e
29
+ return "Error posting to slack #{e.message}:\n#{e.backtrace}"
30
+ end
31
+ rescue JSON::ParserError => e
32
+ "Error parsing json: #{e}"
33
+ end
34
+ end
35
+
36
+ def post_basic_message(url, channel, content)
37
+ begin
38
+ RestClient.post(
39
+ url,
40
+ payload: {
41
+ username: ENV['SLACKBOT_USERNAME'] || 'slackbot',
42
+ channel: channel,
43
+ text: content,
44
+ icon_emoji: ":ghost:"
45
+ }.to_json
46
+ )
47
+ rescue RestClient::Exceptions => e
48
+ puts "Error posting to slack #{e.message}:\n#{e.backtrace}"
49
+ end
50
+ end
51
+ end
@@ -1,3 +1,3 @@
1
1
  module Pivotoolz
2
- VERSION = "1.2.2"
2
+ VERSION = "2.2.0"
3
3
  end
data/pivotoolz.gemspec CHANGED
@@ -28,9 +28,9 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ["lib"]
30
30
 
31
- spec.add_dependency 'rest-client', "~> 2.0.2"
31
+ spec.add_dependency 'rest-client', "~> 2.1"
32
32
 
33
- spec.add_development_dependency "bundler", "~> 1.16"
34
- spec.add_development_dependency "rake", "~> 10.0"
35
- spec.add_development_dependency "rspec", "~> 3.0"
33
+ spec.add_development_dependency "bundler", "~> 2.2"
34
+ spec.add_development_dependency "rake", "~> 13.0"
35
+ spec.add_development_dependency "rspec", "~> 3.10"
36
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pivotoolz
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sufyan Adam
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-22 00:00:00.000000000 Z
11
+ date: 2021-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -16,56 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.2
19
+ version: '2.1'
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: 2.0.2
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: '2.2'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.16'
40
+ version: '2.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
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: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.0'
61
+ version: '3.10'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.0'
68
+ version: '3.10'
69
69
  description: Auto-deliver your finished stories upon successful deployment, find out
70
70
  which stories went out in the last deployment, get a list of pivotal tracker story
71
71
  ids that went out in the last deployment.
@@ -75,6 +75,9 @@ executables:
75
75
  - deliver-deployed-stories
76
76
  - deliver-story
77
77
  - get-story-info-from-id
78
+ - get-story-info-from-jira-id
79
+ - jira-stories-deployed
80
+ - jira-story-ids-deployed
78
81
  - merge
79
82
  - post-slack-message
80
83
  - pv-git-branch
@@ -104,6 +107,9 @@ files:
104
107
  - exe/deliver-deployed-stories
105
108
  - exe/deliver-story
106
109
  - exe/get-story-info-from-id
110
+ - exe/get-story-info-from-jira-id
111
+ - exe/jira-stories-deployed
112
+ - exe/jira-story-ids-deployed
107
113
  - exe/merge
108
114
  - exe/post-slack-message
109
115
  - exe/pv-git-branch
@@ -112,6 +118,7 @@ files:
112
118
  - exe/tag-it
113
119
  - lib/pivotoolz.rb
114
120
  - lib/pivotoolz/git_branch.rb
121
+ - lib/pivotoolz/post_slack_message.rb
115
122
  - lib/pivotoolz/version.rb
116
123
  - pivotoolz.gemspec
117
124
  homepage: https://github.com/sufyanadam/pivotoolz
@@ -119,7 +126,7 @@ licenses:
119
126
  - MIT
120
127
  metadata:
121
128
  allowed_push_host: https://rubygems.org
122
- post_install_message:
129
+ post_install_message:
123
130
  rdoc_options: []
124
131
  require_paths:
125
132
  - lib
@@ -134,9 +141,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
141
  - !ruby/object:Gem::Version
135
142
  version: '0'
136
143
  requirements: []
137
- rubyforge_project:
138
- rubygems_version: 2.7.3
139
- signing_key:
144
+ rubygems_version: 3.2.3
145
+ signing_key:
140
146
  specification_version: 4
141
147
  summary: Tools to save you time when working with Pivotal Tracker stories
142
148
  test_files: []