mirror of
https://code.forgejo.org/actions/setup-forgejo.git
synced 2024-11-24 00:21:00 -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
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
: ${LOOPS:=40}
|
: ${LOOPS:=80}
|
||||||
: ${LOOP_DELAY:=10}
|
: ${LOOP_DELAY:=5}
|
||||||
DIR=$(mktemp -d)
|
DIR=$(mktemp -d)
|
||||||
|
|
||||||
trap "rm -fr $DIR" EXIT
|
trap "rm -fr $DIR" EXIT
|
||||||
|
@ -65,25 +65,48 @@ function check_status() {
|
||||||
local url="$1"
|
local url="$1"
|
||||||
local repo="$2"
|
local repo="$2"
|
||||||
local sha="$3"
|
local sha="$3"
|
||||||
|
local expected_status="$4"
|
||||||
|
local expected_description="$5"
|
||||||
|
|
||||||
local state=$(get_status $url $repo $sha | jq --raw-output .state)
|
get_status $url $repo $sha > /tmp/status.json
|
||||||
echo $state
|
local status="$(jq --raw-output .state < /tmp/status.json)"
|
||||||
test "$state" != "" -a "$state" != "pending" -a "$state" != "running" -a "$state" != "null"
|
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() {
|
function wait_success() {
|
||||||
local url="$1"
|
wait_status success "$@"
|
||||||
local repo="$2"
|
}
|
||||||
local sha="$3"
|
|
||||||
|
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
|
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
|
break
|
||||||
fi
|
fi
|
||||||
test "$FORGEJO_RUNNER_LOGS" && tail $FORGEJO_RUNNER_LOGS
|
test "$FORGEJO_RUNNER_LOGS" && tail $FORGEJO_RUNNER_LOGS
|
||||||
sleep $LOOP_DELAY
|
sleep $LOOP_DELAY
|
||||||
done
|
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
|
get_status $url $repo $sha | jq .statuses
|
||||||
test "$FORGEJO_RUNNER_LOGS" && cat $FORGEJO_RUNNER_LOGS
|
test "$FORGEJO_RUNNER_LOGS" && cat $FORGEJO_RUNNER_LOGS
|
||||||
return 1
|
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