copying sboms to dist
where the build server hopefully will find them
Bug: 283119819
Test: ./gradlew exportSboms && find ../../out/dist/sboms -type f
Test: Treehugger runs busytown/androidx_incremental.sh
Change-Id: I501111cd88f40962a54158efc0d24bafefa74ba7
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt b/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
index 5836ed8..669aa02 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
@@ -21,6 +21,7 @@
import androidx.build.GMavenZipTask
import androidx.build.ProjectLayoutType
import androidx.build.addToBuildOnServer
+import androidx.build.getDistributionDirectory
import androidx.build.getPrebuiltsRoot
import androidx.build.getSupportRootFolder
import androidx.build.gitclient.MultiGitClient
@@ -34,6 +35,7 @@
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ModuleVersionIdentifier
+import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.bundling.AbstractArchiveTask
import org.gradle.api.tasks.bundling.Zip
import org.gradle.jvm.tasks.Jar
@@ -201,6 +203,8 @@
/** Enables the publishing of an sbom that lists our embedded dependencies */
fun Project.configureSbomPublishing() {
val uuid = project.coordinatesToUUID().toString()
+ val projectName = project.name
+ val projectVersion = project.version.toString()
project.configurations.create(sbomEmptyConfiguration)
project.apply(plugin = "org.spdx.sbom")
@@ -209,9 +213,30 @@
val supportRootDir = getSupportRootFolder()
val allowPublicRepos = System.getenv("ALLOW_PUBLIC_REPOS") != null
+ val sbomPublishDir = project.getSbomPublishDir()
+
+ val sbomBuiltFile = project.layout.buildDirectory.file(
+ "spdx/release.spdx.json"
+ ).get().getAsFile()
+
+ val publishTask = project.tasks.register("exportSboms", Copy::class.java) { publishTask ->
+ publishTask.destinationDir = sbomPublishDir
+ val sbomBuildDir = sbomBuiltFile.parentFile
+ publishTask.from(sbomBuildDir)
+ publishTask.rename(sbomBuiltFile.name, "$projectName-$projectVersion.spdx.json")
+
+ publishTask.doFirst {
+ if (!sbomBuiltFile.exists()) {
+ throw GradleException(
+ "sbom file does not exist: $sbomBuiltFile"
+ )
+ }
+ }
+ }
project.tasks.withType(SpdxSbomTask::class.java).configureEach { task ->
val sbomProjectDir = project.projectDir
+
task.taskExtension.set(
object : DefaultSpdxSbomTaskExtension() {
override fun mapRepoUri(repoUri: URI, artifact: ModuleVersionIdentifier): URI {
@@ -277,6 +302,9 @@
target.getConfigurations().set(sbomConfigurations)
}
project.addToBuildOnServer(tasks.named("spdxSbomForRelease"))
+ publishTask.configure { task ->
+ task.dependsOn("spdxSbomForRelease")
+ }
}
}
@@ -310,6 +338,11 @@
throw GradleException("Could not identify git remote url for project at $dir")
}
+fun Project.getSbomPublishDir(): File {
+ val groupPath = project.group.toString().replace(".", "/")
+ return File(getDistributionDirectory(), "sboms/$groupPath/${project.name}/${project.version}")
+}
+
private const val MAVEN_CENTRAL_REPO_URL = "https://repo.maven.apache.org/maven2"
private const val GMAVEN_REPO_URL = "https://dl.google.com/android/maven2"
/** Returns a mapping from local repo url to public repo url */
diff --git a/busytown/androidx.sh b/busytown/androidx.sh
index cbecee6..1adf6b1 100755
--- a/busytown/androidx.sh
+++ b/busytown/androidx.sh
@@ -19,7 +19,7 @@
else
# Run Gradle
# If/when we enable desktop, enable VerifyDependencyVersionsTask.kt/shouldVerifyConfiguration
- if ! impl/build.sh buildOnServer createAllArchives checkExternalLicenses listTaskOutputs \
+ if ! impl/build.sh buildOnServer createAllArchives checkExternalLicenses listTaskOutputs exportSboms \
-Pandroidx.enableComposeCompilerMetrics=true \
-Pandroidx.enableComposeCompilerReports=true \
-Pandroidx.constraints=true \
diff --git a/busytown/androidx_incremental.sh b/busytown/androidx_incremental.sh
index f8ed79c..0c0a486 100755
--- a/busytown/androidx_incremental.sh
+++ b/busytown/androidx_incremental.sh
@@ -64,7 +64,7 @@
else
# Run Gradle
# TODO: when b/278730831 ( https://youtrack.jetbrains.com/issue/KT-58547 ) is resolved, remove "-Pkotlin.incremental=false"
- if impl/build.sh $DIAGNOSE_ARG buildOnServer checkExternalLicenses listTaskOutputs \
+ if impl/build.sh $DIAGNOSE_ARG buildOnServer checkExternalLicenses listTaskOutputs exportSboms \
--profile \
-Pkotlin.incremental=false \
"$@"; then