# 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:
  ValidateNotStandardFileNames:
      actions:
        # helloworld action in NodeJS
        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!
      triggers:
        # trigger to activate helloworld action
        trigger-for-not-standard-file-names:
      rules:
        # rule associating trigger with helloworld action
        rule-for-not-standard-file-names:
          trigger: trigger-for-not-standard-file-names
          action: helloworld
