upsert_branch && upsert_pr

This commit is contained in:
Earl Warren 2023-10-12 19:13:07 +02:00
parent 71281446ea
commit ec542726c8
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
6 changed files with 72 additions and 6 deletions

View file

@ -1,7 +1,10 @@
#!/bin/bash
# SPDX-License-Identifier: MIT
SELF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
set -e
SELF=${BASH_SOURCE[0]}
SELF_DIR="$( cd "$( dirname "$SELF" )" && pwd )"
source $SELF_DIR/cascading-pr-lib.sh
trap "rm -fr $TMPDIR" EXIT
@ -21,12 +24,42 @@ function repo_curl() {
DOT=$TMPDIR/$repo forgejo-curl.sh "$@"
}
function run() {
function upsert_branch() {
local repo_api=${options[destination_url]}/api/v1/repos/${options[destination_repo]}
if forgejo-curl.sh api_json $repo_api/branches/${options[destination_head]} >& /dev/null ; then
log_info "branch ${options[destination_head]} already exists"
return
fi
forgejo-curl.sh api_json --data-raw '{"new_branch_name":"'${options[destination_head]}'","old_branch_name":"'${options[destination_base]}'"}' $repo_api/branches
log_info "branch ${options[destination_head]} created"
}
function upsert_pr() {
local repo_api=${options[destination_url]}/api/v1/repos/${options[destination_repo]}
local title="cascading-pr from ${options[origin_url]}/${options[origin_repo]}/pulls/${options[origin_pr]}"
forgejo-curl.sh api --get --data state=open --data type=pulls --data-urlencode q="$title" $repo_api/issues | jq --raw-output .[0] > $TMPDIR/pr.json
url=$(jq --raw-output .url < $TMPDIR/pr.json)
if test "$url" != "null"; then
log_info "PR already exists $url"
return
fi
forgejo-curl.sh api_json --data-raw '{"title":"'"$title"'","base":"'${options[destination_base]}'","head":"'${options[destination_head]}'"}' $repo_api/pulls > $TMPDIR/pr.json
url=$(jq --raw-output .url < $TMPDIR/pr.json)
log_info "PR created $url"
}
function finalize_options() {
options[origin_host_port]=$(host_port ${options[origin_url]})
options[destination_host_port]=$(host_port ${options[destination_url]})
options[destination_base]=${options[destination_branch]}
: ${options[prefix]:=${options[origin_repo]}}
options[destination_head]=${options[prefix]}-${options[origin_pr]}
}
function run() {
repo_login ${options[destination_repo]}
upsert_branch
upsert_pr
repo_login ${options[origin_repo]}
# open a PR on destination
@ -62,6 +95,11 @@ function main() {
options[origin_token]=$1
shift
;;
--origin-pr)
shift
options[origin_pr]=$1
shift
;;
--destination-url)
shift
options[destination_url]=$1
@ -93,6 +131,7 @@ function main() {
shift
;;
*)
finalize_options
"${1:-run}"
return 0
;;
@ -100,4 +139,8 @@ function main() {
done
}
${MAIN:-main} "${@}"
if echo "${@}" | grep --quiet -e '--debug' ; then
main "${@}"
else
stash_debug "${@}"
fi