@@ -163,6 +163,7 @@ val bundleRepository = bundleDirectory.map { it.dir("m2/repository") }
163163// Gradle may clean task outputs before execution, which would otherwise remove
164164// the running wrapper distribution and daemon registry from underneath itself.
165165val bundleGradleHome = layout.buildDirectory.dir(" dependency-bundle-gradle-home" )
166+ val exampleGradleHome = layout.buildDirectory.dir(" dependency-bundle-example-gradle-home" )
166167
167168val publishBundleArtifacts by tasks.registering {
168169 group = " dependency bundle"
@@ -197,15 +198,25 @@ val captureRootDependencyBundle by tasks.registering(Exec::class) {
197198 environment(" GRADLE_USER_HOME" , gradleHome)
198199}
199200
200- val buildExampleAgainstBundle by tasks.registering(Exec ::class ) {
201+ val prepareExampleGradleHome by tasks.registering(Sync ::class ) {
201202 group = " dependency bundle"
203+ description = " Creates a clean Gradle home containing only the cached wrapper distribution."
202204 dependsOn(captureRootDependencyBundle)
205+ from(bundleGradleHome.map { it.dir(" wrapper" ) })
206+ into(exampleGradleHome.map { it.dir(" wrapper" ) })
207+ }
208+
209+ val buildExampleAgainstBundle by tasks.registering(Exec ::class ) {
210+ group = " dependency bundle"
211+ dependsOn(prepareExampleGradleHome)
203212 val repository = bundleRepository.get().asFile.absolutePath
204- val gradleHome = bundleGradleHome .get().asFile.absolutePath
213+ val gradleHome = exampleGradleHome .get().asFile.absolutePath
205214 commandLine(
206- " ./gradlew" , " --no-daemon" , " --no-configuration-cache" ,
215+ " ./gradlew" , " --no-daemon" , " --no-configuration-cache" , " --offline " ,
207216 " -p" , " example" ,
208217 " -PbundleRepository=$repository " ,
218+ " -PbundlePluginVersion=${project.version} " ,
219+ " -PbundleOfflineOnly" ,
209220 " -PbundleOutput=${bundleDirectory.get().asFile.absolutePath} " ,
210221 " build" ,
211222 )
@@ -222,6 +233,7 @@ val captureExampleDependencyBundle by tasks.registering(Exec::class) {
222233 " ./gradlew" , " --no-daemon" , " --no-configuration-cache" ,
223234 " -p" , " example" ,
224235 " -PbundleRepository=$repository " ,
236+ " -PbundlePluginVersion=${project.version} " ,
225237 " -PbundleOutput=$output " ,
226238 " dependencyBundleReport" ,
227239 )
@@ -265,6 +277,20 @@ val verifyPreparedDependencyBundle by tasks.registering {
265277 val actual = digest.digest().joinToString(" " ) { " %02x" .format(it) }
266278 check(actual == artifact.getValue(" sha256" )) { " Manifest checksum differs for $relative " }
267279 }
280+ val version = project.version.toString()
281+ val groupPath = " org/openprojectx/gradle/dependency/bundle"
282+ val requiredLocalArtifacts = listOf (
283+ " $groupPath /org.openprojectx.gradle.dependency.bundle.gradle.plugin/$version /" +
284+ " org.openprojectx.gradle.dependency.bundle.gradle.plugin-$version .pom" ,
285+ " $groupPath /plugin/$version /plugin-$version .pom" ,
286+ " $groupPath /plugin/$version /plugin-$version .module" ,
287+ " $groupPath /plugin/$version /plugin-$version .jar" ,
288+ )
289+ requiredLocalArtifacts.forEach { relative ->
290+ check(repository.get().file(relative).asFile.isFile) {
291+ " Canonical Maven-local artifact is absent: $relative "
292+ }
293+ }
268294 logger.lifecycle(" Verified {} bundled artifacts" , artifacts.size)
269295 }
270296}
@@ -294,9 +320,11 @@ configure<ReleaseExtension> {
294320 buildTasks.set(
295321 listOf (
296322 " syncDocsVersion" ,
323+ " test" ,
324+ " verifyPreparedDependencyBundle" ,
325+ " :auditor-cli:jib" ,
297326 " publishToSonatype" ,
298327 " closeAndReleaseSonatypeStagingRepository" ,
299- " :auditor-cli:jib" ,
300328 )
301329 )
302330 versionPropertyFile.set(" gradle.properties" )
@@ -306,3 +334,9 @@ configure<ReleaseExtension> {
306334 requireBranch.set(" master" )
307335 }
308336}
337+
338+ // Publishing must never begin until the bundle and its isolated offline
339+ // consumer build have passed, including when publication is invoked directly.
340+ tasks.matching { it.name == " publishToSonatype" }.configureEach {
341+ dependsOn(verifyPreparedDependencyBundle)
342+ }
0 commit comments