# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.

packages:
    packageActionAnnotations:
        actions:
            helloworld:
                function: actions/hello.js
                runtime: nodejs:6
                inputs:
                    name:
                        type: string
                        description: name of a person
                    place:
                        type: string
                        description: location of a person
                outputs:
                    payload:
                        type: string
                        description: a simple greeting message, Hello World!
                annotations:
                    action_annotation_1: this is annotation 1
                    action_annotation_2: this is annotation 2
                    action_annotation_3: this is annotation 3
                    action_annotation_4: this is annotation 4
    packageActionAnnotationsFromDeployment:
        actions:
            helloworld:
                function: actions/hello.js
                runtime: nodejs:6
                inputs:
                    name:
                        type: string
                        description: name of a person
                    place:
                        type: string
                        description: location of a person
                outputs:
                    payload:
                        type: string
                        description: a simple greeting message, Hello World!
                annotations:
                    action_annotation_1: this is annotation 1
                    action_annotation_2: this is annotation 2
                    action_annotation_3: this is annotation 3
                    action_annotation_4: this is annotation 4
    packageActionAnnotationsWithWebAction:
        actions:
            helloworld:
                function: actions/hello.js
                runtime: nodejs:6
                inputs:
                    name:
                        type: string
                        description: name of a person
                    place:
                        type: string
                        description: location of a person
                outputs:
                    payload:
                        type: string
                        description: a simple greeting message, Hello World!
                annotations:
                    action_annotation_1: this is annotation 1
                    action_annotation_2: this is annotation 2
                    action_annotation_3: this is annotation 3
                    action_annotation_4: this is annotation 4
                    web-export: true
