Extracting buildSrc tests into separate projects
so the main build can start before the tests finish
Before this change, when I run `time ./cleanBuild.sh -y projects` on my computer, it says:
real 1m19.058s
user 0m3.917s
sys 0m1.494s
After this change, when I run `time ./cleanBuild.sh -y projects` on my computer, it says:
real 1m10.884s
user 0m4.412s
sys 0m1.241s
Bug: 138456696
Test: ./gradlew projects
Test: ./cleanBuild.sh -y projects
Test: cd ui && ./gradlew projects
Test: ./gradlew test --dry-run 2>&1 | grep :buildSrc-tests:test
Test: ./gradlew test --dry-run 2>&1 | grep :buildSrc-tests:lint-checks:test
Test: sed 's/hasUiFile = false/hasUiFile = true/' -i ./buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt && ./gradlew :buildSrc-tests:lint-checks:test :buildSrc-tests:test # and notice that a test fails
Test: sed 's/SAMPLED_ANNOTATION = "Sampled"/SAMPLED_ANNOTATION = "Sampled2"/' -i ./buildSrc/lint-checks/src/main/java/androidx/build/lint/SampledAnnotationEnforcer.kt && ./gradlew :buildSrc-tests:lint-checks:test :buildSrc-tests:test # and notice that a test fails
Change-Id: I24d04a6de1d29834e26df7044fd63133f3253ed7
diff --git a/buildSrc-tests/build.gradle b/buildSrc-tests/build.gradle
new file mode 100644
index 0000000..f2a49f8
--- /dev/null
+++ b/buildSrc-tests/build.gradle
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2019 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
+ *
+ * http://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.
+ */
+
+// This project contains tests for code contained in buildSrc
+// This project is stored outside of buildSrc/ so that waiting for these tests to complete doesn't delay the rest of the build
+
+import static androidx.build.dependencies.DependenciesKt.*
+import androidx.build.BuildServerConfigurationKt
+
+plugins {
+ id("AndroidXPlugin")
+ id("kotlin")
+}
+
+dependencies {
+ implementation gradleApi()
+ testImplementation JUNIT
+ implementation(project.files(new File(BuildServerConfigurationKt.getRootOutDirectory(project), "buildSrc/build/libs/buildSrc.jar")))
+}
+
+androidx {
+ toolingProject = true
+}
diff --git a/buildSrc-tests/lint-checks/build.gradle b/buildSrc-tests/lint-checks/build.gradle
new file mode 100644
index 0000000..9e9f531
--- /dev/null
+++ b/buildSrc-tests/lint-checks/build.gradle
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2019 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
+ *
+ * http://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.
+ */
+
+
+import androidx.build.BuildServerConfigurationKt
+
+import java.io.File
+
+plugins {
+ id("AndroidXPlugin")
+ id("kotlin")
+}
+
+dependencies {
+ implementation build_libs.lint.core
+ implementation build_libs.lint.api
+ implementation build_libs.kotlin.stdlib
+ testImplementation build_libs.lint.tests
+ api("androidx.annotation:annotation:1.0.0")
+ implementation project.files(new File(BuildServerConfigurationKt.getRootOutDirectory(project), "buildSrc/lint-checks/build/libs/lint-checks.jar"))
+}
+
+androidx {
+ toolingProject = true
+}
diff --git a/buildSrc/lint-checks/src/test/java/androidx/build/lint/ObsoleteBuildCompatUsageDetectorTest.kt b/buildSrc-tests/lint-checks/src/test/java/androidx/build/lint/ObsoleteBuildCompatUsageDetectorTest.kt
similarity index 99%
rename from buildSrc/lint-checks/src/test/java/androidx/build/lint/ObsoleteBuildCompatUsageDetectorTest.kt
rename to buildSrc-tests/lint-checks/src/test/java/androidx/build/lint/ObsoleteBuildCompatUsageDetectorTest.kt
index 30bc8ee..a5f30df 100644
--- a/buildSrc/lint-checks/src/test/java/androidx/build/lint/ObsoleteBuildCompatUsageDetectorTest.kt
+++ b/buildSrc-tests/lint-checks/src/test/java/androidx/build/lint/ObsoleteBuildCompatUsageDetectorTest.kt
@@ -19,6 +19,7 @@
import com.android.tools.lint.checks.infrastructure.TestFiles.java
import com.android.tools.lint.checks.infrastructure.TestLintResult
import com.android.tools.lint.checks.infrastructure.TestLintTask.lint
+
import org.junit.Ignore
import org.junit.Test
diff --git a/buildSrc/lint-checks/src/test/java/androidx/build/lint/SampledAnnotationEnforcerTest.kt b/buildSrc-tests/lint-checks/src/test/java/androidx/build/lint/SampledAnnotationEnforcerTest.kt
similarity index 100%
rename from buildSrc/lint-checks/src/test/java/androidx/build/lint/SampledAnnotationEnforcerTest.kt
rename to buildSrc-tests/lint-checks/src/test/java/androidx/build/lint/SampledAnnotationEnforcerTest.kt
diff --git a/buildSrc/src/test/kotlin/androidx/build/VersionTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/VersionTest.kt
similarity index 100%
rename from buildSrc/src/test/kotlin/androidx/build/VersionTest.kt
rename to buildSrc-tests/src/test/kotlin/androidx/build/VersionTest.kt
diff --git a/buildSrc/src/test/kotlin/androidx/build/dependencyTracker/AffectedModuleDetectorImplTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/AffectedModuleDetectorImplTest.kt
similarity index 100%
rename from buildSrc/src/test/kotlin/androidx/build/dependencyTracker/AffectedModuleDetectorImplTest.kt
rename to buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/AffectedModuleDetectorImplTest.kt
diff --git a/buildSrc/src/test/kotlin/androidx/build/dependencyTracker/AttachLogsTestRule.kt b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/AttachLogsTestRule.kt
similarity index 100%
rename from buildSrc/src/test/kotlin/androidx/build/dependencyTracker/AttachLogsTestRule.kt
rename to buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/AttachLogsTestRule.kt
diff --git a/buildSrc/src/test/kotlin/androidx/build/dependencyTracker/BuildPropParserTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/BuildPropParserTest.kt
similarity index 100%
rename from buildSrc/src/test/kotlin/androidx/build/dependencyTracker/BuildPropParserTest.kt
rename to buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/BuildPropParserTest.kt
diff --git a/buildSrc/src/test/kotlin/androidx/build/dependencyTracker/GitClientImplTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/GitClientImplTest.kt
similarity index 100%
rename from buildSrc/src/test/kotlin/androidx/build/dependencyTracker/GitClientImplTest.kt
rename to buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/GitClientImplTest.kt
diff --git a/buildSrc/src/test/kotlin/androidx/build/dependencyTracker/ProjectGraphTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/ProjectGraphTest.kt
similarity index 100%
rename from buildSrc/src/test/kotlin/androidx/build/dependencyTracker/ProjectGraphTest.kt
rename to buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/ProjectGraphTest.kt
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index c51fd30..5b08e3b 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -44,13 +44,6 @@
allprojects {
repos.addMavenRepositories(repositories)
- tasks.withType(Test) {
- testLogging {
- events = ["failed"]
- exceptionFormat "full"
- }
- }
-
tasks.withType(KotlinCompile).configureEach {
kotlinOptions {
freeCompilerArgs += ["-Werror"]
@@ -65,7 +58,6 @@
implementation build_libs.kotlin.gradle_plugin
implementation gradleApi()
implementation project("jetpad-integration")
- testImplementation "junit:junit:4.12"
}
apply plugin: "java-gradle-plugin"
diff --git a/buildSrc/lint-checks/build.gradle b/buildSrc/lint-checks/build.gradle
index 6176fc3..1e34235 100644
--- a/buildSrc/lint-checks/build.gradle
+++ b/buildSrc/lint-checks/build.gradle
@@ -20,7 +20,6 @@
implementation build_libs.lint.core
implementation build_libs.lint.api
implementation build_libs.kotlin.stdlib
- testImplementation build_libs.lint.tests
api("androidx.annotation:annotation:1.0.0")
}
jar {
diff --git a/buildSrc/out.gradle b/buildSrc/out.gradle
index 7ad4cbf..4fe58ca 100644
--- a/buildSrc/out.gradle
+++ b/buildSrc/out.gradle
@@ -24,7 +24,10 @@
def outDir = System.env.OUT_DIR
if (outDir == null) {
outDir = new File("${buildscript.getSourceFile().parent}/../../../out${subdir}")
+ } else {
+ outDir = new File(outDir)
}
+ project.ext.outDir = outDir
buildDir = new File(outDir, "$project.name/build")
.getCanonicalFile()
subprojects {
diff --git a/buildSrc/src/main/kotlin/androidx/build/BuildServerConfiguration.kt b/buildSrc/src/main/kotlin/androidx/build/BuildServerConfiguration.kt
index 4d065ed..aa1f726 100644
--- a/buildSrc/src/main/kotlin/androidx/build/BuildServerConfiguration.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/BuildServerConfiguration.kt
@@ -46,6 +46,13 @@
}
/**
+ * Returns the out directory (an ancestor of all files generated by the build)
+ */
+fun Project.getRootOutDirectory(): File {
+ return project.rootProject.extensions.extraProperties.get("outDir") as File
+}
+
+/**
* Directory to put build info files for release service dependency files.
*/
fun Project.getBuildInfoDirectory(): File =
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt b/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
index c20ff94..d3df2ff 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
@@ -48,7 +48,7 @@
* ALL_AFFECTED_PROJECTS -- The union of CHANGED_PROJECTS and DEPENDENT_PROJECTS,
* which encompasses all projects that could possibly break due to the changes.
*/
-internal enum class ProjectSubset { DEPENDENT_PROJECTS, CHANGED_PROJECTS, ALL_AFFECTED_PROJECTS }
+enum class ProjectSubset { DEPENDENT_PROJECTS, CHANGED_PROJECTS, ALL_AFFECTED_PROJECTS }
/**
* A utility class that can discover which files are changed based on git history.
@@ -183,7 +183,7 @@
*
* When a file in a module is changed, all modules that depend on it are considered as changed.
*/
-internal class AffectedModuleDetectorImpl constructor(
+class AffectedModuleDetectorImpl constructor(
private val rootProject: Project,
private val logger: Logger?,
// used for debugging purposes when we want to ignore non module files
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/BuildPropParser.kt b/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/BuildPropParser.kt
index c877e7a..8f48cd6 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/BuildPropParser.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/BuildPropParser.kt
@@ -24,7 +24,7 @@
*
* Currently, we don't use it since build system does not give us the right shas.
*/
-internal object BuildPropParser {
+object BuildPropParser {
/**
* Returns the sha which is the reference sha that we should use to find changed files.
*
@@ -90,4 +90,4 @@
val repoSha: String,
val buildSha: String
)
-}
\ No newline at end of file
+}
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/GitClient.kt b/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/GitClient.kt
index 7e57766..486df04 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/GitClient.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/GitClient.kt
@@ -20,7 +20,7 @@
import java.io.File
import java.util.concurrent.TimeUnit
-internal interface GitClient {
+interface GitClient {
fun findChangedFilesSince(
sha: String,
top: String = "HEAD",
@@ -42,7 +42,7 @@
* A simple git client that uses system process commands to communicate with the git setup in the
* given working directory.
*/
-internal class GitClientImpl(
+class GitClientImpl(
/**
* The root location for git
*/
@@ -109,7 +109,7 @@
}
companion object {
- internal const val PREV_MERGE_CMD = "git log -1 --merges --oneline"
- internal const val CHANGED_FILES_CMD_PREFIX = "git diff --name-only"
+ const val PREV_MERGE_CMD = "git log -1 --merges --oneline"
+ const val CHANGED_FILES_CMD_PREFIX = "git diff --name-only"
}
}
diff --git a/gradlew b/gradlew
index 1cf59b6..5e8daf4 100755
--- a/gradlew
+++ b/gradlew
@@ -9,6 +9,8 @@
# --------- androidx specific code needed for build server. ------------------
if [ -n "$OUT_DIR" ] ; then
+ mkdir -p "$OUT_DIR"
+ OUT_DIR="$(cd $OUT_DIR && pwd)"
export GRADLE_USER_HOME="$OUT_DIR/.gradle"
export LINT_PRINT_STACKTRACE=true
else
diff --git a/settings.gradle b/settings.gradle
index e953056..8e9171e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -66,6 +66,8 @@
includeProject(":benchmark:integration-tests:startup-benchmark", "benchmark/integration-tests/startup-benchmark")
includeProject(":biometric", "biometric")
includeProject(":browser", "browser")
+includeProject(":buildSrc-tests", "buildSrc-tests")
+includeProject(":buildSrc-tests:lint-checks", "buildSrc-tests/lint-checks")
includeProject(":camera:camera-camera2", "camera/camera-camera2")
includeProject(":camera:camera-core", "camera/camera-core")
includeProject(":camera:camera-extensions", "camera/camera-extensions")