A step is nothing more than a simple program that can run as a "console" application. Our goal when building the workflow system was to enable developers to BYOL ( Bring your own language ). For some languages like Go and C#, we've created SDKs to simplify creating a step (more coming soon). However, these SDKs are just thin wrappers around what we call a step contract that allows the engines to invoke a step and retrieve it's.
Steps are contained within packages. A package is simply a "console" application that has multiple steps in it. We suggest trying to logically group your steps together within a single package. For instance, you may create a
string_utils package that has two steps in it,
contact. Again, this is simply one simple program that understands how accept a step request from the workflow engine and invoke a chunk of code to accomplish that task.
Depending if you are using an interpreted vs compiled language, you will need to provide a hint to the engine on how to invoke your step. If you are using a compiled language like Go or C, you will need to build your binary to support multiple architectures. For interpreted languages, you'll need to tell the engine what type of runtime is required ( ie. JDK9, Python etc.). This information is provided in the package.yaml file.
Lastly, you'll need to publish your step into our step repository. This will allow it to be used within workflows that run on our platform. Before you publish, you'll be able to test your step within workflows locally to make sure they are working as expected.