class Fastlane::Actions::JiraTransitionAction

Public Class Methods

authors() click to toggle source
# File lib/fastlane/plugin/jira_transition/actions/jira_transition_action.rb, line 107
def self.authors
  ["Valerio Mazzeo", "Tiziano Bruni"]
end
available_options() click to toggle source
# File lib/fastlane/plugin/jira_transition/actions/jira_transition_action.rb, line 59
def self.available_options
  [
      FastlaneCore::ConfigItem.new(key: :url,
                                   env_name: "FL_JIRA_SITE",
                                   description: "URL for Jira instance",
                                   verify_block: proc do |value|
                                     UI.user_error!("No url for Jira given, pass using `url: 'url'`") if value.to_s.length == 0
                                   end),
      FastlaneCore::ConfigItem.new(key: :username,
                                   env_name: "FL_JIRA_USERNAME",
                                   description: "Username for JIRA instance",
                                   verify_block: proc do |value|
                                     UI.user_error!("No username") if value.to_s.length == 0
                                   end),
      FastlaneCore::ConfigItem.new(key: :password,
                                   env_name: "FL_JIRA_PASSWORD",
                                   description: "Password for Jira",
                                   verify_block: proc do |value|
                                     UI.user_error!("No password") if value.to_s.length == 0
                                   end),
      FastlaneCore::ConfigItem.new(key: :project_key,
                                   env_name: "FL_JIRA_TRANSITION_PROJECT_KEY",
                                   description: "Project Key for Jira, i.e. IOS",
                                   verify_block: proc do |value|
                                     UI.user_error!("No Project Key specified") if value.to_s.length == 0
                                   end),
      FastlaneCore::ConfigItem.new(key: :transition_id,
                                   env_name: "FL_JIRA_TRANSITION_TRANSITION_ID",
                                   description: "Transition to apply to the tickets referenced in the changelog",
                                   verify_block: proc do |value|
                                     UI.user_error!("No transition id specified") if value.to_s.length == 0
                                   end),
      FastlaneCore::ConfigItem.new(key: :comment,
                                   env_name: "FL_JIRA_TRANSITION_COMMENT",
                                   description: "Comment to add if the transition is applied",
                                   optional: true,
                                   verify_block: proc do |value|
                                     UI.user_error!("No transition id specified") if value.to_s.length == 0
                                   end)
  ]
end
description() click to toggle source

@!group Documentation

# File lib/fastlane/plugin/jira_transition/actions/jira_transition_action.rb, line 55
def self.description
  "Apply a JIRA transition to issues mentioned in the changelog"
end
is_supported?(platform) click to toggle source
# File lib/fastlane/plugin/jira_transition/actions/jira_transition_action.rb, line 111
def self.is_supported?(platform)
  true
end
output() click to toggle source
# File lib/fastlane/plugin/jira_transition/actions/jira_transition_action.rb, line 101
def self.output
end
return_value() click to toggle source
# File lib/fastlane/plugin/jira_transition/actions/jira_transition_action.rb, line 104
def self.return_value
end
run(params) click to toggle source
# File lib/fastlane/plugin/jira_transition/actions/jira_transition_action.rb, line 5
def self.run(params)
  Actions.verify_gem!('jira-ruby')
  require 'jira-ruby'

  site          = params[:url]
  context_path  = ""
  auth_type     = :basic
  username      = params[:username]
  password      = params[:password]
  project_key   = params[:project_key]
  transition_id = params[:transition_id]
  comment_text  = params[:comment]

  options = {
      site: site,
      context_path: context_path,
      auth_type: auth_type,
      username: username,
      password: password
  }

  client = JIRA::Client.new(options)

  if Actions.lane_context[SharedValues::FL_CHANGELOG].nil?
    changelog_configuration = FastlaneCore::Configuration.create(Actions::ChangelogFromGitCommitsAction.available_options, {})
    Actions::ChangelogFromGitCommitsAction.run(changelog_configuration)
  end

  issue_ids = Actions.lane_context[SharedValues::FL_CHANGELOG].scan(/#{project_key}-\d+/i).uniq

  issue_ids.each do |issue_id|
    begin
      issue = client.Issue.find(issue_id)
      transition = issue.transitions.build
      transition.save!("transition" => { "id" => transition_id })

      if comment_text
        comment = issue.comments.build
        comment.save({"body" => comment_text})
      end
    rescue JIRA::HTTPError
      "Skipping issue #{issue_id}"
    end
  end
end