This repository contains the Ballerina runtime for the Apache OpenWhisk serverless platform.
The following prerequisites are needed to try this out:
Create a file hello.bal for your Ballerina function with the following code:
import ballerina/io; public function main(json jsonInput) returns json { io:println(jsonInput); json output = { "response": "hello-world"}; return output; }
The Ballerina file must include a function called main. The absence of main causes the Ballerina compiler to omit generation of the executable. You may have more than one entry point in your source file however (e.g., a main and a run) and use the standard OpenWhisk mechanism to specify other functions to run on entry (e.g., --main <other function name> when using the wsk action create CLI command). The function must accept a JSON object and return a JSON object to be compliant with the OpenWhisk action interface.
Run the Ballerina compiler to build your function.
ballerina build hello.bal
This generates an executable hello.balx. You will use this binary to create the OpenWhisk action.
Use the OpenWhisk wsk CLI to create your Ballerina action.
wsk action create hello hello.balx --docker openwhisk/action-ballerina-v0.990.2
Now you're ready to invoke the action:
wsk action invoke hello --result
{ "response": "hello-world" }
You can learn more about working with OpenWhisk Actions here.
To build the Ballerina runtime, you need an OpenWhisk snapshot release which you can install as follows:
pushd $OPENWHISK_HOME ./gradlew install podd $OPENWHISK_HOME
where $OPENWHISK_HOME is an environment variable that points to your OpenWhisk directory.
The Ballerina runtime is built with the Gradle wrapper gradlew.
./gradlew distDocker
You can also use gradlew to run all the unit tests.
./gradlew :tests:test
Or to run a specific test.
./gradlew :tests:test --tests *ActionContainerTests*
This project can be imported into IntelliJ for development and testing. Import the project as a Gradle project, and make sure your working directory is the root directory for this repository.