Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

JetBrains/kotlin-compiler-server

Open more actions menu

Repository files navigation

Kotlin compiler server

official JetBrains project Build status Java CI TC status Kotlin GitHub license

A REST server for compiling and executing Kotlin code. The server provides the API for Kotlin Playground library.

How to start 🏁

Simple Spring Boot application

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

With Docker

To build the app inside a Docker container, run the following command from the project directory:

$ ./docker-image-build.sh

From Amazon lambda

Based on aws-serverless-container.

$ ./gradlew buildLambda

Getting .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.

From Kotless

Add Kotless and remove aws-serverless-container =)

API Documentation 📃

Swagger url: http://localhost:8080/swagger-ui/

How to add your dependencies to kotlin compiler 📚

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";
};

CORS configuration

Set the environment variables

ENV Default value
ACCESS_CONTROL_ALLOW_ORIGIN_VALUE *
ACCESS_CONTROL_ALLOW_HEADER_VALUE *

Configure logging

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.

Unsuccessful execution logs

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"
}

Kotlin release guide 🚀

  1. Update the kotlin version in libs.versions.toml
  2. Make sure everything is going well via the task:
$ ./gradlew build
  1. Save branch with the name of the kotlin version. Pattern: /^[0-9.]+$/ (optional)
  2. Bump version on GitHub releases (optional)

Gradle Build Scans

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 Wick

Also you need to create an access key:

./gradlew provisionDevelocityAccessKey

A Build Scan may contain identifiable information. See the Terms of Use https://gradle.com/legal/terms-of-use/.

Releases

No releases published

Packages

No packages published

Contributors 30

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.