actions: automerge: check when review happens after CI success

This commit is contained in:
Earl Warren 2024-05-27 23:08:39 +02:00
parent 7fd268b02f
commit fcb48eff5c
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
2 changed files with 85 additions and 6 deletions

View file

@ -5,32 +5,31 @@ trap "rm -fr $TMPDIR" EXIT
source $EXAMPLE_DIR/../../lib/lib.sh
api=$url/api/v1
repo=root/example-automerge
export d=/srv/example/automerge
PROOF='some proof'
function main() {
function reset_automerge_pr() {
#
# repository with a pull_request event workflow that always succeeds
#
mkdir -p $d
forgejo-curl.sh api_json -X DELETE $api/repos/$repo >&/dev/null || true
forgejo-test-helper.sh push_workflow actions/example-$example $url root example-$example setup-forgejo $token
local repo=root/example-automerge
forgejo-curl.sh api_json -X DELETE $api/repos/$repo/actions/variables/SCRIPT >&/dev/null || true
forgejo-curl.sh api_json -X POST --data-raw '{"value":"true"}' $api/repos/$repo/actions/variables/SCRIPT
(
cd $d
rm -fr example-automerge
git clone $url/$repo
cd example-automerge
git checkout -b other
git config user.email root@example.com
git config user.name username
touch file-unique-to-the-pr-branch
echo other $PROOF >>README
echo other >>README
git add .
git commit -m 'other change'
git push --force -u origin other
@ -51,6 +50,11 @@ function main() {
echo pull request already merged although it should not be
return 1
fi
}
function verify_automerge_on_status_success() {
reset_automerge_pr
local pr=$(jq -r .number <$TMPDIR/pr.json)
#
# run the workflow
#
@ -66,4 +70,39 @@ function main() {
fi
}
function verify_automerge_on_reviewer_approval() {
reset_automerge_pr
local pr=$(jq -r .number <$TMPDIR/pr.json)
#
# require at least one review for a PR to be merged
#
api_branch_protect $api $repo main
#
# run the workflow
#
forgejo-runner.sh run
local sha=$(api_branch_tip $api $repo other)
api_pr_wait_success $api $repo $sha
#
# approve the PR
#
local username=user1
api_user_create $api $username $username@example.com
api_user_make_admin $api $username
user_login $username
DOT=$API_TMPDIR/$username api_pr_approve $api $repo $pr
#
# verify the PR was automerged
#
if ! retry api_pr_is_merged $api $repo $pr; then
echo pull request is not automerged as expected
return 1
fi
}
function main() {
verify_automerge_on_status_success
verify_automerge_on_reviewer_approval
}
main