diff options
Diffstat (limited to 'subprojects/frontend')
-rw-r--r-- | subprojects/frontend/build.gradle | 131 | ||||
-rw-r--r-- | subprojects/frontend/build.gradle.kts | 127 |
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 @@ | |||
1 | plugins { | ||
2 | id 'refinery-frontend-workspace' | ||
3 | id 'refinery-sonarqube' | ||
4 | } | ||
5 | |||
6 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn | ||
7 | |||
8 | def viteOutputDir = "${buildDir}/vite" | ||
9 | def productionResources = file("${viteOutputDir}/production") | ||
10 | |||
11 | frontend { | ||
12 | assembleScript = 'run build' | ||
13 | } | ||
14 | |||
15 | configurations { | ||
16 | productionAssets { | ||
17 | canBeConsumed = true | ||
18 | canBeResolved = false | ||
19 | } | ||
20 | } | ||
21 | |||
22 | def installFrontend = tasks.named('installFrontend') | ||
23 | |||
24 | def sourcesWithoutTypegen = fileTree('src') { | ||
25 | exclude '**/*.typegen.ts' | ||
26 | } | ||
27 | |||
28 | def assembleFrontend = tasks.named('assembleFrontend') | ||
29 | assembleFrontend.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 | |||
39 | artifacts { | ||
40 | productionAssets(productionResources) { | ||
41 | builtBy assembleFrontend | ||
42 | } | ||
43 | } | ||
44 | |||
45 | def 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 | |||
55 | def 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 | |||
68 | def 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 | |||
87 | def 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 | |||
101 | tasks.named('check') { | ||
102 | dependsOn(typecheckFrontend) | ||
103 | dependsOn(lintFrontend) | ||
104 | } | ||
105 | |||
106 | tasks.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 | |||
120 | tasks.named('clean') { | ||
121 | delete 'dev-dist' | ||
122 | delete fileTree('src') { | ||
123 | include '**/*.typegen.ts' | ||
124 | } | ||
125 | } | ||
126 | |||
127 | sonarqube.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 @@ | |||
1 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn | ||
2 | import tools.refinery.buildsrc.SonarPropertiesUtils | ||
3 | |||
4 | plugins { | ||
5 | id("refinery-frontend-workspace") | ||
6 | id("refinery-sonarqube") | ||
7 | } | ||
8 | |||
9 | val viteOutputDir = "$buildDir/vite" | ||
10 | val productionResources = file("$viteOutputDir/production") | ||
11 | |||
12 | frontend { | ||
13 | assembleScript.set("run build") | ||
14 | } | ||
15 | |||
16 | val productionAssets: Configuration by configurations.creating { | ||
17 | isCanBeConsumed = true | ||
18 | isCanBeResolved = false | ||
19 | } | ||
20 | |||
21 | val sourcesWithoutTypeGen = fileTree("src") { | ||
22 | exclude("**/*.typegen.ts") | ||
23 | } | ||
24 | |||
25 | val 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 | |||
35 | tasks.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 | |||
45 | artifacts { | ||
46 | add("productionAssets", productionResources) { | ||
47 | builtBy(tasks.assembleFrontend) | ||
48 | } | ||
49 | } | ||
50 | |||
51 | val 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 | |||
64 | val 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 | |||
83 | val 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 | |||
97 | tasks.check { | ||
98 | dependsOn(typeCheckFrontend) | ||
99 | dependsOn(lintFrontend) | ||
100 | } | ||
101 | |||
102 | tasks.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 | |||
116 | tasks.clean { | ||
117 | delete("dev-dist") | ||
118 | delete(fileTree("src") { | ||
119 | include("**/*.typegen.ts") | ||
120 | }) | ||
121 | } | ||
122 | |||
123 | sonarqube.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 | } | ||