#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

packages:
    validate:
        actions:
            validate_singleline_params:
                function: actions/dump_params.js
                runtime: nodejs:default
                inputs:
                    # simple string
                    param_simple_string: foo
                    # simple integers
                    param_simple_integer_1: 1
                    param_simple_integer_2: 0
                    param_simple_integer_3: -1
                    param_simple_integer_4: 99999
                    param_simple_integer_5: -99999
                    # simple floats
                    param_simple_float_1: 1.1
                    param_simple_float_2: 0.0
                    param_simple_float_3: -1.1
                    # simple Environment variables
                    param_simple_env_var_1: $GOPATH
                    param_simple_env_var_2: ${GOPATH}
                    param_simple_env_var_3: ${}
                    param_simple_invalid_env_var: $DollarSignNotInEnv
                    param_simple_env_var_concat_1: ${GOPATH}/test
                    param_simple_env_var_concat_2: $GOPATH/test
                    param_simple_env_var_concat_3: ddd.ccc.${GOPATH}
                    # Empty (string)
                    param_simple_implied_empty:
                    param_simple_explicit_empty_1: ''
                    param_simple_explicit_empty_2: ""
                    # Type names (should default to a value for that type)
                    param_simple_type_string: string
                    param_simple_type_integer: integer
                    param_simple_type_float: float
                outputs:
                    payload:
                        type: string
                        description: parameter dump
