diff --git a/actions/actions.sh b/actions/actions.sh index 7bcc4df..9701e39 100755 --- a/actions/actions.sh +++ b/actions/actions.sh @@ -141,6 +141,7 @@ function test_actions() { if dpkg --compare-versions $version ge 9.0; then run actions_verify_feature logs-compression + run actions_verify_example schedule-noncancel fi done } diff --git a/actions/example-schedule-noncancel/.forgejo/workflows/schedule_continue.yml b/actions/example-schedule-noncancel/.forgejo/workflows/schedule_continue.yml new file mode 100644 index 0000000..8fe7177 --- /dev/null +++ b/actions/example-schedule-noncancel/.forgejo/workflows/schedule_continue.yml @@ -0,0 +1,14 @@ +on: + schedule: + - cron: "* * * * *" +jobs: + test: + runs-on: docker + container: + image: code.forgejo.org/oci/debian:bookworm + options: "--volume /srv/example:/srv/example" + steps: + - run: | + while ! [ -f /srv/example/schedule-noncancel/PUSHED ]; do + sleep 3 + done diff --git a/actions/example-schedule-noncancel/run.sh b/actions/example-schedule-noncancel/run.sh new file mode 100755 index 0000000..810e634 --- /dev/null +++ b/actions/example-schedule-noncancel/run.sh @@ -0,0 +1,92 @@ +repo=root/example-$example +# +# delete the repository +# +api=$url/api/v1 +if forgejo-curl.sh api_json -X GET $api/repos/root/example-$example; then + forgejo-curl.sh api_json -X DELETE $api/repos/root/example-$example +fi + +# +# push the repository +# +forgejo-test-helper.sh push_workflow actions/example-$example $url root example-$example setup-forgejo $token + +# Prevent test failure because the db is occupied +sqlite3 $DIR/forgejo-work-path/forgejo.db "pragma busy_timeout=20000" + +# +# get the run id of the workflow that just started +# +getScheduleRun() { + sqlite3 $DIR/forgejo-work-path/forgejo.db \ + "select action_run.id \ + from action_run \ + inner join action_schedule on action_run.schedule_id = action_schedule.id \ + inner join repository on action_schedule.repo_id = repository.id \ + where repository.name = 'example-schedule-noncancel' \ + order by action_run.created desc limit 1" +} + +run_id=$(getScheduleRun) +while [ -z $run_id ]; do + echo waiting 5... + sleep 5 + run_id=$(getScheduleRun) +done + +echo Schedule run id: $run_id + +# +# Wait for it to be started +# +checkStarted() { + sqlite3 $DIR/forgejo-work-path/forgejo.db \ + "select id \ + from action_run \ + where id = $run_id \ + and started is not null" +} + +started_check=$(checkStarted) +while [ -z $started_check ]; do + echo waiting 2... + sleep 2 + started_check=$(checkStarted) +done + +echo Run has started +echo Push to repo again + +# +# Push to the repo again +# +forgejo-test-helper.sh push_workflow actions/example-echo $url root example-$example setup-forgejo $token + +echo Signal to the workflow that the push has happened +mkdir -p /srv/example/schedule-noncancel +touch /srv/example/schedule-noncancel/PUSHED + +# +# Wait for the workflow to finish anyway +# +echo Wait for workflow to finish + +checkFinished() { + sqlite3 $DIR/forgejo-work-path/forgejo.db \ + "select status \ + from action_run \ + where id = $run_id \ + and (status != 6 and status != 5)" +} + +finished_status=$(checkFinished) +while [ -z $finished_status ]; do + echo waiting 5... + sleep 5 + finished_status=$(checkFinished) +done + +echo Workflow finished. + +test $finished_status = 1 diff --git a/actions/example-schedule-noncancel/teardown.sh b/actions/example-schedule-noncancel/teardown.sh new file mode 100644 index 0000000..ae9987a --- /dev/null +++ b/actions/example-schedule-noncancel/teardown.sh @@ -0,0 +1,4 @@ +# +# this will effectively discard any linger workflow so they do not interfere with other tests +# +forgejo-runner.sh reload