From cdc6e049068636445cceb72e5549e697602e4c26 Mon Sep 17 00:00:00 2001 From: Seth Boyles Date: Wed, 4 Feb 2026 11:37:41 -0700 Subject: [PATCH] Package Ruby 3.3. * prepackage local copy of Bundler gem so we can install it during packaging --- .final_builds/packages/ruby-3.3/index.yml | 6 ++++++ jobs/blobstore_benchmark/spec | 2 +- jobs/cc_deployment_updater/spec | 2 +- .../templates/pre-start.sh.erb | 3 +++ jobs/cloud_controller_clock/spec | 2 +- .../templates/pre-start.sh.erb | 3 +++ jobs/cloud_controller_ng/spec | 2 +- .../templates/pre-start.sh.erb | 5 +---- .../templates/shutdown_drain.rb.erb | 2 +- jobs/cloud_controller_worker/spec | 2 +- .../templates/pre-start.sh.erb | 3 +++ .../templates/shutdown_drain.rb.erb | 2 +- jobs/rotate_cc_database_key/spec | 2 +- packages/cloud_controller_ng/packaging | 6 +++++- packages/cloud_controller_ng/pre_packaging | 19 +++++++++++++++++++ packages/cloud_controller_ng/spec | 2 +- packages/nginx_newrelic_plugin/packaging | 2 +- packages/nginx_newrelic_plugin/spec | 2 +- packages/ruby-3.2/spec.lock | 2 -- packages/ruby-3.3/spec.lock | 2 ++ shared_job_templates/ruby_version.sh.erb | 16 +++++++++++++++- 21 files changed, 68 insertions(+), 19 deletions(-) create mode 100644 .final_builds/packages/ruby-3.3/index.yml delete mode 100644 packages/ruby-3.2/spec.lock create mode 100644 packages/ruby-3.3/spec.lock diff --git a/.final_builds/packages/ruby-3.3/index.yml b/.final_builds/packages/ruby-3.3/index.yml new file mode 100644 index 0000000000..f16d2b9319 --- /dev/null +++ b/.final_builds/packages/ruby-3.3/index.yml @@ -0,0 +1,6 @@ +builds: + 0c883b679650908d2761a272e325b27a2d8a541676f2251077ecd89b8db968a7: + version: 0c883b679650908d2761a272e325b27a2d8a541676f2251077ecd89b8db968a7 + blobstore_id: 5f2f0737-e2eb-47d6-6417-12c16a1a2972 + sha1: sha256:93612a49749e92b013a617c2ab4c8ca7a94938b1670f6ff9ffb93d039048227d +format-version: "2" diff --git a/jobs/blobstore_benchmark/spec b/jobs/blobstore_benchmark/spec index d533af8882..600627cd1f 100644 --- a/jobs/blobstore_benchmark/spec +++ b/jobs/blobstore_benchmark/spec @@ -16,7 +16,7 @@ templates: packages: - capi_utils - cloud_controller_ng - - ruby-3.2 + - ruby-3.3 - jemalloc - storage-cli - mariadb_connector_c diff --git a/jobs/cc_deployment_updater/spec b/jobs/cc_deployment_updater/spec index 594df6e4ef..c74688ff90 100644 --- a/jobs/cc_deployment_updater/spec +++ b/jobs/cc_deployment_updater/spec @@ -42,7 +42,7 @@ packages: - libpq - jemalloc - mariadb_connector_c - - ruby-3.2 + - ruby-3.3 consumes: - name: database diff --git a/jobs/cc_deployment_updater/templates/pre-start.sh.erb b/jobs/cc_deployment_updater/templates/pre-start.sh.erb index 1ffd9f1932..e83caf3556 100644 --- a/jobs/cc_deployment_updater/templates/pre-start.sh.erb +++ b/jobs/cc_deployment_updater/templates/pre-start.sh.erb @@ -5,6 +5,9 @@ set -ex source /var/vcap/packages/capi_utils/syslog_utils.sh tee_output_to_sys_log "cc_deployment_updater.$(basename "$0")" +SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")" +source "${SCRIPT_DIR}/ruby_version.sh" + function setup_directories { RUN_DIR="/var/vcap/sys/run/cc_deployment_updater" LOG_DIR="/var/vcap/sys/log/cc_deployment_updater" diff --git a/jobs/cloud_controller_clock/spec b/jobs/cloud_controller_clock/spec index 5a7ae40dab..bec942152f 100644 --- a/jobs/cloud_controller_clock/spec +++ b/jobs/cloud_controller_clock/spec @@ -43,7 +43,7 @@ packages: - libpq - jemalloc - mariadb_connector_c - - ruby-3.2 + - ruby-3.3 consumes: - name: database diff --git a/jobs/cloud_controller_clock/templates/pre-start.sh.erb b/jobs/cloud_controller_clock/templates/pre-start.sh.erb index ff5912e8a8..0dfc74b6c3 100644 --- a/jobs/cloud_controller_clock/templates/pre-start.sh.erb +++ b/jobs/cloud_controller_clock/templates/pre-start.sh.erb @@ -9,6 +9,9 @@ BUNDLER_DIR=/var/vcap/data/cloud_controller_clock/tmp/bundler chpst -u vcap:vcap mkdir -p $BUNDLER_DIR chpst -u vcap:vcap chmod -R go-w $BUNDLER_DIR +SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")" +source "${SCRIPT_DIR}/ruby_version.sh" + source /var/vcap/packages/capi_utils/syslog_utils.sh tee_output_to_sys_log "cloud_controller_clock.$(basename "$0")" diff --git a/jobs/cloud_controller_ng/spec b/jobs/cloud_controller_ng/spec index 98fac650ab..e23644dd28 100644 --- a/jobs/cloud_controller_ng/spec +++ b/jobs/cloud_controller_ng/spec @@ -78,7 +78,7 @@ packages: - libpq - jemalloc - mariadb_connector_c - - ruby-3.2 + - ruby-3.3 provides: - name: cloud_controller diff --git a/jobs/cloud_controller_ng/templates/pre-start.sh.erb b/jobs/cloud_controller_ng/templates/pre-start.sh.erb index 9e1c91a2a7..f5401ea728 100644 --- a/jobs/cloud_controller_ng/templates/pre-start.sh.erb +++ b/jobs/cloud_controller_ng/templates/pre-start.sh.erb @@ -6,16 +6,13 @@ export LANG="en_US.UTF-8" source /var/vcap/packages/capi_utils/syslog_utils.sh tee_output_to_sys_log "cloud_controller_ng.$(basename "$0")" -SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")" CC_JOB_DIR="/var/vcap/jobs/cloud_controller_ng" -CC_PACKAGE_DIR="/var/vcap/packages/cloud_controller_ng" CONFIG_DIR="${CC_JOB_DIR}/config" - export CLOUD_CONTROLLER_NG_CONFIG="${CONFIG_DIR}/cloud_controller_ng.yml" -export BUNDLE_GEMFILE="${CC_PACKAGE_DIR}/cloud_controller_ng/Gemfile" source ${CC_JOB_DIR}/bin/setup_local_blobstore.sh +SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")" source "${SCRIPT_DIR}/ruby_version.sh" function setup_nginx_directories { diff --git a/jobs/cloud_controller_ng/templates/shutdown_drain.rb.erb b/jobs/cloud_controller_ng/templates/shutdown_drain.rb.erb index aa7c6eab86..9e94ee56cd 100644 --- a/jobs/cloud_controller_ng/templates/shutdown_drain.rb.erb +++ b/jobs/cloud_controller_ng/templates/shutdown_drain.rb.erb @@ -1,4 +1,4 @@ -#!/var/vcap/packages/ruby-3.2/bin/ruby --disable-all +#!/var/vcap/packages/ruby-3.3/bin/ruby --disable-all $LOAD_PATH.unshift('/var/vcap/packages/cloud_controller_ng/cloud_controller_ng/app') $LOAD_PATH.unshift('/var/vcap/packages/cloud_controller_ng/cloud_controller_ng/lib') diff --git a/jobs/cloud_controller_worker/spec b/jobs/cloud_controller_worker/spec index 72d2a62fd9..aa1a1c8b38 100644 --- a/jobs/cloud_controller_worker/spec +++ b/jobs/cloud_controller_worker/spec @@ -49,7 +49,7 @@ packages: - libpq - jemalloc - mariadb_connector_c - - ruby-3.2 + - ruby-3.3 consumes: - name: database diff --git a/jobs/cloud_controller_worker/templates/pre-start.sh.erb b/jobs/cloud_controller_worker/templates/pre-start.sh.erb index dca9855e2d..cd24d680ae 100644 --- a/jobs/cloud_controller_worker/templates/pre-start.sh.erb +++ b/jobs/cloud_controller_worker/templates/pre-start.sh.erb @@ -7,7 +7,10 @@ tee_output_to_sys_log "cloud_controller_worker.$(basename "$0")" source /var/vcap/jobs/cloud_controller_worker/bin/setup_local_blobstore.sh + SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")" +source "${SCRIPT_DIR}/ruby_version.sh" + function setup_directories { setup_local_blobstore diff --git a/jobs/cloud_controller_worker/templates/shutdown_drain.rb.erb b/jobs/cloud_controller_worker/templates/shutdown_drain.rb.erb index 6a1c77fd4a..47019599bf 100644 --- a/jobs/cloud_controller_worker/templates/shutdown_drain.rb.erb +++ b/jobs/cloud_controller_worker/templates/shutdown_drain.rb.erb @@ -1,4 +1,4 @@ -#!/var/vcap/packages/ruby-3.2/bin/ruby --disable-all +#!/var/vcap/packages/ruby-3.3/bin/ruby --disable-all $LOAD_PATH.unshift('/var/vcap/packages/cloud_controller_ng/cloud_controller_ng/app') $LOAD_PATH.unshift('/var/vcap/packages/cloud_controller_ng/cloud_controller_ng/lib') diff --git a/jobs/rotate_cc_database_key/spec b/jobs/rotate_cc_database_key/spec index bd5fc127b8..a449614bce 100644 --- a/jobs/rotate_cc_database_key/spec +++ b/jobs/rotate_cc_database_key/spec @@ -16,7 +16,7 @@ packages: - libpq - jemalloc - mariadb_connector_c - - ruby-3.2 + - ruby-3.3 consumes: - name: cloud_controller_db diff --git a/packages/cloud_controller_ng/packaging b/packages/cloud_controller_ng/packaging index 7acfd0bf0a..bdfec80841 100644 --- a/packages/cloud_controller_ng/packaging +++ b/packages/cloud_controller_ng/packaging @@ -1,7 +1,7 @@ set -e -x # shellcheck disable=1090 -source "${BOSH_PACKAGES_DIR:-/var/vcap/packages}/ruby-3.2/bosh/compile.env" +source "${BOSH_PACKAGES_DIR:-/var/vcap/packages}/ruby-3.3/bosh/compile.env" cp -a * ${BOSH_INSTALL_TARGET} cd ${BOSH_INSTALL_TARGET}/cloud_controller_ng @@ -9,6 +9,10 @@ mariadb_dir=/var/vcap/packages/mariadb_connector_c libpq_dir=/var/vcap/packages/libpq export PATH=$libpq_dir/bin:$PATH +BUNDLER_VERSION=$(grep "BUNDLED WITH" Gemfile.lock -A 1 | grep -v "BUNDLED" | awk '{print $1}') + +gem install --local vendor/cache/bundler-${BUNDLER_VERSION}.gem + bundle config build.pg --with-pg-lib=$libpq_dir/lib --with-pg-include=$libpq_dir/include bundle config build.mysql2 --with-mysql-config=$mariadb_dir/bin/mariadb_config-wrapper.sh bosh_bundle_local --deployment diff --git a/packages/cloud_controller_ng/pre_packaging b/packages/cloud_controller_ng/pre_packaging index 70e89dd736..9232d10f03 100644 --- a/packages/cloud_controller_ng/pre_packaging +++ b/packages/cloud_controller_ng/pre_packaging @@ -24,6 +24,25 @@ for i in {1..3}; do exit_code="$?" set -e + BUNDLER_VERSION=$(grep "BUNDLED WITH" Gemfile.lock -A 1 | grep -v "BUNDLED" | awk '{print $1}') + if [ -z "$BUNDLER_VERSION" ]; then + echo "ERROR: Failed to find BUNDLER_VERSION in Gemfile.lock" + exit 1 + fi + + # Fetch and vendor the right bundler ourselves, as bundler won't vendor itself + gem fetch bundler --version=$BUNDLER_VERSION + if [ "${exit_code}" != "0" ]; then + echo "ERROR: Failed to fetch bundler version $BUNDLER_VERSION" + exit 1 + fi + + mv bundler-${BUNDLER_VERSION}.gem vendor/cache/ + if [ "${exit_code}" != "0" ]; then + echo "ERROR: Failed to move bundler-${BUNDLER_VERSION}.gem to vendor/cache/bundler-${BUNDLER_VERSION}.gem" + exit 1 + fi + if [ "${exit_code}" == "0" ]; then break fi diff --git a/packages/cloud_controller_ng/spec b/packages/cloud_controller_ng/spec index 29abcce460..06dc8affcd 100644 --- a/packages/cloud_controller_ng/spec +++ b/packages/cloud_controller_ng/spec @@ -3,7 +3,7 @@ name: cloud_controller_ng dependencies: - libpq - mariadb_connector_c -- ruby-3.2 +- ruby-3.3 files: - cloud_controller_ng/{.ruby-version,Rakefile,Gemfile,Gemfile.lock} diff --git a/packages/nginx_newrelic_plugin/packaging b/packages/nginx_newrelic_plugin/packaging index 31bd497b4e..bc40cad8d3 100644 --- a/packages/nginx_newrelic_plugin/packaging +++ b/packages/nginx_newrelic_plugin/packaging @@ -1,7 +1,7 @@ set -ex # shellcheck disable=1090 -source "${BOSH_PACKAGES_DIR:-/var/vcap/packages}/ruby-3.2/bosh/compile.env" +source "${BOSH_PACKAGES_DIR:-/var/vcap/packages}/ruby-3.3/bosh/compile.env" echo "Installing nginx newrelic plugin" diff --git a/packages/nginx_newrelic_plugin/spec b/packages/nginx_newrelic_plugin/spec index fb16ba5699..3464fec039 100644 --- a/packages/nginx_newrelic_plugin/spec +++ b/packages/nginx_newrelic_plugin/spec @@ -1,6 +1,6 @@ --- name: nginx_newrelic_plugin dependencies: -- ruby-3.2 +- ruby-3.3 files: - nginx/newrelic_nginx_agent-1.2.1.tar.gz diff --git a/packages/ruby-3.2/spec.lock b/packages/ruby-3.2/spec.lock deleted file mode 100644 index 857ee90207..0000000000 --- a/packages/ruby-3.2/spec.lock +++ /dev/null @@ -1,2 +0,0 @@ -name: ruby-3.2 -fingerprint: 8623b5ef53ac33bd9462a9b9b0d682a46d99a60a22f834c943beb953df735fbc diff --git a/packages/ruby-3.3/spec.lock b/packages/ruby-3.3/spec.lock new file mode 100644 index 0000000000..b133db0009 --- /dev/null +++ b/packages/ruby-3.3/spec.lock @@ -0,0 +1,2 @@ +name: ruby-3.3 +fingerprint: 0c883b679650908d2761a272e325b27a2d8a541676f2251077ecd89b8db968a7 diff --git a/shared_job_templates/ruby_version.sh.erb b/shared_job_templates/ruby_version.sh.erb index ee36d0920d..aa7f74868a 100644 --- a/shared_job_templates/ruby_version.sh.erb +++ b/shared_job_templates/ruby_version.sh.erb @@ -1,2 +1,16 @@ # shellcheck disable=1090 -source "${BOSH_PACKAGES_DIR:-/var/vcap/packages}/ruby-3.2/bosh/runtime.env" +source "${BOSH_PACKAGES_DIR:-/var/vcap/packages}/ruby-3.3/bosh/runtime.env" + +CC_PACKAGE_DIR="${BOSH_PACKAGES_DIR:-/var/vcap/packages}/cloud_controller_ng" +BUNDLER_VERSION=$(grep "BUNDLED WITH" ${CC_PACKAGE_DIR}/cloud_controller_ng/Gemfile.lock -A 1 | grep -v "BUNDLED" | awk '{print $1}') + +# Install the vendored bundler if it's not already installed +# Use a lock file to avoid concurrent installations +BUNDLER_LOCK_FILE="/var/vcap/sys/run/bundler_install.lock" +mkdir -p "$(dirname $BUNDLER_LOCK_FILE)" +( + flock -x 200 + if ! gem list -i bundler -v $BUNDLER_VERSION > /dev/null 2>&1; then + gem install --local ${CC_PACKAGE_DIR}/cloud_controller_ng/vendor/cache/bundler-${BUNDLER_VERSION}.gem + fi +) 200>$BUNDLER_LOCK_FILE