Class: Apadmi::Grout::FindTicketsToMoveAdoAction

Inherits:
FindTicketsToMoveAction show all
Defined in:
lib/apadmi/grout/actions/find_tickets_to_move_action/find_tickets_to_move_ado_action.rb

Overview

Finds and returns a list of all the issues that are ready to be moved Any tickets found that have the given status but don't appear ready to be moved will be flagged.

Instance Method Summary collapse

Constructor Details

#initialize(ado_board_service, ticket_prefix, git_utils, issues_from_chnglg, logger) ⇒ FindTicketsToMoveAdoAction

Returns a new instance of FindTicketsToMoveAdoAction.



16
17
18
19
20
21
22
# File 'lib/apadmi/grout/actions/find_tickets_to_move_action/find_tickets_to_move_ado_action.rb', line 16

def initialize(ado_board_service, ticket_prefix, git_utils, issues_from_chnglg, logger)
  @ado_board_service = ado_board_service
  @ticket_prefix = ticket_prefix
  @git_utils = git_utils
  @issues_from_changelog_action = issues_from_chnglg
  @logger = logger
end

Instance Method Details

#run(component, status, excluded_ticket_keys, custom_flag_messages = nil, options = nil) ⇒ Array<Apadmi::Grout::Issue>

Returns the issues ready to move.

Parameters:

  • component (String)

    Only include tickets tagged with this component

  • status (String)

    The status of tickets to be moved (Usually "Awaiting QA Release")

  • excluded_ticket_keys (Array<String>)

    ticket keys to be excluded from consideration

  • custom_flag_messages (Apadmi::Grout::FlagMessages) (defaults to: nil)
  • options (Apadmi::Grout::JiraFindTicketsOptions) (defaults to: nil)

Returns:



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/apadmi/grout/actions/find_tickets_to_move_action/find_tickets_to_move_ado_action.rb', line 30

def run(
  component,
  status,
  excluded_ticket_keys,
  custom_flag_messages = nil,
  options = nil
)
  custom_flag_messages ||= Apadmi::Grout::FlagMessages.default(status)
  options ||= Apadmi::Grout::AdoFindTicketsOptions.new(required_tags: [],
                                                       not_tags: [])

  issues = @ado_board_service.search_unblocked_issues(
    component, status, [], options
  ).reject { |issue| excluded_ticket_keys.include? issue.key }

  issue_keys = issues.map(&:key)
  @logger.message("Found issues to consider #{issue_keys.join(", ")}")

  # Get the issues in the git changelog, filtered for the issues being considered
  changelog_ids = @issues_from_changelog_action.issue_ids_from_changelog(
    @git_utils.changelog(issue_keys, merges_only: false)
  ).map { |id| id.delete_prefix(@ticket_prefix) }

  @git_utils.fetch_all
  # issues that have been merged, but aren't in this build.
  # This is a valid state (e.g. merged into a release branch but not develop)
  invert_changelog_ids = @issues_from_changelog_action.issue_ids_from_changelog(
    @git_utils.invert_changelog(issue_keys)
  ).map { |id| id.delete_prefix(@ticket_prefix) }

  final_list = issues.filter do |issue|
    # Flag the ticket if it doesn't include in either changelog since
    # this means the ticket is likely in an incorrect state
    decide_should_include?(changelog_ids, custom_flag_messages, invert_changelog_ids, issue)
  end

  @logger.message("Final list: #{final_list.map(&:key).join(", ")}")
  final_list
end