Class: BatCave::Command::GithubIssueMilestone
- Inherits:
-
Clamp::Command
- Object
- Clamp::Command
- BatCave::Command::GithubIssueMilestone
- Defined in:
- lib/batcave/command/github-issue-milestone.rb
Instance Method Summary collapse
-
#client ⇒ Object
def execute.
- #execute ⇒ Object
- #http ⇒ Object
- #logger ⇒ Object
-
#set_milestone(repo, issue_number, milestone_number) ⇒ Object
def execute.
Instance Method Details
#client ⇒ Object
def execute
81 82 83 84 85 86 87 88 89 |
# File 'lib/batcave/command/github-issue-milestone.rb', line 81 def client # This requires you have ~/.netrc setup correctly # I don't know if it works with 2FA require "octokit" @client ||= Octokit::Client.new(:netrc => true).tap do |client| client.login client.auto_paginate = true end end |
#execute ⇒ Object
22 23 24 25 26 27 28 29 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 |
# File 'lib/batcave/command/github-issue-milestone.rb', line 22 def execute logger.subscribe(STDOUT) logger.level = log_level logger[:repo] = repo logger[:milestone] = milestone_name # verify milestone exists milestones = client.milestones(repo) selector = proc { |m| m["title"] == milestone_name } if milestones.none?(&selector) raise "No such milestone '#{milestone_name}' found in #{repo}" end milestone_number = milestones.find(&selector)["number"] logger.debug("Found milestone number", :number => milestone_number) if issue_number == "-" STDIN.each_line do |issue_number| set_milestone(repo, issue_number.chomp, milestone_number) end else set_milestone(repo, issue_number, milestone_number) end 0 rescue RuntimeError => e puts "Error: #{e}" 1 rescue => e if logger.debug? logger.error("An error occurred", :exception => e, :backtrace => e.backtrace) else logger.error("An error occurred", :exception => e) end 1 end |
#http ⇒ Object
91 92 93 94 95 96 |
# File 'lib/batcave/command/github-issue-milestone.rb', line 91 def http @http ||= Faraday.new(:url => "https://github.com") do |faraday| faraday.request :url_encoded faraday.adapter Faraday.default_adapter end # http end |
#logger ⇒ Object
18 19 20 |
# File 'lib/batcave/command/github-issue-milestone.rb', line 18 def logger @logger ||= Cabin::Channel.get end |
#set_milestone(repo, issue_number, milestone_number) ⇒ Object
def execute
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/batcave/command/github-issue-milestone.rb', line 58 def set_milestone(repo, issue_number, milestone_number) logger[:issue] = issue_number # TODO(sissel): Verify issue exists issue = client.issue(repo, issue_number) if issue.milestone if issue.milestone.title == milestone_name logger.debug("Skipping because milestone is already set", :current_milestone => issue.milestone.title) return end if issue.milestone.title != milestone_name if override? logger.info("Milestone already set on issue, but override is given, so I will override it.", :current_milestone => issue.milestone.title) else logger.info("Milestone already set on issue, skipping this issue.", :current_milestone => issue.milestone.title) #raise "Milestone is already set on '#{repo}' issue #{issue_number}" end end end client.update_issue(repo, issue_number, issue.title, issue.body, :milestone => milestone_number) logger.info("Updated issue milestone successfully", :repo => repo) end |