From 635d295c9c7fa08f55ba6ff1b6a36cd6d6b282f2 Mon Sep 17 00:00:00 2001 From: n2020h <72112832+n2020h@users.noreply.github.com> Date: Sun, 25 Aug 2024 22:55:54 -0400 Subject: [PATCH] Adding linked issues.yml --- .github/workflows/pull_requests_to_csv.yml | 77 +++++++++++----------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/.github/workflows/pull_requests_to_csv.yml b/.github/workflows/pull_requests_to_csv.yml index 14c7da8..99e8554 100644 --- a/.github/workflows/pull_requests_to_csv.yml +++ b/.github/workflows/pull_requests_to_csv.yml @@ -77,46 +77,45 @@ jobs: # $linked_issues # ] | @csv' pulls.json >> pull_requests.csv # done - - # Generate pull requests CSV including linked issues and has_issues field - - name: Generate pull requests CSV including linked issues and has_issues - run: | - echo "PR Number,Title,Description,Author,State,Number of Commits,Number of Files Changed,Labels,Assignees,Reviewers,Linked Issues,Has Issues" > pull_requests.csv - - for pr_number in $(jq -r '.[].number' pulls.json); do - timeline_file="timeline_$pr_number.json" - - # Extract linked issues from timeline, body, reactions, and issue_url - linked_issues_timeline=$(jq -r '[.[] | select(.event == "cross-referenced" and .source.issue) | .source.issue.url | capture("/(?\\d+)$").issue_number] | join(", ")' "$timeline_file") - - linked_issues_body=$(jq -r '.body | capture_all("#(?\\d+)"; "g") | join(",")' pulls.json) + - name: Generate pull requests CSV including linked issues and has_issues + run: | + echo "PR Number,Title,Description,Author,State,Number of Commits,Number of Files Changed,Labels,Assignees,Reviewers,Linked Issues,Has Issues" > pull_requests.csv - linked_issues_reactions=$(jq -r '.reactions.url | capture("/issues/(?\\d+)/reactions").issue_number' pulls.json) - - linked_issues_direct=$(jq -r '.issue_url | capture("/issues/(?\\d+)$").issue_number' pulls.json) - - # Combine all extracted issue numbers - linked_issues=$(echo "$linked_issues_timeline, $linked_issues_body, $linked_issues_reactions, $linked_issues_direct" | sed 's/^, //; s/, $//; s/,,/,/g') - - # Extract has_issues field - has_issues=$(jq -r '.repository.has_issues' pulls.json) - - jq -r --arg linked_issues "$linked_issues" --arg has_issues "$has_issues" \ - '.[] | select(.number == '$pr_number') | [ - .number, - .title, - .body, - .user.login, - .state, - .commits, - .changed_files, - (.labels | map(.name) | join(",")), - (.assignees | map(.login) | join(",")), - (.requested_reviewers | map(.login) | join(",")), - $linked_issues, - $has_issues - ] | @csv' pulls.json >> pull_requests.csv - done + for pr_number in $(jq -r '.[].number' pulls.json); do + timeline_file="timeline_$pr_number.json" + + if [ -f "$timeline_file" ]; then + linked_issues_timeline=$(jq -r '[.[] | select(.event == "cross-referenced" and .source.issue) | .source.issue.url | capture("/(?\\d+)$").issue_number] | join(", ")' "$timeline_file") + else + linked_issues_timeline="" + fi + + linked_issues_body=$(jq -r '.[] | select(.number == '$pr_number') | .body | capture_all("#(?\\d+)"; "g") | join(",")' pulls.json || echo "") + + linked_issues_reactions=$(jq -r '.[] | select(.number == '$pr_number') | .reactions.url | capture("/issues/(?\\d+)/reactions").issue_number' pulls.json || echo "") + + linked_issues_direct=$(jq -r '.[] | select(.number == '$pr_number') | .issue_url | capture("/issues/(?\\d+)$").issue_number' pulls.json || echo "") + + linked_issues=$(echo "$linked_issues_timeline, $linked_issues_body, $linked_issues_reactions, $linked_issues_direct" | sed 's/^, //; s/, $//; s/,,/,/g') + + has_issues=$(jq -r '.repository.has_issues' pulls.json || echo "false") + + jq -r --arg linked_issues "$linked_issues" --arg has_issues "$has_issues" \ + '.[] | select(.number == '$pr_number') | [ + .number, + .title, + .body, + .user.login, + .state, + .commits, + .changed_files, + (.labels | map(.name) | join(",")), + (.assignees | map(.login) | join(",")), + (.requested_reviewers | map(.login) | join(",")), + $linked_issues, + $has_issues + ] | @csv' pulls.json >> pull_requests.csv + done # Check the content of pull_requests.csv for debugging - name: Display pull_requests.csv content