-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild.sbt
More file actions
executable file
·74 lines (56 loc) · 2.17 KB
/
build.sbt
File metadata and controls
executable file
·74 lines (56 loc) · 2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import com.typesafe.sbt.packager.docker.{Cmd, ExecCmd}
import sjsonnew._
import sjsonnew.BasicJsonProtocol._
import sjsonnew.support.scalajson.unsafe._
name := "codacy-sqlint"
scalaVersion := "2.13.8"
libraryDependencies ++= Seq("com.codacy" %% "codacy-engine-scala-seed" % "5.0.3")
Universal / javaOptions ++= Seq("-XX:MinRAMPercentage=60.0", "-XX:MaxRAMPercentage=90.0")
enablePlugins(JavaAppPackaging)
enablePlugins(DockerPlugin)
version in Docker := "1.0"
lazy val toolVersion = settingKey[String]("The version of the underlying tool retrieved from patterns.json")
toolVersion := {
case class Patterns(name: String, version: String)
implicit val patternsIso: IsoLList[Patterns] =
LList.isoCurried((p: Patterns) => ("name", p.name) :*: ("version", p.version) :*: LNil) {
case (_, n) :*: (_, v) :*: LNil => Patterns(n, v)
}
val jsonFile = (resourceDirectory in Compile).value / "docs" / "patterns.json"
val json = Parser.parseFromFile(jsonFile)
val patterns = json.flatMap(Converter.fromJson[Patterns])
patterns.get.version
}
mappings in Universal ++= {
(Compile / resourceDirectory).map { resourceDir: File =>
val src = resourceDir / "docs"
val dest = "/docs"
for {
path <- src.allPaths.get if !path.isDirectory
} yield path -> path.toString.replaceFirst(src.toString, dest)
}
}.value
def installAll(toolVersion: String) =
s"""apk add --no-cache bash build-base ruby ruby-dev ruby-json &&
|gem install --no-document sqlint -v $toolVersion &&
|gem cleanup &&
|apk del build-base ruby-dev &&
|rm -rf /tmp/*""".stripMargin.replaceAll(System.lineSeparator(), " ")
val dockerUser = "docker"
val dockerGroup = "docker"
daemonUser in Docker := dockerUser
daemonGroup in Docker := dockerGroup
dockerBaseImage := "amazoncorretto:8-alpine3.17-jre"
dockerCommands := {
dockerCommands.value.flatMap {
case cmd @ Cmd("ADD", _) =>
List(
Cmd("RUN", s"adduser -u 2004 -D $dockerUser"),
cmd,
Cmd("RUN", installAll(toolVersion.value)),
Cmd("RUN", "mv /opt/docker/docs /docs"),
ExecCmd("RUN", "chown", "-R", s"$dockerUser:$dockerGroup", "/docs")
)
case other => List(other)
}
}