diff options
Diffstat (limited to 'buildSrc/src/main')
14 files changed, 244 insertions, 65 deletions
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/frontend-workspace.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/frontend-workspace.gradle.kts index 436d575d..3d5deb84 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/frontend-workspace.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/frontend-workspace.gradle.kts | |||
@@ -46,9 +46,10 @@ tasks { | |||
46 | } | 46 | } |
47 | 47 | ||
48 | assembleFrontend { | 48 | assembleFrontend { |
49 | val onlyIfProvider = provider { frontend.assembleScript.isPresent } | ||
49 | // Workaround to enable this task even if we have disabled `installPackageManager`. See | 50 | // Workaround to enable this task even if we have disabled `installPackageManager`. See |
50 | // https://github.com/siouan/frontend-gradle-plugin/blob/2add49d3a74c927abc813d98787be116d0074afe/plugin/src/main/java/org/siouan/frontendgradleplugin/FrontendGradlePlugin.java#L514-L516 | 51 | // https://github.com/siouan/frontend-gradle-plugin/blob/2add49d3a74c927abc813d98787be116d0074afe/plugin/src/main/java/org/siouan/frontendgradleplugin/FrontendGradlePlugin.java#L514-L516 |
51 | setOnlyIf { frontend.assembleScript.isPresent } | 52 | onlyIf { onlyIfProvider.get() } |
52 | // Workaround for disabled `resolvePackageManager`. See | 53 | // Workaround for disabled `resolvePackageManager`. See |
53 | // https://github.com/siouan/frontend-gradle-plugin/blob/2add49d3a74c927abc813d98787be116d0074afe/plugin/src/main/java/org/siouan/frontendgradleplugin/FrontendGradlePlugin.java#L513 | 54 | // https://github.com/siouan/frontend-gradle-plugin/blob/2add49d3a74c927abc813d98787be116d0074afe/plugin/src/main/java/org/siouan/frontendgradleplugin/FrontendGradlePlugin.java#L513 |
54 | executableType.set(ExecutableType.YARN) | 55 | executableType.set(ExecutableType.YARN) |
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/frontend-worktree.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/frontend-worktree.gradle.kts index 30cfb26f..795121f9 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/frontend-worktree.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/frontend-worktree.gradle.kts | |||
@@ -20,40 +20,59 @@ frontend { | |||
20 | }) | 20 | }) |
21 | } | 21 | } |
22 | 22 | ||
23 | val frontendPropertiesFile: Provider<String> = frontend.nodeInstallDirectory.map { dir -> "$dir/frontend.properties" } | 23 | abstract class FrontendPropertiesHandler @Inject constructor(objectFactory: ObjectFactory) { |
24 | companion object { | ||
25 | private const val INSTALLED_NODE_VERSION_PROPERTY = "installedNodeVersion" | ||
26 | } | ||
27 | |||
28 | val frontedPropertiesFile = objectFactory.property(String::class) | ||
29 | |||
30 | val nodeVersion = objectFactory.property(String::class) | ||
24 | 31 | ||
25 | fun readFrontendProperties(): Properties { | 32 | private fun readFrontendProperties(): Properties { |
26 | val props = Properties() | 33 | val props = Properties() |
27 | try { | 34 | try { |
28 | FileInputStream(frontendPropertiesFile.get()).use { inputStream -> | 35 | FileInputStream(frontedPropertiesFile.get()).use { inputStream -> |
29 | props.load(inputStream) | 36 | props.load(inputStream) |
37 | } | ||
38 | } catch (ignored: FileNotFoundException) { | ||
39 | // Ignore missing file. | ||
30 | } | 40 | } |
31 | } catch (ignored: FileNotFoundException) { | 41 | return props |
32 | // Ignore missing file. | ||
33 | } | 42 | } |
34 | return props | ||
35 | } | ||
36 | 43 | ||
37 | fun getFrontendProperty(propertyName: String): String? { | 44 | private fun getFrontendProperty(propertyName: String): String? { |
38 | val props = readFrontendProperties() | 45 | val props = readFrontendProperties() |
39 | return props[propertyName]?.toString() | 46 | return props[propertyName]?.toString() |
40 | } | 47 | } |
48 | |||
49 | private fun putFrontedProperty(propertyName: String, propertyValue: String) { | ||
50 | val props = readFrontendProperties() | ||
51 | props[propertyName] = propertyValue | ||
52 | FileOutputStream(frontedPropertiesFile.get()).use { outputStream -> | ||
53 | props.store(outputStream, "generated by refinery-frontend-worktree") | ||
54 | } | ||
55 | } | ||
56 | |||
57 | fun needsInstall(): Boolean { | ||
58 | return getFrontendProperty(INSTALLED_NODE_VERSION_PROPERTY) != nodeVersion.get() | ||
59 | } | ||
41 | 60 | ||
42 | fun putFrontedProperty(propertyName: String, propertyValue: String) { | 61 | fun markAsInstalled() { |
43 | val props = readFrontendProperties() | 62 | putFrontedProperty(INSTALLED_NODE_VERSION_PROPERTY, nodeVersion.get()) |
44 | props[propertyName] = propertyValue | ||
45 | FileOutputStream(frontendPropertiesFile.get()).use { outputStream -> | ||
46 | props.store(outputStream, "generated by refinery-frontend-worktree") | ||
47 | } | 63 | } |
48 | } | 64 | } |
49 | 65 | ||
50 | tasks { | 66 | tasks { |
51 | installNode { | 67 | installNode { |
68 | val handler = project.objects.newInstance<FrontendPropertiesHandler>() | ||
69 | handler.frontedPropertiesFile = frontend.nodeInstallDirectory.map { dir -> "$dir/frontend.properties" } | ||
70 | handler.nodeVersion = frontend.nodeVersion | ||
52 | onlyIf { | 71 | onlyIf { |
53 | getFrontendProperty("installedNodeVersion") != frontend.nodeVersion.get() | 72 | handler.needsInstall() |
54 | } | 73 | } |
55 | doLast { | 74 | doLast { |
56 | putFrontedProperty("installedNodeVersion", frontend.nodeVersion.get()) | 75 | handler.markAsInstalled() |
57 | } | 76 | } |
58 | } | 77 | } |
59 | 78 | ||
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/internal/frontend-conventions.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/internal/frontend-conventions.gradle.kts index 65481bd1..3c579f48 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/internal/frontend-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/internal/frontend-conventions.gradle.kts | |||
@@ -6,7 +6,7 @@ | |||
6 | package tools.refinery.gradle.internal | 6 | package tools.refinery.gradle.internal |
7 | 7 | ||
8 | plugins { | 8 | plugins { |
9 | id("org.siouan.frontend-jdk17") | 9 | id("org.siouan.frontend-jdk21") |
10 | } | 10 | } |
11 | 11 | ||
12 | frontend { | 12 | frontend { |
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/interpreter-library.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/interpreter-library.gradle.kts index 8bafa1a5..6bee5b5d 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/interpreter-library.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/interpreter-library.gradle.kts | |||
@@ -23,6 +23,15 @@ tasks { | |||
23 | } | 23 | } |
24 | } | 24 | } |
25 | 25 | ||
26 | publishing.publications.named<MavenPublication>("mavenJava") { | ||
27 | pom.developers { | ||
28 | developer { | ||
29 | name = "The VIATRAâ„¢ Authors" | ||
30 | url = "https://eclipse.dev/viatra/" | ||
31 | } | ||
32 | } | ||
33 | } | ||
34 | |||
26 | sonarqube.properties { | 35 | sonarqube.properties { |
27 | // Code copied from the VIATRA project is maintained by the VIATRA contributors. | 36 | // Code copied from the VIATRA project is maintained by the VIATRA contributors. |
28 | // Our own modifications are verified by tests in our own subprojects. | 37 | // Our own modifications are verified by tests in our own subprojects. |
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/java-application.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/java-application.gradle.kts index 6c80c971..469ebf59 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/java-application.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/java-application.gradle.kts | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -9,24 +9,17 @@ import org.gradle.accessors.dm.LibrariesForLibs | |||
9 | 9 | ||
10 | plugins { | 10 | plugins { |
11 | application | 11 | application |
12 | id("com.github.johnrengelman.shadow") | 12 | id("tools.refinery.gradle.java-conventions") |
13 | id("tools.refinery.gradle.internal.java-conventions") | ||
14 | } | ||
15 | |||
16 | // Use log4j-over-slf4j instead of log4j 1.x when running the application. | ||
17 | configurations.runtimeClasspath { | ||
18 | exclude(group = "log4j", module = "log4j") | ||
19 | } | 13 | } |
20 | 14 | ||
21 | val libs = the<LibrariesForLibs>() | 15 | val libs = the<LibrariesForLibs>() |
22 | 16 | ||
23 | dependencies { | 17 | dependencies { |
24 | implementation(libs.slf4j.simple) | 18 | runtimeOnly(libs.slf4j.simple) |
25 | implementation(libs.slf4j.log4j) | 19 | implementation(libs.slf4j.log4j) |
20 | implementation(enforcedPlatform(project(":refinery-bom-dependencies"))) | ||
26 | } | 21 | } |
27 | 22 | ||
28 | for (taskName in listOf("distZip", "shadowDistTar", "shadowDistZip")) { | 23 | tasks.distZip { |
29 | tasks.named(taskName) { | 24 | enabled = false |
30 | enabled = false | ||
31 | } | ||
32 | } | 25 | } |
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/internal/java-conventions.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/java-conventions.gradle.kts index b149a483..354cd911 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/internal/java-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/java-conventions.gradle.kts | |||
@@ -1,18 +1,16 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
6 | package tools.refinery.gradle.internal | 6 | package tools.refinery.gradle |
7 | 7 | ||
8 | import org.gradle.accessors.dm.LibrariesForLibs | 8 | import org.gradle.accessors.dm.LibrariesForLibs |
9 | import org.gradle.plugins.ide.eclipse.model.ProjectDependency | ||
10 | import tools.refinery.gradle.utils.EclipseUtils | 9 | import tools.refinery.gradle.utils.EclipseUtils |
11 | 10 | ||
12 | plugins { | 11 | plugins { |
13 | jacoco | 12 | jacoco |
14 | java | 13 | java |
15 | `maven-publish` | ||
16 | id("tools.refinery.gradle.eclipse") | 14 | id("tools.refinery.gradle.eclipse") |
17 | } | 15 | } |
18 | 16 | ||
@@ -20,24 +18,28 @@ repositories { | |||
20 | mavenCentral() | 18 | mavenCentral() |
21 | } | 19 | } |
22 | 20 | ||
23 | // Use log4j-over-slf4j instead of log4j 1.x in the tests. | 21 | configurations.withType(Configuration::class) { |
24 | configurations.testRuntimeClasspath { | 22 | if (name.endsWith("Classpath")) { |
25 | exclude(group = "log4j", module = "log4j") | 23 | exclude(group = "log4j", module = "log4j") |
24 | exclude(group = "ch.qos.reload4j", module = "reload4j") | ||
25 | } | ||
26 | } | 26 | } |
27 | 27 | ||
28 | val libs = the<LibrariesForLibs>() | 28 | val libs = the<LibrariesForLibs>() |
29 | 29 | ||
30 | dependencies { | 30 | dependencies { |
31 | compileOnly(libs.jetbrainsAnnotations) | 31 | compileOnly(libs.jetbrainsAnnotations) |
32 | compileOnly(libs.slf4j.log4j) | ||
32 | testCompileOnly(libs.jetbrainsAnnotations) | 33 | testCompileOnly(libs.jetbrainsAnnotations) |
33 | testImplementation(libs.hamcrest) | 34 | testImplementation(libs.hamcrest) |
34 | testImplementation(libs.junit.api) | 35 | testImplementation(libs.junit.api) |
36 | testImplementation(enforcedPlatform(project(":refinery-bom-dependencies"))) | ||
35 | testRuntimeOnly(libs.junit.engine) | 37 | testRuntimeOnly(libs.junit.engine) |
36 | testRuntimeOnly("org.junit.platform:junit-platform-launcher") | 38 | testRuntimeOnly(libs.junit.launcher) |
39 | testRuntimeOnly(libs.slf4j.simple) | ||
37 | testImplementation(libs.junit.params) | 40 | testImplementation(libs.junit.params) |
38 | testImplementation(libs.mockito.core) | 41 | testImplementation(libs.mockito.core) |
39 | testImplementation(libs.mockito.junit) | 42 | testImplementation(libs.mockito.junit) |
40 | testImplementation(libs.slf4j.simple) | ||
41 | testImplementation(libs.slf4j.log4j) | 43 | testImplementation(libs.slf4j.log4j) |
42 | } | 44 | } |
43 | 45 | ||
@@ -68,8 +70,7 @@ tasks { | |||
68 | jar { | 70 | jar { |
69 | manifest { | 71 | manifest { |
70 | attributes( | 72 | attributes( |
71 | "Bundle-SymbolicName" to "${project.group}.${project.name}", | 73 | "Bundle-SymbolicName" to "${project.group}.${project.name}", "Bundle-Version" to project.version |
72 | "Bundle-Version" to project.version | ||
73 | ) | 74 | ) |
74 | } | 75 | } |
75 | } | 76 | } |
@@ -98,20 +99,43 @@ tasks { | |||
98 | } | 99 | } |
99 | } | 100 | } |
100 | 101 | ||
101 | publishing.publications { | 102 | fun collectDependentProjects(configuration: Configuration, dependentProjects: MutableCollection<Project>) { |
102 | create<MavenPublication>("mavenJava") { | 103 | for (dependency in configuration.dependencies) { |
103 | from(components["java"]) | 104 | if (dependency is ProjectDependency) { |
104 | pom { | 105 | val dependentProject = dependency.dependencyProject |
105 | licenses { | 106 | if (dependentProject.plugins.hasPlugin(JavaPlugin::class) && dependentProjects.add(dependentProject)) { |
106 | license { | 107 | collectDependentProjectsTransitively(dependentProject, dependentProjects) |
107 | name = "Eclipse Public License - v 2.0" | ||
108 | url = "https://www.eclipse.org/legal/epl-2.0/" | ||
109 | } | ||
110 | } | 108 | } |
111 | } | 109 | } |
112 | } | 110 | } |
113 | } | 111 | } |
114 | 112 | ||
113 | fun collectDependentProjectsTransitively(dependentProject: Project, dependentProjects: MutableCollection<Project>) { | ||
114 | val apiConfiguration = dependentProject.configurations.findByName("api") | ||
115 | if (apiConfiguration != null) { | ||
116 | collectDependentProjects(apiConfiguration, dependentProjects) | ||
117 | } | ||
118 | collectDependentProjects(configurations.implementation.get(), dependentProjects) | ||
119 | } | ||
120 | |||
121 | gradle.projectsEvaluated { | ||
122 | tasks.javadoc { | ||
123 | val dependentProjects = LinkedHashSet<Project>() | ||
124 | collectDependentProjectsTransitively(project, dependentProjects) | ||
125 | val links = ArrayList<JavadocOfflineLink>() | ||
126 | for (dependentProject in dependentProjects.sortedBy { it.name }) { | ||
127 | dependsOn(dependentProject.tasks.javadoc) | ||
128 | val javadocDir = dependentProject.layout.buildDirectory.map { it.dir("docs/javadoc") } | ||
129 | inputs.dir(javadocDir) | ||
130 | links += JavadocOfflineLink("../${dependentProject.name}", javadocDir.get().asFile.path) | ||
131 | } | ||
132 | options { | ||
133 | this as StandardJavadocDocletOptions | ||
134 | linksOffline = (linksOffline ?: listOf()) + links | ||
135 | } | ||
136 | } | ||
137 | } | ||
138 | |||
115 | eclipse { | 139 | eclipse { |
116 | EclipseUtils.patchClasspathEntries(this) { entry -> | 140 | EclipseUtils.patchClasspathEntries(this) { entry -> |
117 | if (entry.path.endsWith("-gen")) { | 141 | if (entry.path.endsWith("-gen")) { |
@@ -120,7 +144,7 @@ eclipse { | |||
120 | // If a project has a main dependency on a project and a test dependency on the testFixtures of a project, | 144 | // If a project has a main dependency on a project and a test dependency on the testFixtures of a project, |
121 | // it will be erroneously added as a test-only dependency to Eclipse. As a workaround, we add all project | 145 | // it will be erroneously added as a test-only dependency to Eclipse. As a workaround, we add all project |
122 | // dependencies as main dependencies (we do not deliberately use test-only project dependencies). | 146 | // dependencies as main dependencies (we do not deliberately use test-only project dependencies). |
123 | if (entry is ProjectDependency) { | 147 | if (entry is org.gradle.plugins.ide.eclipse.model.ProjectDependency) { |
124 | entry.entryAttributes.remove("test") | 148 | entry.entryAttributes.remove("test") |
125 | } | 149 | } |
126 | } | 150 | } |
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/java-library.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/java-library.gradle.kts index 3aff3833..3c3623f6 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/java-library.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/java-library.gradle.kts | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -7,5 +7,14 @@ package tools.refinery.gradle | |||
7 | 7 | ||
8 | plugins { | 8 | plugins { |
9 | `java-library` | 9 | `java-library` |
10 | id("tools.refinery.gradle.internal.java-conventions") | 10 | id("tools.refinery.gradle.java-conventions") |
11 | id("tools.refinery.gradle.maven-publish") | ||
12 | } | ||
13 | |||
14 | dependencies { | ||
15 | api(platform(project(":refinery-bom-dependencies"))) | ||
16 | } | ||
17 | |||
18 | publishing.publications.named<MavenPublication>("mavenJava") { | ||
19 | from(components["java"]) | ||
11 | } | 20 | } |
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/java-test-fixtures.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/java-test-fixtures.gradle.kts index 004be8b4..23720562 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/java-test-fixtures.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/java-test-fixtures.gradle.kts | |||
@@ -10,7 +10,8 @@ import tools.refinery.gradle.utils.EclipseUtils | |||
10 | 10 | ||
11 | plugins { | 11 | plugins { |
12 | `java-test-fixtures` | 12 | `java-test-fixtures` |
13 | id("tools.refinery.gradle.internal.java-conventions") | 13 | id("tools.refinery.gradle.java-conventions") |
14 | id("tools.refinery.gradle.maven-publish") | ||
14 | } | 15 | } |
15 | 16 | ||
16 | publishing.publications { | 17 | publishing.publications { |
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/jmh.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/jmh.gradle.kts index 6fb8fbac..5dde7033 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/jmh.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/jmh.gradle.kts | |||
@@ -10,7 +10,7 @@ import tools.refinery.gradle.utils.EclipseUtils | |||
10 | import tools.refinery.gradle.utils.SonarPropertiesUtils | 10 | import tools.refinery.gradle.utils.SonarPropertiesUtils |
11 | 11 | ||
12 | plugins { | 12 | plugins { |
13 | id("tools.refinery.gradle.internal.java-conventions") | 13 | id("tools.refinery.gradle.java-conventions") |
14 | id("tools.refinery.gradle.sonarqube") | 14 | id("tools.refinery.gradle.sonarqube") |
15 | } | 15 | } |
16 | 16 | ||
@@ -35,7 +35,10 @@ configurations["jmhRuntimeOnly"].extendsFrom(configurations.runtimeOnly.get(), c | |||
35 | val libs = the<LibrariesForLibs>() | 35 | val libs = the<LibrariesForLibs>() |
36 | 36 | ||
37 | dependencies { | 37 | dependencies { |
38 | jmhImplementation(enforcedPlatform(project(":refinery-bom-dependencies"))) | ||
38 | jmhImplementation(libs.jmh.core) | 39 | jmhImplementation(libs.jmh.core) |
40 | jmhImplementation(libs.slf4j.log4j) | ||
41 | jmhImplementation(libs.slf4j.simple) | ||
39 | jmhAnnotationProcessor(libs.jmh.annprocess) | 42 | jmhAnnotationProcessor(libs.jmh.annprocess) |
40 | } | 43 | } |
41 | 44 | ||
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/maven-bom.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/maven-bom.gradle.kts new file mode 100644 index 00000000..0ecbcad6 --- /dev/null +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/maven-bom.gradle.kts | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.gradle | ||
7 | |||
8 | plugins { | ||
9 | `java-platform` | ||
10 | id("tools.refinery.gradle.maven-publish") | ||
11 | } | ||
12 | |||
13 | javaPlatform { | ||
14 | allowDependencies() | ||
15 | } | ||
16 | |||
17 | publishing.publications.named<MavenPublication>("mavenJava") { | ||
18 | from(components["javaPlatform"]) | ||
19 | } | ||
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/maven-publish.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/maven-publish.gradle.kts new file mode 100644 index 00000000..6315e350 --- /dev/null +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/maven-publish.gradle.kts | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.gradle | ||
7 | |||
8 | plugins { | ||
9 | `maven-publish` | ||
10 | id("tools.refinery.gradle.signing") | ||
11 | } | ||
12 | |||
13 | val mavenRepositoryDir = rootProject.layout.buildDirectory.map { it.dir("repo") } | ||
14 | |||
15 | open class MavenArtifactExtension(project: Project) { | ||
16 | var name: String = project.name.split("-").drop(1).joinToString(" ") { segment -> | ||
17 | segment.replaceFirstChar { it.uppercase() } | ||
18 | } | ||
19 | var description: String? = null | ||
20 | } | ||
21 | |||
22 | val artifactExtension = project.extensions.create<MavenArtifactExtension>("mavenArtifact", project) | ||
23 | |||
24 | publishing { | ||
25 | publications { | ||
26 | create<MavenPublication>("mavenJava") { | ||
27 | pom { | ||
28 | name = provider { "Refinery ${artifactExtension.name}" } | ||
29 | description = provider { | ||
30 | val prefix = artifactExtension.description ?: artifactExtension.name.lowercase() | ||
31 | .replaceFirstChar { it.uppercase() } | ||
32 | "$prefix in Refinery, an efficient graph solver for generating well-formed models" | ||
33 | } | ||
34 | url = "https://refinery.tools/" | ||
35 | licenses { | ||
36 | license { | ||
37 | name = "Eclipse Public License - v 2.0" | ||
38 | url = "https://www.eclipse.org/legal/epl-2.0/" | ||
39 | } | ||
40 | } | ||
41 | developers { | ||
42 | developer { | ||
43 | name = "The Refinery Authors" | ||
44 | url = "https://refinery.tools/" | ||
45 | } | ||
46 | } | ||
47 | scm { | ||
48 | connection = "scm:git:https://github.com/graphs4value/refinery.git" | ||
49 | developerConnection = "scm:git:ssh://github.com:graphs4value/refinery.git" | ||
50 | url = "https://github.com/graphs4value/refinery" | ||
51 | } | ||
52 | issueManagement { | ||
53 | url = "https://github.com/graphs4value/refinery/issues" | ||
54 | } | ||
55 | } | ||
56 | } | ||
57 | } | ||
58 | |||
59 | repositories { | ||
60 | maven { | ||
61 | name = "file" | ||
62 | setUrl(mavenRepositoryDir.map { uri(it) }) | ||
63 | } | ||
64 | } | ||
65 | } | ||
66 | |||
67 | tasks.named<PublishToMavenRepository>("publishMavenJavaPublicationToFileRepository") { | ||
68 | mustRunAfter(rootProject.tasks.named("cleanMavenRepository")) | ||
69 | outputs.dir(mavenRepositoryDir) | ||
70 | } | ||
71 | |||
72 | signing { | ||
73 | sign(publishing.publications["mavenJava"]) | ||
74 | } | ||
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/mwe2.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/mwe2.gradle.kts index f4381434..c20adb85 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/mwe2.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/mwe2.gradle.kts | |||
@@ -8,19 +8,26 @@ package tools.refinery.gradle | |||
8 | import org.gradle.accessors.dm.LibrariesForLibs | 8 | import org.gradle.accessors.dm.LibrariesForLibs |
9 | 9 | ||
10 | plugins { | 10 | plugins { |
11 | id("tools.refinery.gradle.internal.java-conventions") | 11 | id("tools.refinery.gradle.java-conventions") |
12 | } | 12 | } |
13 | 13 | ||
14 | val mwe2: Configuration by configurations.creating { | 14 | val mwe2: Configuration by configurations.creating { |
15 | isCanBeConsumed = false | 15 | isCanBeConsumed = false |
16 | isCanBeResolved = true | 16 | isCanBeResolved = true |
17 | extendsFrom(configurations.implementation.get()) | 17 | extendsFrom(configurations.implementation.get()) |
18 | // Exclude also here, because the name of this configuration doesn't end with {@code Classpath}, | ||
19 | // so it isn't caught by {@code tools.refinery.gradle.java-conventions}. | ||
20 | exclude(group = "log4j", module = "log4j") | ||
21 | exclude(group = "ch.qos.reload4j", module = "reload4j") | ||
18 | } | 22 | } |
19 | 23 | ||
20 | val libs = the<LibrariesForLibs>() | 24 | val libs = the<LibrariesForLibs>() |
21 | 25 | ||
22 | dependencies { | 26 | dependencies { |
27 | mwe2(enforcedPlatform(project(":refinery-bom-dependencies"))) | ||
23 | mwe2(libs.mwe2.launch) | 28 | mwe2(libs.mwe2.launch) |
29 | mwe2(libs.slf4j.log4j) | ||
30 | mwe2(libs.slf4j.simple) | ||
24 | } | 31 | } |
25 | 32 | ||
26 | eclipse.classpath.plusConfigurations += mwe2 | 33 | eclipse.classpath.plusConfigurations += mwe2 |
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/signing.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/signing.gradle.kts new file mode 100644 index 00000000..0e5792be --- /dev/null +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/signing.gradle.kts | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.gradle | ||
7 | |||
8 | plugins { | ||
9 | signing | ||
10 | } | ||
11 | |||
12 | signing { | ||
13 | // The underlying property cannot be set publicly. | ||
14 | @Suppress("UsePropertyAccessSyntax") | ||
15 | setRequired(project.hasProperty("forceSign")) | ||
16 | val signingKeyId = System.getenv("PGP_KEY_ID") | ||
17 | val signingKey = System.getenv("PGP_KEY") | ||
18 | val signingPassword = System.getenv("PGP_PASSWORD") | ||
19 | useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword) | ||
20 | } | ||
diff --git a/buildSrc/src/main/kotlin/tools/refinery/gradle/xtext-generated.gradle.kts b/buildSrc/src/main/kotlin/tools/refinery/gradle/xtext-generated.gradle.kts index 6f06cc3e..5cf9dde5 100644 --- a/buildSrc/src/main/kotlin/tools/refinery/gradle/xtext-generated.gradle.kts +++ b/buildSrc/src/main/kotlin/tools/refinery/gradle/xtext-generated.gradle.kts | |||
@@ -8,7 +8,7 @@ package tools.refinery.gradle | |||
8 | import tools.refinery.gradle.utils.SonarPropertiesUtils | 8 | import tools.refinery.gradle.utils.SonarPropertiesUtils |
9 | 9 | ||
10 | plugins { | 10 | plugins { |
11 | id("tools.refinery.gradle.internal.java-conventions") | 11 | id("tools.refinery.gradle.java-conventions") |
12 | id("tools.refinery.gradle.sonarqube") | 12 | id("tools.refinery.gradle.sonarqube") |
13 | } | 13 | } |
14 | 14 | ||