apadmi_grout 0.0.4 → 1.1.0

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
  SHA256:
3
- metadata.gz: b96da0fc11dca309a04de37dd5e40919d35bbc4dd1071dfa593e670bb0fe1903
4
- data.tar.gz: e9a4218c2a49f038ea63c2ca7014fe441369962f7e69894d523430bc0bef90ac
3
+ metadata.gz: f779ff10f50f15d2ce74311339c8407ae32eec3bcc8fb49f0ab3a85d8a0cbdc7
4
+ data.tar.gz: e0f9034584fdcafb95355ade65f64ccdd7e82acc2e07d62a5bd61129e3fc5464
5
5
  SHA512:
6
- metadata.gz: 447a9b2e1f1752430e5ae19fe0b8054e1a16e99e8988586ce06d21433df7cd4254b8a447f6dc78f40f7d9c91a7b3e09cab6ea02b843e0fb19f6d6951381e11b3
7
- data.tar.gz: 49cb8803774da5be549481f27a661b7d3e820709aa1b42571363e8636c7b345a3d27d9cc84294d819eeb6fa16a33d46adb5e6ecdcc096e38e21f091e5ca9f53e
6
+ metadata.gz: 10b206d1d56814b6288bf0db35259c02c81baf0c3554de6286627498c0d65ee6f8808fafcd5908038be9a196ae264952180fc4988ca15b4023dd03a1380c98be
7
+ data.tar.gz: ecbf93eb1f3bd3141a54949568edc1196ad6b7aaf7348f89f93e9fb46bf76aa424504cf2a5bc5d9effd78f811543322980c65a7e83231cdb283ca492aec53fc8
data/CHANGELOG.md CHANGED
@@ -1,7 +1,13 @@
1
- # Fastlane Plugin Changelog
1
+ # Core Changelog
2
2
 
3
- ## [Unreleased]
3
+ ## [1.1.0] - 2022-05-12
4
+ * Support allowing tickets that aren't assigned to a sprint to be moved.
5
+ * Created utilities for getting the git root and number of commits
4
6
 
5
- ## [0.1.0] - 2022-01-23
7
+ ## [1.0.0] - 2022-05-09 - Initial release
6
8
 
7
- - Initial release
9
+ * Various JIRA utilities to simplify JIRA interactions
10
+ * Action for searching JIRA tickets
11
+ * Action for transitioning JIRA tickets
12
+ * Action for generating release notes
13
+ * Action for extracting ticket keys from Git changelog
@@ -4,7 +4,7 @@ module Apadmi
4
4
  module Grout
5
5
  # Convenience class for initializing and accessing the various actions
6
6
  class DependencyInjector
7
- attr_reader :move_jira_tickets_action, :find_tickets_to_move_action, :generate_release_notes_action, :issues_from_changelog_action
7
+ attr_reader :jira_wrapper, :move_jira_tickets_action, :find_tickets_to_move_action, :generate_release_notes_action, :issues_from_changelog_action
8
8
 
9
9
  # @param [String] username
10
10
  # @param [String] token
@@ -16,21 +16,25 @@ module Apadmi
16
16
  # @param component [String] Only include tickets tagged with this component
17
17
  # @param status [String] The status of tickets to be moved (Usually "Awaiting QA Release")
18
18
  # @param excluded_ticket_keys [Array<String>] ticket keys to be excluded from consideration
19
- # @param custom_flag_messages [FlagMessages]
19
+ # @param custom_flag_messages [Apadmi::Grout::FlagMessages]
20
+ # @param options [Apadmi::Grout::FindTicketsOptions]
20
21
  # @return [Array<JIRA::Resource::Issue>] the issues ready to move
21
22
  def run(
22
23
  component,
23
24
  status,
24
25
  excluded_ticket_keys,
25
- custom_flag_messages = FlagMessages.new(
26
- "REASON FOR FLAG: Check this ticket - it was put in #{status} but has no PRs connected to it. CI still moved it",
27
- "REASON FOR FLAG: Check this ticket - it was put in #{status} but has no MERGED PRs and at least one OPEN PR",
28
- "REASON FOR FLAG: Check this ticket - it was put in #{status} but has only DECLINED PRs",
29
- "REASON FOR FLAG: Check this ticket - it was put in #{status} but has no MERGED PRs"
30
- )
26
+ custom_flag_messages = nil,
27
+ options = nil
31
28
  )
