actions: add an example for workflow-dispatch

/repos/{owner}/{repo}/actions/workflows/{workflowname}/dispatches

* fails if the required inputs are not provided
* sets defaults to inputs that are not provided

The type of inputs are only used for building the web UI interface,
not for validation. All values are strings.
This commit is contained in:
Earl Warren 2024-07-04 20:15:32 +02:00
parent 64489247aa
commit 05a341e201
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
4 changed files with 126 additions and 0 deletions

View file

@ -0,0 +1,62 @@
TMPDIR=$(mktemp -d)
trap "rm -fr $TMPDIR" EXIT
source $EXAMPLE_DIR/../../lib/lib.sh
export d=/srv/example/tag
context=/srv/example/workflow-dispatch/contexts/workflow_dispatch/github
api=$url/api/v1
repo=root/example-$example
function context_wait() {
if ! forgejo.sh retry test -f $context ; then
cat "$FORGEJO_RUNNER_LOGS"
false
fi
}
function verify_required() {
local actual=$(forgejo-curl.sh api_json -w '%{http_code}' --data '{"ref":"main","inputs":{}}' $api/repos/$repo/actions/workflows/test.yml/dispatches)
local expected=400
if test "$actual" != $expected ; then
log_info "dispatch is expected to fail with status $expected because of string2 is a required value but got status $actual instead"
return 1
fi
}
function verify_inputs() {
local inputs='{"string2":"value2"}'
forgejo-curl.sh api_json --data '{"ref":"main","inputs":'$inputs'}' $api/repos/$repo/actions/workflows/test.yml/dispatches
cat > $TMPDIR/expected <<'EOF'
{
"boolean_default_false": "false",
"boolean_default_true": "true",
"logLevel": "warning",
"number1_default": "100",
"string1_default": "Hello world",
"string2": "value2"
}
EOF
}
function run_tests() {
verify_required
npm --silent install json-diff
verify_inputs
context_wait
node_modules/.bin/json-diff <(jq .event.inputs < $context) $TMPDIR/expected
}
function main() {
mkdir -p $d
forgejo-test-helper.sh push_workflow actions/example-$example $url root example-$example setup-forgejo $token
run_tests
test "workflow_dispatch" = "$(jq -r .event_name < $context)"
}
main