{"action":"created","comment":{"url":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/comments/197793532","pull_request_review_id":131597874,"id":197793532,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5Nzc5MzUzMg==","diff_hunk":"@@ -11,61 +12,108 @@ import org.slf4j.LoggerFactory\n import java.io.File\n import java.io.InputStream\n import java.nio.charset.Charset\n-import java.util.HashMap\n+import java.nio.file.Files\n+import java.nio.file.Paths\n+import java.nio.file.StandardOpenOption\n+import java.util.regex.Pattern\n+import java.util.stream.Collectors\n import kotlin.concurrent.thread\n \n /**\n  * This class takes a path to a docker-compose yaml file and copies it to a temporary location when initialized.\n  *\n  * After initialization it is possible to start, stop, inspect and kill the containers that are configured in the yaml file.\n  */\n-class DockerCompose(classPathYmlResource: String,\n-                    private val prefix: String,\n-                    private val env: HashMap<String, String>) {\n+class DockerCompose private constructor(private val prefix: String,\n+                                        private val env: Map<String, String>,\n+                                        private val dockerComposeFilename: String) {\n \n-    val LOGGER: Logger = LoggerFactory.getLogger(DockerCompose::class.java)\n-\n-    val EXEC_INFO_LOGGER = { line: String ->\n-        LOGGER.info(line)\n+    init {\n+        verifyDockerComposeInstallation()\n     }\n \n-    val STDOUT_LOG_CONSUMER = { line: String ->\n-        LOGGER.debug(\"OUT: \" + line)\n-    }\n+    constructor(classPathYmlResource: String, applicationPrefix: String, env: Map<String, String>) : this(applicationPrefix, env, initializeNewDockerComposeSession(classPathYmlResource, env))\n \n-    val STDERR_LOG_CONSUMER = { line: String ->\n-        LOGGER.info(\"ERR: \" + line)\n+    constructor(applicationPrefix: String, fileNamePrefix: String) : this(applicationPrefix, loadEnvironmentFile(fileNamePrefix), fileNamePrefix + YAML_FILE_EXTENSION)\n+\n+    constructor(classPathYmlResource: String, applicationPrefix: String, fileNamePrefix: String, env: Map<String, String>) : this(applicationPrefix, env, fileNamePrefix + YAML_FILE_EXTENSION) {\n+        saveResourceToTmpFolder(classPathYmlResource, File(fileNamePrefix + YAML_FILE_EXTENSION))\n+        saveEnvironmentFile(env, fileNamePrefix + ENVIRONMENT_FILE_EXTENSION)\n     }\n \n+    companion object {\n \n-    private var MIN_DOCKER_COMPOSE_VERSION: DefaultArtifactVersion = DefaultArtifactVersion(\"1.5.0\")\n-    private var ymlTmpfilename: String\n+        private val LOGGER: Logger = LoggerFactory.getLogger(DockerCompose::class.java)\n \n-    init {\n-        ymlTmpfilename = saveResourceToTmpFolder(classPathYmlResource)\n+        private val EXEC_INFO_LOGGER = { line: String ->\n+            LOGGER.info(line)\n+        }\n \n-        if (!File(ymlTmpfilename).exists()) {\n-            throw RuntimeException(\"File $ymlTmpfilename could not be found.\")\n+        private val STDOUT_LOG_CONSUMER = { line: String ->\n+            LOGGER.debug(\"OUT: $line\")\n         }\n \n-        verifyDockerComposeInstallation()\n-    }\n+        private val STDERR_LOG_CONSUMER = { line: String ->\n+            LOGGER.info(\"ERR: $line\")\n+        }\n \n-    @Suppress(\"UNCHECKED_CAST\")\n-    private fun saveResourceToTmpFolder(classPathYmlResource: String): String {\n-        try {\n-            val ymlStream: InputStream = DockerCompose::class.java.classLoader.getResourceAsStream(classPathYmlResource)\n-            val tmpFile = File.createTempFile(prefix, \".yml\")\n-            tmpFile.writeBytes(IOUtils.toString(ymlStream, Charset.forName(\"utf-8\")).toByteArray())\n-            ymlStream.close()\n-            return tmpFile.path\n-        } catch (ex: Exception) {\n-            throw RuntimeException(\"Could not load yml file from classpath: $classPathYmlResource\", ex)\n+        private var MIN_DOCKER_COMPOSE_VERSION: DefaultArtifactVersion = DefaultArtifactVersion(\"1.5.0\")\n+\n+\n+        private const val YAML_FILE_EXTENSION = \".yml\"\n+\n+        private const val ENVIRONMENT_FILE_EXTENSION = \".env\"\n+\n+        private val ENVIRONMENT_VARIABLE_SEPARATOR = Pattern.compile(\"=\")\n+\n+        private fun initializeNewDockerComposeSession(classPathYmlResource: String, env: Map<String, String>): String {\n+            val composeFile = File.createTempFile(classPathYmlResource, YAML_FILE_EXTENSION)\n+            val dockerComposeFilename = composeFile.absolutePath\n+            saveResourceToTmpFolder(classPathYmlResource, composeFile)\n+            if (!composeFile.exists()) {\n+                throw RuntimeException(\"File $dockerComposeFilename could not be found.\")\n+            }\n+            val environmentFileName = dockerComposeFilename.substringBeforeLast(YAML_FILE_EXTENSION) + ENVIRONMENT_FILE_EXTENSION\n+            saveEnvironmentFile(env, environmentFileName)\n+            return dockerComposeFilename\n+        }\n+\n+        private fun saveResourceToTmpFolder(classPathYmlResource: String, destinationFile: File) {\n+            try {\n+                val ymlStream: InputStream = DockerCompose::class.java.classLoader.getResourceAsStream(classPathYmlResource)\n+                val yamlContents = IOUtils.toString(ymlStream, Charset.forName(\"utf-8\"))\n+                destinationFile.writeBytes(yamlContents.toByteArray())\n+                ymlStream.close()\n+            } catch (ex: Exception) {\n+                throw RuntimeException(\"Could not load yml file from classpath: $classPathYmlResource\", ex)\n+            }\n         }\n+\n+        private fun saveEnvironmentFile(env: Map<String, String>, environmentFileName: String) {\n+            val environmentPath = Paths.get(environmentFileName)\n+            val environment = env.entries.stream().map { \"${it.key}=${it.value}\" }.collect(Collectors.joining(\"\\n\"))","path":"src/main/kotlin/com/meltwater/docker/compose/DockerCompose.kt","position":122,"original_position":122,"commit_id":"43a1dc535642076f128b091aa51976b7fcd12451","original_commit_id":"43a1dc535642076f128b091aa51976b7fcd12451","user":{"login":"karlney","id":1814172,"node_id":"MDQ6VXNlcjE4MTQxNzI=","avatar_url":"https://avatars2.githubusercontent.com/u/1814172?v=4","gravatar_id":"","url":"https://api.github.com/users/karlney","html_url":"https://github.com/karlney","followers_url":"https://api.github.com/users/karlney/followers","following_url":"https://api.github.com/users/karlney/following{/other_user}","gists_url":"https://api.github.com/users/karlney/gists{/gist_id}","starred_url":"https://api.github.com/users/karlney/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/karlney/subscriptions","organizations_url":"https://api.github.com/users/karlney/orgs","repos_url":"https://api.github.com/users/karlney/repos","events_url":"https://api.github.com/users/karlney/events{/privacy}","received_events_url":"https://api.github.com/users/karlney/received_events","type":"User","site_admin":false},"body":"This can be done with kotlin map operators instead of java streams.\r\n\r\nTry:\r\nenv.entries.joinToString(\"\\n\") { \"${it.key}=${it.value}\" }\r\n\r\nIf you see yourself using java streams in kotlin code you are doing something wrong :-)","created_at":"2018-06-25T13:24:11Z","updated_at":"2018-06-25T13:29:19Z","html_url":"https://github.com/meltwater/kotlin-compose/pull/11#discussion_r197793532","pull_request_url":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/11","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/comments/197793532"},"html":{"href":"https://github.com/meltwater/kotlin-compose/pull/11#discussion_r197793532"},"pull_request":{"href":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/11"}}},"pull_request":{"url":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/11","id":197097305,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk3MDk3MzA1","html_url":"https://github.com/meltwater/kotlin-compose/pull/11","diff_url":"https://github.com/meltwater/kotlin-compose/pull/11.diff","patch_url":"https://github.com/meltwater/kotlin-compose/pull/11.patch","issue_url":"https://api.github.com/repos/meltwater/kotlin-compose/issues/11","number":11,"state":"open","locked":false,"title":"Add ability to attach to an existing container","user":{"login":"emrebasar","id":3469498,"node_id":"MDQ6VXNlcjM0Njk0OTg=","avatar_url":"https://avatars3.githubusercontent.com/u/3469498?v=4","gravatar_id":"","url":"https://api.github.com/users/emrebasar","html_url":"https://github.com/emrebasar","followers_url":"https://api.github.com/users/emrebasar/followers","following_url":"https://api.github.com/users/emrebasar/following{/other_user}","gists_url":"https://api.github.com/users/emrebasar/gists{/gist_id}","starred_url":"https://api.github.com/users/emrebasar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/emrebasar/subscriptions","organizations_url":"https://api.github.com/users/emrebasar/orgs","repos_url":"https://api.github.com/users/emrebasar/repos","events_url":"https://api.github.com/users/emrebasar/events{/privacy}","received_events_url":"https://api.github.com/users/emrebasar/received_events","type":"User","site_admin":false},"body":null,"created_at":"2018-06-25T12:31:46Z","updated_at":"2018-06-25T13:29:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5dc1ffce9e364476837b3829cddcf387677b2f52","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/11/commits","review_comments_url":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/11/comments","review_comment_url":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/comments{/number}","comments_url":"https://api.github.com/repos/meltwater/kotlin-compose/issues/11/comments","statuses_url":"https://api.github.com/repos/meltwater/kotlin-compose/statuses/43a1dc535642076f128b091aa51976b7fcd12451","head":{"label":"meltwater:LongLivingContainers","ref":"LongLivingContainers","sha":"43a1dc535642076f128b091aa51976b7fcd12451","user":{"login":"meltwater","id":740088,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0MDA4OA==","avatar_url":"https://avatars2.githubusercontent.com/u/740088?v=4","gravatar_id":"","url":"https://api.github.com/users/meltwater","html_url":"https://github.com/meltwater","followers_url":"https://api.github.com/users/meltwater/followers","following_url":"https://api.github.com/users/meltwater/following{/other_user}","gists_url":"https://api.github.com/users/meltwater/gists{/gist_id}","starred_url":"https://api.github.com/users/meltwater/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meltwater/subscriptions","organizations_url":"https://api.github.com/users/meltwater/orgs","repos_url":"https://api.github.com/users/meltwater/repos","events_url":"https://api.github.com/users/meltwater/events{/privacy}","received_events_url":"https://api.github.com/users/meltwater/received_events","type":"Organization","site_admin":false},"repo":{"id":69233150,"node_id":"MDEwOlJlcG9zaXRvcnk2OTIzMzE1MA==","name":"kotlin-compose","full_name":"meltwater/kotlin-compose","owner":{"login":"meltwater","id":740088,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0MDA4OA==","avatar_url":"https://avatars2.githubusercontent.com/u/740088?v=4","gravatar_id":"","url":"https://api.github.com/users/meltwater","html_url":"https://github.com/meltwater","followers_url":"https://api.github.com/users/meltwater/followers","following_url":"https://api.github.com/users/meltwater/following{/other_user}","gists_url":"https://api.github.com/users/meltwater/gists{/gist_id}","starred_url":"https://api.github.com/users/meltwater/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meltwater/subscriptions","organizations_url":"https://api.github.com/users/meltwater/orgs","repos_url":"https://api.github.com/users/meltwater/repos","events_url":"https://api.github.com/users/meltwater/events{/privacy}","received_events_url":"https://api.github.com/users/meltwater/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/meltwater/kotlin-compose","description":"Docker-compose wrapper for the JVM","fork":false,"url":"https://api.github.com/repos/meltwater/kotlin-compose","forks_url":"https://api.github.com/repos/meltwater/kotlin-compose/forks","keys_url":"https://api.github.com/repos/meltwater/kotlin-compose/keys{/key_id}","collaborators_url":"https://api.github.com/repos/meltwater/kotlin-compose/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/meltwater/kotlin-compose/teams","hooks_url":"https://api.github.com/repos/meltwater/kotlin-compose/hooks","issue_events_url":"https://api.github.com/repos/meltwater/kotlin-compose/issues/events{/number}","events_url":"https://api.github.com/repos/meltwater/kotlin-compose/events","assignees_url":"https://api.github.com/repos/meltwater/kotlin-compose/assignees{/user}","branches_url":"https://api.github.com/repos/meltwater/kotlin-compose/branches{/branch}","tags_url":"https://api.github.com/repos/meltwater/kotlin-compose/tags","blobs_url":"https://api.github.com/repos/meltwater/kotlin-compose/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/meltwater/kotlin-compose/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/meltwater/kotlin-compose/git/refs{/sha}","trees_url":"https://api.github.com/repos/meltwater/kotlin-compose/git/trees{/sha}","statuses_url":"https://api.github.com/repos/meltwater/kotlin-compose/statuses/{sha}","languages_url":"https://api.github.com/repos/meltwater/kotlin-compose/languages","stargazers_url":"https://api.github.com/repos/meltwater/kotlin-compose/stargazers","contributors_url":"https://api.github.com/repos/meltwater/kotlin-compose/contributors","subscribers_url":"https://api.github.com/repos/meltwater/kotlin-compose/subscribers","subscription_url":"https://api.github.com/repos/meltwater/kotlin-compose/subscription","commits_url":"https://api.github.com/repos/meltwater/kotlin-compose/commits{/sha}","git_commits_url":"https://api.github.com/repos/meltwater/kotlin-compose/git/commits{/sha}","comments_url":"https://api.github.com/repos/meltwater/kotlin-compose/comments{/number}","issue_comment_url":"https://api.github.com/repos/meltwater/kotlin-compose/issues/comments{/number}","contents_url":"https://api.github.com/repos/meltwater/kotlin-compose/contents/{+path}","compare_url":"https://api.github.com/repos/meltwater/kotlin-compose/compare/{base}...{head}","merges_url":"https://api.github.com/repos/meltwater/kotlin-compose/merges","archive_url":"https://api.github.com/repos/meltwater/kotlin-compose/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/meltwater/kotlin-compose/downloads","issues_url":"https://api.github.com/repos/meltwater/kotlin-compose/issues{/number}","pulls_url":"https://api.github.com/repos/meltwater/kotlin-compose/pulls{/number}","milestones_url":"https://api.github.com/repos/meltwater/kotlin-compose/milestones{/number}","notifications_url":"https://api.github.com/repos/meltwater/kotlin-compose/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/meltwater/kotlin-compose/labels{/name}","releases_url":"https://api.github.com/repos/meltwater/kotlin-compose/releases{/id}","deployments_url":"https://api.github.com/repos/meltwater/kotlin-compose/deployments","created_at":"2016-09-26T09:13:07Z","updated_at":"2018-06-04T19:53:44Z","pushed_at":"2018-06-25T12:31:46Z","git_url":"git://github.com/meltwater/kotlin-compose.git","ssh_url":"git@github.com:meltwater/kotlin-compose.git","clone_url":"https://github.com/meltwater/kotlin-compose.git","svn_url":"https://github.com/meltwater/kotlin-compose","homepage":"","size":122,"stargazers_count":5,"watchers_count":5,"language":"Kotlin","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":1,"open_issues":1,"watchers":5,"default_branch":"master"}},"base":{"label":"meltwater:master","ref":"master","sha":"ce5a70e61e0c0ea7a1d5a6898f2a6ad57e73480e","user":{"login":"meltwater","id":740088,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0MDA4OA==","avatar_url":"https://avatars2.githubusercontent.com/u/740088?v=4","gravatar_id":"","url":"https://api.github.com/users/meltwater","html_url":"https://github.com/meltwater","followers_url":"https://api.github.com/users/meltwater/followers","following_url":"https://api.github.com/users/meltwater/following{/other_user}","gists_url":"https://api.github.com/users/meltwater/gists{/gist_id}","starred_url":"https://api.github.com/users/meltwater/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meltwater/subscriptions","organizations_url":"https://api.github.com/users/meltwater/orgs","repos_url":"https://api.github.com/users/meltwater/repos","events_url":"https://api.github.com/users/meltwater/events{/privacy}","received_events_url":"https://api.github.com/users/meltwater/received_events","type":"Organization","site_admin":false},"repo":{"id":69233150,"node_id":"MDEwOlJlcG9zaXRvcnk2OTIzMzE1MA==","name":"kotlin-compose","full_name":"meltwater/kotlin-compose","owner":{"login":"meltwater","id":740088,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0MDA4OA==","avatar_url":"https://avatars2.githubusercontent.com/u/740088?v=4","gravatar_id":"","url":"https://api.github.com/users/meltwater","html_url":"https://github.com/meltwater","followers_url":"https://api.github.com/users/meltwater/followers","following_url":"https://api.github.com/users/meltwater/following{/other_user}","gists_url":"https://api.github.com/users/meltwater/gists{/gist_id}","starred_url":"https://api.github.com/users/meltwater/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meltwater/subscriptions","organizations_url":"https://api.github.com/users/meltwater/orgs","repos_url":"https://api.github.com/users/meltwater/repos","events_url":"https://api.github.com/users/meltwater/events{/privacy}","received_events_url":"https://api.github.com/users/meltwater/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/meltwater/kotlin-compose","description":"Docker-compose wrapper for the JVM","fork":false,"url":"https://api.github.com/repos/meltwater/kotlin-compose","forks_url":"https://api.github.com/repos/meltwater/kotlin-compose/forks","keys_url":"https://api.github.com/repos/meltwater/kotlin-compose/keys{/key_id}","collaborators_url":"https://api.github.com/repos/meltwater/kotlin-compose/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/meltwater/kotlin-compose/teams","hooks_url":"https://api.github.com/repos/meltwater/kotlin-compose/hooks","issue_events_url":"https://api.github.com/repos/meltwater/kotlin-compose/issues/events{/number}","events_url":"https://api.github.com/repos/meltwater/kotlin-compose/events","assignees_url":"https://api.github.com/repos/meltwater/kotlin-compose/assignees{/user}","branches_url":"https://api.github.com/repos/meltwater/kotlin-compose/branches{/branch}","tags_url":"https://api.github.com/repos/meltwater/kotlin-compose/tags","blobs_url":"https://api.github.com/repos/meltwater/kotlin-compose/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/meltwater/kotlin-compose/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/meltwater/kotlin-compose/git/refs{/sha}","trees_url":"https://api.github.com/repos/meltwater/kotlin-compose/git/trees{/sha}","statuses_url":"https://api.github.com/repos/meltwater/kotlin-compose/statuses/{sha}","languages_url":"https://api.github.com/repos/meltwater/kotlin-compose/languages","stargazers_url":"https://api.github.com/repos/meltwater/kotlin-compose/stargazers","contributors_url":"https://api.github.com/repos/meltwater/kotlin-compose/contributors","subscribers_url":"https://api.github.com/repos/meltwater/kotlin-compose/subscribers","subscription_url":"https://api.github.com/repos/meltwater/kotlin-compose/subscription","commits_url":"https://api.github.com/repos/meltwater/kotlin-compose/commits{/sha}","git_commits_url":"https://api.github.com/repos/meltwater/kotlin-compose/git/commits{/sha}","comments_url":"https://api.github.com/repos/meltwater/kotlin-compose/comments{/number}","issue_comment_url":"https://api.github.com/repos/meltwater/kotlin-compose/issues/comments{/number}","contents_url":"https://api.github.com/repos/meltwater/kotlin-compose/contents/{+path}","compare_url":"https://api.github.com/repos/meltwater/kotlin-compose/compare/{base}...{head}","merges_url":"https://api.github.com/repos/meltwater/kotlin-compose/merges","archive_url":"https://api.github.com/repos/meltwater/kotlin-compose/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/meltwater/kotlin-compose/downloads","issues_url":"https://api.github.com/repos/meltwater/kotlin-compose/issues{/number}","pulls_url":"https://api.github.com/repos/meltwater/kotlin-compose/pulls{/number}","milestones_url":"https://api.github.com/repos/meltwater/kotlin-compose/milestones{/number}","notifications_url":"https://api.github.com/repos/meltwater/kotlin-compose/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/meltwater/kotlin-compose/labels{/name}","releases_url":"https://api.github.com/repos/meltwater/kotlin-compose/releases{/id}","deployments_url":"https://api.github.com/repos/meltwater/kotlin-compose/deployments","created_at":"2016-09-26T09:13:07Z","updated_at":"2018-06-04T19:53:44Z","pushed_at":"2018-06-25T12:31:46Z","git_url":"git://github.com/meltwater/kotlin-compose.git","ssh_url":"git@github.com:meltwater/kotlin-compose.git","clone_url":"https://github.com/meltwater/kotlin-compose.git","svn_url":"https://github.com/meltwater/kotlin-compose","homepage":"","size":122,"stargazers_count":5,"watchers_count":5,"language":"Kotlin","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":1,"open_issues":1,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/11"},"html":{"href":"https://github.com/meltwater/kotlin-compose/pull/11"},"issue":{"href":"https://api.github.com/repos/meltwater/kotlin-compose/issues/11"},"comments":{"href":"https://api.github.com/repos/meltwater/kotlin-compose/issues/11/comments"},"review_comments":{"href":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/11/comments"},"review_comment":{"href":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/meltwater/kotlin-compose/pulls/11/commits"},"statuses":{"href":"https://api.github.com/repos/meltwater/kotlin-compose/statuses/43a1dc535642076f128b091aa51976b7fcd12451"}},"author_association":"NONE"}}
{"actor":{"display_login":"karlney"}}