Class: GithubWorkflow::Cli

Inherits:
Thor
  • Object
show all
Includes:
Thor::Actions
Defined in:
lib/github_workflow/cli.rb

Constant Summary collapse

PROCEED_TEXT =
"Proceed? [y,yes]: ".freeze

Instance Method Summary collapse

Instance Method Details

#cleanupObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/github_workflow/cli.rb', line 91

def cleanup
  say_info("Checking merge status")
  merged_pr_branches
  puts "\n"

  if merged_pr_branches.any?
    say_info("Are you sure you want to delete the branches with checkmarks?")

    if yes?(PROCEED_TEXT)
      pass("Deleting Branches")

      merged_pr_branches.each do |branch|
        `git branch -D #{branch}`
      end
    else
      failure("Cleanup aborted")
    end
  else
    failure("No merged branches to delete")
  end
end

#create_and_startObject



85
86
87
88
# File 'lib/github_workflow/cli.rb', line 85

def create_and_start
  ensure_github_config_present
  create_issue
end

#create_prObject



32
33
34
35
36
# File 'lib/github_workflow/cli.rb', line 32

def create_pr
  ensure_github_config_present
  ensure_origin_exists
  convert_issue_to_pr
end

#deploy_notesObject



133
134
135
# File 'lib/github_workflow/cli.rb', line 133

def deploy_notes
  puts formatted_deploy_notes
end

#infoObject



71
72
73
74
# File 'lib/github_workflow/cli.rb', line 71

def info
  ensure_github_config_present
  puts get_issue(issue_number_from_branch)["body"]
end

#openObject



77
78
79
80
81
# File 'lib/github_workflow/cli.rb', line 77

def open
  ensure_github_config_present
  response = JSON.parse(github_client.get("repos/#{user_and_repo}/issues/#{issue_number_from_branch}?access_token=#{oauth_token}").body)
  `/usr/bin/open -a "/Applications/Google Chrome.app" '#{response["html_url"]}'`
end

#push_and_prObject



40
41
42
43
44
# File 'lib/github_workflow/cli.rb', line 40

def push_and_pr
  ensure_github_config_present
  push_and_set_upstream
  convert_issue_to_pr
end

#reviewsObject



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/github_workflow/cli.rb', line 114

def reviews
  ensure_github_config_present
  reviewers = get_prs_list.map { |pr| pr["requested_reviewers"].map { |r| r["login"] } }.flatten
  reviewer_counts = reviewers.group_by { |i| i }.map { |k, v| [k, v.count] }

  if reviewer_counts.any?
    table = Terminal::Table.new(style: { width: 50 }) do |table_rows|
      table_rows << ["Username", "Requested PRs Count"]
      table_rows << :separator
      reviewer_counts.each { |reviewer_count| table_rows << reviewer_count }
    end

    puts table
  end
end

#startObject



20
21
22
23
24
25
26
27
# File 'lib/github_workflow/cli.rb', line 20

def start
  ensure_github_config_present
  stash
  checkout_master
  rebase_master
  create_branch
  stash_pop
end

#statusObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/github_workflow/cli.rb', line 47

def status
  ensure_github_config_present
  ensure_origin_exists
  response = JSON.parse(github_client.get("repos/#{user_and_repo}/statuses/#{current_branch}?access_token=#{oauth_token}").body)

  if response.empty?
    alert "No statuses yet.  Have you pushed your branch?"
  else
    table = Terminal::Table.new(style: { width: 80 }) do |table_rows|
      table_rows << %w(CI Status Description)
      table_rows << :separator

      response.map { |status| status["context"] }.uniq.map do |status|
        response.select { |st| st["context"] == status }.sort_by { |st| st["updated_at"] }.last
      end.each do |status|
        table_rows << %w(context state description).map { |key| status[key] }
      end
    end

    puts table
  end
end

#trelloObject



140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/github_workflow/cli.rb', line 140

def trello
  ensure_github_config_present
  ensure_trello_config_present
  init_trello
  set_trello_card
  create_issue_from_trello_card
  stash
  checkout_master
  rebase_master
  create_branch
  stash_pop
end