# 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:
    validate:
        actions:
            validate_singleline_params:
                function: actions/dump_params.js
                runtime: nodejs:6
                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
