{"action":"created","comment":{"url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/comments/86572787","pull_request_review_id":7226350,"id":86572787,"diff_hunk":"@@ -0,0 +1,177 @@\n+package rugds.sbt\n+\n+import sbt._\n+import sbt.Keys._\n+import java.util.jar._\n+import scala.collection.JavaConversions._\n+import net.virtualvoid.sbt.graph.DependencyGraphKeys._\n+import com.typesafe.sbt.packager.archetypes.JavaAppPackaging.autoImport.projectDependencyArtifacts\n+\n+\n+trait DockerDevEnvironment {\n+  lazy val envProjectDependencyTree = taskKey[Seq[(EnvModule, Set[EnvModule])]](\"tree of all project dependencies starting from root\")\n+  lazy val envDockerDependencyTree  = taskKey[Seq[(EnvDocker, Set[EnvDocker])]](\"tree of all docker dependencies starting from root\")\n+  lazy val envPullDockerImages      = taskKey[Set[String]]   (\"pulls all docker images from the central repository\")\n+  lazy val envStartDev              = taskKey[Set[EnvDocker]](\"start development environment\") // single vm (localhost by default?) single instance for each image, links between containers for dependencies (we should probably be more careful for jars, and build a tree of docker files, not just list as of now)\n+\n+  lazy val envDockerList            = taskKey[Set[EnvDocker]](\"list of project docker images (with Dockerfile defined)\")\n+  lazy val envDockerBuild           = taskKey[Set[EnvDocker]](\"builds all project docker images (excluding sub-projects)\")\n+\n+\n+  val dockerDevSettings = Seq (\n+    envProjectDependencyTree := {\n+      val sV  = scalaVersion.value\n+      val sbV = scalaBinaryVersion.value\n+      val mg  = (moduleGraph in Compile).value\n+      val projectJarDependencies = projectDependencyArtifacts.value.map(file =>\n+        file.metadata.get(moduleID.key)\n+          .map(m => CrossVersion(sV, sbV)(m))\n+          .map(m => toEnvModule(m, Some(new JarFile(file.data.getAbsoluteFile))))\n+          .getOrElse(throw new IllegalStateException(s\"moduleId.key is not defined for $file\")))\n+      val projectId = toEnvModule(CrossVersion(sV, sbV)(projectID.value))\n+      val jarDependencies = mg.dependencyMap.toList.filter {\n+        case (module, dependencies) => mg.module(module).isUsed // remove evicted modules\n+      }.map {\n+        case (module, dependencies) => {\n+          val envModule = EnvModule(module.name, module.organisation, module.version, mg.module(module).jarFile.map(x => new JarFile(x)))\n+          envModule -> dependencies\n+            .filter(_.isUsed) // evicted modules should not be used!\n+            .map(m => EnvModule(m.id.name, m.id.organisation, m.id.version, m.jarFile.map(x => new JarFile(x))))\n+            .toSet\n+        }\n+      }\n+        .filter {\n+          // remove dependencies that do not have docker (module)\n+          case (module, dependencies) => module.jarFile.map(containsDockerDependency).getOrElse(true)\n+        }\n+        .map {\n+          // remove dependencies that do not have docker (dependencies)\n+          case (module, dependencies) => module -> dependencies.filter(_.jarFile.map(containsDockerDependency).getOrElse(true))\n+        }\n+        .map {\n+          // replace project dependencies (with no jar) with its jar equivalents\n+          case (module, dependencies) =>\n+            val m = projectJarDependencies.find(_ == module).getOrElse(module)\n+            val d = dependencies.map(dm => projectJarDependencies.find(_ == dm).getOrElse(dm))\n+            m -> d\n+        }\n+        .filter {\n+          // remove projects without jar\n+          case (module, dependencies) => module.jarFile.isDefined\n+        }\n+        .map {\n+          // remove projects without jar in dependencies\n+          case (module, dependencies) => module -> dependencies.filter(_.jarFile.isDefined)\n+        }\n+      jarDependencies.map {\n+        case (module, dependencies) => if (module == projectId) module -> ((jarDependencies.toMap.keySet ++ dependencies) - module) else module -> dependencies\n+      }.sortWith {\n+        case ((m1, d1), (m2, d2)) => d2.contains(m1) || !d1.contains(m2)\n+      }\n+    },\n+\n+    envDockerDependencyTree := envProjectDependencyTree.value.flatMap {\n+      case (module, dependencies) => module.toEnvDocker.map(_ -> dependencies.flatMap(_.toEnvDocker))\n+    },\n+\n+    envPullDockerImages := {\n+      val log = streams.value.log\n+      envDockerDependencyTree.value.map {\n+        case (image, _) => image.toString\n+      }\n+      .map { image => {\n+        log.info(s\"docker images -q $image\")\n+        if (s\"docker images -q $image\".!!.isEmpty) {\n+          log.info(s\"docker pull $image\")\n+          if (s\"docker pull $image\".! != 0) {\n+            throw new IllegalStateException(s\"Cannot found or pull docker image: $image\")\n+          }\n+        }\n+        image\n+      }}.toSet\n+    },\n+\n+    envStartDev := {\n+      val log = streams.value.log\n+      val pdi = envPullDockerImages.value\n+//      val networkCmd = s\"docker -P\" // TODO: auto-create network if not yet created (or fail if exists?)\n+      val networkId = \"rugds-dev\"\n+      envDockerDependencyTree.value.map {\n+        case (docker, dependencies) =>\n+          val dockerPsCmd = Seq(\"docker\", \"ps\", \"-aq\", \"--format\", \"{{ .Names}}\"); log.info(dockerPsCmd.mkString(\" \"))\n+          if (!dockerPsCmd.lines.contains(docker.name)) { // if it does not exist => run it\n+            val dockerInspectCmd = Seq(\"docker\", \"inspect\", \"-f\", \"{{range $key, $item := .Config.ExposedPorts}}{{$key}} {{end}}\", docker.toString); log.info(dockerInspectCmd.mkString(\" \"))\n+            val dockerExposedPorts = dockerInspectCmd.!!\n+            val exposedPorts = dockerExposedPorts.trim.split(' ').map(port => port.split('/')).map(list => (list.head, list.last)).map {\n+              case (port, _) => s\"-p $port:$port\"\n+            }.mkString(\" \")\n+            val dockerRunCmd = s\"docker run -d --network=$networkId $exposedPorts --name ${docker.name} ${docker.toString}\"; log.info(dockerRunCmd)\n+            dockerRunCmd.!!\n+          }\n+          docker\n+      }.toSet\n+    },\n+\n+    envDockerList := (resources in Compile).value\n+      .filter(_.isDirectory)\n+      .filter(_.name == \"docker-dependencies\")\n+      .flatMap(_.listFiles)\n+      .flatMap(repo => {\n+        repo.listFiles.map(image => {\n+          val imageVersion = scala.io.Source.fromFile(image.getAbsolutePath + \"/version\").mkString\n+          val dockerBuild  = if (new File(image.getAbsolutePath + \"/Dockerfile\").exists()) Some(image) else None\n+          EnvDocker(repo.name, image.name, imageVersion, dockerBuild)\n+        })\n+      })\n+      .filter(_.file.isDefined)\n+      .toSet,\n+\n+    envDockerBuild := envDockerList.value","path":"src/main/scala/rugds/sbt/DockerDevEnvironment.scala","position":129,"original_position":129,"commit_id":"f1c3f5b7bacc8cc14d2c65e839ebbd30667e97e0","original_commit_id":"b2d8653f69109304ed01d1c1b314d0d9e0fcc1da","user":{"login":"BrianSetz","id":1055477,"avatar_url":"https://avatars.githubusercontent.com/u/1055477?v=3","gravatar_id":"","url":"https://api.github.com/users/BrianSetz","html_url":"https://github.com/BrianSetz","followers_url":"https://api.github.com/users/BrianSetz/followers","following_url":"https://api.github.com/users/BrianSetz/following{/other_user}","gists_url":"https://api.github.com/users/BrianSetz/gists{/gist_id}","starred_url":"https://api.github.com/users/BrianSetz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BrianSetz/subscriptions","organizations_url":"https://api.github.com/users/BrianSetz/orgs","repos_url":"https://api.github.com/users/BrianSetz/repos","events_url":"https://api.github.com/users/BrianSetz/events{/privacy}","received_events_url":"https://api.github.com/users/BrianSetz/received_events","type":"User","site_admin":false},"body":"See above comment, does this only build images for current project, or also for external","created_at":"2016-11-04T15:44:17Z","updated_at":"2016-11-04T15:44:17Z","html_url":"https://github.com/rug-ds-lab/sbt-scala-parent/pull/29#discussion_r86572787","pull_request_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/29","_links":{"self":{"href":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/comments/86572787"},"html":{"href":"https://github.com/rug-ds-lab/sbt-scala-parent/pull/29#discussion_r86572787"},"pull_request":{"href":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/29"}}},"pull_request":{"url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/29","id":92361579,"html_url":"https://github.com/rug-ds-lab/sbt-scala-parent/pull/29","diff_url":"https://github.com/rug-ds-lab/sbt-scala-parent/pull/29.diff","patch_url":"https://github.com/rug-ds-lab/sbt-scala-parent/pull/29.patch","issue_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/issues/29","number":29,"state":"open","locked":false,"title":"28 dev env docker","user":{"login":"lazovik","id":1056096,"avatar_url":"https://avatars.githubusercontent.com/u/1056096?v=3","gravatar_id":"","url":"https://api.github.com/users/lazovik","html_url":"https://github.com/lazovik","followers_url":"https://api.github.com/users/lazovik/followers","following_url":"https://api.github.com/users/lazovik/following{/other_user}","gists_url":"https://api.github.com/users/lazovik/gists{/gist_id}","starred_url":"https://api.github.com/users/lazovik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lazovik/subscriptions","organizations_url":"https://api.github.com/users/lazovik/orgs","repos_url":"https://api.github.com/users/lazovik/repos","events_url":"https://api.github.com/users/lazovik/events{/privacy}","received_events_url":"https://api.github.com/users/lazovik/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-11-04T15:31:09Z","updated_at":"2016-11-04T15:44:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ec762cdbd667bdb5077a3c3e9b9c3cabd02f7f72","assignee":{"login":"BrianSetz","id":1055477,"avatar_url":"https://avatars.githubusercontent.com/u/1055477?v=3","gravatar_id":"","url":"https://api.github.com/users/BrianSetz","html_url":"https://github.com/BrianSetz","followers_url":"https://api.github.com/users/BrianSetz/followers","following_url":"https://api.github.com/users/BrianSetz/following{/other_user}","gists_url":"https://api.github.com/users/BrianSetz/gists{/gist_id}","starred_url":"https://api.github.com/users/BrianSetz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BrianSetz/subscriptions","organizations_url":"https://api.github.com/users/BrianSetz/orgs","repos_url":"https://api.github.com/users/BrianSetz/repos","events_url":"https://api.github.com/users/BrianSetz/events{/privacy}","received_events_url":"https://api.github.com/users/BrianSetz/received_events","type":"User","site_admin":false},"assignees":[{"login":"BrianSetz","id":1055477,"avatar_url":"https://avatars.githubusercontent.com/u/1055477?v=3","gravatar_id":"","url":"https://api.github.com/users/BrianSetz","html_url":"https://github.com/BrianSetz","followers_url":"https://api.github.com/users/BrianSetz/followers","following_url":"https://api.github.com/users/BrianSetz/following{/other_user}","gists_url":"https://api.github.com/users/BrianSetz/gists{/gist_id}","starred_url":"https://api.github.com/users/BrianSetz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BrianSetz/subscriptions","organizations_url":"https://api.github.com/users/BrianSetz/orgs","repos_url":"https://api.github.com/users/BrianSetz/repos","events_url":"https://api.github.com/users/BrianSetz/events{/privacy}","received_events_url":"https://api.github.com/users/BrianSetz/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/29/commits","review_comments_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/29/comments","review_comment_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/issues/29/comments","statuses_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/statuses/f1c3f5b7bacc8cc14d2c65e839ebbd30667e97e0","head":{"label":"rug-ds-lab:28-dev-env-docker","ref":"28-dev-env-docker","sha":"f1c3f5b7bacc8cc14d2c65e839ebbd30667e97e0","user":{"login":"rug-ds-lab","id":6398206,"avatar_url":"https://avatars.githubusercontent.com/u/6398206?v=3","gravatar_id":"","url":"https://api.github.com/users/rug-ds-lab","html_url":"https://github.com/rug-ds-lab","followers_url":"https://api.github.com/users/rug-ds-lab/followers","following_url":"https://api.github.com/users/rug-ds-lab/following{/other_user}","gists_url":"https://api.github.com/users/rug-ds-lab/gists{/gist_id}","starred_url":"https://api.github.com/users/rug-ds-lab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rug-ds-lab/subscriptions","organizations_url":"https://api.github.com/users/rug-ds-lab/orgs","repos_url":"https://api.github.com/users/rug-ds-lab/repos","events_url":"https://api.github.com/users/rug-ds-lab/events{/privacy}","received_events_url":"https://api.github.com/users/rug-ds-lab/received_events","type":"Organization","site_admin":false},"repo":{"id":22610293,"name":"sbt-scala-parent","full_name":"rug-ds-lab/sbt-scala-parent","owner":{"login":"rug-ds-lab","id":6398206,"avatar_url":"https://avatars.githubusercontent.com/u/6398206?v=3","gravatar_id":"","url":"https://api.github.com/users/rug-ds-lab","html_url":"https://github.com/rug-ds-lab","followers_url":"https://api.github.com/users/rug-ds-lab/followers","following_url":"https://api.github.com/users/rug-ds-lab/following{/other_user}","gists_url":"https://api.github.com/users/rug-ds-lab/gists{/gist_id}","starred_url":"https://api.github.com/users/rug-ds-lab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rug-ds-lab/subscriptions","organizations_url":"https://api.github.com/users/rug-ds-lab/orgs","repos_url":"https://api.github.com/users/rug-ds-lab/repos","events_url":"https://api.github.com/users/rug-ds-lab/events{/privacy}","received_events_url":"https://api.github.com/users/rug-ds-lab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rug-ds-lab/sbt-scala-parent","description":"sbt plugin simplifying creating new sbt-based scala projects","fork":false,"url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent","forks_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/forks","keys_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/teams","hooks_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/hooks","issue_events_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/issues/events{/number}","events_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/events","assignees_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/assignees{/user}","branches_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/branches{/branch}","tags_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/tags","blobs_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/git/refs{/sha}","trees_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/statuses/{sha}","languages_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/languages","stargazers_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/stargazers","contributors_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/contributors","subscribers_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/subscribers","subscription_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/subscription","commits_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/commits{/sha}","git_commits_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/git/commits{/sha}","comments_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/comments{/number}","issue_comment_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/issues/comments{/number}","contents_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/contents/{+path}","compare_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/merges","archive_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/downloads","issues_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/issues{/number}","pulls_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls{/number}","milestones_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/milestones{/number}","notifications_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/labels{/name}","releases_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/releases{/id}","deployments_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/deployments","created_at":"2014-08-04T15:55:46Z","updated_at":"2016-11-04T12:32:36Z","pushed_at":"2016-11-04T15:44:01Z","git_url":"git://github.com/rug-ds-lab/sbt-scala-parent.git","ssh_url":"git@github.com:rug-ds-lab/sbt-scala-parent.git","clone_url":"https://github.com/rug-ds-lab/sbt-scala-parent.git","svn_url":"https://github.com/rug-ds-lab/sbt-scala-parent","homepage":null,"size":111,"stargazers_count":1,"watchers_count":1,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":8,"forks":1,"open_issues":8,"watchers":1,"default_branch":"master"}},"base":{"label":"rug-ds-lab:master","ref":"master","sha":"0bcd912908eb4c9c03c48e0128deb7aaacc5d223","user":{"login":"rug-ds-lab","id":6398206,"avatar_url":"https://avatars.githubusercontent.com/u/6398206?v=3","gravatar_id":"","url":"https://api.github.com/users/rug-ds-lab","html_url":"https://github.com/rug-ds-lab","followers_url":"https://api.github.com/users/rug-ds-lab/followers","following_url":"https://api.github.com/users/rug-ds-lab/following{/other_user}","gists_url":"https://api.github.com/users/rug-ds-lab/gists{/gist_id}","starred_url":"https://api.github.com/users/rug-ds-lab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rug-ds-lab/subscriptions","organizations_url":"https://api.github.com/users/rug-ds-lab/orgs","repos_url":"https://api.github.com/users/rug-ds-lab/repos","events_url":"https://api.github.com/users/rug-ds-lab/events{/privacy}","received_events_url":"https://api.github.com/users/rug-ds-lab/received_events","type":"Organization","site_admin":false},"repo":{"id":22610293,"name":"sbt-scala-parent","full_name":"rug-ds-lab/sbt-scala-parent","owner":{"login":"rug-ds-lab","id":6398206,"avatar_url":"https://avatars.githubusercontent.com/u/6398206?v=3","gravatar_id":"","url":"https://api.github.com/users/rug-ds-lab","html_url":"https://github.com/rug-ds-lab","followers_url":"https://api.github.com/users/rug-ds-lab/followers","following_url":"https://api.github.com/users/rug-ds-lab/following{/other_user}","gists_url":"https://api.github.com/users/rug-ds-lab/gists{/gist_id}","starred_url":"https://api.github.com/users/rug-ds-lab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rug-ds-lab/subscriptions","organizations_url":"https://api.github.com/users/rug-ds-lab/orgs","repos_url":"https://api.github.com/users/rug-ds-lab/repos","events_url":"https://api.github.com/users/rug-ds-lab/events{/privacy}","received_events_url":"https://api.github.com/users/rug-ds-lab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rug-ds-lab/sbt-scala-parent","description":"sbt plugin simplifying creating new sbt-based scala projects","fork":false,"url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent","forks_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/forks","keys_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/teams","hooks_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/hooks","issue_events_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/issues/events{/number}","events_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/events","assignees_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/assignees{/user}","branches_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/branches{/branch}","tags_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/tags","blobs_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/git/refs{/sha}","trees_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/statuses/{sha}","languages_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/languages","stargazers_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/stargazers","contributors_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/contributors","subscribers_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/subscribers","subscription_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/subscription","commits_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/commits{/sha}","git_commits_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/git/commits{/sha}","comments_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/comments{/number}","issue_comment_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/issues/comments{/number}","contents_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/contents/{+path}","compare_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/merges","archive_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/downloads","issues_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/issues{/number}","pulls_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls{/number}","milestones_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/milestones{/number}","notifications_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/labels{/name}","releases_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/releases{/id}","deployments_url":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/deployments","created_at":"2014-08-04T15:55:46Z","updated_at":"2016-11-04T12:32:36Z","pushed_at":"2016-11-04T15:44:01Z","git_url":"git://github.com/rug-ds-lab/sbt-scala-parent.git","ssh_url":"git@github.com:rug-ds-lab/sbt-scala-parent.git","clone_url":"https://github.com/rug-ds-lab/sbt-scala-parent.git","svn_url":"https://github.com/rug-ds-lab/sbt-scala-parent","homepage":null,"size":111,"stargazers_count":1,"watchers_count":1,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":8,"forks":1,"open_issues":8,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/29"},"html":{"href":"https://github.com/rug-ds-lab/sbt-scala-parent/pull/29"},"issue":{"href":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/issues/29"},"comments":{"href":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/issues/29/comments"},"review_comments":{"href":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/29/comments"},"review_comment":{"href":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/pulls/29/commits"},"statuses":{"href":"https://api.github.com/repos/rug-ds-lab/sbt-scala-parent/statuses/f1c3f5b7bacc8cc14d2c65e839ebbd30667e97e0"}}}}
{"actor":{"display_login":"BrianSetz"}}