A REST server for compiling and executing Kotlin code. The server provides the API for Kotlin Playground library.
Download Kotlin dependencies and build an executor before starting the server:
$ ./gradlew build -x test Start the Spring Boot project. The main class: com.compiler.server.CompilerApplication
To build the app inside a Docker container, run the following command from the project directory:
$ ./docker-image-build.shBased on aws-serverless-container.
$ ./gradlew buildLambdaGetting .zip file from build/distributions.
Lambda handler: com.compiler.server.lambdas.StreamLambdaHandler::handleRequest.
Publish your Lambda function: you can follow the instructions in AWS Lambda's documentation on how to package your function for deployment.
Add Kotless and remove aws-serverless-container =)
Swagger url: http://localhost:8080/api-docs/swagger-ui/index.html
Just put whatever you need as dependencies
to build.gradle.kts via a
task called kotlinDependency:
kotlinDependency "your dependency"
NOTE: If the library you're adding uses reflection, accesses the file system, or performs any other type of security-sensitive operations, don't forget to configure the executor.policy . Click here for more information about Java Security Policy.
How to set Java Security Policy in executors.policy
If you want to configure a custom dependency, use the marker @LIB_DIR@:
grant codeBase "file:%%LIB_DIR%%/junit-4.12.jar"{
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
permission java.lang.RuntimePermission "setIO";
permission java.io.FilePermission "<<ALL FILES>>", "read";
permission java.lang.RuntimePermission "accessDeclaredMembers";
};
Set the environment variables
| ENV | Default value |
|---|---|
| ACCESS_CONTROL_ALLOW_ORIGIN_VALUE | * |
| ACCESS_CONTROL_ALLOW_HEADER_VALUE | * |
We use prod spring active profile to stream logs as JSON format.
You can set the spring profile by supplying -Dspring.profiles.active=prod or set env variable SPRING_PROFILES_ACTIVE to prod value.
In case of an unsuccessful execution in the standard output will be the event with INFO level:
{
"date_time": "31/Aug/2021:11:49:45 +03:00",
"@version": "1",
"message": "Code execution is complete.",
"logger_name": "com.compiler.server.service.KotlinProjectExecutor",
"thread_name": "http-nio-8080-exec-1",
"level": "INFO",
"level_value": 20000,
"hasErrors": true,
"confType": "JAVA",
"kotlinVersion": "$kotlinVersion"
}This section is only relevant for JetBrains employees. And includes information about working with branches and releases. You can find information about the development workflow in workflow.md.
Gradle Build Scans can provide insights into an Kotlin Compiler Server Build. JetBrains runs a Gradle Develocity server. that can be used to automatically upload reports.
To automatically opt in add the following to $GRADLE_USER_HOME/gradle.properties.
org.jetbrains.kotlin.compiler.server.build.scan.enabled=true
# optionally provide a username that will be attached to each report
org.jetbrains..kotlin.compiler.server.build.scan.username=John WickAlso you need to create an access key:
./gradlew provisionDevelocityAccessKeyA Build Scan may contain identifiable information. See the Terms of Use https://gradle.com/legal/terms-of-use/.