1
+ import scala .sys .process .Process
2
+
3
+ /*
4
+ * UI Build Scripts
5
+ */
6
+ val Success = 0 // 0 exit code
7
+ val Error = 1 // 1 exit code
8
+
9
+ PlayKeys .playRunHooks += baseDirectory.map(AngularBuild .apply).value
10
+
11
+ val isWindows = System .getProperty(" os.name" ).toLowerCase().contains(" win" )
12
+
13
+ def runScript (script : String )(implicit dir : File ): Int = {
14
+ if (isWindows){ Process (" cmd /c " + script, dir) } else { Process (script, dir) } }!
15
+
16
+ def uiWasInstalled (implicit dir : File ): Boolean = (dir / " node_modules" ).exists()
17
+
18
+ def runNpmInstall (implicit dir : File ): Int =
19
+ if (uiWasInstalled) Success else runScript(" npm install" )
20
+
21
+ def ifUiInstalled (task : => Int )(implicit dir : File ): Int =
22
+ if (runNpmInstall == Success ) task
23
+ else Error
24
+
25
+ // Include UI production build task here.
26
+ def runProdBuild (implicit dir : File ): Int = ifUiInstalled(runScript(" npm run build-prod" ))
27
+
28
+ // Include UI development build task here.
29
+ def runDevBuild (implicit dir : File ): Int = ifUiInstalled(runScript(" npm run build-dev" ))
30
+
31
+ // Include UI test build task here.
32
+ def runUiTests (implicit dir : File ): Int = ifUiInstalled(runScript(" npm run test-no-watch" ))
33
+
34
+ lazy val `ui-dev-build` = TaskKey [Unit ](" Run UI build when developing the application." )
35
+
36
+ `ui-dev-build` := {
37
+ implicit val userInterfaceRoot = baseDirectory.value / " ui"
38
+ if (runDevBuild != Success ) throw new Exception (" Oops! UI Build crashed." )
39
+ }
40
+
41
+ lazy val `ui-prod-build` = TaskKey [Unit ](" Run UI build when packaging the application." )
42
+
43
+ `ui-prod-build` := {
44
+ implicit val userInterfaceRoot = baseDirectory.value / " ui"
45
+ if (runProdBuild != Success ) throw new Exception (" Oops! UI Build crashed." )
46
+ }
47
+
48
+ lazy val `ui-test` = TaskKey [Unit ](" Run UI tests when testing application." )
49
+
50
+ `ui-test` := {
51
+ implicit val userInterfaceRoot = baseDirectory.value / " ui"
52
+ if (runUiTests != Success ) throw new Exception (" UI tests failed!" )
53
+ }
54
+
55
+ `ui-test` := (`ui-test` dependsOn `ui-dev-build`).value
56
+
57
+ dist := (dist dependsOn `ui-prod-build`).value
58
+
59
+ stage := (stage dependsOn `ui-prod-build`).value
60
+
61
+ test := ((test in Test ) dependsOn `ui-test`).value
0 commit comments