{"action":"created","comment":{"url":"https://api.github.com/repos/prisma/prisma/pulls/comments/242893339","pull_request_review_id":186514816,"id":242893339,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0Mjg5MzMzOQ==","diff_hunk":"@@ -1,45 +1,84 @@\n package com.prisma.api.connector.postgres\n \n+import java.sql.Driver\n+\n import com.prisma.config.DatabaseConfig\n import com.prisma.connector.shared.jdbc.{Databases, SlickDatabase}\n-import com.typesafe.config.{Config, ConfigFactory}\n-import slick.jdbc.PostgresProfile\n+import com.zaxxer.hikari.{HikariConfig, HikariDataSource}\n+import slick.jdbc.{DataSourceJdbcDataSource, DriverDataSource, PostgresProfile}\n import slick.jdbc.PostgresProfile.api._\n+import slick.jdbc.hikaricp.HikariCPJdbcDataSource\n \n object PostgresDatabasesFactory {\n-  private lazy val dbDriver = new org.postgresql.Driver\n-\n   // PostgreSQL db used for all Prisma schemas (must be in sync with the deploy connector)\n   val defaultDatabase = \"prisma\"\n \n   // Schema to use in the database\n   val schema = \"public\" // default schema\n \n-  def initialize(dbConfig: DatabaseConfig): Databases = {\n-    val config                       = typeSafeConfigFromDatabaseConfig(dbConfig)\n-    val masterDb                     = Database.forConfig(\"database\", config, driver = dbDriver)\n+  def initialize(dbConfig: DatabaseConfig, driver: Driver): Databases = {\n+    val masterDb                     = databaseForConfig(dbConfig, driver)\n     val slickDatabase: SlickDatabase = SlickDatabase(PostgresProfile, masterDb)\n+\n     Databases(primary = slickDatabase, replica = slickDatabase)\n   }\n \n-  def typeSafeConfigFromDatabaseConfig(dbConfig: DatabaseConfig): Config = {\n-    val pooled   = if (dbConfig.pooled) \"\" else \"connectionPool = disabled\"\n+  def databaseForConfig(dbConfig: DatabaseConfig, driver: Driver) = {\n+//    val source         = hikariDataSource(dbConfig)\n+    val source         = simpleDataSource(dbConfig, driver)\n+    val poolName       = \"database\"\n+    val numThreads     = dbConfig.connectionLimit.getOrElse(10) - 1\n+    val maxConnections = numThreads\n+    val executor       = AsyncExecutor(poolName, numThreads, numThreads, 1000, maxConnections, registerMbeans = false)\n+\n+    Database.forSource(source, executor)\n+  }\n+\n+  def simpleDataSource(dbConfig: DatabaseConfig, driver: Driver) = {\n     val database = dbConfig.database.getOrElse(defaultDatabase)\n \n-    ConfigFactory\n-      .parseString(s\"\"\"\n-                      |database {\n-                      |  dataSourceClass = \"slick.jdbc.DriverDataSource\"\n-                      |  properties {\n-                      |    url = \"jdbc:postgresql://${dbConfig.host}:${dbConfig.port}/$database?currentSchema=$schema&ssl=${dbConfig.ssl}&sslfactory=org.postgresql.ssl.NonValidatingFactory\"\n-                      |    user = \"${dbConfig.user}\"\n-                      |    password = \"${dbConfig.password.getOrElse(\"\")}\"\n-                      |  }\n-                      |  numThreads = ${dbConfig.connectionLimit.getOrElse(10) - 1} // we subtract 1 because one connection is consumed already by deploy\n-                      |  connectionTimeout = 5000\n-                      |  $pooled\n-                      |}\n-      \"\"\".stripMargin)\n-      .resolve\n+    new DataSourceJdbcDataSource(\n+      new DriverDataSource(\n+        url =\n+          s\"jdbc:postgresql://${dbConfig.host}:${dbConfig.port}/$database?currentSchema=$schema&ssl=${dbConfig.ssl}&sslfactory=org.postgresql.ssl.NonValidatingFactory\",\n+        user = dbConfig.user,\n+        password = dbConfig.password.getOrElse(\"\"),\n+        driverObject = driver\n+      ),\n+      keepAliveConnection = true,\n+      maxConnections = None\n+    )\n+  }\n+\n+  def hikariDataSource(dbConfig: DatabaseConfig) = {\n+    val database = dbConfig.database.getOrElse(defaultDatabase)\n+    val hconf    = new HikariConfig()\n+\n+    hconf.setJdbcUrl(\n+      s\"jdbc:postgresql://${dbConfig.host}:${dbConfig.port}/$database?currentSchema=$schema&ssl=${dbConfig.ssl}&sslfactory=org.postgresql.ssl.NonValidatingFactory\"\n+    )\n+\n+    hconf.setUsername(dbConfig.user)\n+    hconf.setPassword(dbConfig.password.getOrElse(\"\"))\n+\n+    // Pool configuration\n+    hconf.setConnectionTimeout(5000)\n+    hconf.setValidationTimeout(1000)\n+    hconf.setIdleTimeout(600000)\n+    hconf.setMaxLifetime(1800000)\n+    hconf.setLeakDetectionThreshold(0)\n+    hconf.setInitializationFailFast(false)\n+\n+    val numThreads = dbConfig.connectionLimit.map(_ - 1).getOrElse(10)\n+    hconf.setMaximumPoolSize(numThreads)\n+    hconf.setMinimumIdle(numThreads)\n+    hconf.setPoolName(\"database\")\n+    hconf.setRegisterMbeans(false)\n+\n+    hconf.setReadOnly(false)\n+    hconf.setCatalog(null)","path":"server/connectors/api-connector-postgres/src/main/scala/com/prisma/api/connector/postgres/PostgresDatabasesFactory.scala","position":103,"original_position":103,"commit_id":"a13c5dac02e7c74a23ad94fe6f1eda98a227e8ef","original_commit_id":"a13c5dac02e7c74a23ad94fe6f1eda98a227e8ef","user":{"login":"codacy-bot","id":19940114,"node_id":"MDQ6VXNlcjE5OTQwMTE0","avatar_url":"https://avatars1.githubusercontent.com/u/19940114?v=4","gravatar_id":"","url":"https://api.github.com/users/codacy-bot","html_url":"https://github.com/codacy-bot","followers_url":"https://api.github.com/users/codacy-bot/followers","following_url":"https://api.github.com/users/codacy-bot/following{/other_user}","gists_url":"https://api.github.com/users/codacy-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/codacy-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codacy-bot/subscriptions","organizations_url":"https://api.github.com/users/codacy-bot/orgs","repos_url":"https://api.github.com/users/codacy-bot/repos","events_url":"https://api.github.com/users/codacy-bot/events{/privacy}","received_events_url":"https://api.github.com/users/codacy-bot/received_events","type":"User","site_admin":false},"body":"![Codacy](https://app.codacy.com/assets/images/favicon.png) Issue found: [Avoid using null](https://app.codacy.com/app/graphcool/prisma/pullRequest?prid=2724540)","created_at":"2018-12-19T12:10:15Z","updated_at":"2018-12-19T12:10:15Z","html_url":"https://github.com/prisma/prisma/pull/3695#discussion_r242893339","pull_request_url":"https://api.github.com/repos/prisma/prisma/pulls/3695","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/prisma/prisma/pulls/comments/242893339"},"html":{"href":"https://github.com/prisma/prisma/pull/3695#discussion_r242893339"},"pull_request":{"href":"https://api.github.com/repos/prisma/prisma/pulls/3695"}}},"pull_request":{"url":"https://api.github.com/repos/prisma/prisma/pulls/3695","id":238121075,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM4MTIxMDc1","html_url":"https://github.com/prisma/prisma/pull/3695","diff_url":"https://github.com/prisma/prisma/pull/3695.diff","patch_url":"https://github.com/prisma/prisma/pull/3695.patch","issue_url":"https://api.github.com/repos/prisma/prisma/issues/3695","number":3695,"state":"open","locked":false,"title":"[WIP] Prisma Graal Native image","user":{"login":"dpetrick","id":4272382,"node_id":"MDQ6VXNlcjQyNzIzODI=","avatar_url":"https://avatars0.githubusercontent.com/u/4272382?v=4","gravatar_id":"","url":"https://api.github.com/users/dpetrick","html_url":"https://github.com/dpetrick","followers_url":"https://api.github.com/users/dpetrick/followers","following_url":"https://api.github.com/users/dpetrick/following{/other_user}","gists_url":"https://api.github.com/users/dpetrick/gists{/gist_id}","starred_url":"https://api.github.com/users/dpetrick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dpetrick/subscriptions","organizations_url":"https://api.github.com/users/dpetrick/orgs","repos_url":"https://api.github.com/users/dpetrick/repos","events_url":"https://api.github.com/users/dpetrick/events{/privacy}","received_events_url":"https://api.github.com/users/dpetrick/received_events","type":"User","site_admin":false},"body":"This PR introduces [GraalVM's native-image](https://www.graalvm.org/docs/reference-manual/aot-compilation/) tooling compatibility to Prisma, allowing Prisma to be compiled to a native executable that doesn't have any JVM dependencies and has a quick startup time.\r\n\r\nThe binary is considered to be non-production ready and in early preview. It operates based on a subset of Prisma's features - the main limitations being:\r\n- Only PostgreSQL is currently supported.\r\n- Subscriptions are missing.\r\n- It can't be operated in a cluster.\r\n- It utilizes limited database connection pooling.\r\n- No metrics colletion.\r\n\r\nKnown issues:   \r\n- Memory leaks.\r\n- Native image incompatibilities with Alpine Linux (might be lib-musl related).\r\n\r\nAdditional notes:\r\n- It is recommended to develop Prisma on the Graal-included JDK now instead of Hotspot / OpenJDK.\r\n\r\nChangelog WIP:\r\n- Upgraded Prisma's required Scala version to 2.12.7.\r\n- An installed Rust toolchain is now required to build Prisma from source.\r\n- Added docker images:\r\n    - Prisma prod based on GraalVM.\r\n    - Prisma local based on GraalVM.\r\n    - Native image contained in a debian image.\r\n    - Note: These images are larger than the ones published now (~1.2GB compared to 300MB).\r\n- Reworked parts of the build and tooling process:\r\n    - Added new make commands (`make local-image`. `make all-images`) on the server root to build docker images locally. This is necessary as compiled libraries have to be linked against the correct linux libraries.\r\n    - Note: Building docker images with `sbt docker` _does not produce working images anymore on OSX_.\r\n    - Swapped out the build image with a GraalVM and Rust based image.\r\n    - GraalVM (RC10 at the time of writing) is required to build a native image. `sbt \"project prisma-native\" prisma-native-image:packageBin` builds an executable in `server/images/prisma-native/target/prisma-native-image/prisma-native`.\r\n- Added `prisma-native` project that is the entry point of the executable.\r\n- Replaced auth implementation with a Rust-based JWT implementation.\r\n    - This PR also deprecates asymmetric auth.\r\n    - Removed `legacy_auth` key (controlling asymmetric auth) from config.\r\n    - Non-native Prisma now uses JNA bindings to call out to the native code. `LD_LIBRARY_PATH` on Linux controls where those libraries are loaded.\r\n    - Unified Management and API auth into one interface.\r\n    - General refactorings and fixes for authentication code (e.g. subscriptions).\r\n- Added a JDBC Native library that binds native Rust code to Scala to be used as JDBC driver.\r\n    - Note: Rust projects have to be added as Rust modules explicitly in Intellij to be recognized as Cargo projects, allowing code navigation and the like.\r\n- Logging [WIP]:\r\n    - Prisma now supports common `LOG_LEVEL`s: `INFO`, `DEBUG`. `WARN`, `ERROR`, `TRACE`\r\n- Metrics handling refactoring\r\n- Added PrismaGraalPlugin for native image compilation, based on native pacakagers Graal plugin.\r\n- Restructured connector loading. Loaded DB drivers are now pushed to the images as dependencies, making connectors driver-agnostic and preventing them from being loaded during Graal compilation.\r\n- ","created_at":"2018-12-12T17:29:52Z","updated_at":"2018-12-19T12:10:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"057063f49a0f1790fb6b7a04b4472869ad575704","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/prisma/prisma/pulls/3695/commits","review_comments_url":"https://api.github.com/repos/prisma/prisma/pulls/3695/comments","review_comment_url":"https://api.github.com/repos/prisma/prisma/pulls/comments{/number}","comments_url":"https://api.github.com/repos/prisma/prisma/issues/3695/comments","statuses_url":"https://api.github.com/repos/prisma/prisma/statuses/a13c5dac02e7c74a23ad94fe6f1eda98a227e8ef","head":{"label":"prisma:native_image","ref":"native_image","sha":"a13c5dac02e7c74a23ad94fe6f1eda98a227e8ef","user":{"login":"prisma","id":17219288,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE3MjE5Mjg4","avatar_url":"https://avatars0.githubusercontent.com/u/17219288?v=4","gravatar_id":"","url":"https://api.github.com/users/prisma","html_url":"https://github.com/prisma","followers_url":"https://api.github.com/users/prisma/followers","following_url":"https://api.github.com/users/prisma/following{/other_user}","gists_url":"https://api.github.com/users/prisma/gists{/gist_id}","starred_url":"https://api.github.com/users/prisma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prisma/subscriptions","organizations_url":"https://api.github.com/users/prisma/orgs","repos_url":"https://api.github.com/users/prisma/repos","events_url":"https://api.github.com/users/prisma/events{/privacy}","received_events_url":"https://api.github.com/users/prisma/received_events","type":"Organization","site_admin":false},"repo":{"id":69164196,"node_id":"MDEwOlJlcG9zaXRvcnk2OTE2NDE5Ng==","name":"prisma","full_name":"prisma/prisma","private":false,"owner":{"login":"prisma","id":17219288,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE3MjE5Mjg4","avatar_url":"https://avatars0.githubusercontent.com/u/17219288?v=4","gravatar_id":"","url":"https://api.github.com/users/prisma","html_url":"https://github.com/prisma","followers_url":"https://api.github.com/users/prisma/followers","following_url":"https://api.github.com/users/prisma/following{/other_user}","gists_url":"https://api.github.com/users/prisma/gists{/gist_id}","starred_url":"https://api.github.com/users/prisma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prisma/subscriptions","organizations_url":"https://api.github.com/users/prisma/orgs","repos_url":"https://api.github.com/users/prisma/repos","events_url":"https://api.github.com/users/prisma/events{/privacy}","received_events_url":"https://api.github.com/users/prisma/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/prisma/prisma","description":"⚡️ Prisma enables seamless type-safe database access & declarative data modeling","fork":false,"url":"https://api.github.com/repos/prisma/prisma","forks_url":"https://api.github.com/repos/prisma/prisma/forks","keys_url":"https://api.github.com/repos/prisma/prisma/keys{/key_id}","collaborators_url":"https://api.github.com/repos/prisma/prisma/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/prisma/prisma/teams","hooks_url":"https://api.github.com/repos/prisma/prisma/hooks","issue_events_url":"https://api.github.com/repos/prisma/prisma/issues/events{/number}","events_url":"https://api.github.com/repos/prisma/prisma/events","assignees_url":"https://api.github.com/repos/prisma/prisma/assignees{/user}","branches_url":"https://api.github.com/repos/prisma/prisma/branches{/branch}","tags_url":"https://api.github.com/repos/prisma/prisma/tags","blobs_url":"https://api.github.com/repos/prisma/prisma/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/prisma/prisma/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/prisma/prisma/git/refs{/sha}","trees_url":"https://api.github.com/repos/prisma/prisma/git/trees{/sha}","statuses_url":"https://api.github.com/repos/prisma/prisma/statuses/{sha}","languages_url":"https://api.github.com/repos/prisma/prisma/languages","stargazers_url":"https://api.github.com/repos/prisma/prisma/stargazers","contributors_url":"https://api.github.com/repos/prisma/prisma/contributors","subscribers_url":"https://api.github.com/repos/prisma/prisma/subscribers","subscription_url":"https://api.github.com/repos/prisma/prisma/subscription","commits_url":"https://api.github.com/repos/prisma/prisma/commits{/sha}","git_commits_url":"https://api.github.com/repos/prisma/prisma/git/commits{/sha}","comments_url":"https://api.github.com/repos/prisma/prisma/comments{/number}","issue_comment_url":"https://api.github.com/repos/prisma/prisma/issues/comments{/number}","contents_url":"https://api.github.com/repos/prisma/prisma/contents/{+path}","compare_url":"https://api.github.com/repos/prisma/prisma/compare/{base}...{head}","merges_url":"https://api.github.com/repos/prisma/prisma/merges","archive_url":"https://api.github.com/repos/prisma/prisma/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/prisma/prisma/downloads","issues_url":"https://api.github.com/repos/prisma/prisma/issues{/number}","pulls_url":"https://api.github.com/repos/prisma/prisma/pulls{/number}","milestones_url":"https://api.github.com/repos/prisma/prisma/milestones{/number}","notifications_url":"https://api.github.com/repos/prisma/prisma/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/prisma/prisma/labels{/name}","releases_url":"https://api.github.com/repos/prisma/prisma/releases{/id}","deployments_url":"https://api.github.com/repos/prisma/prisma/deployments","created_at":"2016-09-25T12:54:40Z","updated_at":"2018-12-19T11:59:49Z","pushed_at":"2018-12-19T11:07:12Z","git_url":"git://github.com/prisma/prisma.git","ssh_url":"git@github.com:prisma/prisma.git","clone_url":"https://github.com/prisma/prisma.git","svn_url":"https://github.com/prisma/prisma","homepage":"https://www.prisma.io","size":160557,"stargazers_count":11705,"watchers_count":11705,"language":"Scala","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":683,"mirror_url":null,"archived":false,"open_issues_count":524,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":683,"open_issues":524,"watchers":11705,"default_branch":"master"}},"base":{"label":"prisma:alpha","ref":"alpha","sha":"b6a6ee52e7d6ed2f1c4d9678ab7b9d785feb8fd7","user":{"login":"prisma","id":17219288,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE3MjE5Mjg4","avatar_url":"https://avatars0.githubusercontent.com/u/17219288?v=4","gravatar_id":"","url":"https://api.github.com/users/prisma","html_url":"https://github.com/prisma","followers_url":"https://api.github.com/users/prisma/followers","following_url":"https://api.github.com/users/prisma/following{/other_user}","gists_url":"https://api.github.com/users/prisma/gists{/gist_id}","starred_url":"https://api.github.com/users/prisma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prisma/subscriptions","organizations_url":"https://api.github.com/users/prisma/orgs","repos_url":"https://api.github.com/users/prisma/repos","events_url":"https://api.github.com/users/prisma/events{/privacy}","received_events_url":"https://api.github.com/users/prisma/received_events","type":"Organization","site_admin":false},"repo":{"id":69164196,"node_id":"MDEwOlJlcG9zaXRvcnk2OTE2NDE5Ng==","name":"prisma","full_name":"prisma/prisma","private":false,"owner":{"login":"prisma","id":17219288,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE3MjE5Mjg4","avatar_url":"https://avatars0.githubusercontent.com/u/17219288?v=4","gravatar_id":"","url":"https://api.github.com/users/prisma","html_url":"https://github.com/prisma","followers_url":"https://api.github.com/users/prisma/followers","following_url":"https://api.github.com/users/prisma/following{/other_user}","gists_url":"https://api.github.com/users/prisma/gists{/gist_id}","starred_url":"https://api.github.com/users/prisma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prisma/subscriptions","organizations_url":"https://api.github.com/users/prisma/orgs","repos_url":"https://api.github.com/users/prisma/repos","events_url":"https://api.github.com/users/prisma/events{/privacy}","received_events_url":"https://api.github.com/users/prisma/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/prisma/prisma","description":"⚡️ Prisma enables seamless type-safe database access & declarative data modeling","fork":false,"url":"https://api.github.com/repos/prisma/prisma","forks_url":"https://api.github.com/repos/prisma/prisma/forks","keys_url":"https://api.github.com/repos/prisma/prisma/keys{/key_id}","collaborators_url":"https://api.github.com/repos/prisma/prisma/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/prisma/prisma/teams","hooks_url":"https://api.github.com/repos/prisma/prisma/hooks","issue_events_url":"https://api.github.com/repos/prisma/prisma/issues/events{/number}","events_url":"https://api.github.com/repos/prisma/prisma/events","assignees_url":"https://api.github.com/repos/prisma/prisma/assignees{/user}","branches_url":"https://api.github.com/repos/prisma/prisma/branches{/branch}","tags_url":"https://api.github.com/repos/prisma/prisma/tags","blobs_url":"https://api.github.com/repos/prisma/prisma/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/prisma/prisma/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/prisma/prisma/git/refs{/sha}","trees_url":"https://api.github.com/repos/prisma/prisma/git/trees{/sha}","statuses_url":"https://api.github.com/repos/prisma/prisma/statuses/{sha}","languages_url":"https://api.github.com/repos/prisma/prisma/languages","stargazers_url":"https://api.github.com/repos/prisma/prisma/stargazers","contributors_url":"https://api.github.com/repos/prisma/prisma/contributors","subscribers_url":"https://api.github.com/repos/prisma/prisma/subscribers","subscription_url":"https://api.github.com/repos/prisma/prisma/subscription","commits_url":"https://api.github.com/repos/prisma/prisma/commits{/sha}","git_commits_url":"https://api.github.com/repos/prisma/prisma/git/commits{/sha}","comments_url":"https://api.github.com/repos/prisma/prisma/comments{/number}","issue_comment_url":"https://api.github.com/repos/prisma/prisma/issues/comments{/number}","contents_url":"https://api.github.com/repos/prisma/prisma/contents/{+path}","compare_url":"https://api.github.com/repos/prisma/prisma/compare/{base}...{head}","merges_url":"https://api.github.com/repos/prisma/prisma/merges","archive_url":"https://api.github.com/repos/prisma/prisma/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/prisma/prisma/downloads","issues_url":"https://api.github.com/repos/prisma/prisma/issues{/number}","pulls_url":"https://api.github.com/repos/prisma/prisma/pulls{/number}","milestones_url":"https://api.github.com/repos/prisma/prisma/milestones{/number}","notifications_url":"https://api.github.com/repos/prisma/prisma/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/prisma/prisma/labels{/name}","releases_url":"https://api.github.com/repos/prisma/prisma/releases{/id}","deployments_url":"https://api.github.com/repos/prisma/prisma/deployments","created_at":"2016-09-25T12:54:40Z","updated_at":"2018-12-19T11:59:49Z","pushed_at":"2018-12-19T11:07:12Z","git_url":"git://github.com/prisma/prisma.git","ssh_url":"git@github.com:prisma/prisma.git","clone_url":"https://github.com/prisma/prisma.git","svn_url":"https://github.com/prisma/prisma","homepage":"https://www.prisma.io","size":160557,"stargazers_count":11705,"watchers_count":11705,"language":"Scala","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":683,"mirror_url":null,"archived":false,"open_issues_count":524,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":683,"open_issues":524,"watchers":11705,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/prisma/prisma/pulls/3695"},"html":{"href":"https://github.com/prisma/prisma/pull/3695"},"issue":{"href":"https://api.github.com/repos/prisma/prisma/issues/3695"},"comments":{"href":"https://api.github.com/repos/prisma/prisma/issues/3695/comments"},"review_comments":{"href":"https://api.github.com/repos/prisma/prisma/pulls/3695/comments"},"review_comment":{"href":"https://api.github.com/repos/prisma/prisma/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/prisma/prisma/pulls/3695/commits"},"statuses":{"href":"https://api.github.com/repos/prisma/prisma/statuses/a13c5dac02e7c74a23ad94fe6f1eda98a227e8ef"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"codacy-bot"}}