| /* |
| * Copyright 2020 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * https://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| buildscript { |
| repositories { |
| google() |
| mavenCentral() |
| gradlePluginPortal() |
| } |
| |
| dependencies { |
| classpath libs.android.tools.build.gradle |
| classpath libs.android.gradlePlugin |
| classpath libs.kotlin.gradlePlugin |
| |
| classpath libs.gradleMavenPublishPlugin |
| |
| classpath libs.metalavaGradle |
| |
| classpath libs.affectedmoduledetector |
| } |
| } |
| |
| plugins { |
| id "com.diffplug.spotless" version "6.5.2" |
| alias(libs.plugins.jetbrains.dokka) |
| } |
| |
| apply plugin: 'com.dropbox.affectedmoduledetector' |
| apply plugin: 'com.diffplug.spotless' |
| |
| tasks.withType(org.jetbrains.dokka.gradle.DokkaMultiModuleTask).configureEach { |
| outputDirectory = rootProject.file('docs/api') |
| failOnWarning = true |
| } |
| |
| affectedModuleDetector { |
| baseDir = "${project.rootDir}" |
| pathsAffectingAllModules = [ |
| "gradle/libs.versions.toml", |
| ] |
| excludedModules = [ |
| "sample" |
| ] |
| |
| logFilename = "output.log" |
| logFolder = "${rootProject.buildDir}/affectedModuleDetector" |
| |
| String baseRef = findProperty("affected_base_ref") |
| // If we have a base ref to diff against, extract the branch name and use it |
| if (baseRef != null && !baseRef.isEmpty()) { |
| // Remove the prefix from the head. |
| // TODO: need to support other types of git refs |
| specifiedBranch = baseRef.replace('refs/heads/', '') |
| compareFrom = "SpecifiedBranchCommit" |
| } else { |
| // Otherwise we use the previous commit. This is mostly used for commits to main. |
| compareFrom = "PreviousCommit" |
| } |
| } |
| |
| allprojects { |
| repositories { |
| google() |
| mavenCentral() |
| |
| def composeSnapshot = libs.versions.composesnapshot.get() |
| if (composeSnapshot.length() > 1) { |
| maven { url "https://androidx.dev/snapshots/builds/$composeSnapshot/artifacts/repository/" } |
| } |
| } |
| } |
| |
| subprojects { |
| apply plugin: 'com.diffplug.spotless' |
| |
| spotless { |
| kotlin { |
| target "**/*.kt" |
| ktlint(libs.versions.ktlint.get()) |
| licenseHeaderFile rootProject.file('spotless/copyright.txt') |
| } |
| |
| groovyGradle { |
| target '**/*.gradle' |
| greclipse().configFile(rootProject.file('spotless/greclipse.properties')) |
| licenseHeaderFile rootProject.file('spotless/copyright.txt'), |
| '(buildscript|apply|import|plugins)' |
| } |
| } |
| |
| // Remove all test apps after running UI tests. |
| // This is specially important in CI so that test emulators don't run out of space. |
| tasks.whenTaskAdded { task -> |
| if (task.name == 'connectedDebugAndroidTest') { |
| task.finalizedBy 'uninstallDebugAndroidTest' |
| } |
| } |
| |
| configurations.configureEach { |
| resolutionStrategy.eachDependency { DependencyResolveDetails details -> |
| // Make sure that we're using the Android version of Guava |
| if (details.requested.group == 'com.google.guava' |
| && details.requested.module.name == 'guava' |
| && details.requested.version.contains('jre')) { |
| details.useVersion details.requested.version.replace('jre', 'android') |
| } |
| } |
| } |
| |
| tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { compile -> |
| kotlinOptions { |
| // Treat all Kotlin warnings as errors |
| allWarningsAsErrors = true |
| // Set JVM target to 1.8 |
| jvmTarget = "1.8" |
| // Allow use of @OptIn |
| freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn" |
| // Enable default methods in interfaces |
| freeCompilerArgs += "-Xjvm-default=all" |
| } |
| } |
| |
| // Read in the signing.properties file if it is exists |
| def signingPropsFile = rootProject.file('release/signing.properties') |
| if (signingPropsFile.exists()) { |
| def localProperties = new Properties() |
| signingPropsFile.withInputStream { is -> localProperties.load(is) } |
| localProperties.each { prop -> |
| if (prop.key == "signing.secretKeyRingFile") { |
| // If this is the key ring, treat it as a relative path |
| project.ext.set(prop.key, rootProject.file(prop.value).absolutePath) |
| } else { |
| project.ext.set(prop.key, prop.value) |
| } |
| } |
| } |
| |
| // Must be afterEvaluate or else com.vanniktech.maven.publish will overwrite our |
| // dokka and version configuration. |
| afterEvaluate { |
| if (tasks.findByName('dokkaHtmlPartial') == null) { |
| // If dokka isn't enabled on this module, skip |
| return |
| } |
| |
| tasks.named('dokkaHtmlPartial') { |
| dokkaSourceSets.configureEach { |
| reportUndocumented.set(true) |
| skipEmptyPackages.set(true) |
| skipDeprecated.set(true) |
| jdkVersion.set(8) |
| |
| // Add Android SDK packages |
| noAndroidSdkLink.set(false) |
| |
| // Add samples from :sample module |
| samples.from(rootProject.file("sample/src/main/java/")) |
| |
| // AndroidX + Compose docs |
| externalDocumentationLink { |
| url.set(new URL("https://developer.android.com/reference/")) |
| packageListUrl.set(new URL("https://developer.android.com/reference/androidx/package-list")) |
| } |
| externalDocumentationLink { |
| url.set(new URL("https://developer.android.com/reference/kotlin/")) |
| packageListUrl.set(new URL("https://developer.android.com/reference/kotlin/androidx/package-list")) |
| } |
| |
| sourceLink { |
| localDirectory.set(project.file("src/main/java")) |
| // URL showing where the source code can be accessed through the web browser |
| remoteUrl.set(new URL("https://github.com/google/accompanist/blob/main/${project.name}/src/main/java")) |
| // Suffix which is used to append the line number to the URL. Use #L for GitHub |
| remoteLineSuffix.set("#L") |
| } |
| } |
| } |
| } |
| |
| afterEvaluate { |
| def composeSnapshot = libs.versions.composesnapshot.get() |
| if (composeSnapshot.length() > 1) { |
| // We're depending on a Jetpack Compose snapshot, update the library version name |
| // to indicate it's from a Compose snapshot |
| def versionName = project.properties.get('VERSION_NAME') |
| if (versionName.contains("SNAPSHOT")) { |
| version = versionName.replace('-SNAPSHOT', ".compose-${composeSnapshot}-SNAPSHOT") |
| } |
| } |
| |
| if (!version.endsWith('SNAPSHOT')) { |
| // If we're not a SNAPSHOT library version, we fail the build if we're relying on |
| // any snapshot dependencies |
| configurations.configureEach { configuration -> |
| configuration.dependencies.configureEach { dependency -> |
| if (dependency instanceof ProjectDependency) { |
| // We don't care about internal project dependencies |
| return |
| } |
| |
| def depVersion = dependency.version |
| if (depVersion != null && depVersion.endsWith('SNAPSHOT')) { |
| throw new IllegalArgumentException( |
| "Using SNAPSHOT dependency with non-SNAPSHOT library version: $dependency" |
| ) |
| } |
| } |
| } |
| } |
| } |
| } |