Module: Gitlab::Triage::Linear::Migrator::IssueExtension
- Defined in:
- lib/gitlab/triage/linear/migrator/issue_extension.rb
Overview
Extending Gitlab::Triage::Resource::Issue with functions required for Linear migration.
Constant Summary collapse
- LABEL_MIGRATION_FAILED =
@todo: make these configurable
'/label ~"Linear::Migration Failed"\n/remove_label ~"Linear::To Migrate"'
- LABEL_MIGRATED =
'/label ~"Linear::Migrated"\n/remove_label ~"Linear::Migration Failed" ~"Linear::To Migrate"'
- CLOSE_ACTON =
"/close"
Instance Method Summary collapse
- #create_issue_in_linear(set_state: false, prepend_project_name: false, team_label_prefix: "Team") ⇒ Object
- #discussions ⇒ Object
- #extract_issue_id(text) ⇒ Object
- #find_linear_id_in_gitlab ⇒ Object
- #human_discussions ⇒ Object
- #process_comment(comment_body) ⇒ Object
Instance Method Details
#create_issue_in_linear(set_state: false, prepend_project_name: false, team_label_prefix: "Team") ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/gitlab/triage/linear/migrator/issue_extension.rb', line 71 def create_issue_in_linear(set_state: false, prepend_project_name: false, team_label_prefix: "Team") connector = setup_linear_connector connector.team_label_prefix = team_label_prefix project_name = if prepend_project_name fetch_project_name end.to_s begin log_processing_issue issue = connector.import_issue(self, set_state:, project_name:) rescue StandardError => e handle_error(e., project_name) return end return unless issue construct_output(issue) end |
#discussions ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/gitlab/triage/linear/migrator/issue_extension.rb', line 11 def discussions # Epic discussions GET endpoint weirdly has id instead of iid as param. url = if self.class.name.demodulize.underscore.pluralize == "epics" build_url( options: { params: { system: false }, resource_id: resource["id"], sub_resource_type: "discussions" } ) else resource_url(sub_resource_type: "discussions") end network.query_api_cached(url) end |
#extract_issue_id(text) ⇒ Object
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/gitlab/triage/linear/migrator/issue_extension.rb', line 33 def extract_issue_id(text) # Use a regular expression to match the issue ID pattern within the fixed text issue_id_pattern = /Linear issue ID: ([a-f0-9-]{36})/ # Extract the issue ID using the pattern match = text.match(issue_id_pattern) # Return the issue ID if found, otherwise return nil match ? match[1] : nil end |
#find_linear_id_in_gitlab ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/gitlab/triage/linear/migrator/issue_extension.rb', line 44 def find_linear_id_in_gitlab return if resource[:epic].empty? url = build_url(params: {}, options: { source: "groups", resource_type: "epics", resource_id: resource[:epic][:id], source_id: resource[:epic][:group_id], sub_resource_type: "notes" }) comments = network.query_api_cached(url) comments.each do |comment| if (issue_id = process_comment(comment["body"])) puts "Parent epic found: #{issue_id}" return issue_id end end nil end |
#human_discussions ⇒ Object
27 28 29 30 31 |
# File 'lib/gitlab/triage/linear/migrator/issue_extension.rb', line 27 def human_discussions discussions.reject do |discussion_item| discussion_item["individual_note"] == true && discussion_item["notes"].first["system"] == true end end |
#process_comment(comment_body) ⇒ Object
60 61 62 63 64 |
# File 'lib/gitlab/triage/linear/migrator/issue_extension.rb', line 60 def process_comment(comment_body) return unless comment_body.start_with?("Issue created in Linear:") extract_issue_id(comment_body) end |