@@ -33,41 +33,48 @@ jobs:
33
33
"https://api.github.com/repos/${{ github.repository }}/pulls?state=all&per_page=100" \
34
34
-o pulls.json
35
35
36
- # Fetch linked issues for each pull request and save to timeline.json
36
+ # Fetch linked issues for each PR
37
37
- name : Fetch linked issues for each PR
38
38
env :
39
39
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
40
40
run : |
41
- jq -r '.[].number' pulls.json | while read pr ; do \
41
+ for pr_number in $( jq -r '.[].number' pulls.json) ; do \
42
42
curl -H "Authorization: token $GITHUB_TOKEN" \
43
43
-H "Accept: application/vnd.github.v3+json" \
44
- "https://api.github.com/repos/${{ github.repository }}/issues/$pr /timeline?per_page=100" \
45
- -o "timeline_$pr .json"; \
44
+ "https://api.github.com/repos/${{ github.repository }}/issues/$pr_number /timeline?per_page=100" \
45
+ -o "timeline_$pr_number .json"; \
46
46
done
47
47
48
48
# Generate pull requests CSV including linked issues
49
- - name : Generate pull requests CSV
49
+ - name : Generate pull requests CSV including linked issues
50
50
run : |
51
51
echo "PR Number,Title,Description,Author,State,Number of Commits,Number of Files Changed,Labels,Assignees,Reviewers,Linked Issues" > pull_requests.csv
52
- jq -r '.[] | select(.user.login != "dependabot[bot]") | [
53
- .number,
54
- .title,
55
- .body,
56
- .user.login,
57
- .state,
58
- .commits,
59
- .changed_files,
60
- (.labels | map(.name) | join(",")),
61
- (.assignees | map(.login) | join(",")),
62
- (.requested_reviewers | map(.login) | join(",")),
63
- (if .number as $pr | .body != null then
64
- (input_filename | sub("timeline_";"") | sub(".json";"")) as $pr_number |
65
- (try input | .[] | select(.event == "cross-referenced" and .source.issue) |
66
- .source.issue.number | tostring + ": " + .source.issue.title | join(", "))
67
- else
68
- ""
69
- end)
70
- ] | @csv' pulls.json timeline_*.json >> pull_requests.csv
52
+
53
+ for pr_number in $(jq -r '.[].number' pulls.json); do
54
+ timeline_file="timeline_$pr_number.json"
55
+
56
+ # Ensure the timeline file is not empty before processing
57
+ if [ -s "$timeline_file" ]; then
58
+ linked_issues=$(jq -r '[.[] | select(.event == "cross-referenced" and .source.issue) | .source.issue.number | tostring] | join(", ")' "$timeline_file")
59
+ else
60
+ linked_issues=""
61
+ fi
62
+
63
+ jq -r --arg linked_issues "$linked_issues" \
64
+ '.[] | select(.number == '$pr_number') | [
65
+ .number,
66
+ .title,
67
+ .body,
68
+ .user.login,
69
+ .state,
70
+ .commits,
71
+ .changed_files,
72
+ (.labels | map(.name) | join(",")),
73
+ (.assignees | map(.login) | join(",")),
74
+ (.requested_reviewers | map(.login) | join(",")),
75
+ $linked_issues
76
+ ] | @csv' pulls.json >> pull_requests.csv
77
+ done
71
78
72
79
# Check the content of pull_requests.csv for debugging
73
80
- name : Display pull_requests.csv content
85
92
env :
86
93
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
87
94
95
+
88
96
# #------------------------------------------##
89
97
# name: List Pull Requests and Output as CSV
90
98
0 commit comments