main
 1#!/usr/bin/env bash
 2# Approve things
 3
 4set -eufo pipefail
 5
 6DEFAULT_PROJECTS="tektoncd/pipeline tektoncd/plumbing tektoncd/cli tektoncd/mcp-server"
 7
 8PROW=0
 9MERGE=0
10FORCE=0
11COMMENT=""
12
13while getopts "hfpmc:" o; do
14    case "${o}" in
15	c)
16	    s=${OPTARG}
17	    COMMENT="$s"
18	    ;;
19	p)
20	    PROW=1
21	    ;;
22	m)
23	    MERGE=1
24	    ;;
25	f)
26	    FORCE=1
27	    ;;
28	h)
29	    help
30	    exit 0
31	    ;;
32	*)
33	    echo "Invalid option"; help; exit 1;
34	    ;;
35    esac
36done
37shift $((OPTIND-1))
38
39PROJECTS=${PROJECTS:=$DEFAULT_PROJECTS}
40
41for project in $PROJECTS; do
42    TO_APPROVE=$(gh pr --repo="${project}" list --json "number,title" | jq -r '.[] | ((.number | tostring) + " " + (.title))' | fzf --header "${project}" --multi --ansi --preview "gh pr checks --repo=${project} {1} --json 'name,state' | jq -r 'map(.state + \": \" + .name) | .[]'" | awk 'OFS="\t" {print $1}')
43
44    for pr in $TO_APPROVE; do
45	if [[ $PROW -eq 1 ]]; then
46	    # if prow, we just review
47	    gh pr review --repo="${project}" "$pr" --approve --body "/lgtm \
48$COMMENT"
49	else
50	    gh pr review --repo="${project}" "$pr" --approve --body "$COMMENT"
51	fi
52	if [[ $MERGE -eq 1 ]]; then
53	    MERGE_ARGS="--rebase --delete-branch"
54	    if [[ $FORCE -eq 1 ]]; then
55		MERGE_ARGS="$MERGE_ARGS --admin"
56	    else
57		MERGE_ARGS="$MERGE_ARGS --auto"
58	    fi
59	    gh pr merge --repo="${project}" "$MERGE_ARGS" --body "$COMMENT" "$pr"
60	fi
61    done
62done
63
64function help() {
65    echo "HEEELLPPP"
66}