mirror of
https://github.com/sudoxnym/fdroiddata.git
synced 2026-05-17 19:29:13 +00:00
tools/auto-merge.sh: improve
This commit is contained in:
parent
eef8b89ed7
commit
65caf2ffcd
2 changed files with 13 additions and 14 deletions
|
|
@ -7,26 +7,25 @@ cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")"
|
|||
mr=$1
|
||||
glab="glab --repo fdroid/fdroiddata"
|
||||
function retry {
|
||||
msg=$1
|
||||
shift
|
||||
while output=$("$@" 2>&1); [[ $? != 0 ]]; do
|
||||
echo $output | grep -q "Source branch does not exist" && exit 0
|
||||
echo $output | grep -q "this merge request has already been merged" && exit 0
|
||||
continue
|
||||
# Return 1 if there is an error needed to be handled
|
||||
[[ "$msg" ]] && echo "$output" | grep -qE "$msg" && echo "$output" && return 1
|
||||
done
|
||||
echo $output
|
||||
echo "$output"
|
||||
}
|
||||
|
||||
echo "Merging..."
|
||||
while status=$(glab api projects/:id/merge_requests/$mr | jq -r '.detailed_merge_status'); do
|
||||
while status=$(retry "" glab api projects/:id/merge_requests/$mr | jq -r '.detailed_merge_status'); do
|
||||
if [[ $status = "approvals_syncing" || $status = "checking" ]]; then
|
||||
continue
|
||||
elif [[ $status = "need_rebase" ]]; then
|
||||
echo "Rebasing..."
|
||||
retry $glab mr rebase $mr --skip-ci
|
||||
retry "Source branch does not exist|Cannot push to source branch" $glab mr rebase $mr --skip-ci || exit 0
|
||||
sleep 2
|
||||
elif [[ $status = "mergeable" ]]; then
|
||||
glab api --method PUT projects/:id/merge_requests/$mr/merge 2>&1 > /dev/null
|
||||
if [[ $? = 0 ]]; then
|
||||
break
|
||||
fi
|
||||
retry "HTTP" glab api --method PUT projects/:id/merge_requests/$mr/merge > /dev/null && break
|
||||
else
|
||||
echo "Failed to merge $mr: $status"
|
||||
exit 0
|
||||
|
|
@ -34,10 +33,10 @@ while status=$(glab api projects/:id/merge_requests/$mr | jq -r '.detailed_merge
|
|||
done
|
||||
|
||||
echo "Canceling pipelines..."
|
||||
merged_commit=$(retry $glab mr view $mr -F json | jq -r 'if .squash then .squash_commit_sha else .sha end')
|
||||
head_pipelines=$(retry $glab ci list -F json | jq -r 'map(select(.sha == "'$merged_commit'" and (.source == "push" or .source == "merge_request_event")) | .id)[]')
|
||||
merged_commit=$(retry "" $glab mr view $mr -F json | jq -r 'if .squash then .squash_commit_sha else .sha end')
|
||||
head_pipelines=$(retry "" $glab ci list -F json | jq -r 'map(select(.sha == "'$merged_commit'" and (.source == "push" or .source == "merge_request_event")) | .id)[]')
|
||||
for pipeline in $head_pipelines; do
|
||||
retry glab api --method POST --silent projects/:id/pipelines/$pipeline/cancel
|
||||
retry "" glab api --method POST --silent projects/:id/pipelines/$pipeline/cancel
|
||||
done
|
||||
|
||||
echo "Done!"
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ function retry {
|
|||
}
|
||||
|
||||
echo "Fecthing MR list..."
|
||||
mr_list=$(retry $glab mr list --author checkupdates-bot --per-page 100 -F json | jq -r 'map(.iid)[]')
|
||||
mr_list=$(retry $glab mr list --author checkupdates-bot --per-page 100 -F json | jq -r 'map(select(.labels | map(. != "waiting-for-upstream") | all) | .iid)[]')
|
||||
for mr in $mr_list; do
|
||||
mr_stat=$(retry $glab mr view $mr -F json)
|
||||
if [[ $(echo $mr_stat | jq -r '.labels | map(. == "fdroid-bot") | any') == "false" ]]; then
|
||||
|
|
|
|||
Loading…
Reference in a new issue