gplan 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/gplan +27 -0
- data/lib/github.rb +22 -7
- metadata +1 -1
data/bin/gplan
CHANGED
@@ -45,20 +45,45 @@ def pull_pb_numbers_from_prs
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
+
def pull_dependency(story)
|
49
|
+
return if story['blocks'].nil?
|
50
|
+
story['blocks'].each do |block|
|
51
|
+
if block.match(/(dependenc(y|ies|ys))/i)
|
52
|
+
return "PR: ##{story[i'id']}: " + block
|
53
|
+
end
|
54
|
+
end
|
55
|
+
return nil
|
56
|
+
end
|
57
|
+
|
48
58
|
def print
|
49
59
|
end_of_pbs = false
|
50
60
|
release_notes = "ID:STATUS:TITLE:PROJECT_NAME:PROJECT_ALIAS:PR:TITLE\n"
|
61
|
+
dependencies = []
|
51
62
|
@combined.each do |story|
|
52
63
|
if !end_of_pbs and story['name'].nil?
|
53
64
|
end_of_pbs = true
|
54
65
|
release_notes += "\n---- Unmatched PRs ----\n\n"
|
55
66
|
release_notes += "PR:TITLE\n"
|
56
67
|
end
|
68
|
+
|
69
|
+
dependency = pull_dependency(story)
|
70
|
+
dependencies << dependency unless dependency.nil?
|
71
|
+
|
57
72
|
line = ""
|
58
73
|
line += "#{story['id']}:#{story['status']}:#{story['name']}:#{story['project_name']}:#{story['project_alias']}" unless end_of_pbs
|
59
74
|
line += ":#{story['number']}:#{story['title']}" unless story['number'].nil?
|
60
75
|
release_notes += line + "\n"
|
61
76
|
end
|
77
|
+
|
78
|
+
# print dependency blocks
|
79
|
+
unless dependencies.empty?
|
80
|
+
release_notes += "\n---- Dependencies ----\n\n"
|
81
|
+
dependencies.each do |dependency|
|
82
|
+
release_notes += dependency
|
83
|
+
release_notes += "\n"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
62
87
|
puts release_notes
|
63
88
|
end
|
64
89
|
|
@@ -91,8 +116,10 @@ list= `git log #{@target}..`
|
|
91
116
|
|
92
117
|
pb_story_ids = list.scan(PB_STORY_REGEX).flatten.uniq
|
93
118
|
gh_pr_ids = list.scan(GH_PR_REGEX).flatten.uniq
|
119
|
+
|
94
120
|
@gh_release_array = Github.get_release_notes_array gh_pr_ids
|
95
121
|
@pb_release_array = Planbox.get_release_notes_array pb_story_ids
|
122
|
+
|
96
123
|
pull_pb_numbers_from_prs
|
97
124
|
combine_results
|
98
125
|
print
|
data/lib/github.rb
CHANGED
@@ -3,6 +3,7 @@ require 'httparty'
|
|
3
3
|
GITHUB_USERNAME=ENV['GITHUB_USERNAME']
|
4
4
|
GITHUB_TOKEN=ENV['GITHUB_TOKEN']
|
5
5
|
GITHUB_BASE_URL="https://api.github.com"
|
6
|
+
HEADERS = {:headers => { 'User-Agent' => GITHUB_USERNAME, 'Content-Type' => 'application/json', 'Accept' => 'application/json'}}
|
6
7
|
|
7
8
|
module Github
|
8
9
|
include HTTParty
|
@@ -31,17 +32,18 @@ module Github
|
|
31
32
|
|
32
33
|
def self.get_release_notes_array gh_pr_ids
|
33
34
|
check_environment
|
35
|
+
set_repo_info
|
34
36
|
get_stories gh_pr_ids
|
35
37
|
end
|
36
38
|
|
39
|
+
def self.pulls_url(pr_id)
|
40
|
+
"#{GITHUB_BASE_URL}/repos/#{@repo_name}/#{@app_name}/pulls/#{pr_id}?access_token=#{GITHUB_TOKEN}"
|
41
|
+
end
|
42
|
+
|
37
43
|
def self.get_story(pr_id)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
:headers => { 'User-Agent' => GITHUB_USERNAME, 'Content-Type' => 'application/json', 'Accept' => 'application/json'}
|
42
|
-
})
|
43
|
-
return story_response.parsed_response unless story_response.parsed_response.nil? || story_response.parsed_response["code"] == "error"
|
44
|
-
{"id" => story_id, "name" => "PR not found in github"}
|
44
|
+
pr = self.get( pulls_url(pr_id), HEADERS ).parsed_response
|
45
|
+
return {"id" => story_id, "name" => "PR not found in github"} if pr.nil? || pr["code"] == "error"
|
46
|
+
pr = extract_blocks pr
|
45
47
|
end
|
46
48
|
|
47
49
|
def self.get_stories(array_of_pr_ids)
|
@@ -53,6 +55,19 @@ module Github
|
|
53
55
|
stories
|
54
56
|
end
|
55
57
|
|
58
|
+
# used to extract blocks of information from a PR body
|
59
|
+
def self.extract_blocks(pr)
|
60
|
+
body = pr['body']
|
61
|
+
blocks = body.scan(/## ?((?:(?!##).)*)/m)
|
62
|
+
return if blocks.nil?
|
63
|
+
|
64
|
+
pr['blocks'] = []
|
65
|
+
blocks.each do |block|
|
66
|
+
pr['blocks'] << block.first unless block.first.empty?
|
67
|
+
end
|
68
|
+
pr
|
69
|
+
end
|
70
|
+
|
56
71
|
# formats the output of stories
|
57
72
|
def self.format(stories)
|
58
73
|
result_string = ""
|