32
- issues = @jira_wrapper.search_unblocked_issues(component, status).reject do |issue|
33
- puts issue.key
29
+ custom_flag_messages ||= Apadmi::Grout::FlagMessages.default(status)
30
+ options ||= Apadmi::Grout::FindTicketsOptions.new(include_no_sprint_tickets: false)
31
+
32
+ issues = @jira_wrapper.search_unblocked_issues(
33
+ component,
34
+ status,
35
+ [],
36
+ allow_no_sprint: options.include_no_sprint_tickets
37
+ ).reject do |issue|
34
38
  excluded_ticket_keys.include? issue.key
35
39
  end
36
40
 
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Apadmi
4
+ module Grout
5
+ FindTicketsOptions = Struct.new(
6
+ :include_no_sprint_tickets,
7
+ keyword_init: true
8
+ )
9
+ end
10
+ end
@@ -1,8 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- FlagMessages = Struct.new(
4
- :no_prs_flag_msg,
5
- :open_prs_flag_msg,
6
- :declined_prs_flag_msg,
7
- :no_merged_prs_flag_msg
8
- )
3
+ module Apadmi
4
+ module Grout
5
+ FlagMessages = Struct.new(
6
+ :no_prs_flag_msg,
7
+ :open_prs_flag_msg,
8
+ :declined_prs_flag_msg,
9
+ :no_merged_prs_flag_msg
10
+ ) do
11
+ # Get default flag messages
12
+ # @param status [String] status ticket will be moving to
13
+ # @return [Apadmi::Grout::FlagMessages]
14
+ def self.default(status)
15
+ FlagMessages.new(
16
+ "REASON FOR FLAG: Check this ticket - it was put in #{status} but has no PRs connected to it. CI still moved it",
17
+ "REASON FOR FLAG: Check this ticket - it was put in #{status} but has no MERGED PRs and at least one OPEN PR",
18
+ "REASON FOR FLAG: Check this ticket - it was put in #{status} but has only DECLINED PRs",
19
+ "REASON FOR FLAG: Check this ticket - it was put in #{status} but has no MERGED PRs"
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
@@ -46,16 +46,19 @@ module Apadmi
46
46
  # @param [String] component
47
47
  # @param [String] status
48
48
  # @param [String[]] ticket_types
49
+ # @param [Boolean] allow_no_sprint
49
50
  # @return [Array<JIRA::Resource::Issue>]
50
- def search_unblocked_issues(component, status, ticket_types = [])
51
+ def search_unblocked_issues(component, status, ticket_types = [], allow_no_sprint: false)
51
52
  component_filter = (" AND component = '#{component}' " unless component.empty?) || ""
52
53
  status_filter = (" AND status = '#{status}' " unless status.empty?) || ""
53
54
  type_filter = ("AND (#{ticket_types.map { |type| "type = #{type}" }.join("OR ")})" unless ticket_types.empty?) || ""
55
+ empty_sprint_condition = ("OR sprint is EMPTY" if allow_no_sprint) || ""
54
56
 
55
57
  jql_search = %{
56
58
  project = '#{@project}'
57
59
  #{status_filter} #{component_filter} #{type_filter}
58
- AND sprint in openSprints() AND (labels not in(Blocked) or labels is EMPTY) AND Flagged is EMPTY
60
+ AND (sprint in openSprints() #{empty_sprint_condition}) AND (labels not in(Blocked) or labels is EMPTY)
61
+ AND Flagged is EMPTY
59
62
  }
60
63
 
61
64
  @jira_client.Issue.jql(jql_search, { max_results: 1000 }).uniq
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Apadmi
4
+ module Grout
5
+ # Generic Filename Utils
6
+ class FilenameUtils
7
+ # Constructs a standard Apadmi filename for a build output binary
8
+ # @param [Hash] options the options to create a filename with
9
+ # @option options [String] :client_name The client name
10
+ # @option options [String] :product_name The product name
11
+ # @option options [String] :platform The product's platform
12
+ # @option options [String] :version Version number
13
+ # @option options [String] :build_number Build number
14
+ # @option options [String] :data (Today) The date for the file
15
+ # @option options [String] :suffix Suffix to identify what this output is (e.g. SOURCE, UAT, QA, DEV)
16
+ # @return [String] A filename formatted such as "Apadmi-Grout-Ruby-v1.0.0(2921)-2021-06-22-DEV"
17
+ def self.binary_output_filename(options = {})
18
+ client_name = options[:client_name]
19
+ raise ":client_name shouldn't be empty" if client_name.blank?
20
+
21
+ product_name = options[:product_name]
22
+ raise ":product_name shouldn't be empty" if product_name.blank?
23
+
24
+ platform = options[:platform]
25
+ raise ":platform shouldn't be empty" if platform.blank?
26
+
27
+ version = options[:version]
28
+ raise ":version shouldn't be empty" if version.blank?
29
+
30
+ build_number = options[:build_number]
31
+ raise ":build_number shouldn't be empty" if build_number.blank?
32
+
33
+ date = options[:date] || Time.now.strftime("%Y-%m-%d")
34
+ suffix = ("-#{options[:suffix]}" unless options[:suffix].blank?) || ""
35
+
36
+ "#{client_name}-#{product_name}-#{platform}-v#{version}(#{build_number})-#{date}#{suffix}"
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "open3"
4
+
5
+ module Apadmi
6
+ module Grout
7
+ # Generic Git related utils
8
+ class GitUtils
9
+ # Gets the root of the Git repo we're in
10
+ # @return [String] The full path for the root of this Git repo
11
+ def self.git_root
12
+ stdout, stderr, = Open3.capture3("git rev-parse --show-toplevel")
13
+ raise "Failed to get git root: #{stderr}" unless stderr.strip.empty?
14
+
15
+ stdout.strip
16
+ end
17
+
18
+ # Gets the number of commits accessible from HEAD treating the history as a graph.
19
+ # See more details here: https://git-scm.com/docs/git-rev-list
20
+ # @return [String] The number of commits
21
+ def self.number_of_commits
22
+ stdout, stderr, = Open3.capture3("git rev-list HEAD --count")
23
+ raise "Failed to get commit number: #{stderr}" unless stderr.strip.empty?
24
+
25
+ stdout.strip
26
+ end
27
+ end
28
+ end
29
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Apadmi
4
4
  module Grout
5
- VERSION = "0.0.4"
5
+ VERSION = "1.1.0"
6
6
  end
7
7
  end
data/lib/apadmi_grout.rb CHANGED
@@ -16,5 +16,8 @@ require_relative "apadmi/grout/jira/wrapper/jira_wrapper"
16
16
  require_relative "apadmi/grout/jira/models/pull_request"
17
17
  require_relative "apadmi/grout/jira/models/version"
18
18
  require_relative "apadmi/grout/jira/models/flag_messages"
19
+ require_relative "apadmi/grout/jira/models/find_tickets_options"
19
20
 
20
21
  require_relative "apadmi/grout/utils/logger"
22
+ require_relative "apadmi/grout/utils/git_utils"
23
+ require_relative "apadmi/grout/utils/filename_utils"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apadmi_grout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-09 00:00:00.000000000 Z
11
+ date: 2022-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -66,6 +66,7 @@ files:
66
66
  - lib/apadmi/grout/di.rb
67
67
  - lib/apadmi/grout/jira/actions/find_tickets_to_move_action.rb
68
68
  - lib/apadmi/grout/jira/actions/move_jira_tickets_action.rb
69
+ - lib/apadmi/grout/jira/models/find_tickets_options.rb
69
70
  - lib/apadmi/grout/jira/models/flag_messages.rb
70
71
  - lib/apadmi/grout/jira/models/pull_request.rb
71
72
  - lib/apadmi/grout/jira/models/version.rb
@@ -74,6 +75,8 @@ files:
74
75
  - lib/apadmi/grout/release_notes/actions/issues_from_changelog_action.rb
75
76
  - lib/apadmi/grout/release_notes/models/release_notes_config.rb
76
77
  - lib/apadmi/grout/release_notes/models/release_notes_templates.rb
78
+ - lib/apadmi/grout/utils/filename_utils.rb
79
+ - lib/apadmi/grout/utils/git_utils.rb
77
80
  - lib/apadmi/grout/utils/logger.rb
78
81
  - lib/apadmi/grout/version.rb
79
82
  - lib/apadmi_grout.rb