mirror of
https://code.forgejo.org/actions/setup-forgejo.git
synced 2024-12-26 06:42:17 -05:00
example-push-cancel: test that pushing to a branch cancels workflows
This commit is contained in:
parent
44400632c5
commit
fccbd1ce6b
4 changed files with 63 additions and 10 deletions
|
@ -5,8 +5,8 @@ set -ex
|
|||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
: ${LOOPS:=40}
|
||||
: ${LOOP_DELAY:=10}
|
||||
: ${LOOPS:=80}
|
||||
: ${LOOP_DELAY:=5}
|
||||
DIR=$(mktemp -d)
|
||||
|
||||
trap "rm -fr $DIR" EXIT
|
||||
|
@ -65,25 +65,48 @@ function check_status() {
|
|||
local url="$1"
|
||||
local repo="$2"
|
||||
local sha="$3"
|
||||
local expected_status="$4"
|
||||
local expected_description="$5"
|
||||
|
||||
local state=$(get_status $url $repo $sha | jq --raw-output .state)
|
||||
echo $state
|
||||
test "$state" != "" -a "$state" != "pending" -a "$state" != "running" -a "$state" != "null"
|
||||
get_status $url $repo $sha > /tmp/status.json
|
||||
local status="$(jq --raw-output .state < /tmp/status.json)"
|
||||
local description="$(jq --raw-output .statuses[0].description < /tmp/status.json)"
|
||||
if test "$status" = "$expected_status" && test -z "$expected_description" -o "$description" = "$expected_description"; then
|
||||
echo OK
|
||||
elif test "$status" = "failure" -o "$status" = "success"; then
|
||||
echo NOK
|
||||
else
|
||||
echo RETRY
|
||||
fi
|
||||
}
|
||||
|
||||
function wait_success() {
|
||||
local url="$1"
|
||||
local repo="$2"
|
||||
local sha="$3"
|
||||
wait_status success "$@"
|
||||
}
|
||||
|
||||
function wait_failure() {
|
||||
wait_status failure "$@"
|
||||
}
|
||||
|
||||
function wait_running() {
|
||||
wait_status pending "$@" "Has started running"
|
||||
}
|
||||
|
||||
function wait_status() {
|
||||
local status="$1"
|
||||
local url="$2"
|
||||
local repo="$3"
|
||||
local sha="$4"
|
||||
local description="$5"
|
||||
|
||||
for i in $(seq $LOOPS); do
|
||||
if check_status "$url" "$repo" "$sha"; then
|
||||
if test $(check_status "$url" "$repo" "$sha" "$status" "$description") != RETRY ; then
|
||||
break
|
||||
fi
|
||||
test "$FORGEJO_RUNNER_LOGS" && tail $FORGEJO_RUNNER_LOGS
|
||||
sleep $LOOP_DELAY
|
||||
done
|
||||
if ! test "$(check_status "$url" "$repo" "$sha")" = "success" ; then
|
||||
if test $(check_status "$url" "$repo" "$sha" "$status" "$description") != "OK" ; then
|
||||
get_status $url $repo $sha | jq .statuses
|
||||
test "$FORGEJO_RUNNER_LOGS" && cat $FORGEJO_RUNNER_LOGS
|
||||
return 1
|
||||
|
|
6
testdata/example-push-cancel/.forgejo/workflows/test.yml
vendored
Normal file
6
testdata/example-push-cancel/.forgejo/workflows/test.yml
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
on: [push]
|
||||
jobs:
|
||||
test:
|
||||
runs-on: docker
|
||||
steps:
|
||||
- run: sleep infinity
|
20
testdata/example-push-cancel/run.sh
vendored
Executable file
20
testdata/example-push-cancel/run.sh
vendored
Executable file
|
@ -0,0 +1,20 @@
|
|||
url=http://root:admin1234@$(cat forgejo-ip):3000
|
||||
token=$(cat forgejo-token)
|
||||
repo=root/example-$example
|
||||
#
|
||||
# push the repository
|
||||
#
|
||||
forgejo-test-helper.sh push_workflow testdata/example-$example $url root example-$example setup-forgejo $token
|
||||
sha=$(forgejo-test-helper.sh branch_tip $url $repo main)
|
||||
#
|
||||
# wait for the workflow (sleep infinity) to start running
|
||||
#
|
||||
forgejo-test-helper.sh wait_running $url $repo $sha
|
||||
#
|
||||
# push to the same branch
|
||||
#
|
||||
forgejo-test-helper.sh push_workflow testdata/example-$example $url root example-$example setup-forgejo $token
|
||||
#
|
||||
# wait for the workflow to be canceld as a result of the previous push
|
||||
#
|
||||
forgejo-test-helper.sh wait_failure $url $repo $sha 'Has been cancelled'
|
4
testdata/example-push-cancel/teardown.sh
vendored
Normal file
4
testdata/example-push-cancel/teardown.sh
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
#
|
||||
# this will effectively discard any linger workflow so they do not interfere with other tests
|
||||
#
|
||||
forgejo-runner.sh reload
|
Loading…
Reference in a new issue