File tree Expand file tree Collapse file tree 2 files changed +95
-0
lines changed
Expand file tree Collapse file tree 2 files changed +95
-0
lines changed Original file line number Diff line number Diff line change 1+ #! /bin/bash
2+
3+ set -e
4+
5+ err () {
6+ echo " [$( date +' %Y-%m-%dT%H:%M:%S%z' ) ]: $* " >&2
7+ }
8+
9+ # https://jqlang.org/manual/
10+
11+ JQ_TIMELINE_EVENTS=$( cat << 'END '
12+ [.[].data.repository.pullRequests.nodes]
13+ | flatten
14+ | sort_by(.url|split("/")|last|tonumber)
15+ END
16+ )
17+
18+ jq -s " ${JQ_TIMELINE_EVENTS} " prs_* .json > timeline_events.json
19+
20+ JQ_COUNT_EVENTS=$( cat << 'END '
21+ map({
22+ url: .url,
23+ events: (
24+ .timelineItems.nodes
25+ | group_by(.__typename)
26+ | map({(.[0].__typename): .|length})
27+ | add)
28+ })
29+ END
30+ )
31+ jq " ${JQ_COUNT_EVENTS} " timeline_events.json > count_events.json
32+
33+ JQ_ONLY_MERGE_QUEUE=$( cat << 'END '
34+ .[]
35+ | select(.events|has("RemovedFromMergeQueueEvent"))
36+ | select(.events|(has("MergedEvent")))
37+ END
38+ )
39+ jq " ${JQ_ONLY_MERGE_QUEUE} " count_events.json > only_merge_queue.json
40+
41+ JQ_OUTPUT=$( cat << 'END '
42+ [.url,.events.RemovedFromMergeQueueEvent]
43+ | @csv
44+ END
45+ )
46+ jq " ${JQ_OUTPUT} " only_merge_queue.json > output.csv
47+
48+ err " Wrote output to output.csv"
Original file line number Diff line number Diff line change 1+ #! /bin/bash
2+
3+ set -e
4+
5+ err () {
6+ echo " [$( date +' %Y-%m-%dT%H:%M:%S%z' ) ]: $* " >&2
7+ }
8+
9+ # - https://docs.github.com/en/graphql
10+ # - https://graphql.org/learn/queries/
11+ # - https://docs.github.com/en/graphql/guides/using-pagination-in-the-graphql-api
12+
13+ page_token=\"\"
14+
15+ for (( page_num = 1 ;; page_num++ )) do
16+ err " Requesting page $page_num "
17+ query_str=$( cat << EOF
18+ query {
19+ repository(owner:"google", name:"android-cuttlefish") {
20+ pullRequests(last: 100, before:${page_token} ) {
21+ pageInfo {
22+ endCursor
23+ startCursor
24+ hasNextPage
25+ hasPreviousPage
26+ }
27+ nodes {
28+ url
29+ timelineItems(first: 100) {
30+ nodes {
31+ __typename
32+ }
33+ }
34+ }
35+ }
36+ }
37+ }
38+ EOF
39+ )
40+ gh api graphql -f query=" ${query_str} " | jq > prs_$page_num .json
41+
42+ page_info=.data.repository.pullRequests.pageInfo
43+ if [[ $( jq $page_info .hasPreviousPage prs_$page_num .json) != " true" ]]; then
44+ exit 0;
45+ fi
46+ page_token=$( jq $page_info .startCursor prs_$page_num .json)
47+ done
You can’t perform that action at this time.
0 commit comments