Skip to content

Commit e05c8b3

Browse files
authored
Migrate version catalog and clean up settings plugins (#2875)
2 parents d31ade5 + 4e31af4 commit e05c8b3

File tree

12 files changed

+181
-120
lines changed

12 files changed

+181
-120
lines changed

build.gradle

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
1-
apply plugin: 'dev.equo.ide'
1+
plugins {
2+
alias(libs.plugins.equo.ide)
3+
alias(libs.plugins.test.logger) apply false
4+
alias(libs.plugins.spotless.changelog) apply false
5+
alias(libs.plugins.plugin.publish) apply false
6+
alias(libs.plugins.version.compatibility) apply false
7+
alias(libs.plugins.nexus.publish) apply false
8+
alias(libs.plugins.errorprone) apply false
9+
alias(libs.plugins.rewrite) apply false
10+
alias(libs.plugins.maven.plugin.development) apply false
11+
alias(libs.plugins.p2deps) apply false
12+
}
213

314
equoIde {
415
branding().title('Spotless').icon(file('_images/spotless_logo.png'))

gradle.properties

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,3 @@ artifactIdMaven=spotless-maven-plugin
2121

2222
artifactIdGradle=spotless-plugin-gradle
2323

24-
# Build requirements
25-
VER_JAVA=17
26-
VER_JSR_305=3.0.2
27-
28-
# Dependencies provided by Spotless plugin
29-
VER_SLF4J=[1.6,2.0[
30-
31-
# Used in multiple places
32-
VER_DURIAN=1.2.0
33-
VER_JGIT=7.5.0.202512021534-r
34-
VER_JUNIT=6.0.3
35-
VER_ASSERTJ=3.27.7
36-
VER_MOCKITO=5.22.0
37-
VER_SELFIE=2.5.5
38-
VER_SOLSTICE=1.8.1

gradle/error-prone.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ tasks.withType(JavaCompile).configureEach {
3030
}
3131

3232
dependencies {
33-
errorprone('com.google.errorprone:error_prone_core:2.42.0')
33+
errorprone libs.errorprone.core
3434
}

gradle/java-setup.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
apply plugin: 'java'
77
tasks.withType(JavaCompile).configureEach {
88
options.encoding = 'UTF-8'
9-
options.release = Integer.parseInt(VER_JAVA)
9+
options.release = libs.versions.jdk.release.get().toInteger()
1010
}
1111

1212
//////////////
@@ -37,7 +37,7 @@ tasks.withType(com.github.spotbugs.snom.SpotBugsTask).configureEach {
3737
}
3838

3939
dependencies {
40-
compileOnly 'net.jcip:jcip-annotations:1.0'
40+
compileOnly libs.jcip.annotations
4141
compileOnly "com.github.spotbugs:spotbugs-annotations:${spotbugs.toolVersion.get()}"
42-
compileOnly "com.google.code.findbugs:jsr305:${VER_JSR_305}"
42+
compileOnly libs.jsr305
4343
}

gradle/libs.versions.toml

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
[versions]
2+
jdk-release = "17"
3+
durian = "1.2.0"
4+
selfie = "2.5.5"
5+
jackson = "2.20.1"
6+
maven-api = "3.0"
7+
ktlint = "1.8.0"
8+
9+
[libraries]
10+
durian-core = { module = "com.diffplug.durian:durian-core", version.ref = "durian" }
11+
durian-io = { module = "com.diffplug.durian:durian-io", version.ref = "durian" }
12+
durian-collect = { module = "com.diffplug.durian:durian-collect", version.ref = "durian" }
13+
durian-testlib = { module = "com.diffplug.durian:durian-testlib", version.ref = "durian" }
14+
15+
selfie-lib = { module = "com.diffplug.selfie:selfie-lib", version.ref = "selfie" }
16+
selfie-runner-junit5 = { module = "com.diffplug.selfie:selfie-runner-junit5", version.ref = "selfie" }
17+
18+
solstice = "dev.equo.ide:solstice:1.8.1"
19+
20+
jackson-databind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" }
21+
jackson-dataformat-yaml = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml", version.ref = "jackson" }
22+
23+
maven-plugin-api = { module = "org.apache.maven:maven-plugin-api", version.ref = "maven-api" }
24+
maven-plugin-annotations = { module = "org.apache.maven.plugin-tools:maven-plugin-annotations", version.ref = "maven-api" }
25+
maven-core = { module = "org.apache.maven:maven-core", version.ref = "maven-api" }
26+
27+
ktlint-rule-engine = { module = "com.pinterest.ktlint:ktlint-rule-engine", version.ref = "ktlint" }
28+
ktlint-ruleset-standard = { module = "com.pinterest.ktlint:ktlint-ruleset-standard", version.ref = "ktlint" }
29+
30+
jgit = "org.eclipse.jgit:org.eclipse.jgit:7.5.0.202512021534-r"
31+
junit-jupiter = "org.junit.jupiter:junit-jupiter:6.0.3"
32+
assertj-core = "org.assertj:assertj-core:3.27.7"
33+
mockito-core = "org.mockito:mockito-core:5.22.0"
34+
osgi = "org.eclipse.platform:org.eclipse.osgi:3.24.0"
35+
slf4j-api = "org.slf4j:slf4j-api:2.0.17"
36+
jsr305 = "com.google.code.findbugs:jsr305:3.0.2"
37+
jcip-annotations = "net.jcip:jcip-annotations:1.0"
38+
jakarta-annotation-api = "jakarta.annotation:jakarta.annotation-api:3.0.0"
39+
aether-api = "org.eclipse.aether:aether-api:1.1.0"
40+
plexus-resources = "org.codehaus.plexus:plexus-resources:1.3.1"
41+
plexus-build-api = "org.sonatype.plexus:plexus-build-api:0.0.7"
42+
concurrent-trees = "com.googlecode.concurrent-trees:concurrent-trees:2.6.1"
43+
owasp-encoder = "org.owasp.encoder:encoder:1.4.0"
44+
mustache-compiler = "com.github.spullara.mustache.java:compiler:0.9.14"
45+
cleanthat-java = "io.github.solven-eu.cleanthat:java:2.24"
46+
diktat-rules = "org.cqfn.diktat:diktat-rules:1.2.5"
47+
diktat-runner = "com.saveourtool.diktat:diktat-runner:2.0.0"
48+
flexmark-all = "com.vladsch.flexmark:flexmark-all:0.64.8"
49+
gherkin-utils = "io.cucumber:gherkin-utils:10.0.0"
50+
google-java-format = "com.google.googlejavaformat:google-java-format:1.28.0"
51+
gson = "com.google.code.gson:gson:2.13.2"
52+
javaparser-symbol-solver-core = "com.github.javaparser:javaparser-symbol-solver-core:3.27.1"
53+
ktfmt = "com.facebook:ktfmt:0.61"
54+
palantir-java-format = "com.palantir.javaformat:palantir-java-format:1.1.0"
55+
scalafmt-core = "org.scalameta:scalafmt-core_2.13:3.8.1"
56+
sortpom-sorter = "com.github.ekryd.sortpom:sortpom-sorter:4.0.0"
57+
tabletest-formatter-core = "org.tabletest:tabletest-formatter-core:1.0.1"
58+
zjsonpatch = "com.flipkart.zjsonpatch:zjsonpatch:0.4.16"
59+
60+
rewrite-recipe-migrate-java = "org.openrewrite.recipe:rewrite-migrate-java:3.28.0"
61+
rewrite-recipe-static-analysis = "org.openrewrite.recipe:rewrite-static-analysis:2.28.0"
62+
rewrite-recipe-third-party = "org.openrewrite.recipe:rewrite-third-party:0.36.0"
63+
64+
errorprone-core = "com.google.errorprone:error_prone_core:2.42.0"
65+
66+
[plugins]
67+
test-logger = "com.adarshr.test-logger:4.0.0"
68+
spotless = "com.diffplug.spotless:8.3.0"
69+
spotless-changelog = "com.diffplug.spotless-changelog:3.1.2"
70+
spotbugs = "com.github.spotbugs:6.4.8"
71+
plugin-publish = "com.gradle.plugin-publish:2.1.0"
72+
equo-ide = "dev.equo.ide:1.7.8"
73+
version-compatibility = "io.github.davidburstrom.version-compatibility:0.5.0"
74+
p2deps = "dev.equo.p2deps:1.7.8"
75+
nexus-publish = "io.github.gradle-nexus.publish-plugin:2.0.0"
76+
errorprone = "net.ltgt.errorprone:5.1.0"
77+
rewrite = "org.openrewrite.rewrite:7.25.0"
78+
maven-plugin-development = "org.gradlex.maven-plugin-development:1.0.3"

gradle/rewrite.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ rewrite {
2121
failOnDryRunResults = true
2222
}
2323
dependencies {
24-
rewrite('org.openrewrite.recipe:rewrite-migrate-java:3.28.0')
25-
rewrite('org.openrewrite.recipe:rewrite-static-analysis:2.28.0')
26-
rewrite('org.openrewrite.recipe:rewrite-third-party:0.36.0')
24+
rewrite libs.rewrite.recipe.migrate.java
25+
rewrite libs.rewrite.recipe.static.analysis
26+
rewrite libs.rewrite.recipe.third.party
2727
}

lib-extra/build.gradle

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,31 @@ apply from: rootProject.file('gradle/java-publish.gradle')
1010
dependencies {
1111
api projects.lib
1212
// misc useful utilities
13-
implementation "com.diffplug.durian:durian-core:${VER_DURIAN}"
14-
implementation "com.diffplug.durian:durian-collect:${VER_DURIAN}"
13+
implementation libs.durian.core
14+
implementation libs.durian.collect
1515
// needed by GitAttributesLineEndings
16-
implementation "org.eclipse.jgit:org.eclipse.jgit:${VER_JGIT}"
17-
implementation "com.googlecode.concurrent-trees:concurrent-trees:2.6.1"
16+
implementation libs.jgit
17+
implementation libs.concurrent.trees
1818
// for eclipse
19-
implementation "dev.equo.ide:solstice:${VER_SOLSTICE}"
19+
implementation libs.solstice
2020
// the osgi dep is included in solstice, but it has some CVE's against it.
2121
// 3.18.500 is the oldest, most-compatible version with no CVE's
2222
// https://central.sonatype.com/artifact/org.eclipse.platform/org.eclipse.osgi/versions
23-
implementation "org.eclipse.platform:org.eclipse.osgi:3.24.0"
23+
implementation libs.osgi
2424

2525
// testing
2626
testImplementation projects.testlib
27-
testImplementation "com.diffplug.durian:durian-io:${VER_DURIAN}"
28-
testImplementation "com.google.code.findbugs:jsr305:${VER_JSR_305}"
29-
testImplementation "org.junit.jupiter:junit-jupiter:${VER_JUNIT}"
30-
testImplementation "org.assertj:assertj-core:${VER_ASSERTJ}"
31-
testImplementation "com.diffplug.durian:durian-testlib:${VER_DURIAN}"
27+
testImplementation libs.durian.io
28+
testImplementation libs.jsr305
29+
testImplementation libs.junit.jupiter
30+
testImplementation libs.assertj.core
31+
testImplementation libs.durian.testlib
3232
testRuntimeOnly "org.junit.platform:junit-platform-launcher"
3333
}
34+
3435
spotless {
3536
java {
36-
replaceRegex 'enforceSolsticeVersion', '"dev.equo.ide:solstice:(.*)"', '"dev.equo.ide:solstice:' + VER_SOLSTICE + '"'
37+
replaceRegex 'enforceSolsticeVersion', '"dev.equo.ide:solstice:(.*)"', "\"${libs.solstice.get().toString()}\""
3738
}
3839
}
3940

@@ -56,7 +57,7 @@ for (needsP2 in NEEDS_P2_DEPS) {
5657
java {}
5758
}
5859
dependencies {
59-
add("${needsP2}CompileOnly", "dev.equo.ide:solstice:${VER_SOLSTICE}")
60+
add("${needsP2}CompileOnly", libs.solstice)
6061
}
6162
}
6263

lib/build.gradle

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -73,66 +73,64 @@ tasks.named("check").configure {
7373
}
7474

7575
dependencies {
76-
compileOnly 'org.slf4j:slf4j-api:2.0.17'
77-
testCommonImplementation 'org.slf4j:slf4j-api:2.0.17'
76+
compileOnly libs.slf4j.api
77+
testCommonImplementation libs.slf4j.api
7878

7979
// zero runtime reqs is a hard requirements for spotless-lib
8080
// if you need a dep, put it in lib-extra
81-
testCommonImplementation "org.junit.jupiter:junit-jupiter:$VER_JUNIT"
82-
testCommonImplementation "org.assertj:assertj-core:$VER_ASSERTJ"
83-
testCommonImplementation "com.diffplug.durian:durian-testlib:$VER_DURIAN"
81+
testCommonImplementation libs.junit.jupiter
82+
testCommonImplementation libs.assertj.core
83+
testCommonImplementation libs.durian.testlib
8484
testCommonImplementation projects.testlib
8585
testCommonRuntimeOnly "org.junit.platform:junit-platform-launcher"
8686

8787
// GLUE CODE (alphabetic order please)
8888
// cleanthat
89-
String VER_CLEANTHAT='2.24'
90-
cleanthatCompileOnly "io.github.solven-eu.cleanthat:java:$VER_CLEANTHAT"
91-
compatCleanthat2Dot1CompileAndTestOnly "io.github.solven-eu.cleanthat:java:$VER_CLEANTHAT"
89+
cleanthatCompileOnly libs.cleanthat.java
90+
compatCleanthat2Dot1CompileAndTestOnly libs.cleanthat.java
9291
// diktat old supported version 1.x
93-
compatDiktat1Dot2Dot5CompileOnly "org.cqfn.diktat:diktat-rules:1.2.5"
92+
compatDiktat1Dot2Dot5CompileOnly libs.diktat.rules
9493
// diktat latest supported version 2.x
95-
compatDiktat2Dot0Dot0CompileOnly "com.saveourtool.diktat:diktat-runner:2.0.0"
94+
compatDiktat2Dot0Dot0CompileOnly libs.diktat.runner
9695
// flexmark
97-
flexmarkCompileOnly 'com.vladsch.flexmark:flexmark-all:0.64.8'
96+
flexmarkCompileOnly libs.flexmark.all
9897
// gherkin
99-
gherkinCompileOnly 'io.cucumber:gherkin-utils:10.0.0'
100-
gherkinCompileOnly 'org.slf4j:slf4j-api:2.0.17'
98+
gherkinCompileOnly libs.gherkin.utils
99+
gherkinCompileOnly libs.slf4j.api
101100
// googleJavaFormat
102-
googleJavaFormatCompileOnly 'com.google.googlejavaformat:google-java-format:1.28.0'
101+
googleJavaFormatCompileOnly libs.google.java.format
103102
// gson
104-
gsonCompileOnly 'com.google.code.gson:gson:2.13.2'
103+
gsonCompileOnly libs.gson
105104
// jackson
106-
String VER_JACKSON='2.20.1'
107-
jacksonCompileOnly "com.fasterxml.jackson.core:jackson-databind:$VER_JACKSON"
108-
jacksonCompileOnly "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:$VER_JACKSON"
105+
jacksonCompileOnly libs.jackson.databind
106+
jacksonCompileOnly libs.jackson.dataformat.yaml
109107
// javaParser
110-
javaParserCompileOnly "com.github.javaparser:javaparser-symbol-solver-core:3.27.1"
108+
javaParserCompileOnly libs.javaparser.symbol.solver.core
111109
// ktfmt
112-
ktfmtCompileOnly "com.facebook:ktfmt:0.61"
110+
ktfmtCompileOnly libs.ktfmt
113111
ktfmtCompileOnly("com.google.googlejavaformat:google-java-format") {
114112
version {
115113
strictly '1.7' // for JDK 8 compatibility
116114
}
117115
}
118-
ktfmtCompileOnly "com.google.code.findbugs:jsr305:${VER_JSR_305}"
116+
ktfmtCompileOnly libs.jsr305
119117
// ktlint latest supported version
120-
compatKtLint1Dot0Dot0CompileAndTestOnly 'com.pinterest.ktlint:ktlint-rule-engine:1.8.0'
121-
compatKtLint1Dot0Dot0CompileAndTestOnly 'com.pinterest.ktlint:ktlint-ruleset-standard:1.8.0'
122-
compatKtLint1Dot0Dot0CompileAndTestOnly 'org.slf4j:slf4j-api:2.0.17'
118+
compatKtLint1Dot0Dot0CompileAndTestOnly libs.ktlint.rule.engine
119+
compatKtLint1Dot0Dot0CompileAndTestOnly libs.ktlint.ruleset.standard
120+
compatKtLint1Dot0Dot0CompileAndTestOnly libs.slf4j.api
123121
// palantirJavaFormat
124-
palantirJavaFormatCompileOnly 'com.palantir.javaformat:palantir-java-format:1.1.0' // this version needs to stay compilable against Java 8 for CI Job testNpm
122+
palantirJavaFormatCompileOnly libs.palantir.java.format // this version needs to stay compilable against Java 8 for CI Job testNpm
125123
// scalafmt
126-
scalafmtCompileOnly "org.scalameta:scalafmt-core_2.13:3.8.1"
124+
scalafmtCompileOnly libs.scalafmt.core
127125
// sortPom
128-
sortPomCompileOnly 'com.github.ekryd.sortpom:sortpom-sorter:4.0.0'
129-
sortPomCompileOnly 'org.slf4j:slf4j-api:2.0.17'
126+
sortPomCompileOnly libs.sortpom.sorter
127+
sortPomCompileOnly libs.slf4j.api
130128
// tableTestFormatter (Java 21+ only)
131129
if (JavaVersion.current() >= JavaVersion.VERSION_21) {
132-
tableTestFormatterCompileOnly 'org.tabletest:tabletest-formatter-core:1.0.1'
130+
tableTestFormatterCompileOnly libs.tabletest.formatter.core
133131
}
134132
// zjsonPatch
135-
zjsonPatchCompileOnly 'com.flipkart.zjsonpatch:zjsonpatch:0.4.16'
133+
zjsonPatchCompileOnly libs.zjsonpatch
136134
}
137135

138136
// we'll hold the core lib to a high standard

plugin-gradle/build.gradle

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,17 @@ dependencies {
1616
api "com.diffplug.spotless:spotless-lib:${rootProject.spotlessChangelog.versionLast}"
1717
api "com.diffplug.spotless:spotless-lib-extra:${rootProject.spotlessChangelog.versionLast}"
1818
}
19-
implementation "com.diffplug.durian:durian-core:${VER_DURIAN}"
20-
implementation "com.diffplug.durian:durian-io:${VER_DURIAN}"
21-
implementation "com.diffplug.durian:durian-collect:${VER_DURIAN}"
22-
implementation "org.eclipse.jgit:org.eclipse.jgit:${VER_JGIT}"
19+
implementation libs.durian.core
20+
implementation libs.durian.io
21+
implementation libs.durian.collect
22+
implementation libs.jgit
2323

2424
testImplementation projects.testlib
25-
testImplementation "org.junit.jupiter:junit-jupiter:${VER_JUNIT}"
26-
testImplementation "org.assertj:assertj-core:${VER_ASSERTJ}"
27-
testImplementation "com.diffplug.durian:durian-testlib:${VER_DURIAN}"
28-
testImplementation 'org.owasp.encoder:encoder:1.4.0'
29-
testImplementation "dev.equo.ide:solstice:${VER_SOLSTICE}"
25+
testImplementation libs.junit.jupiter
26+
testImplementation libs.assertj.core
27+
testImplementation libs.durian.testlib
28+
testImplementation libs.owasp.encoder
29+
testImplementation libs.solstice
3030
testRuntimeOnly "org.junit.platform:junit-platform-launcher"
3131
}
3232

plugin-maven/build.gradle

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import org.gradlex.maven.plugin.development.task.GenerateMavenPluginDescriptorTa
33

44
plugins {
55
// https://github.com/gradlex-org/maven-plugin-development
6-
id 'org.gradlex.maven-plugin-development' version '1.0.3'
6+
alias libs.plugins.maven.plugin.development
77
}
88

99
apply from: rootProject.file('gradle/changelog.gradle')
@@ -19,38 +19,35 @@ mavenPlugin {
1919
description = project.description
2020
}
2121

22-
String VER_MAVEN_API = '3.0'
23-
String VER_ECLIPSE_AETHER = '1.1.0'
24-
String VER_PLEXUS_RESOURCES = '1.3.1'
2522
dependencies {
2623
implementation projects.lib
2724
implementation projects.libExtra
2825

29-
compileOnly "org.apache.maven:maven-plugin-api:${VER_MAVEN_API}"
30-
compileOnly "org.apache.maven.plugin-tools:maven-plugin-annotations:${VER_MAVEN_API}"
31-
compileOnly "org.apache.maven:maven-core:${VER_MAVEN_API}"
32-
compileOnly "org.eclipse.aether:aether-api:${VER_ECLIPSE_AETHER}"
26+
compileOnly libs.maven.plugin.api
27+
compileOnly libs.maven.plugin.annotations
28+
compileOnly libs.maven.core
29+
compileOnly libs.aether.api
3330

34-
compileOnly "jakarta.annotation:jakarta.annotation-api:3.0.0"
31+
compileOnly libs.jakarta.annotation.api
3532

36-
implementation "com.diffplug.durian:durian-core:${VER_DURIAN}"
37-
implementation "com.diffplug.durian:durian-io:${VER_DURIAN}"
38-
implementation "com.diffplug.durian:durian-collect:${VER_DURIAN}"
39-
implementation("org.codehaus.plexus:plexus-resources:${VER_PLEXUS_RESOURCES}")
40-
implementation "org.eclipse.jgit:org.eclipse.jgit:${VER_JGIT}"
41-
implementation 'org.sonatype.plexus:plexus-build-api:0.0.7'
33+
implementation libs.durian.core
34+
implementation libs.durian.io
35+
implementation libs.durian.collect
36+
implementation libs.plexus.resources
37+
implementation libs.jgit
38+
implementation libs.plexus.build.api
4239

4340
testImplementation project(":testlib")
44-
testImplementation "org.junit.jupiter:junit-jupiter:${VER_JUNIT}"
45-
testImplementation "org.assertj:assertj-core:${VER_ASSERTJ}"
46-
testImplementation "org.mockito:mockito-core:${VER_MOCKITO}"
47-
testImplementation "com.diffplug.durian:durian-io:${VER_DURIAN}"
48-
testImplementation 'com.github.spullara.mustache.java:compiler:0.9.14'
49-
testImplementation 'org.owasp.encoder:encoder:1.4.0'
50-
testImplementation "org.apache.maven:maven-plugin-api:${VER_MAVEN_API}"
51-
testImplementation "org.eclipse.aether:aether-api:${VER_ECLIPSE_AETHER}"
52-
testImplementation "org.codehaus.plexus:plexus-resources:${VER_PLEXUS_RESOURCES}"
53-
testImplementation "org.apache.maven:maven-core:${VER_MAVEN_API}"
41+
testImplementation libs.junit.jupiter
42+
testImplementation libs.assertj.core
43+
testImplementation libs.mockito.core
44+
testImplementation libs.durian.io
45+
testImplementation libs.mustache.compiler
46+
testImplementation libs.owasp.encoder
47+
testImplementation libs.maven.plugin.api
48+
testImplementation libs.aether.api
49+
testImplementation libs.plexus.resources
50+
testImplementation libs.maven.core
5451
testRuntimeOnly "org.junit.platform:junit-platform-launcher"
5552
}
5653

0 commit comments

Comments
 (0)