From 5807edbc6ca83dc3a2aef1ca42772ebf35f145be Mon Sep 17 00:00:00 2001 From: Jochen Ehret Date: Thu, 9 Apr 2026 16:51:38 +0200 Subject: [PATCH 1/5] Update release-notes task to Ruby 3.2 * recent dependabot Gem updates are not compatible with 2.6 anymore --- tasks/cf-deployment-release-notes-template/task | 10 +++++++--- tasks/cf-deployment-release-notes-template/task.yml | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/tasks/cf-deployment-release-notes-template/task b/tasks/cf-deployment-release-notes-template/task index 6ea23a8ee..e4a9d5a6c 100755 --- a/tasks/cf-deployment-release-notes-template/task +++ b/tasks/cf-deployment-release-notes-template/task @@ -4,9 +4,13 @@ set -exu SCRIPT_DIR=runtime-ci/tasks/cf-deployment-release-notes-template pushd $SCRIPT_DIR - PARSED_BUNDLE_VERSION=$(sed -n '/BUNDLED WITH/{;n;p;}' Gemfile.lock) - gem uninstall bundler - gem install bundler --version "$PARSED_BUNDLE_VERSION" + PARSED_BUNDLE_VERSION=$(sed -n '/BUNDLED WITH/{;n;p;}' Gemfile.lock | xargs) + + # Ruby images ship bundler as a default gem; only install the locked version if missing. + if ! gem list -i bundler -v "$PARSED_BUNDLE_VERSION"; then + gem install bundler --version "$PARSED_BUNDLE_VERSION" + fi + bundle install --without development popd diff --git a/tasks/cf-deployment-release-notes-template/task.yml b/tasks/cf-deployment-release-notes-template/task.yml index beff61f6c..58c561f8c 100644 --- a/tasks/cf-deployment-release-notes-template/task.yml +++ b/tasks/cf-deployment-release-notes-template/task.yml @@ -5,7 +5,7 @@ image_resource: type: registry-image source: repository: ruby - tag: 2.6-slim + tag: 3.2-slim inputs: - name: runtime-ci From 2249dcf6de01b0dd93236ebac557f4957508b121 Mon Sep 17 00:00:00 2001 From: Jochen Ehret Date: Thu, 9 Apr 2026 17:02:34 +0200 Subject: [PATCH 2/5] Update bundler version --- tasks/cf-deployment-release-notes-template/Gemfile.lock | 2 +- tasks/cf-deployment-release-notes-template/task | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/tasks/cf-deployment-release-notes-template/Gemfile.lock b/tasks/cf-deployment-release-notes-template/Gemfile.lock index 14c20bb6d..9559f6d0d 100644 --- a/tasks/cf-deployment-release-notes-template/Gemfile.lock +++ b/tasks/cf-deployment-release-notes-template/Gemfile.lock @@ -74,4 +74,4 @@ DEPENDENCIES webmock BUNDLED WITH - 2.0.1 + 2.4.19 diff --git a/tasks/cf-deployment-release-notes-template/task b/tasks/cf-deployment-release-notes-template/task index e4a9d5a6c..0094b3213 100755 --- a/tasks/cf-deployment-release-notes-template/task +++ b/tasks/cf-deployment-release-notes-template/task @@ -4,12 +4,6 @@ set -exu SCRIPT_DIR=runtime-ci/tasks/cf-deployment-release-notes-template pushd $SCRIPT_DIR - PARSED_BUNDLE_VERSION=$(sed -n '/BUNDLED WITH/{;n;p;}' Gemfile.lock | xargs) - - # Ruby images ship bundler as a default gem; only install the locked version if missing. - if ! gem list -i bundler -v "$PARSED_BUNDLE_VERSION"; then - gem install bundler --version "$PARSED_BUNDLE_VERSION" - fi bundle install --without development popd From 19a0e239decab96887520e04c7f55a44ce462041 Mon Sep 17 00:00:00 2001 From: Jochen Ehret Date: Thu, 9 Apr 2026 17:07:03 +0200 Subject: [PATCH 3/5] Allow YAML aliases --- tasks/cf-deployment-release-notes-template/release_changes.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/cf-deployment-release-notes-template/release_changes.rb b/tasks/cf-deployment-release-notes-template/release_changes.rb index 4bda8340a..6feeae5dc 100644 --- a/tasks/cf-deployment-release-notes-template/release_changes.rb +++ b/tasks/cf-deployment-release-notes-template/release_changes.rb @@ -33,7 +33,7 @@ def load_yaml_file(input_name, filename) return nil unless File.exist? filepath file_text = File.read(filepath) - YAML.load(file_text) || nil + YAML.load(file_text, aliases: true) || nil end def collect_releases_and_stemcells(manifest, opsfile: false) From 337aee2255dd69c0caf3ca2e5910f89a39718993 Mon Sep 17 00:00:00 2001 From: Jochen Ehret Date: Thu, 9 Apr 2026 17:14:58 +0200 Subject: [PATCH 4/5] Clean up test dependencies for Ruby 3.2 * and add instructions how to run tests locally --- .../.rspec | 3 + .../Gemfile | 4 - .../Gemfile.lock | 81 ++++++------------- .../README.md | 30 +++++++ .../release_changes.rb | 7 +- .../release_changes_spec.rb | 4 +- .../cf-deployment-release-notes-template/task | 4 +- 7 files changed, 66 insertions(+), 67 deletions(-) create mode 100644 tasks/cf-deployment-release-notes-template/.rspec create mode 100644 tasks/cf-deployment-release-notes-template/README.md diff --git a/tasks/cf-deployment-release-notes-template/.rspec b/tasks/cf-deployment-release-notes-template/.rspec new file mode 100644 index 000000000..099a6b850 --- /dev/null +++ b/tasks/cf-deployment-release-notes-template/.rspec @@ -0,0 +1,3 @@ +--pattern *_spec.rb +--format documentation + diff --git a/tasks/cf-deployment-release-notes-template/Gemfile b/tasks/cf-deployment-release-notes-template/Gemfile index bbd6d6ade..fc180c188 100644 --- a/tasks/cf-deployment-release-notes-template/Gemfile +++ b/tasks/cf-deployment-release-notes-template/Gemfile @@ -4,7 +4,3 @@ gem 'hashdiff' gem 'rspec' gem 'webmock' -group :development do - gem 'guard' - gem 'guard-rspec', require: false -end diff --git a/tasks/cf-deployment-release-notes-template/Gemfile.lock b/tasks/cf-deployment-release-notes-template/Gemfile.lock index 9559f6d0d..d3bb015cf 100644 --- a/tasks/cf-deployment-release-notes-template/Gemfile.lock +++ b/tasks/cf-deployment-release-notes-template/Gemfile.lock @@ -3,75 +3,40 @@ GEM specs: addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) - coderay (1.1.2) - crack (0.4.3) - safe_yaml (~> 1.0.0) - diff-lcs (1.3) - ffi (1.10.0) - formatador (0.2.5) - guard (2.15.0) - formatador (>= 0.2.4) - listen (>= 2.7, < 4.0) - lumberjack (>= 1.0.12, < 2.0) - nenv (~> 0.1) - notiffany (~> 0.0) - pry (>= 0.9.12) - shellany (~> 0.0) - thor (>= 0.18.1) - guard-compat (1.2.1) - guard-rspec (4.7.3) - guard (~> 2.1) - guard-compat (~> 1.1) - rspec (>= 2.99.0, < 4.0) - hashdiff (0.3.8) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - lumberjack (1.0.13) - method_source (0.9.2) - nenv (0.3.0) - notiffany (0.1.1) - nenv (~> 0.1) - shellany (~> 0.0) - pry (0.12.2) - coderay (~> 1.1.0) - method_source (~> 0.9.0) + bigdecimal (4.1.1) + crack (1.0.1) + bigdecimal + rexml + diff-lcs (1.6.2) + hashdiff (1.2.1) public_suffix (7.0.5) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) - ffi (~> 1.0) - rspec (3.8.0) - rspec-core (~> 3.8.0) - rspec-expectations (~> 3.8.0) - rspec-mocks (~> 3.8.0) - rspec-core (3.8.0) - rspec-support (~> 3.8.0) - rspec-expectations (3.8.2) + rexml (3.4.4) + rspec (3.13.2) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-core (3.13.6) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.5) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.8.0) - rspec-mocks (3.8.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.8.0) - rspec-support (3.8.0) - ruby_dep (1.5.0) - safe_yaml (1.0.5) - shellany (0.0.1) - thor (1.4.0) - webmock (3.5.1) - addressable (>= 2.3.6) + rspec-support (~> 3.13.0) + rspec-support (3.13.7) + webmock (3.26.2) + addressable (>= 2.8.0) crack (>= 0.3.2) - hashdiff + hashdiff (>= 0.4.0, < 2.0.0) PLATFORMS + arm64-darwin-23 ruby DEPENDENCIES - guard - guard-rspec hashdiff rspec webmock BUNDLED WITH - 2.4.19 + 2.6.3 diff --git a/tasks/cf-deployment-release-notes-template/README.md b/tasks/cf-deployment-release-notes-template/README.md new file mode 100644 index 000000000..dcb3d1c8b --- /dev/null +++ b/tasks/cf-deployment-release-notes-template/README.md @@ -0,0 +1,30 @@ +# cf-deployment-release-notes-template + +This task generates the cf-deployment release notes template. + +## Run tests locally + +### Prerequisites + +- Ruby 3.2+ +- Bundler installed + +### From repository root + +```bash +cd tasks/cf-deployment-release-notes-template +bundle install +bundle exec rspec +``` + +### From task directory (already there) + +```bash +bundle install +bundle exec rspec +``` + +Notes: +- The local `.rspec` config is set to run `*_spec.rb` files in this directory. +- If dependencies changed, re-run `bundle install` before running tests. + diff --git a/tasks/cf-deployment-release-notes-template/release_changes.rb b/tasks/cf-deployment-release-notes-template/release_changes.rb index 6feeae5dc..bbaad9a7e 100644 --- a/tasks/cf-deployment-release-notes-template/release_changes.rb +++ b/tasks/cf-deployment-release-notes-template/release_changes.rb @@ -17,7 +17,12 @@ def load_from_files(filename, opsfile: false) main_releases_list = collect_releases_and_stemcells(main_branch, opsfile: opsfile) release_updates = ReleaseUpdates.new - change_set = HashDiff.diff(main_releases_list, release_candidate_releases_list) + hashdiff = if Object.const_defined?(:HashDiff) + Object.const_get(:HashDiff) + else + Object.const_get(:Hashdiff) + end + change_set = hashdiff.diff(main_releases_list, release_candidate_releases_list) change_set.each do |change| release_updates.load_change(change) end diff --git a/tasks/cf-deployment-release-notes-template/release_changes_spec.rb b/tasks/cf-deployment-release-notes-template/release_changes_spec.rb index 6ab7c4404..973aeec76 100644 --- a/tasks/cf-deployment-release-notes-template/release_changes_spec.rb +++ b/tasks/cf-deployment-release-notes-template/release_changes_spec.rb @@ -14,7 +14,7 @@ after(:all) do Dir.chdir(@current_work_dir) - FileUtils.rm_rf(@tmp_work_dir) if File.exists?(@tmp_work_dir) + FileUtils.rm_rf(@tmp_work_dir) if File.exist?(@tmp_work_dir) end let(:ru) { ReleaseUpdates.new } @@ -363,7 +363,7 @@ end context 'when the operation is "-"' do - let (:op) { '-' } + let(:op) { '-' } it 'saves the version as old_version' do updates.load_change(change) expect(updates.get_update_by_name(name).old_version).to eq version diff --git a/tasks/cf-deployment-release-notes-template/task b/tasks/cf-deployment-release-notes-template/task index 0094b3213..8e986e184 100755 --- a/tasks/cf-deployment-release-notes-template/task +++ b/tasks/cf-deployment-release-notes-template/task @@ -4,8 +4,8 @@ set -exu SCRIPT_DIR=runtime-ci/tasks/cf-deployment-release-notes-template pushd $SCRIPT_DIR - - bundle install --without development + bundle config set --local without development + bundle install popd BUNDLE_GEMFILE=$SCRIPT_DIR/Gemfile \ From 93b4575d02f8e7be3ad5354866d3a16dd04dfa11 Mon Sep 17 00:00:00 2001 From: Jochen Ehret Date: Thu, 9 Apr 2026 17:21:20 +0200 Subject: [PATCH 5/5] Pin hashdiff gem to a version that doesn't require native extensions --- .../Gemfile | 8 ++-- .../Gemfile.lock | 48 ++++++++++--------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/tasks/cf-deployment-release-notes-template/Gemfile b/tasks/cf-deployment-release-notes-template/Gemfile index fc180c188..c308d5581 100644 --- a/tasks/cf-deployment-release-notes-template/Gemfile +++ b/tasks/cf-deployment-release-notes-template/Gemfile @@ -1,6 +1,8 @@ source 'https://rubygems.org' -gem 'hashdiff' -gem 'rspec' -gem 'webmock' +gem 'hashdiff', '0.3.8' +gem 'rspec', '~> 3.8.0' +gem 'webmock', '3.5.1' +gem 'crack', '0.4.3' +gem 'rexml', '3.4.4' diff --git a/tasks/cf-deployment-release-notes-template/Gemfile.lock b/tasks/cf-deployment-release-notes-template/Gemfile.lock index d3bb015cf..2a4ca80b2 100644 --- a/tasks/cf-deployment-release-notes-template/Gemfile.lock +++ b/tasks/cf-deployment-release-notes-template/Gemfile.lock @@ -3,40 +3,42 @@ GEM specs: addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) - bigdecimal (4.1.1) - crack (1.0.1) - bigdecimal - rexml + crack (0.4.3) + safe_yaml (~> 1.0.0) diff-lcs (1.6.2) - hashdiff (1.2.1) + hashdiff (0.3.8) public_suffix (7.0.5) rexml (3.4.4) - rspec (3.13.2) - rspec-core (~> 3.13.0) - rspec-expectations (~> 3.13.0) - rspec-mocks (~> 3.13.0) - rspec-core (3.13.6) - rspec-support (~> 3.13.0) - rspec-expectations (3.13.5) + rspec (3.8.0) + rspec-core (~> 3.8.0) + rspec-expectations (~> 3.8.0) + rspec-mocks (~> 3.8.0) + rspec-core (3.8.2) + rspec-support (~> 3.8.0) + rspec-expectations (3.8.6) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.13.0) - rspec-mocks (3.13.8) + rspec-support (~> 3.8.0) + rspec-mocks (3.8.2) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.13.0) - rspec-support (3.13.7) - webmock (3.26.2) - addressable (>= 2.8.0) + rspec-support (~> 3.8.0) + rspec-support (3.8.3) + safe_yaml (1.0.5) + webmock (3.5.1) + addressable (>= 2.3.6) crack (>= 0.3.2) - hashdiff (>= 0.4.0, < 2.0.0) + hashdiff PLATFORMS arm64-darwin-23 ruby + x86_64-linux DEPENDENCIES - hashdiff - rspec - webmock + crack (= 0.4.3) + hashdiff (= 0.3.8) + rexml (= 3.4.4) + rspec (~> 3.8.0) + webmock (= 3.5.1) BUNDLED WITH - 2.6.3 + 2.4.19