aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/frontend/build.gradle.kts
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-04-08 22:56:44 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-04-08 22:58:21 +0200
commit561fac70fd3dc3ebe1cfbc50146757495fb828d5 (patch)
tree20aa72bbe438aaa70c8de264ff0d366758e7772d /subprojects/frontend/build.gradle.kts
parentrefactor: remove TupleLike (diff)
downloadrefinery-561fac70fd3dc3ebe1cfbc50146757495fb828d5.tar.gz
refinery-561fac70fd3dc3ebe1cfbc50146757495fb828d5.tar.zst
refinery-561fac70fd3dc3ebe1cfbc50146757495fb828d5.zip
build: convert Gradle scripts to Kotlin
Improves IDE support build scripts in IntelliJ. There is no Eclipse IDE support, but Eclipse didn't have support for Groovy either, so there is no degradation of functionality.
Diffstat (limited to 'subprojects/frontend/build.gradle.kts')
-rw-r--r--subprojects/frontend/build.gradle.kts127
1 files changed, 127 insertions, 0 deletions
diff --git a/subprojects/frontend/build.gradle.kts b/subprojects/frontend/build.gradle.kts
new file mode 100644
index 00000000..4a51c74e
--- /dev/null
+++ b/subprojects/frontend/build.gradle.kts
@@ -0,0 +1,127 @@
1import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn
2import tools.refinery.buildsrc.SonarPropertiesUtils
3
4plugins {
5 id("refinery-frontend-workspace")
6 id("refinery-sonarqube")
7}
8
9val viteOutputDir = "$buildDir/vite"
10val productionResources = file("$viteOutputDir/production")
11
12frontend {
13 assembleScript.set("run build")
14}
15
16val productionAssets: Configuration by configurations.creating {
17 isCanBeConsumed = true
18 isCanBeResolved = false
19}
20
21val sourcesWithoutTypeGen = fileTree("src") {
22 exclude("**/*.typegen.ts")
23}
24
25val generateXStateTypes by tasks.registering(RunYarn::class) {
26 dependsOn(tasks.installFrontend)
27 inputs.files(sourcesWithoutTypeGen)
28 inputs.file("package.json")
29 inputs.file(rootProject.file("yarn.lock"))
30 outputs.dir("src")
31 script.set("run typegen")
32 description = "Generate TypeScript typings for XState state machines."
33}
34
35tasks.assembleFrontend {
36 dependsOn(generateXStateTypes)
37 inputs.dir("public")
38 inputs.files(sourcesWithoutTypeGen)
39 inputs.file("index.html")
40 inputs.files("package.json", "tsconfig.json", "tsconfig.base.json", "vite.config.ts")
41 inputs.file(rootProject.file("yarn.lock"))
42 outputs.dir(productionResources)
43}
44
45artifacts {
46 add("productionAssets", productionResources) {
47 builtBy(tasks.assembleFrontend)
48 }
49}
50
51val typeCheckFrontend by tasks.registering(RunYarn::class) {
52 dependsOn(tasks.installFrontend)
53 dependsOn(generateXStateTypes)
54 inputs.dir("src")
55 inputs.dir("types")
56 inputs.files("package.json", "tsconfig.json", "tsconfig.base.json", "tsconfig.node.json")
57 inputs.file(rootProject.file("yarn.lock"))
58 outputs.dir("$buildDir/typescript")
59 script.set("run typecheck")
60 group = "verification"
61 description = "Check for TypeScript type errors."
62}
63
64val lintFrontend by tasks.registering(RunYarn::class) {
65 dependsOn(tasks.installFrontend)
66 dependsOn(generateXStateTypes)
67 dependsOn(typeCheckFrontend)
68 inputs.dir("src")
69 inputs.dir("types")
70 inputs.files(".eslintrc.cjs", "prettier.config.cjs")
71 inputs.files("package.json", "tsconfig.json", "tsconfig.base.json", "tsconfig.node.json")
72 inputs.file(rootProject.file("yarn.lock"))
73 if (project.hasProperty("ci")) {
74 outputs.file("$buildDir/eslint.json")
75 script.set("run lint:ci")
76 } else {
77 script.set("run lint")
78 }
79 group = "verification"
80 description = "Check for TypeScript lint errors and warnings."
81}
82
83val fixFrontend by tasks.registering(RunYarn::class) {
84 dependsOn(tasks.installFrontend)
85 dependsOn(generateXStateTypes)
86 dependsOn(typeCheckFrontend)
87 inputs.dir("src")
88 inputs.dir("types")
89 inputs.files(".eslintrc.cjs", "prettier.config.cjs")
90 inputs.files("package.json", "tsconfig.json", "tsconfig.base.json", "tsconfig.node.json")
91 inputs.file(rootProject.file("yarn.lock"))
92 script.set("run lint:fix")
93 group = "verification"
94 description = "Fix TypeScript lint errors and warnings."
95}
96
97tasks.check {
98 dependsOn(typeCheckFrontend)
99 dependsOn(lintFrontend)
100}
101
102tasks.register("serveFrontend", RunYarn::class) {
103 dependsOn(tasks.installFrontend)
104 dependsOn(generateXStateTypes)
105 inputs.dir("public")
106 inputs.files(sourcesWithoutTypeGen)
107 inputs.file("index.html")
108 inputs.files("package.json", "tsconfig.json", "tsconfig.base.json", "vite.config.ts")
109 inputs.file(rootProject.file("yarn.lock"))
110 outputs.dir("$viteOutputDir/development")
111 script.set("run serve")
112 group = "run"
113 description = "Start a Vite dev server with hot module replacement."
114}
115
116tasks.clean {
117 delete("dev-dist")
118 delete(fileTree("src") {
119 include("**/*.typegen.ts")
120 })
121}
122
123sonarqube.properties {
124 SonarPropertiesUtils.addToList(properties, "sonar.sources", "src")
125 property("sonar.nodejs.executable", "${frontend.nodeInstallDirectory.get()}/bin/node")
126 property("sonar.eslint.reportPaths", "$buildDir/eslint.json")
127}