From edd079a33d828bc00a659faf3d98a3e6abcf040c Mon Sep 17 00:00:00 2001 From: Alex Chang Date: Fri, 21 Aug 2026 09:49:12 -0400 Subject: [PATCH 1/3] fix(ci): update Bedrock lockfile during releases --- CONTRIBUTING.md | 4 ++++ gemfiles/bedrock.gemfile.lock | 2 ++ release-please-config.json | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0ac9db46b..bc359949b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -121,6 +121,10 @@ $ BUNDLE_GEMFILE=gemfiles/bedrock.gemfile bundle install $ BUNDLE_GEMFILE=gemfiles/bedrock.gemfile bundle exec rake test:bedrock ``` +When regenerating `gemfiles/bedrock.gemfile.lock`, preserve the +`x-release-please` markers around the local `openai` version. Release Please +uses them to update this lockfile; Bundler can remove them when rewriting it. + ### Running examples end-to-end The live example suite executes every example marked as `covered` in diff --git a/gemfiles/bedrock.gemfile.lock b/gemfiles/bedrock.gemfile.lock index 3a72a32d7..1b2c49a9d 100644 --- a/gemfiles/bedrock.gemfile.lock +++ b/gemfiles/bedrock.gemfile.lock @@ -11,7 +11,9 @@ GIT PATH remote: .. specs: + # x-release-please-start-version openai (0.80.0) + # x-release-please-end connection_pool (>= 2.2.3) logger diff --git a/release-please-config.json b/release-please-config.json index fc96bfc05..bbc16af9f 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -62,6 +62,7 @@ "release-type": "ruby", "version-file": "lib/openai/version.rb", "extra-files": [ - "README.md" + "README.md", + "gemfiles/bedrock.gemfile.lock" ] } From c659e115521e9aaf2ed3393586ce4586930645bc Mon Sep 17 00:00:00 2001 From: Alex Chang Date: Fri, 21 Aug 2026 09:52:32 -0400 Subject: [PATCH 2/3] docs: note Bedrock release markers in agent instructions --- AGENTS.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 28e99c81d..2364c2206 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,6 +4,12 @@ - Prefer direct method calls over Ruby reflection (`send`, `__send__`, or `public_send`) for internal SDK plumbing. When an internal method must be callable across components without becoming supported public API, keep the method public for direct dispatch and mark it `@api private`. Keep its RBI and RBS declarations at the same visibility. +## Release maintenance + +When regenerating `gemfiles/bedrock.gemfile.lock`, preserve the +`x-release-please` markers around the local `openai` version. Release Please +uses them to update this lockfile; Bundler can remove them when rewriting it. + ## Security requirements - Never commit real API keys, access tokens, signing keys, credentials, or From b0d5eae335d6af9de5a8932953406dc3ed025274 Mon Sep 17 00:00:00 2001 From: Alex Chang Date: Fri, 21 Aug 2026 09:57:43 -0400 Subject: [PATCH 3/3] test(ci): guard Bedrock release lockfile updates --- test/scripts/release_workflow_test.rb | 39 +++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 test/scripts/release_workflow_test.rb diff --git a/test/scripts/release_workflow_test.rb b/test/scripts/release_workflow_test.rb new file mode 100644 index 000000000..b0a22ec47 --- /dev/null +++ b/test/scripts/release_workflow_test.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require "minitest/autorun" +require "json" + +require_relative "../../lib/openai/version" + +class ReleaseWorkflowTest < Minitest::Test + ROOT = File.expand_path("../..", __dir__) + BEDROCK_LOCKFILE = "gemfiles/bedrock.gemfile.lock" + + def test_release_please_updates_bedrock_lockfile + config = JSON.parse(File.read(File.join(ROOT, "release-please-config.json"))) + package = config.merge(config.fetch("packages").fetch(".")) + + assert_includes(package.fetch("extra-files"), BEDROCK_LOCKFILE) + end + + def test_bedrock_release_markers_update_only_the_sdk_version + lockfile = File.read(File.join(ROOT, BEDROCK_LOCKFILE)) + markers = %w[x-release-please-start-version x-release-please-end] + sdk_entry = " openai (#{OpenAI::VERSION})" + + assert_equal(markers, lockfile.scan(/x-release-please-[\w-]+/)) + assert_includes( + lockfile, + " # #{markers.first}\n#{sdk_entry}\n # #{markers.last}\n", + "Restore the release-please markers around only the openai version after regenerating the lockfile" + ) + + # Simulate the generic updater's stable-version replacement inside marked blocks. + next_version = "#{OpenAI::VERSION.split(".").first.to_i + 1}.0.0" + updated = lockfile.gsub(/x-release-please-start-version\n.*?x-release-please-end/m) do |block| + block.gsub(/\d+\.\d+\.\d+/, next_version) + end + + assert_equal(lockfile.sub(sdk_entry, " openai (#{next_version})"), updated) + end +end