# 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:
    TestExplicitRuntimes:
        version: 1.0
        license: Apache-1.0
        actions:
            greetingnodejs6-with-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/greeting.js
                runtime: nodejs:6
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingnodejs8-with-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/greeting.js
                runtime: nodejs:8
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingphp-with-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.php
                runtime: php:7.1
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingpython-with-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.py
                runtime: python
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingpython2-with-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.py
                runtime: python:2
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingpython3-with-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.py
                runtime: python:3
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingswift311-with-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.swift
                runtime: swift:3.1.1
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            helloworldjava-with-explicit-runtime:
                function: src/hello.jar
                runtime: java
                main: Hello
            zipaction-with-explicit-runtime:
                function: src/helloworld
                runtime: nodejs:6
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
    TestImplicitRuntimes:
        actions:
            greetingnodejs-without-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/greeting.js
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingphp-without-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.php
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingpython-without-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.py
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingswift-without-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.swift
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            helloworldjava-without-explicit-runtime:
                function: src/hello.jar
                main: Hello
    TestInvalidExplicitRuntimes:
        actions:
            greetingnodejs-with-java-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/greeting.js
                runtime: java
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingnodejs-with-random-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/greeting.js
                runtime: random
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingphp-with-nodejs-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.php
                runtime: nodejs:6
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingphp-with-random-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.php
                runtime: random
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingpython-with-php-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.py
                runtime: php
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingpython-with-random-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.py
                runtime: random
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingswift-with-nodejs-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.swift
                runtime: nodejs:6
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            greetingswift-with-random-explicit-runtime:
                web-export: true
                version: 1.0
                function: src/hello.swift
                runtime: random
                inputs:
                    name: string
                    place: string
                outputs:
                    payload: string
            helloworldjava-with-swift-explicit-runtime:
                function: src/hello.jar
                main: Hello
                runtime: swift:3.1.1
            helloworldjava-with-random-explicit-runtime:
                function: src/hello.jar
                main: Hello
                runtime: random
