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

@ -118,5 +118,11 @@ function test_actions() {
run actions_verify_example $example run actions_verify_example $example
done done
fi fi
if dpkg --compare-versions $version ge 8.0 ; then
for example in workflow-dispatch ; do
run actions_verify_example $example
done
fi
done done
} }

View file

@ -0,0 +1,57 @@
on:
workflow_dispatch:
inputs:
logLevel:
description: 'Log Level'
required: true
default: 'warning'
type: choice
options:
- info
- warning
- debug
tags:
description: 'Test scenario tags'
required: false
type: boolean
boolean_default_true:
description: 'Test scenario tags'
required: true
type: boolean
default: true
boolean_default_false:
description: 'Test scenario tags'
required: false
type: boolean
default: false
number1_default:
description: 'Number w. default'
default: '100'
type: number
number2:
description: 'Number w/o. default'
type: number
string1_default:
description: 'String w. default'
default: 'Hello world'
type: string
string2:
description: 'String w/o. default'
required: true
type: string
jobs:
test:
runs-on: docker
container:
image: code.forgejo.org/oci/debian:bookworm
options: "--volume /srv/example:/srv/example"
steps:
- name: save and display context
run: |
d=/srv/example/workflow-dispatch/contexts/$GITHUB_EVENT_NAME
mkdir -p $d
tee $d/github <<'EOF'
${{ toJSON(github) }}
EOF

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

View file

@ -0,0 +1 @@
mkdir -p /srv/example/workflow-dispatch