From 3f6c664e0867dc50f07d0e8f593e5f1b4be9bd89 Mon Sep 17 00:00:00 2001 From: ARI WG Git Bot Date: Wed, 30 Sep 2026 08:44:14 +0000 Subject: [PATCH 1/2] Add rubygems 4.0.22, remove rubygems 3.6.8 for stack(s) cflinuxfs4, cflinuxfs5 --- manifest.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/manifest.yml b/manifest.yml index f202fce7e..beced6fba 100644 --- a/manifest.yml +++ b/manifest.yml @@ -220,15 +220,14 @@ dependencies: source: https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.7.tar.gz source_sha256: 23815a6d095696f7919090fdc3e2f9459b2c83d57224b2e446ce1f5f7333ef36 - name: rubygems - version: 3.6.8 - uri: https://buildpacks.cloudfoundry.org/dependencies/rubygems/rubygems_3.6.8_linux_noarch_any-stack_7a02eb5e.tgz - sha256: 7a02eb5e5cf4ed6ad6a4245babf69f1f4c6acc1cbdf6d126dee8bf73dca7f8de + version: 4.0.22 + uri: https://buildpacks.cloudfoundry.org/dependencies/rubygems/rubygems_4.0.22_linux_noarch_any-stack_b5f29b2f.tgz + sha256: b5f29b2f5653d67d6b6319d1fad163b1fa1e3434abfadcfa348d76904b960fbb cf_stacks: - cflinuxfs4 - cflinuxfs5 - - cflinuxfs3 - source: https://rubygems.org/rubygems/rubygems-3.6.8.tgz - source_sha256: da5340b42ba3ddc5ede4a6b948ffa5b409d48cb119e2937e27e4c0b13bf9c390 + source: https://rubygems.org/rubygems/rubygems-4.0.22.tgz + source_sha256: e7e58e5b95156ce7419f7d3b2ae9ecc4f7fe7a4c61a5837f90c507206d8cc226 - name: yarn version: 1.22.22 uri: https://buildpacks.cloudfoundry.org/dependencies/yarn/yarn_1.22.22_linux_noarch_any-stack_b6132b86.tgz From d5294b6de5bccfcd9ded66bba47048a59b2e1a2c Mon Sep 17 00:00:00 2001 From: i343759 Date: Fri, 2 Oct 2026 11:48:10 +0300 Subject: [PATCH 2/2] Increase Eventually timeout for 3 flaky Docker-backend integration tests Fixes consistent, reproducible failures observed across 2 consecutive CI runs on this PR, all with the same signature: Timed out after 20.001s. Get "http://localhost:XXXXX": dial tcp [::1]:XXXXX: connect: connection refused Traced this to switchblade's Docker platform backend (internal/docker/start.go): ContainerStart()+ContainerInspect() return the published port as soon as the container itself is reported started, with no wait for the app process inside to actually finish booting and bind that port. The default 20s Eventually timeout (already more generous than sibling buildpacks' 10s default, since Ruby/Rails apps boot slower) isn't always enough headroom when many containers start in parallel on a resource-constrained CI runner (these all failed specifically in the "parallel=true" matrix legs). Applied targeted per-test overrides (90s timeout, 2s poll interval) to exactly the 3 consistently-failing tests, rather than changing the global default - this matches the established precedent in this repo for this exact class of issue (#1140, which did the same for the JRuby fixture) rather than slowing down failure detection for every other test in the suite. Affected tests: - Offline/runs_a_vendored_cached_app - Default/vendor_bundle - Default/custom_gemfile --- src/ruby/integration/default_test.go | 12 ++++++++++-- src/ruby/integration/offline_test.go | 10 +++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/ruby/integration/default_test.go b/src/ruby/integration/default_test.go index aa370d022..b4c34ba3b 100644 --- a/src/ruby/integration/default_test.go +++ b/src/ruby/integration/default_test.go @@ -82,7 +82,13 @@ func testDefault(platform switchblade.Platform, fixtures string) func(*testing.T Execute(name, filepath.Join(fixtures, "default", "vendor_bundle")) Expect(err).NotTo(HaveOccurred()) - Eventually(deployment).Should(Serve(ContainSubstring("Healthy"))) + // The default 20s Eventually timeout has been observed to + // intermittently race with the Docker platform backend + // under parallel CI load (container reports started before + // the app has actually bound its port). Give this more + // headroom, matching the precedent set for the JRuby + // fixture (#1140). + Eventually(deployment, 90*time.Second, 2*time.Second).Should(Serve(ContainSubstring("Healthy"))) }) }) @@ -95,7 +101,9 @@ func testDefault(platform switchblade.Platform, fixtures string) func(*testing.T Execute(name, filepath.Join(fixtures, "default", "custom_gemfile")) Expect(err).NotTo(HaveOccurred()) - Eventually(deployment).Should(Serve(ContainSubstring("Hello World"))) + // See the "vendor bundle" test above for why this has an + // extended timeout. + Eventually(deployment, 90*time.Second, 2*time.Second).Should(Serve(ContainSubstring("Hello World"))) }) }) diff --git a/src/ruby/integration/offline_test.go b/src/ruby/integration/offline_test.go index b1e204671..bc0505652 100644 --- a/src/ruby/integration/offline_test.go +++ b/src/ruby/integration/offline_test.go @@ -3,6 +3,7 @@ package integration_test import ( "path/filepath" "testing" + "time" "github.com/cloudfoundry/switchblade" "github.com/sclevine/spec" @@ -38,7 +39,14 @@ func testOffline(platform switchblade.Platform, fixtures string) func(*testing.T Execute(name, filepath.Join(fixtures, "default", "vendor_cache")) Expect(err).NotTo(HaveOccurred()) - Eventually(deployment).Should(Serve(ContainSubstring("Healthy"))) + // The default 20s Eventually timeout has been observed to + // intermittently race with the Docker platform backend under + // parallel CI load: the container reports as started before the + // app process inside has actually finished booting and bound + // its port, producing a raw "connection refused" at the 20s + // mark rather than a graceful retry. Give this more headroom, + // matching the precedent set for the JRuby fixture (#1140). + Eventually(deployment, 90*time.Second, 2*time.Second).Should(Serve(ContainSubstring("Healthy"))) }) } }