Skip to content
This repository was archived by the owner on Feb 19, 2020. It is now read-only.

Commit 54399ac

Browse files
committed
use codacy scala api
1 parent 159c2a7 commit 54399ac

File tree

8 files changed

+40
-198
lines changed

8 files changed

+40
-198
lines changed

build.sbt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Dependencies._
22

33
name := "sbt-codacy-coverage"
44

5-
version := "1.0.4"
5+
version := "1.1.0"
66

77
scalaVersion := "2.10.4"
88

@@ -19,9 +19,7 @@ resolvers ++= Seq(
1919
)
2020

2121
libraryDependencies ++= Seq(
22-
playJson,
23-
playWs,
24-
jGit,
22+
codacyScalaApi,
2523
scalaTest
2624
)
2725

project/Dependencies.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ import sbt._
22

33
object Dependencies {
44

5-
lazy val playJson = "com.typesafe.play" %% "play-json" % "2.3.8"
6-
lazy val playWs = "com.typesafe.play" %% "play-ws" % "2.3.8"
7-
lazy val jGit = "org.eclipse.jgit" % "org.eclipse.jgit" % "3.6.2.201501210735-r"
5+
lazy val codacyScalaApi = "com.codacy" %% "codacy-api-scala" % "1.0.0"
86
lazy val scalaTest = "org.scalatest" %% "scalatest" % "2.2.4" % "test"
97

108
}

src/main/scala/com/codacy/CodacyCoveragePlugin.scala

Lines changed: 31 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,28 @@ package com.codacy
22

33
import java.io.File
44

5-
import com.codacy.api.CodacyAPIClient
6-
import com.codacy.io.FileUtils
5+
import com.codacy.api.client.CodacyClient
6+
import com.codacy.api.helpers.FileHelper
7+
import com.codacy.api.service.CoverageServices
78
import com.codacy.parsers.CoberturaParser
8-
import com.codacy.vcs.GitClient
9-
import play.api.libs.json.Json
109
import sbt.Keys._
1110
import sbt._
1211

