-
Notifications
You must be signed in to change notification settings - Fork 307
Expand file tree
/
Copy pathbuild.gradle.kts
More file actions
128 lines (111 loc) · 5.85 KB
/
Copy pathbuild.gradle.kts
File metadata and controls
128 lines (111 loc) · 5.85 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
/*
* 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-beta"
// 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 (!isRelease && envIsCI) {
throw GradleException("Publishing: property $propertyVersionSuffixName must be set in CI to calculate version suffix.")
}
// version suffix: "-<value>" or "" if not defined; e.g. used by CI to pass in branch name
val versionSuffix = if (propertyVersionSuffix.isPresent) "-${propertyVersionSuffix.get()}" else ""
val obxJavaVersion by extra(versionNumber + (if (isRelease) "" else "$versionSuffix-SNAPSHOT"))
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")
}
}
}
}