[GitHub] [incubator-openwhisk] marc-schwind commented on a change in pull request #4446: Actionloop docs
marc-schwind commented on a change in pull request #4446: Actionloop docs URL: https://github.com/apache/incubator-openwhisk/pull/4446#discussion_r277739392 ## File path: docs/actions-actionloop.md ## @@ -0,0 +1,776 @@ + + +# Developing a new Runtime with the ActionLoop proxy + +The [runtime specification](actions-new.md) defines the expected behavior of a runtime. You can implement a runtime from scratch just following the spec. + +However, the fastest way to develop a new runtime is reusing the *ActionLoop* proxy, that already implements the specification and provides just a few hooks to get a fully functional (and *fast*) runtime in a few hours. + +## What is the ActionLoop proxy + +ActionLoop proxy is a runtime "engine", written in Go, originally developed precisely to support the Go language. However it was written in a pretty generic way, and it has been then adopted also to implement runtimes for Swift, PHP, Python, Rust, Java, Ruby and Crystal. It was developed with compiled languages in minds but works well also with scripting languages. Review comment: `in mind` instead of `in minds` How about: `Even though it was developed with compiled languages in mind it works equally well with scripting languages.` This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] [incubator-openwhisk] marc-schwind commented on a change in pull request #4446: Actionloop docs
marc-schwind commented on a change in pull request #4446: Actionloop docs URL: https://github.com/apache/incubator-openwhisk/pull/4446#discussion_r277737375 ## File path: docs/actions-actionloop.md ## @@ -0,0 +1,776 @@ + + +# Developing a new Runtime with the ActionLoop proxy + +The [runtime specification](actions-new.md) defines the expected behavior of a runtime. You can implement a runtime from scratch just following the spec. + +However, the fastest way to develop a new runtime is reusing the *ActionLoop* proxy, that already implements the specification and provides just a few hooks to get a fully functional (and *fast*) runtime in a few hours. + +## What is the ActionLoop proxy + +ActionLoop proxy is a runtime "engine", written in Go, originally developed precisely to support the Go language. However it was written in a pretty generic way, and it has been then adopted also to implement runtimes for Swift, PHP, Python, Rust, Java, Ruby and Crystal. It was developed with compiled languages in minds but works well also with scripting languages. Review comment: Just my 2cents on some details when flying by... The sentence should start with an article as you are talking about "The thing" --> **The** ActionLoop proxy I believe 'precisely' isn't describing well what meant. How about `specifically` instead: [...] originally developed ~~precisely~~ specifically to support [...] This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] [incubator-openwhisk] marc-schwind commented on a change in pull request #4446: Actionloop docs
marc-schwind commented on a change in pull request #4446: Actionloop docs URL: https://github.com/apache/incubator-openwhisk/pull/4446#discussion_r277724914 ## File path: docs/actions-actionloop.md ## @@ -0,0 +1,776 @@ + + +# Developing a new Runtime with the ActionLoop proxy + +The [runtime specification](actions-new.md) defines the expected behavior of a runtime. You can implement a runtime from scratch just following the spec. + +However, the fastest way to develop a new runtime is reusing the *ActionLoop* proxy, that already implements the specification and provides just a few hooks to get a fully functional (and *fast*) runtime in a few hours. + +## What is the ActionLoop proxy + +ActionLoop proxy is a runtime "engine", written in Go, originally developed precisely to support the Go language. However it was written in a pretty generic way, and it has been then adopted also to implement runtimes for Swift, PHP, Python, Rust, Java, Ruby and Crystal. It was developed with compiled languages in minds but works well also with scripting languages. + +Using it, you can develop a new runtime in a fraction of the time needed for a full-fledged runtime, since you have only to write a command line protocol and not a fully featured web server, with an amount of corner case to take care. + +Also, you will likely get a pretty fast runtime, since it is currently the most rapid. It was also adopted to improve performances of existing runtimes, that gained from factor 2x to a factor 20x for languages like Python, Ruby, PHP, and Java. + +ActionLoop also supports "precompilation". You can take a raw image and use the docker image to perform the transformation in action. You will get a zip file that you can use as an action that is very fast to start because it contains only the binaries and not the sources. + +So it is likely are using ActionLoop a better bet than implementing the specification from scratch. If you are convinced and want to use it, read on: this page is a tutorial on how to write an ActionLoop runtime, using Ruby as an example. + +## How to write a new runtime with ActionLoop + +The development procedure for ActionLoop requires the following steps: + +* building a docker image containing your target language compiler and the ActionLoop runtime +* writing a simple line-oriented protocol in your target language (converting a python example) +* write (or just adapt the existing) a compilation script for your target language +* write some mandatory tests for your language + +To facilitate the process, there is an `actionloop-starter-kit` in the devtools repository, that implements a fully working runtime for Python. It is a stripped down version of the real Python runtime (removing some advanced details of the real one). + +So you can implement your runtime translating some Python code in your target language. This tutorial shows step by step how to do it writing the Ruby runtime. This code is also used in the real Ruby runtime. + +Using the starter kit, the process becomes: + +- checking out the `actionloop-starter-kit` from the `incubator-openwhisk-devtools` repository +- editing the `Dockerfile` to create the target environment for your language +- rewrite the `launcher.py` in your language +- edit the `compile` script to compile your action in your target language +- write the mandatory tests for your language, adapting the `ActionLoopPythonBasicTests.scala` + +Since we need to show the code you have to translate in some language, we picked Python as it is one of the more readable languages, the closer to be real-world `pseudo-code`. + +You need to know a bit of Python to understand the sample `launcher.py`, just enough to rewrite it in your target language. + +You may need to write some real Python coding to edit the `compile` script, but basic knowledge is enough. + +Finally, you do not need to know Scala, even if the tests are embedded in a Scala test, as all you need is to embed your tests in the code. +## Notation + +In this tutorial we have either terminal transcripts to show what you need to do at the terminal, or "diffs" to show changes to existing files. + +In terminal transcripts, the prefix `$` means commands you have to type at the terminal; the rest are comments (prefixed with `#`) or sample output you should check to verify everything is ok. Generally in a transcript I do not put verbatim output of the terminal as it is generally irrelevant. Review comment: > This also? `verbatim` -> `the verbatim`? IMHO the article 'the' is not needed here. Yet the whole sentence reads a bit clunky. The term 'generally' is used twice in the same sentence. How about: `As verbatim terminal output is mostly/most often irrelevant it is omitted in the transcript` This is an automated message from the Apache Git Service. To respond to the message, please log
[GitHub] [incubator-openwhisk] marc-schwind commented on a change in pull request #4446: Actionloop docs
marc-schwind commented on a change in pull request #4446: Actionloop docs URL: https://github.com/apache/incubator-openwhisk/pull/4446#discussion_r277724914 ## File path: docs/actions-actionloop.md ## @@ -0,0 +1,776 @@ + + +# Developing a new Runtime with the ActionLoop proxy + +The [runtime specification](actions-new.md) defines the expected behavior of a runtime. You can implement a runtime from scratch just following the spec. + +However, the fastest way to develop a new runtime is reusing the *ActionLoop* proxy, that already implements the specification and provides just a few hooks to get a fully functional (and *fast*) runtime in a few hours. + +## What is the ActionLoop proxy + +ActionLoop proxy is a runtime "engine", written in Go, originally developed precisely to support the Go language. However it was written in a pretty generic way, and it has been then adopted also to implement runtimes for Swift, PHP, Python, Rust, Java, Ruby and Crystal. It was developed with compiled languages in minds but works well also with scripting languages. + +Using it, you can develop a new runtime in a fraction of the time needed for a full-fledged runtime, since you have only to write a command line protocol and not a fully featured web server, with an amount of corner case to take care. + +Also, you will likely get a pretty fast runtime, since it is currently the most rapid. It was also adopted to improve performances of existing runtimes, that gained from factor 2x to a factor 20x for languages like Python, Ruby, PHP, and Java. + +ActionLoop also supports "precompilation". You can take a raw image and use the docker image to perform the transformation in action. You will get a zip file that you can use as an action that is very fast to start because it contains only the binaries and not the sources. + +So it is likely are using ActionLoop a better bet than implementing the specification from scratch. If you are convinced and want to use it, read on: this page is a tutorial on how to write an ActionLoop runtime, using Ruby as an example. + +## How to write a new runtime with ActionLoop + +The development procedure for ActionLoop requires the following steps: + +* building a docker image containing your target language compiler and the ActionLoop runtime +* writing a simple line-oriented protocol in your target language (converting a python example) +* write (or just adapt the existing) a compilation script for your target language +* write some mandatory tests for your language + +To facilitate the process, there is an `actionloop-starter-kit` in the devtools repository, that implements a fully working runtime for Python. It is a stripped down version of the real Python runtime (removing some advanced details of the real one). + +So you can implement your runtime translating some Python code in your target language. This tutorial shows step by step how to do it writing the Ruby runtime. This code is also used in the real Ruby runtime. + +Using the starter kit, the process becomes: + +- checking out the `actionloop-starter-kit` from the `incubator-openwhisk-devtools` repository +- editing the `Dockerfile` to create the target environment for your language +- rewrite the `launcher.py` in your language +- edit the `compile` script to compile your action in your target language +- write the mandatory tests for your language, adapting the `ActionLoopPythonBasicTests.scala` + +Since we need to show the code you have to translate in some language, we picked Python as it is one of the more readable languages, the closer to be real-world `pseudo-code`. + +You need to know a bit of Python to understand the sample `launcher.py`, just enough to rewrite it in your target language. + +You may need to write some real Python coding to edit the `compile` script, but basic knowledge is enough. + +Finally, you do not need to know Scala, even if the tests are embedded in a Scala test, as all you need is to embed your tests in the code. +## Notation + +In this tutorial we have either terminal transcripts to show what you need to do at the terminal, or "diffs" to show changes to existing files. + +In terminal transcripts, the prefix `$` means commands you have to type at the terminal; the rest are comments (prefixed with `#`) or sample output you should check to verify everything is ok. Generally in a transcript I do not put verbatim output of the terminal as it is generally irrelevant. Review comment: > This also? `verbatim` -> `the verbatim`? IMHO the article 'the' is not needed here. Yet the whole sentence reads a bit clunky. The term 'generally' is used twice in the same sentence. How about: "As verbatim terminal output is mostly/most often irrelevant it is omitted in the transcript" This is an automated message from the Apache Git Service. To respond to the message, please log
[GitHub] [incubator-openwhisk] marc-schwind commented on a change in pull request #4446: Actionloop docs
marc-schwind commented on a change in pull request #4446: Actionloop docs URL: https://github.com/apache/incubator-openwhisk/pull/4446#discussion_r277724914 ## File path: docs/actions-actionloop.md ## @@ -0,0 +1,776 @@ + + +# Developing a new Runtime with the ActionLoop proxy + +The [runtime specification](actions-new.md) defines the expected behavior of a runtime. You can implement a runtime from scratch just following the spec. + +However, the fastest way to develop a new runtime is reusing the *ActionLoop* proxy, that already implements the specification and provides just a few hooks to get a fully functional (and *fast*) runtime in a few hours. + +## What is the ActionLoop proxy + +ActionLoop proxy is a runtime "engine", written in Go, originally developed precisely to support the Go language. However it was written in a pretty generic way, and it has been then adopted also to implement runtimes for Swift, PHP, Python, Rust, Java, Ruby and Crystal. It was developed with compiled languages in minds but works well also with scripting languages. + +Using it, you can develop a new runtime in a fraction of the time needed for a full-fledged runtime, since you have only to write a command line protocol and not a fully featured web server, with an amount of corner case to take care. + +Also, you will likely get a pretty fast runtime, since it is currently the most rapid. It was also adopted to improve performances of existing runtimes, that gained from factor 2x to a factor 20x for languages like Python, Ruby, PHP, and Java. + +ActionLoop also supports "precompilation". You can take a raw image and use the docker image to perform the transformation in action. You will get a zip file that you can use as an action that is very fast to start because it contains only the binaries and not the sources. + +So it is likely are using ActionLoop a better bet than implementing the specification from scratch. If you are convinced and want to use it, read on: this page is a tutorial on how to write an ActionLoop runtime, using Ruby as an example. + +## How to write a new runtime with ActionLoop + +The development procedure for ActionLoop requires the following steps: + +* building a docker image containing your target language compiler and the ActionLoop runtime +* writing a simple line-oriented protocol in your target language (converting a python example) +* write (or just adapt the existing) a compilation script for your target language +* write some mandatory tests for your language + +To facilitate the process, there is an `actionloop-starter-kit` in the devtools repository, that implements a fully working runtime for Python. It is a stripped down version of the real Python runtime (removing some advanced details of the real one). + +So you can implement your runtime translating some Python code in your target language. This tutorial shows step by step how to do it writing the Ruby runtime. This code is also used in the real Ruby runtime. + +Using the starter kit, the process becomes: + +- checking out the `actionloop-starter-kit` from the `incubator-openwhisk-devtools` repository +- editing the `Dockerfile` to create the target environment for your language +- rewrite the `launcher.py` in your language +- edit the `compile` script to compile your action in your target language +- write the mandatory tests for your language, adapting the `ActionLoopPythonBasicTests.scala` + +Since we need to show the code you have to translate in some language, we picked Python as it is one of the more readable languages, the closer to be real-world `pseudo-code`. + +You need to know a bit of Python to understand the sample `launcher.py`, just enough to rewrite it in your target language. + +You may need to write some real Python coding to edit the `compile` script, but basic knowledge is enough. + +Finally, you do not need to know Scala, even if the tests are embedded in a Scala test, as all you need is to embed your tests in the code. +## Notation + +In this tutorial we have either terminal transcripts to show what you need to do at the terminal, or "diffs" to show changes to existing files. + +In terminal transcripts, the prefix `$` means commands you have to type at the terminal; the rest are comments (prefixed with `#`) or sample output you should check to verify everything is ok. Generally in a transcript I do not put verbatim output of the terminal as it is generally irrelevant. Review comment: > This also? `verbatim` -> `the verbatim`? IMHO the article 'the' is not needed here. Yet the whole sentence reads a bit clunky. The term 'generally' is used twice in the same sentence. How about: "As verbatim terminal output is mostly/most often irrelevant it is omitted in the transcript" This is an automated message from the Apache Git Service. To respond to the message, please log on
[GitHub] [incubator-openwhisk] marc-schwind commented on a change in pull request #4446: Actionloop docs
marc-schwind commented on a change in pull request #4446: Actionloop docs URL: https://github.com/apache/incubator-openwhisk/pull/4446#discussion_r277718802 ## File path: docs/actions-actionloop.md ## @@ -0,0 +1,776 @@ + + +# Developing a new Runtime with the ActionLoop proxy + +The [runtime specification](actions-new.md) defines the expected behavior of a runtime. You can implement a runtime from scratch just following the spec. + +However, the fastest way to develop a new runtime is reusing the *ActionLoop* proxy, that already implements the specification and provides just a few hooks to get a fully functional (and *fast*) runtime in a few hours. + +## What is the ActionLoop proxy + +ActionLoop proxy is a runtime "engine", written in Go, originally developed precisely to support the Go language. However it was written in a pretty generic way, and it has been then adopted also to implement runtimes for Swift, PHP, Python, Rust, Java, Ruby and Crystal. It was developed with compiled languages in minds but works well also with scripting languages. + +Using it, you can develop a new runtime in a fraction of the time needed for a full-fledged runtime, since you have only to write a command line protocol and not a fully featured web server, with an amount of corner case to take care. + +Also, you will likely get a pretty fast runtime, since it is currently the most rapid. It was also adopted to improve performances of existing runtimes, that gained from factor 2x to a factor 20x for languages like Python, Ruby, PHP, and Java. + +ActionLoop also supports "precompilation". You can take a raw image and use the docker image to perform the transformation in action. You will get a zip file that you can use as an action that is very fast to start because it contains only the binaries and not the sources. + +So it is likely are using ActionLoop a better bet than implementing the specification from scratch. If you are convinced and want to use it, read on: this page is a tutorial on how to write an ActionLoop runtime, using Ruby as an example. + +## How to write a new runtime with ActionLoop + +The development procedure for ActionLoop requires the following steps: + +* building a docker image containing your target language compiler and the ActionLoop runtime +* writing a simple line-oriented protocol in your target language (converting a python example) +* write (or just adapt the existing) a compilation script for your target language +* write some mandatory tests for your language + +To facilitate the process, there is an `actionloop-starter-kit` in the devtools repository, that implements a fully working runtime for Python. It is a stripped down version of the real Python runtime (removing some advanced details of the real one). + +So you can implement your runtime translating some Python code in your target language. This tutorial shows step by step how to do it writing the Ruby runtime. This code is also used in the real Ruby runtime. + +Using the starter kit, the process becomes: + +- checking out the `actionloop-starter-kit` from the `incubator-openwhisk-devtools` repository +- editing the `Dockerfile` to create the target environment for your language +- rewrite the `launcher.py` in your language +- edit the `compile` script to compile your action in your target language +- write the mandatory tests for your language, adapting the `ActionLoopPythonBasicTests.scala` + +Since we need to show the code you have to translate in some language, we picked Python as it is one of the more readable languages, the closer to be real-world `pseudo-code`. + +You need to know a bit of Python to understand the sample `launcher.py`, just enough to rewrite it in your target language. + +You may need to write some real Python coding to edit the `compile` script, but basic knowledge is enough. + +Finally, you do not need to know Scala, even if the tests are embedded in a Scala test, as all you need is to embed your tests in the code. +## Notation + +In this tutorial we have either terminal transcripts to show what you need to do at the terminal, or "diffs" to show changes to existing files. + +In terminal transcripts, the prefix `$` means commands you have to type at the terminal; the rest are comments (prefixed with `#`) or sample output you should check to verify everything is ok. Generally in a transcript I do not put verbatim output of the terminal as it is generally irrelevant. Review comment: > It might be `the rest` -> `the rests`? The plural for rest is rest. There is no such word 'rests' - so that should be fine. One could use 'remainder' instead of 'rest' though. This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact
[GitHub] [incubator-openwhisk] marc-schwind commented on a change in pull request #4446: Actionloop docs
marc-schwind commented on a change in pull request #4446: Actionloop docs URL: https://github.com/apache/incubator-openwhisk/pull/4446#discussion_r277718802 ## File path: docs/actions-actionloop.md ## @@ -0,0 +1,776 @@ + + +# Developing a new Runtime with the ActionLoop proxy + +The [runtime specification](actions-new.md) defines the expected behavior of a runtime. You can implement a runtime from scratch just following the spec. + +However, the fastest way to develop a new runtime is reusing the *ActionLoop* proxy, that already implements the specification and provides just a few hooks to get a fully functional (and *fast*) runtime in a few hours. + +## What is the ActionLoop proxy + +ActionLoop proxy is a runtime "engine", written in Go, originally developed precisely to support the Go language. However it was written in a pretty generic way, and it has been then adopted also to implement runtimes for Swift, PHP, Python, Rust, Java, Ruby and Crystal. It was developed with compiled languages in minds but works well also with scripting languages. + +Using it, you can develop a new runtime in a fraction of the time needed for a full-fledged runtime, since you have only to write a command line protocol and not a fully featured web server, with an amount of corner case to take care. + +Also, you will likely get a pretty fast runtime, since it is currently the most rapid. It was also adopted to improve performances of existing runtimes, that gained from factor 2x to a factor 20x for languages like Python, Ruby, PHP, and Java. + +ActionLoop also supports "precompilation". You can take a raw image and use the docker image to perform the transformation in action. You will get a zip file that you can use as an action that is very fast to start because it contains only the binaries and not the sources. + +So it is likely are using ActionLoop a better bet than implementing the specification from scratch. If you are convinced and want to use it, read on: this page is a tutorial on how to write an ActionLoop runtime, using Ruby as an example. + +## How to write a new runtime with ActionLoop + +The development procedure for ActionLoop requires the following steps: + +* building a docker image containing your target language compiler and the ActionLoop runtime +* writing a simple line-oriented protocol in your target language (converting a python example) +* write (or just adapt the existing) a compilation script for your target language +* write some mandatory tests for your language + +To facilitate the process, there is an `actionloop-starter-kit` in the devtools repository, that implements a fully working runtime for Python. It is a stripped down version of the real Python runtime (removing some advanced details of the real one). + +So you can implement your runtime translating some Python code in your target language. This tutorial shows step by step how to do it writing the Ruby runtime. This code is also used in the real Ruby runtime. + +Using the starter kit, the process becomes: + +- checking out the `actionloop-starter-kit` from the `incubator-openwhisk-devtools` repository +- editing the `Dockerfile` to create the target environment for your language +- rewrite the `launcher.py` in your language +- edit the `compile` script to compile your action in your target language +- write the mandatory tests for your language, adapting the `ActionLoopPythonBasicTests.scala` + +Since we need to show the code you have to translate in some language, we picked Python as it is one of the more readable languages, the closer to be real-world `pseudo-code`. + +You need to know a bit of Python to understand the sample `launcher.py`, just enough to rewrite it in your target language. + +You may need to write some real Python coding to edit the `compile` script, but basic knowledge is enough. + +Finally, you do not need to know Scala, even if the tests are embedded in a Scala test, as all you need is to embed your tests in the code. +## Notation + +In this tutorial we have either terminal transcripts to show what you need to do at the terminal, or "diffs" to show changes to existing files. + +In terminal transcripts, the prefix `$` means commands you have to type at the terminal; the rest are comments (prefixed with `#`) or sample output you should check to verify everything is ok. Generally in a transcript I do not put verbatim output of the terminal as it is generally irrelevant. Review comment: > It might be `the rest` -> `the rests`? The plural for rest is rest. There is no such word 'rests' - so that should be fine. This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regard
[GitHub] [incubator-openwhisk] marc-schwind commented on a change in pull request #4446: Actionloop docs
marc-schwind commented on a change in pull request #4446: Actionloop docs URL: https://github.com/apache/incubator-openwhisk/pull/4446#discussion_r277718802 ## File path: docs/actions-actionloop.md ## @@ -0,0 +1,776 @@ + + +# Developing a new Runtime with the ActionLoop proxy + +The [runtime specification](actions-new.md) defines the expected behavior of a runtime. You can implement a runtime from scratch just following the spec. + +However, the fastest way to develop a new runtime is reusing the *ActionLoop* proxy, that already implements the specification and provides just a few hooks to get a fully functional (and *fast*) runtime in a few hours. + +## What is the ActionLoop proxy + +ActionLoop proxy is a runtime "engine", written in Go, originally developed precisely to support the Go language. However it was written in a pretty generic way, and it has been then adopted also to implement runtimes for Swift, PHP, Python, Rust, Java, Ruby and Crystal. It was developed with compiled languages in minds but works well also with scripting languages. + +Using it, you can develop a new runtime in a fraction of the time needed for a full-fledged runtime, since you have only to write a command line protocol and not a fully featured web server, with an amount of corner case to take care. + +Also, you will likely get a pretty fast runtime, since it is currently the most rapid. It was also adopted to improve performances of existing runtimes, that gained from factor 2x to a factor 20x for languages like Python, Ruby, PHP, and Java. + +ActionLoop also supports "precompilation". You can take a raw image and use the docker image to perform the transformation in action. You will get a zip file that you can use as an action that is very fast to start because it contains only the binaries and not the sources. + +So it is likely are using ActionLoop a better bet than implementing the specification from scratch. If you are convinced and want to use it, read on: this page is a tutorial on how to write an ActionLoop runtime, using Ruby as an example. + +## How to write a new runtime with ActionLoop + +The development procedure for ActionLoop requires the following steps: + +* building a docker image containing your target language compiler and the ActionLoop runtime +* writing a simple line-oriented protocol in your target language (converting a python example) +* write (or just adapt the existing) a compilation script for your target language +* write some mandatory tests for your language + +To facilitate the process, there is an `actionloop-starter-kit` in the devtools repository, that implements a fully working runtime for Python. It is a stripped down version of the real Python runtime (removing some advanced details of the real one). + +So you can implement your runtime translating some Python code in your target language. This tutorial shows step by step how to do it writing the Ruby runtime. This code is also used in the real Ruby runtime. + +Using the starter kit, the process becomes: + +- checking out the `actionloop-starter-kit` from the `incubator-openwhisk-devtools` repository +- editing the `Dockerfile` to create the target environment for your language +- rewrite the `launcher.py` in your language +- edit the `compile` script to compile your action in your target language +- write the mandatory tests for your language, adapting the `ActionLoopPythonBasicTests.scala` + +Since we need to show the code you have to translate in some language, we picked Python as it is one of the more readable languages, the closer to be real-world `pseudo-code`. + +You need to know a bit of Python to understand the sample `launcher.py`, just enough to rewrite it in your target language. + +You may need to write some real Python coding to edit the `compile` script, but basic knowledge is enough. + +Finally, you do not need to know Scala, even if the tests are embedded in a Scala test, as all you need is to embed your tests in the code. +## Notation + +In this tutorial we have either terminal transcripts to show what you need to do at the terminal, or "diffs" to show changes to existing files. + +In terminal transcripts, the prefix `$` means commands you have to type at the terminal; the rest are comments (prefixed with `#`) or sample output you should check to verify everything is ok. Generally in a transcript I do not put verbatim output of the terminal as it is generally irrelevant. Review comment: > It might be `the rest` -> `the rests`? The plural for rest is rest. There is no such word 'rests' - so that should be fine. This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, A