13-
import scala.util.Try
14-
1512
object CodacyCoveragePlugin extends AutoPlugin {
1613

1714
object autoImport {
1815
val codacyCoverage = taskKey[Unit]("Upload coverage reports to Codacy.")
1916
val codacyProjectToken = settingKey[Option[String]]("Your project token.")
20-
val codacyProjectTokenFile = settingKey[Option[String]]("Path for file containing your project token.")
2117
val coberturaFile = settingKey[File]("Path for project Cobertura file.")
2218
val codacyApiBaseUrl = settingKey[Option[String]]("The base URL for the Codacy API.")
2319

2420
lazy val baseSettings: Seq[Def.Setting[_]] = Seq(
2521
codacyCoverage := {
2622
codacyCoverageCommand(state.value, baseDirectory.value, coberturaFile.value,
2723
crossTarget.value / "coverage-report" / "codacy-coverage.json",
28-
codacyProjectToken.value, codacyProjectTokenFile.value, codacyApiBaseUrl.value)
24+
codacyProjectToken.value, codacyApiBaseUrl.value)
2925
},
3026
codacyProjectToken := None,
31-
codacyProjectTokenFile := None,
3227
codacyApiBaseUrl := None,
3328
coberturaFile := crossTarget.value / ("coverage-report" + File.separator + "cobertura.xml")
3429
)
@@ -45,64 +40,43 @@ object CodacyCoveragePlugin extends AutoPlugin {
4540
private val publicApiBaseUrl = "https://www.codacy.com"
4641

4742
private def codacyCoverageCommand(state: State, rootProjectDir: File, coberturaFile: File, codacyCoverageFile: File,
48-
codacyToken: Option[String], codacyTokenFile: Option[String], codacyApiBaseUrl: Option[String]): Unit = {
43+
codacyToken: Option[String], codacyApiBaseUrl: Option[String]): Unit = {
4944
implicit val logger: Logger = state.log
5045

51-
getProjectToken(codacyToken, codacyTokenFile).fold[State] {
52-
logger.error("Project token not defined.")
53-
state.exit(ok = false)
54-
} {
55-
projectToken =>
56-
Try {
57-
new GitClient(rootProjectDir).latestCommitUuid()
58-
}.toOption.fold[State] {
59-
logger.error("Could not get current commit.")
60-
state.exit(ok = false)
61-
} {
62-
commitUuid =>
63-
64-
logger.info(s"Preparing coverage data for commit ${commitUuid.take(7)}...")
65-
66-
FileUtils.get(coberturaFile).fold[State] {
67-
state.exit(ok = false)
68-
} {
69-
coberturaFile =>
70-
71-
val reader = new CoberturaParser(coberturaFile, rootProjectDir)
72-
val report = reader.generateReport()
73-
FileUtils.write(codacyCoverageFile, Json.toJson(report).toString())
74-
75-
logger.info(s"Uploading coverage data...")
76-
77-
new CodacyAPIClient().postCoverageFile(projectToken,
78-
commitUuid,
79-
codacyCoverageFile,
80-
getApiBaseUrl(codacyApiBaseUrl)).fold[State](
81-
error => {
82-
logger.error(s"Failed to upload data. Reason: $error")
83-
state.exit(ok = false)
84-
},
85-
response => {
86-
logger.success(s"Coverage data uploaded. $response")
87-
state
88-
})
89-
}
46+
FileHelper.withTokenAndCommit(codacyToken) {
47+
case (projectToken, commitUUID) =>
48+
49+
val reader = new CoberturaParser(coberturaFile, rootProjectDir)
50+
val report = reader.generateReport()
51+
52+
FileHelper.writeJsonToFile(codacyCoverageFile, report)
53+
54+
val codacyClient = new CodacyClient(getApiBaseUrl(codacyApiBaseUrl), Some(projectToken))
55+
val coverageServices = new CoverageServices(codacyClient)
56+
57+
coverageServices.sendReport(commitUUID, report) match {
58+
case requestResponse if requestResponse.hasError =>
59+
logger.error(s"Failed to upload data. Reason: ${requestResponse.message}")
60+
state.exit(ok = false)
61+
Left(requestResponse.message)
62+
case requestResponse =>
63+
logger.success(s"Coverage data uploaded. ${requestResponse.message}")
64+
Right(state)
9065
}
66+
} match {
67+
case Left(error) =>
68+
logger.error(error)
69+
state.exit(ok = false)
70+
case _ =>
9171
}
9272
}
9373

94-
private def getApiBaseUrl(codacyApiBaseUrl: Option[String]): String = {
74+
private def getApiBaseUrl(codacyApiBaseUrl: Option[String]): Option[String] = {
9575
// Check for an environment variable to override the API URL.
9676
// If it doesn't exist, try the build options or default to the public API.
9777
sys.env.get("CODACY_API_BASE_URL")
9878
.orElse(codacyApiBaseUrl)
99-
.getOrElse(publicApiBaseUrl)
100-
}
101-
102-
private def getProjectToken(codacyProjectToken: Option[String], codacyProjectTokenFile: Option[String]) = {
103-
sys.env.get("CODACY_PROJECT_TOKEN")
104-
.orElse(codacyProjectToken)
105-
.orElse(codacyProjectTokenFile.flatMap(FileUtils.read))
79+
.orElse(Some(publicApiBaseUrl))
10680
}
10781

10882
}

src/main/scala/com/codacy/api/CodacyAPIClient.scala

Lines changed: 0 additions & 36 deletions
This file was deleted.

src/main/scala/com/codacy/api/CodacyCoverageReport.scala

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/main/scala/com/codacy/io/FileUtils.scala

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/main/scala/com/codacy/parsers/CoberturaParser.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ package com.codacy.parsers
22

33
import java.io.File
44

5-
import com.codacy.api.{CodacyCoverageFileReport, CodacyCoverageReport}
5+
import com.codacy.api.{CoverageFileReport, CoverageReport}
66

77
import scala.xml.factory.XMLLoader
8-
import scala.xml.{SAXParser, Elem, Node}
8+
import scala.xml.{Elem, Node, SAXParser}
99

1010
object XML extends XMLLoader[Elem] {
1111
override def parser: SAXParser = {
@@ -26,7 +26,7 @@ class CoberturaParser(coberturaFile: File, rootProject: File) {
2626

2727
val rootProjectDir = rootProject.getAbsolutePath + File.separator
2828

29-
def generateReport(): CodacyCoverageReport = {
29+
def generateReport(): CoverageReport = {
3030
val total = (elem \\ "coverage" \ "@line-rate").headOption.map {
3131
total =>
3232
(total.text.toFloat * 100).toInt
@@ -39,10 +39,10 @@ class CoberturaParser(coberturaFile: File, rootProject: File) {
3939
lineCoverage(file)
4040
}.toSeq
4141

42-
CodacyCoverageReport(total, filesCoverage)
42+
CoverageReport(total, filesCoverage)
4343
}
4444

45-
private def lineCoverage(sourceFilename: String): CodacyCoverageFileReport = {
45+
private def lineCoverage(sourceFilename: String): CoverageFileReport = {
4646
val file = (elem \\ "class").filter {
4747
n: Node =>
4848
(n \\ "@filename").text == sourceFilename
@@ -66,7 +66,7 @@ class CoberturaParser(coberturaFile: File, rootProject: File) {
6666
key -> value
6767
}
6868

69-
CodacyCoverageFileReport(sanitiseFilename(sourceFilename), fileHit, lineHitMap)
69+
CoverageFileReport(sanitiseFilename(sourceFilename), fileHit, lineHitMap)
7070
}
7171

7272
private def sanitiseFilename(filename: String): String = {

src/main/scala/com/codacy/vcs/GitClient.scala

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)