aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-04-09 02:54:51 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-04-09 19:07:32 +0200
commitd904e2150319439053d89c723733463c4810bde9 (patch)
tree974068147ce55eda08a27f8fa08e833f4f7d701e /subprojects
parentbuild: avoid repeating task names in build scripts (diff)
downloadrefinery-d904e2150319439053d89c723733463c4810bde9.tar.gz
refinery-d904e2150319439053d89c723733463c4810bde9.tar.zst
refinery-d904e2150319439053d89c723733463c4810bde9.zip
build: organize build scripts into packages
Also take advantage of precompiled Kotlin scripts to write build scripts in a more straightforward manner through generated accessors. Might increase memory usage of Gradle.
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/frontend/build.gradle.kts140
-rw-r--r--subprojects/language-ide/build.gradle.kts4
-rw-r--r--subprojects/language-model/build.gradle.kts40
-rw-r--r--subprojects/language-semantics/build.gradle.kts2
-rw-r--r--subprojects/language-web/build.gradle.kts94
-rw-r--r--subprojects/language/build.gradle.kts64
-rw-r--r--subprojects/store-query-viatra/build.gradle.kts2
-rw-r--r--subprojects/store-query/build.gradle.kts4
-rw-r--r--subprojects/store-reasoning/build.gradle.kts2
-rw-r--r--subprojects/store/build.gradle.kts4
10 files changed, 183 insertions, 173 deletions
diff --git a/subprojects/frontend/build.gradle.kts b/subprojects/frontend/build.gradle.kts
index ab2f61c9..80f10f7e 100644
--- a/subprojects/frontend/build.gradle.kts
+++ b/subprojects/frontend/build.gradle.kts
@@ -1,18 +1,19 @@
1import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn 1import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn
2import tools.refinery.buildsrc.SonarPropertiesUtils 2import tools.refinery.gradle.utils.SonarPropertiesUtils
3 3
4plugins { 4plugins {
5 id("refinery-frontend-workspace") 5 id("tools.refinery.gradle.frontend-workspace")
6 id("refinery-sonarqube") 6 id("tools.refinery.gradle.sonarqube")
7} 7}
8 8
9val viteOutputDir = "$buildDir/vite"
10val productionResources = file("$viteOutputDir/production")
11
12frontend { 9frontend {
13 assembleScript.set("run build") 10 assembleScript.set("run build")
14} 11}
15 12
13val viteOutputDir = "$buildDir/vite"
14
15val productionResources = file("$viteOutputDir/production")
16
16val productionAssets: Configuration by configurations.creating { 17val productionAssets: Configuration by configurations.creating {
17 isCanBeConsumed = true 18 isCanBeConsumed = true
18 isCanBeResolved = false 19 isCanBeResolved = false
@@ -53,78 +54,81 @@ val assembleFiles = assembleSources + assembleConfigFiles
53 54
54val lintingFiles = sourcesWithTypes + buildScripts + sharedConfigFiles 55val lintingFiles = sourcesWithTypes + buildScripts + sharedConfigFiles
55 56
56val generateXStateTypes by tasks.registering(RunYarn::class) { 57tasks {
57 dependsOn(tasks.installFrontend) 58 val generateXStateTypes by registering(RunYarn::class) {
58 inputs.files(sourcesWithoutTypes) 59 dependsOn(installFrontend)
59 inputs.files(installationState) 60 inputs.files(sourcesWithoutTypes)
60 outputs.dir("src") 61 inputs.files(installationState)
61 script.set("run typegen") 62 outputs.dir("src")
62 description = "Generate TypeScript typings for XState state machines." 63 script.set("run typegen")
63} 64 description = "Generate TypeScript typings for XState state machines."
65 }
64 66
65tasks.assembleFrontend { 67 assembleFrontend {
66 dependsOn(generateXStateTypes) 68 dependsOn(generateXStateTypes)
67 inputs.files(assembleFiles) 69 inputs.files(assembleFiles)
68 outputs.dir(productionResources) 70 outputs.dir(productionResources)
69} 71 }
70 72
71artifacts { 73
72 add("productionAssets", productionResources) { 74 val typeCheckFrontend by registering(RunYarn::class) {
73 builtBy(tasks.assembleFrontend) 75 dependsOn(installFrontend)
76 dependsOn(generateXStateTypes)
77 inputs.files(lintingFiles)
78 outputs.dir("$buildDir/typescript")
79 script.set("run typecheck")
80 group = "verification"
81 description = "Check for TypeScript type errors."
74 } 82 }
75}
76 83
77val typeCheckFrontend by tasks.registering(RunYarn::class) { 84 val lintFrontend by registering(RunYarn::class) {
78 dependsOn(tasks.installFrontend) 85 dependsOn(installFrontend)
79 dependsOn(generateXStateTypes) 86 dependsOn(generateXStateTypes)
80 inputs.files(lintingFiles) 87 dependsOn(typeCheckFrontend)
81 outputs.dir("$buildDir/typescript") 88 inputs.files(lintingFiles)
82 script.set("run typecheck") 89 outputs.file("$buildDir/eslint.json")
83 group = "verification" 90 script.set("run lint")
84 description = "Check for TypeScript type errors." 91 group = "verification"
85} 92 description = "Check for TypeScript lint errors and warnings."
93 }
86 94
87val lintFrontend by tasks.registering(RunYarn::class) { 95 register<RunYarn>("fixFrontend") {
88 dependsOn(tasks.installFrontend) 96 dependsOn(installFrontend)
89 dependsOn(generateXStateTypes) 97 dependsOn(generateXStateTypes)
90 dependsOn(typeCheckFrontend) 98 dependsOn(typeCheckFrontend)
91 inputs.files(lintingFiles) 99 inputs.files(lintingFiles)
92 outputs.file("$buildDir/eslint.json") 100 script.set("run lint:fix")
93 script.set("run lint") 101 group = "verification"
94 group = "verification" 102 description = "Fix TypeScript lint errors and warnings."
95 description = "Check for TypeScript lint errors and warnings." 103 }
96}
97 104
98val fixFrontend by tasks.registering(RunYarn::class) { 105 check {
99 dependsOn(tasks.installFrontend) 106 dependsOn(typeCheckFrontend)
100 dependsOn(generateXStateTypes) 107 dependsOn(lintFrontend)
101 dependsOn(typeCheckFrontend) 108 }
102 inputs.files(lintingFiles)
103 script.set("run lint:fix")
104 group = "verification"
105 description = "Fix TypeScript lint errors and warnings."
106}
107 109
108tasks.check { 110 register<RunYarn>("serveFrontend") {
109 dependsOn(typeCheckFrontend) 111 dependsOn(installFrontend)
110 dependsOn(lintFrontend) 112 dependsOn(generateXStateTypes)
111} 113 inputs.files(assembleFiles)
114 outputs.dir("$viteOutputDir/development")
115 script.set("run serve")
116 group = "run"
117 description = "Start a Vite dev server with hot module replacement."
118 }
112 119
113tasks.register<RunYarn>("serveFrontend") { 120 clean {
114 dependsOn(tasks.installFrontend) 121 delete("dev-dist")
115 dependsOn(generateXStateTypes) 122 delete(fileTree("src") {
116 inputs.files(assembleFiles) 123 include("**/*.typegen.ts")
117 outputs.dir("$viteOutputDir/development") 124 })
118 script.set("run serve") 125 }
119 group = "run"
120 description = "Start a Vite dev server with hot module replacement."
121} 126}
122 127
123tasks.clean { 128artifacts {
124 delete("dev-dist") 129 add("productionAssets", productionResources) {
125 delete(fileTree("src") { 130 builtBy(tasks.assembleFrontend)
126 include("**/*.typegen.ts") 131 }
127 })
128} 132}
129 133
130sonarqube.properties { 134sonarqube.properties {
diff --git a/subprojects/language-ide/build.gradle.kts b/subprojects/language-ide/build.gradle.kts
index 28a460e8..f996c00d 100644
--- a/subprojects/language-ide/build.gradle.kts
+++ b/subprojects/language-ide/build.gradle.kts
@@ -1,6 +1,6 @@
1plugins { 1plugins {
2 id("refinery-java-library") 2 id("tools.refinery.gradle.java-library")
3 id("refinery-xtext-conventions") 3 id("tools.refinery.gradle.xtext-generated")
4} 4}
5 5
6dependencies { 6dependencies {
diff --git a/subprojects/language-model/build.gradle.kts b/subprojects/language-model/build.gradle.kts
index 2804c698..12b6bc13 100644
--- a/subprojects/language-model/build.gradle.kts
+++ b/subprojects/language-model/build.gradle.kts
@@ -1,9 +1,9 @@
1import tools.refinery.buildsrc.SonarPropertiesUtils 1import tools.refinery.gradle.utils.SonarPropertiesUtils
2 2
3plugins { 3plugins {
4 id("refinery-java-library") 4 id("tools.refinery.gradle.java-library")
5 id("refinery-mwe2") 5 id("tools.refinery.gradle.mwe2")
6 id("refinery-sonarqube") 6 id("tools.refinery.gradle.sonarqube")
7} 7}
8 8
9dependencies { 9dependencies {
@@ -22,24 +22,26 @@ sourceSets {
22 } 22 }
23} 23}
24 24
25val generateEPackage by tasks.registering(JavaExec::class) { 25tasks {
26 mainClass.set("org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher") 26 val generateEPackage by registering(JavaExec::class) {
27 classpath(configurations.mwe2) 27 mainClass.set("org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher")
28 inputs.file("src/main/java/tools/refinery/language/model/GenerateProblemModel.mwe2") 28 classpath(configurations.mwe2)
29 inputs.file("src/main/resources/model/problem.ecore") 29 inputs.file("src/main/java/tools/refinery/language/model/GenerateProblemModel.mwe2")
30 inputs.file("src/main/resources/model/problem.genmodel") 30 inputs.file("src/main/resources/model/problem.ecore")
31 outputs.dir("src/main/emf-gen") 31 inputs.file("src/main/resources/model/problem.genmodel")
32 args("src/main/java/tools/refinery/language/model/GenerateProblemModel.mwe2", "-p", "rootPath=/$projectDir") 32 outputs.dir("src/main/emf-gen")
33} 33 args("src/main/java/tools/refinery/language/model/GenerateProblemModel.mwe2", "-p", "rootPath=/$projectDir")
34 }
34 35
35for (taskName in listOf("compileJava", "processResources", "generateEclipseSourceFolders")) { 36 for (taskName in listOf("compileJava", "processResources", "generateEclipseSourceFolders")) {
36 tasks.named(taskName) { 37 named(taskName) {
37 dependsOn(generateEPackage) 38 dependsOn(generateEPackage)
39 }
38 } 40 }
39}
40 41
41tasks.clean { 42 clean {
42 delete("src/main/emf-gen") 43 delete("src/main/emf-gen")
44 }
43} 45}
44 46
45sonarqube.properties { 47sonarqube.properties {
diff --git a/subprojects/language-semantics/build.gradle.kts b/subprojects/language-semantics/build.gradle.kts
index e13e5e4a..bf016dc9 100644
--- a/subprojects/language-semantics/build.gradle.kts
+++ b/subprojects/language-semantics/build.gradle.kts
@@ -1,5 +1,5 @@
1plugins { 1plugins {
2 id("refinery-java-library") 2 id("tools.refinery.gradle.java-library")
3} 3}
4 4
5dependencies { 5dependencies {
diff --git a/subprojects/language-web/build.gradle.kts b/subprojects/language-web/build.gradle.kts
index b59763a8..d2a39d56 100644
--- a/subprojects/language-web/build.gradle.kts
+++ b/subprojects/language-web/build.gradle.kts
@@ -1,6 +1,6 @@
1plugins { 1plugins {
2 id("refinery-java-application") 2 id("tools.refinery.gradle.java-application")
3 id("refinery-xtext-conventions") 3 id("tools.refinery.gradle.xtext-generated")
4} 4}
5 5
6val webapp: Configuration by configurations.creating { 6val webapp: Configuration by configurations.creating {
@@ -21,64 +21,66 @@ dependencies {
21 testImplementation(libs.jetty.websocket.client) 21 testImplementation(libs.jetty.websocket.client)
22} 22}
23 23
24val generateXtextLanguage by project(":refinery-language").tasks.existing
25
26for (taskName in listOf("compileJava", "processResources")) {
27 tasks.named(taskName) {
28 dependsOn(generateXtextLanguage)
29 }
30}
31
32application { 24application {
33 mainClass.set("tools.refinery.language.web.ServerLauncher") 25 mainClass.set("tools.refinery.language.web.ServerLauncher")
34 // Enable JDK 19 preview features for virtual thread support. 26 // Enable JDK 19 preview features for virtual thread support.
35 applicationDefaultJvmArgs += "--enable-preview" 27 applicationDefaultJvmArgs += "--enable-preview"
36} 28}
37 29
38tasks.withType(JavaCompile::class) {
39 options.release.set(19)
40 // Enable JDK 19 preview features for virtual thread support.
41 options.compilerArgs.plusAssign("--enable-preview")
42}
43
44// Enable JDK 19 preview features for virtual thread support. 30// Enable JDK 19 preview features for virtual thread support.
45fun enablePreview(task: JavaForkOptions) { 31fun enablePreview(task: JavaForkOptions) {
46 task.jvmArgs("--enable-preview") 32 task.jvmArgs("--enable-preview")
47} 33}
48 34
49tasks.withType(Test::class) { 35tasks {
50 enablePreview(this) 36 val generateXtextLanguage by project(":refinery-language").tasks.existing
51}
52 37
53tasks.jar { 38 for (taskName in listOf("compileJava", "processResources")) {
54 dependsOn(webapp) 39 named(taskName) {
55 from(webapp) { 40 dependsOn(generateXtextLanguage)
56 into("webapp") 41 }
57 } 42 }
58}
59 43
60tasks.shadowJar { 44 withType(JavaCompile::class) {
61 dependsOn(webapp) 45 options.release.set(19)
62 from(project.sourceSets.main.map { it.output }) 46 // Enable JDK 19 preview features for virtual thread support.
63 exclude("META-INF/INDEX.LIST", "META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA","schema/*", 47 options.compilerArgs.plusAssign("--enable-preview")
64 ".options", ".api_description", "*.profile", "about.*", "about_*.html", "about_files/*", 48 }
65 "plugin.xml", "systembundle.properties", "profile.list", "META-INF/resources/xtext/**") 49
66 append("plugin.properties") 50 withType(Test::class) {
67 from(webapp) { 51 enablePreview(this)
68 into("webapp") 52 }
53
54 jar {
55 dependsOn(webapp)
56 from(webapp) {
57 into("webapp")
58 }
59 }
60
61 shadowJar {
62 dependsOn(webapp)
63 from(project.sourceSets.main.map { it.output })
64 exclude("META-INF/INDEX.LIST", "META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA", "schema/*",
65 ".options", ".api_description", "*.profile", "about.*", "about_*.html", "about_files/*",
66 "plugin.xml", "systembundle.properties", "profile.list", "META-INF/resources/xtext/**")
67 append("plugin.properties")
68 from(webapp) {
69 into("webapp")
70 }
69 } 71 }
70}
71 72
72tasks.register<JavaExec>("serveBackend") { 73 register<JavaExec>("serveBackend") {
73 dependsOn(webapp) 74 dependsOn(webapp)
74 val mainRuntimeClasspath = sourceSets.main.map { it.runtimeClasspath } 75 val mainRuntimeClasspath = sourceSets.main.map { it.runtimeClasspath }
75 dependsOn(mainRuntimeClasspath) 76 dependsOn(mainRuntimeClasspath)
76 classpath(mainRuntimeClasspath) 77 classpath(mainRuntimeClasspath)
77 mainClass.set(application.mainClass) 78 mainClass.set(application.mainClass)
78 enablePreview(this) 79 enablePreview(this)
79 standardInput = System.`in` 80 standardInput = System.`in`
80 val baseResource = webapp.incoming.artifacts.artifactFiles.first() 81 val baseResource = webapp.incoming.artifacts.artifactFiles.first()
81 environment("BASE_RESOURCE", baseResource) 82 environment("BASE_RESOURCE", baseResource)
82 group = "run" 83 group = "run"
83 description = "Start a Jetty web server serving the Xtex API and assets." 84 description = "Start a Jetty web server serving the Xtex API and assets."
85 }
84} 86}
diff --git a/subprojects/language/build.gradle.kts b/subprojects/language/build.gradle.kts
index ed4f95a5..4cfe6895 100644
--- a/subprojects/language/build.gradle.kts
+++ b/subprojects/language/build.gradle.kts
@@ -1,11 +1,11 @@
1import tools.refinery.buildsrc.SonarPropertiesUtils 1import tools.refinery.gradle.utils.SonarPropertiesUtils
2 2
3plugins { 3plugins {
4 id("refinery-java-library") 4 id("tools.refinery.gradle.java-library")
5 id("refinery-java-test-fixtures") 5 id("tools.refinery.gradle.java-test-fixtures")
6 id("refinery-sonarqube") 6 id("tools.refinery.gradle.mwe2")
7 id("refinery-mwe2") 7 id("tools.refinery.gradle.sonarqube")
8 id("refinery-xtext-conventions") 8 id("tools.refinery.gradle.xtext-generated")
9} 9}
10 10
11dependencies { 11dependencies {
@@ -26,36 +26,38 @@ sourceSets {
26 } 26 }
27} 27}
28 28
29tasks.jar { 29tasks {
30 from(sourceSets.main.map { it.allSource }) { 30 jar {
31 include("**/*.xtext") 31 from(sourceSets.main.map { it.allSource }) {
32 include("**/*.xtext")
33 }
32 } 34 }
33}
34 35
35val generateXtextLanguage by tasks.registering(JavaExec::class) { 36 val generateXtextLanguage by registering(JavaExec::class) {
36 mainClass.set("org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher") 37 mainClass.set("org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher")
37 classpath(configurations.mwe2) 38 classpath(configurations.mwe2)
38 inputs.file("src/main/java/tools/refinery/language/GenerateProblem.mwe2") 39 inputs.file("src/main/java/tools/refinery/language/GenerateProblem.mwe2")
39 inputs.file("src/main/java/tools/refinery/language/Problem.xtext") 40 inputs.file("src/main/java/tools/refinery/language/Problem.xtext")
40 outputs.dir("src/main/xtext-gen") 41 outputs.dir("src/main/xtext-gen")
41 outputs.dir("src/testFixtures/xtext-gen") 42 outputs.dir("src/testFixtures/xtext-gen")
42 outputs.dir("../language-ide/src/main/xtext-gen") 43 outputs.dir("../language-ide/src/main/xtext-gen")
43 outputs.dir("../language-web/src/main/xtext-gen") 44 outputs.dir("../language-web/src/main/xtext-gen")
44 args("src/main/java/tools/refinery/language/GenerateProblem.mwe2", "-p", "rootPath=/$projectDir/..") 45 args("src/main/java/tools/refinery/language/GenerateProblem.mwe2", "-p", "rootPath=/$projectDir/..")
45} 46 }
46 47
47for (taskName in listOf("compileJava", "processResources", "processTestFixturesResources", 48 for (taskName in listOf("compileJava", "processResources", "processTestFixturesResources",
48 "generateEclipseSourceFolders")) { 49 "generateEclipseSourceFolders")) {
49 tasks.named(taskName) { 50 named(taskName) {
50 dependsOn(generateXtextLanguage) 51 dependsOn(generateXtextLanguage)
52 }
51 } 53 }
52}
53 54
54tasks.clean { 55 clean {
55 delete("src/main/xtext-gen") 56 delete("src/main/xtext-gen")
56 delete("src/testFixtures/xtext-gen") 57 delete("src/testFixtures/xtext-gen")
57 delete("../language-ide/src/main/xtext-gen") 58 delete("../language-ide/src/main/xtext-gen")
58 delete("../language-web/src/main/xtext-gen") 59 delete("../language-web/src/main/xtext-gen")
60 }
59} 61}
60 62
61sonarqube.properties { 63sonarqube.properties {
diff --git a/subprojects/store-query-viatra/build.gradle.kts b/subprojects/store-query-viatra/build.gradle.kts
index 7451dd83..4a894f52 100644
--- a/subprojects/store-query-viatra/build.gradle.kts
+++ b/subprojects/store-query-viatra/build.gradle.kts
@@ -1,5 +1,5 @@
1plugins { 1plugins {
2 id("refinery-java-library") 2 id("tools.refinery.gradle.java-library")
3} 3}
4 4
5dependencies { 5dependencies {
diff --git a/subprojects/store-query/build.gradle.kts b/subprojects/store-query/build.gradle.kts
index 16dbd95d..889a0479 100644
--- a/subprojects/store-query/build.gradle.kts
+++ b/subprojects/store-query/build.gradle.kts
@@ -1,6 +1,6 @@
1plugins { 1plugins {
2 id("refinery-java-library") 2 id("tools.refinery.gradle.java-library")
3 id("refinery-java-test-fixtures") 3 id("tools.refinery.gradle.java-test-fixtures")
4} 4}
5 5
6dependencies { 6dependencies {
diff --git a/subprojects/store-reasoning/build.gradle.kts b/subprojects/store-reasoning/build.gradle.kts
index fe15fc42..bb37d9d3 100644
--- a/subprojects/store-reasoning/build.gradle.kts
+++ b/subprojects/store-reasoning/build.gradle.kts
@@ -1,5 +1,5 @@
1plugins { 1plugins {
2 id("refinery-java-library") 2 id("tools.refinery.gradle.java-library")
3} 3}
4 4
5dependencies { 5dependencies {
diff --git a/subprojects/store/build.gradle.kts b/subprojects/store/build.gradle.kts
index 5b4eac46..d62e5159 100644
--- a/subprojects/store/build.gradle.kts
+++ b/subprojects/store/build.gradle.kts
@@ -1,4 +1,4 @@
1plugins { 1plugins {
2 id("refinery-java-library") 2 id("tools.refinery.gradle.java-library")
3 id("refinery-jmh") 3 id("tools.refinery.gradle.jmh")
4} 4}