Repository navigation
Expand file tree
/
Copy pathbuild.gradle.kts
More file actions
136 lines (119 loc) · 6.09 KB
/
Copy pathbuild.gradle.kts
File metadata and controls
136 lines (119 loc) · 6.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
* This script supports some Gradle project properties:
*
* - versionSuffix: appended to snapshot version number, e.g. "1.2.3-<versionSuffix>-SNAPSHOT".
* Use to create different versions based on branch/tag.
* - sonatypeUsername: Maven Central credential used by Nexus publishing.
* - sonatypePassword: Maven Central credential used by Nexus publishing.
*
* This script supports the following environment variables:
*
* - OBX_RELEASE: If set to "true" builds and depends on release versions, without branch name and snapshot suffix.
*/
// Gradle properties (more defined in buildscript block below)
val propertySonatypeUsername = providers.gradleProperty("sonatypeUsername")
val propertySonatypePassword = providers.gradleProperty("sonatypePassword")
plugins {
alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.kotlin.dokka) apply false
alias(libs.plugins.versions)
alias(libs.plugins.spotbugs) apply false
alias(libs.plugins.publish)
alias(libs.plugins.android.library) apply false
}
buildscript {
// Environment variables (see notes at the top of this file)
// https://docs.gitlab.com/ci/variables/predefined_variables/
val envIsCI: Boolean = System.getenv("CI") == "true"
val envRelease: String? = System.getenv("OBX_RELEASE")
// Gradle properties (see notes at the top of this file)
val propertyVersionSuffixName = "versionSuffix"
val propertyVersionSuffix = providers.gradleProperty(propertyVersionSuffixName)
// Version of Maven artifacts
// Should only be changed as part of the release process, see the release checklist in the objectbox repo
val versionNumber = "6.0.0-beta2"
// If OBX_RELEASE is set, build and depend on release versions. Doesn't publish a release.
// See the release checklist in the objectbox repo on how to publish a release.
// If true, Maven artifacts use a release version, so without branch name and snapshot suffix
// (such as "-dev-SNAPSHOT"), including for dependencies (such as objectbox-java).
val isRelease = envRelease == "true"
// If not releasing, produce snapshot artifacts and add the branch name to the version string
// (passed in by CI through the versionSuffix property).
val versionSuffix = if (isRelease) {
""
} else if (propertyVersionSuffix.isPresent) {
"-${propertyVersionSuffix.get()}-SNAPSHOT"
} else {
if (envIsCI) {
throw GradleException("Publishing: property $propertyVersionSuffixName must be set in CI to calculate version suffix.")
}
println("WARNING: Publishing: property $propertyVersionSuffixName not set, using '-dev-SNAPSHOT' version suffix.")
"-dev-SNAPSHOT"
}
val obxJavaVersion by extra(versionNumber + versionSuffix)
println("Publishing: version = $obxJavaVersion")
// JVM and Android database library versions
val versionDbJvm = if (isRelease) versionNumber else "$versionNumber-dev-SNAPSHOT"
val versionDbJvmSync = if (isRelease) versionNumber else "$versionNumber-sync-SNAPSHOT"
val versionDbAndroid = if (isRelease) versionNumber else "$versionNumber-dev-SNAPSHOT"
val versionDbAndroidSync = if (isRelease) versionNumber else "$versionNumber-sync-SNAPSHOT"
println("Database dependencies (JVM) = $versionDbJvm")
println("Database dependencies (JVM + Sync) = $versionDbJvmSync")
println("Database dependencies (Android) = $versionDbAndroid")
println("Database dependencies (Android + Sync) = $versionDbAndroidSync")
val versionDatabaseLibraryJvm by extra(versionDbJvm)
val versionDatabaseLibraryJvmSync by extra(versionDbJvmSync)
val versionDatabaseLibraryAndroid by extra(versionDbAndroid)
val versionDatabaseLibraryAndroidSync by extra(versionDbAndroidSync)
}
allprojects {
group = "io.objectbox"
val obxJavaVersion: String by rootProject.extra
version = obxJavaVersion
configurations.all {
// Projects are using snapshot dependencies that may update more often than 24 hours.
resolutionStrategy {
cacheChangingModulesFor(0, "seconds")
}
}
tasks.withType<Javadoc>().configureEach {
// To support Unicode characters in API docs force the javadoc tool to use UTF-8 encoding.
// Otherwise, it defaults to the system file encoding. This is required even though setting file.encoding
// for the Gradle daemon (see gradle.properties) as Gradle does not pass it on to the javadoc tool.
options.encoding = "UTF-8"
}
}
// Exclude pre-release versions from dependencyUpdates task
fun isNonStable(version: String): Boolean {
val stableKeyword = listOf("RELEASE", "FINAL", "GA").any { version.uppercase().contains(it) }
val regex = "^[0-9,.v-]+(-r)?$".toRegex()
val isStable = stableKeyword || regex.matches(version)
return isStable.not()
}
tasks.withType<com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask> {
rejectVersionIf {
isNonStable(candidate.version)
}
}
tasks.wrapper {
distributionType = Wrapper.DistributionType.ALL
}
// Plugin to publish to Maven Central https://github.com/gradle-nexus/publish-plugin/
// This plugin ensures a separate, named staging repo is created for each build when publishing.
nexusPublishing {
this.repositories {
sonatype {
// Use the Portal OSSRH Staging API as this plugin does not support the new Portal API
// https://central.sonatype.org/publish/publish-portal-ossrh-staging-api/#configuring-your-plugin
nexusUrl.set(uri("https://ossrh-staging-api.central.sonatype.com/service/local/"))
snapshotRepositoryUrl.set(uri("https://central.sonatype.com/repository/maven-snapshots/"))
if (propertySonatypeUsername.isPresent && propertySonatypePassword.isPresent) {
println("Publishing: Maven Central credentials supplied")
username.set(propertySonatypeUsername.get())
password.set(propertySonatypePassword.get())
} else {
println("Publishing: Maven Central credentials NOT supplied, see root build script for required project properties")
}
}
}
}