diff options
author | Kristóf Marussy <kristof@marussy.com> | 2021-12-12 17:48:47 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2021-12-12 17:48:47 +0100 |
commit | fc7e9312d00e60171ed77c477ed91231d3dbfff9 (patch) | |
tree | cc185dd088b5fa6e9357aab3c9062a70626d1953 /subprojects/language-web/build.gradle | |
parent | build: refactor java-application conventions (diff) | |
download | refinery-fc7e9312d00e60171ed77c477ed91231d3dbfff9.tar.gz refinery-fc7e9312d00e60171ed77c477ed91231d3dbfff9.tar.zst refinery-fc7e9312d00e60171ed77c477ed91231d3dbfff9.zip |
build: move modules into subproject directory
Diffstat (limited to 'subprojects/language-web/build.gradle')
-rw-r--r-- | subprojects/language-web/build.gradle | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/subprojects/language-web/build.gradle b/subprojects/language-web/build.gradle new file mode 100644 index 00000000..a549288a --- /dev/null +++ b/subprojects/language-web/build.gradle | |||
@@ -0,0 +1,147 @@ | |||
1 | plugins { | ||
2 | id 'refinery-frontend-workspace' | ||
3 | id 'refinery-java-application' | ||
4 | id 'refinery-xtext-conventions' | ||
5 | } | ||
6 | |||
7 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn | ||
8 | |||
9 | dependencies { | ||
10 | implementation project(':refinery-language') | ||
11 | implementation project(':refinery-language-ide') | ||
12 | implementation libs.xtend.lib | ||
13 | implementation libs.xtext.web | ||
14 | implementation libs.jetty.server | ||
15 | implementation libs.jetty.servlet | ||
16 | implementation libs.jetty.websocket.server | ||
17 | implementation libs.slf4j.simple | ||
18 | implementation libs.slf4j.log4j | ||
19 | testImplementation testFixtures(project(':refinery-language')) | ||
20 | testImplementation libs.jetty.websocket.client | ||
21 | } | ||
22 | |||
23 | def generateXtextLanguage = project(':refinery-language').tasks.named('generateXtextLanguage') | ||
24 | |||
25 | for (taskName in ['compileJava', 'processResources']) { | ||
26 | tasks.named(taskName) { | ||
27 | dependsOn generateXtextLanguage | ||
28 | } | ||
29 | } | ||
30 | |||
31 | def webpackOutputDir = "${buildDir}/webpack" | ||
32 | def productionResources = "${webpackOutputDir}/production" | ||
33 | def serverMainClass = 'tools.refinery.language.web.ServerLauncher' | ||
34 | |||
35 | frontend { | ||
36 | assembleScript = 'assemble:webpack' | ||
37 | } | ||
38 | |||
39 | def installFrontend = tasks.named('installFrontend') | ||
40 | |||
41 | def generateLezerGrammar = tasks.register('generateLezerGrammar', RunYarn) { | ||
42 | dependsOn installFrontend | ||
43 | inputs.file('src/main/js/language/problem.grammar') | ||
44 | inputs.files('package.json', 'yarn.lock') | ||
45 | outputs.file "${buildDir}/generated/sources/lezer/problem.ts" | ||
46 | outputs.file "${buildDir}/generated/sources/lezer/problem.terms.ts" | ||
47 | script = 'run assemble:lezer' | ||
48 | } | ||
49 | |||
50 | def assembleFrontend = tasks.named('assembleFrontend') | ||
51 | assembleFrontend.configure { | ||
52 | dependsOn generateLezerGrammar | ||
53 | inputs.dir 'src/main/css' | ||
54 | inputs.dir 'src/main/html' | ||
55 | inputs.dir 'src/main/js' | ||
56 | inputs.file "${buildDir}/generated/sources/lezer/problem.ts" | ||
57 | inputs.file "${buildDir}/generated/sources/lezer/problem.terms.ts" | ||
58 | inputs.files('package.json', 'yarn.lock', 'webpack.config.js') | ||
59 | outputs.dir productionResources | ||
60 | } | ||
61 | |||
62 | def eslint = tasks.register('eslint', RunYarn) { | ||
63 | dependsOn installFrontend | ||
64 | inputs.dir 'src/main/js' | ||
65 | inputs.files('.eslintrc.js', 'tsconfig.json') | ||
66 | if (project.hasProperty('ci')) { | ||
67 | outputs.file "${buildDir}/eslint.json" | ||
68 | script = 'run check:eslint:ci' | ||
69 | } else { | ||
70 | script = 'run check:eslint' | ||
71 | } | ||
72 | group = 'verification' | ||
73 | description = 'Check for TypeScript errors.' | ||
74 | } | ||
75 | |||
76 | def stylelint = tasks.register('stylelint', RunYarn) { | ||
77 | dependsOn installFrontend | ||
78 | inputs.dir 'src/main/css' | ||
79 | inputs.file '.stylelintrc.js' | ||
80 | if (project.hasProperty('ci')) { | ||
81 | outputs.file "${buildDir}/stylelint.json" | ||
82 | script = 'run check:stylelint:ci' | ||
83 | } else { | ||
84 | script = 'run check:stylelint' | ||
85 | } | ||
86 | group = 'verification' | ||
87 | description = 'Check for Sass errors.' | ||
88 | } | ||
89 | |||
90 | tasks.named('check') { | ||
91 | dependsOn(eslint, stylelint) | ||
92 | } | ||
93 | |||
94 | mainClassName = serverMainClass | ||
95 | |||
96 | tasks.named('jar') { | ||
97 | dependsOn assembleFrontend | ||
98 | from(productionResources) { | ||
99 | into 'webapp' | ||
100 | } | ||
101 | } | ||
102 | |||
103 | tasks.named('shadowJar') { | ||
104 | dependsOn assembleFrontend | ||
105 | from(project.convention.getPlugin(JavaPluginConvention).sourceSets.main.output) | ||
106 | configurations = [project.configurations.runtimeClasspath] | ||
107 | exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA','schema/*', | ||
108 | '.options', '.api_description', '*.profile', 'about.*', 'about_*.html', 'about_files/*', | ||
109 | 'plugin.xml', 'systembundle.properties', 'profile.list', 'META-INF/resources/xtext/**') | ||
110 | append('plugin.properties') | ||
111 | from(productionResources) { | ||
112 | into 'webapp' | ||
113 | } | ||
114 | } | ||
115 | |||
116 | def jettyRun = tasks.register('jettyRun', JavaExec) { | ||
117 | dependsOn assembleFrontend | ||
118 | dependsOn sourceSets.main.runtimeClasspath | ||
119 | classpath = sourceSets.main.runtimeClasspath.filter{it.exists()} | ||
120 | mainClass = serverMainClass | ||
121 | standardInput = System.in | ||
122 | environment BASE_RESOURCE: productionResources | ||
123 | group = 'run' | ||
124 | description = 'Start a Jetty web server serving the Xtex API and assets.' | ||
125 | } | ||
126 | |||
127 | tasks.register('webpackServe', RunYarn) { | ||
128 | dependsOn installFrontend | ||
129 | dependsOn generateLezerGrammar | ||
130 | outputs.dir "${webpackOutputDir}/development" | ||
131 | script = 'run serve' | ||
132 | group = 'run' | ||
133 | description = 'Start a Webpack dev server with hot module replacement.' | ||
134 | } | ||
135 | |||
136 | sonarqube.properties { | ||
137 | properties['sonar.sources'] += [ | ||
138 | 'src/main/css', | ||
139 | 'src/main/html', | ||
140 | 'src/main/js', | ||
141 | ] | ||
142 | property 'sonar.nodejs.executable', "${frontend.nodeInstallDirectory.get()}/bin/node" | ||
143 | property 'sonar.eslint.reportPaths', "${buildDir}/eslint.json" | ||
144 | property 'sonar.css.stylelint.reportPaths', "${buildDir}/stylelint.json" | ||
145 | // SonarJS does not pick up typescript files with `exactOptionalPropertyTypes` | ||
146 | property 'sonar.typescript.tsconfigPath', 'tsconfig.sonar.json' | ||
147 | } | ||