aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/frontend
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
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')
-rw-r--r--subprojects/frontend/build.gradle131
-rw-r--r--subprojects/frontend/build.gradle.kts127
2 files changed, 127 insertions, 131 deletions
diff --git a/subprojects/frontend/build.gradle b/subprojects/frontend/build.gradle
deleted file mode 100644
index 4cc2c5d7..00000000
--- a/subprojects/frontend/build.gradle
+++ /dev/null
@@ -1,131 +0,0 @@
1plugins {
2 id 'refinery-frontend-workspace'
3 id 'refinery-sonarqube'
4}
5
6import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn
7
8def viteOutputDir = "${buildDir}/vite"
9def productionResources = file("${viteOutputDir}/production")
10
11frontend {
12 assembleScript = 'run build'
13}
14
15configurations {
16 productionAssets {
17 canBeConsumed = true
18 canBeResolved = false
19 }
20}
21
22def installFrontend = tasks.named('installFrontend')
23
24def sourcesWithoutTypegen = fileTree('src') {
25 exclude '**/*.typegen.ts'
26}
27
28def assembleFrontend = tasks.named('assembleFrontend')
29assembleFrontend.configure {
30 dependsOn generateXStateTypes
31 inputs.dir 'public'
32 inputs.files sourcesWithoutTypegen
33 inputs.file 'index.html'
34 inputs.files('package.json', 'tsconfig.json', 'tsconfig.base.json', 'vite.config.ts')
35 inputs.file rootProject.file('yarn.lock')
36 outputs.dir productionResources
37}
38
39artifacts {
40 productionAssets(productionResources) {
41 builtBy assembleFrontend
42 }
43}
44
45def generateXStateTypes = tasks.register('generateXStateTypes', RunYarn) {
46 dependsOn installFrontend
47 inputs.files sourcesWithoutTypegen
48 inputs.file 'package.json'
49 inputs.file rootProject.file('yarn.lock')
50 outputs.dir 'src'
51 script = 'run typegen'
52 description = 'Generate TypeScript typings for XState state machines.'
53}
54
55def typecheckFrontend = tasks.register('typecheckFrontend', RunYarn) {
56 dependsOn installFrontend
57 dependsOn generateXStateTypes
58 inputs.dir 'src'
59 inputs.dir 'types'
60 inputs.files('package.json', 'tsconfig.json', 'tsconfig.base.json', 'tsconfig.node.json')
61 inputs.file rootProject.file('yarn.lock')
62 outputs.dir "${buildDir}/typescript"
63 script = 'run typecheck'
64 group = 'verification'
65 description = 'Check for TypeScript type errors.'
66}
67
68def lintFrontend = tasks.register('lintFrontend', RunYarn) {
69 dependsOn installFrontend
70 dependsOn generateXStateTypes
71 dependsOn typecheckFrontend
72 inputs.dir 'src'
73 inputs.dir 'types'
74 inputs.files('.eslintrc.cjs', 'prettier.config.cjs')
75 inputs.files('package.json', 'tsconfig.json', 'tsconfig.base.json', 'tsconfig.node.json')
76 inputs.file rootProject.file('yarn.lock')
77 if (project.hasProperty('ci')) {
78 outputs.file "${buildDir}/eslint.json"
79 script = 'run lint:ci'
80 } else {
81 script = 'run lint'
82 }
83 group = 'verification'
84 description = 'Check for TypeScript lint errors and warnings.'
85}
86
87def prettier = tasks.register('fixFrontend', RunYarn) {
88 dependsOn installFrontend
89 dependsOn generateXStateTypes
90 dependsOn typecheckFrontend
91 inputs.dir 'src'
92 inputs.dir 'types'
93 inputs.files('.eslintrc.cjs', 'prettier.config.cjs')
94 inputs.files('package.json', 'tsconfig.json', 'tsconfig.base.json', 'tsconfig.node.json')
95 inputs.file rootProject.file('yarn.lock')
96 script = 'run lint:fix'
97 group = 'verification'
98 description = 'Fix TypeScript lint errors and warnings.'
99}
100
101tasks.named('check') {
102 dependsOn(typecheckFrontend)
103 dependsOn(lintFrontend)
104}
105
106tasks.register('serveFrontend', RunYarn) {
107 dependsOn installFrontend
108 dependsOn generateXStateTypes
109 inputs.dir 'public'
110 inputs.files sourcesWithoutTypegen
111 inputs.file 'index.html'
112 inputs.files('package.json', 'tsconfig.json', 'tsconfig.base.json', 'vite.config.ts')
113 inputs.file rootProject.file('yarn.lock')
114 outputs.dir "${viteOutputDir}/development"
115 script = 'run serve'
116 group = 'run'
117 description = 'Start a Vite dev server with hot module replacement.'
118}
119
120tasks.named('clean') {
121 delete 'dev-dist'
122 delete fileTree('src') {
123 include '**/*.typegen.ts'
124 }
125}
126
127sonarqube.properties {
128 properties['sonar.sources'] = 'src'
129 property 'sonar.nodejs.executable', "${frontend.nodeInstallDirectory.get()}/bin/node"
130 property 'sonar.eslint.reportPaths', "${buildDir}/eslint.json"
131}
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}