From 5ea994aa0215fcec2fafad01997b64f69d62c051 Mon Sep 17 00:00:00 2001 From: Brian Hotopp Date: Thu, 16 Jul 2026 11:53:54 -0400 Subject: [PATCH] [2.x] fix: Sequence server start before publish in ivyless HTTP scripted tests The ivyless-publish-http and ivyless-publish-http-plugin scripted tests defined publishToHttp as three unordered `.value` dependencies (startPublishServer, publish, stopPublishServer). sbt evaluates task dependencies before the task body in an unspecified order, so publish could run before the HTTP server was listening and fail intermittently with "Connection refused". It is reproducible under CPU contention (a 2-vCPU runner), which is why it began flaking on the JDK-25 shard and turned develop red. Use Def.sequential to guarantee start -> publish -> stop ordering, the way the sibling ivyless-publish-maven-http test already sequences via separate scripted commands. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../ivyless-publish-http-plugin/build.sbt | 6 +----- .../dependency-management/ivyless-publish-http/build.sbt | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http-plugin/build.sbt b/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http-plugin/build.sbt index 5c2826103..72d56f3c0 100644 --- a/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http-plugin/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http-plugin/build.sbt @@ -38,11 +38,7 @@ stopPublishServer := { } val publishToHttp = taskKey[Unit]("Publish to HTTP server (start server, publish, stop server)") -publishToHttp := { - startPublishServer.value - try publish.value - finally stopPublishServer.value -} +publishToHttp := Def.sequential(startPublishServer, publish, stopPublishServer).value val checkPublished = taskKey[Unit]("Check ivyless publish wrote the plugin cross-suffix PUT path") checkPublished := { diff --git a/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http/build.sbt b/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http/build.sbt index 6398193f5..c05671cda 100644 --- a/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/ivyless-publish-http/build.sbt @@ -35,11 +35,7 @@ stopPublishServer := { } val publishToHttp = taskKey[Unit]("Publish to HTTP server (start server, publish, stop server)") -publishToHttp := { - startPublishServer.value - try publish.value - finally stopPublishServer.value -} +publishToHttp := Def.sequential(startPublishServer, publish, stopPublishServer).value val checkIvylessPublish = taskKey[Unit]("Check that ivyless publish produced the expected files") checkIvylessPublish := {