From 3d5e14681ee415f92d5abe4944410aec688e3748 Mon Sep 17 00:00:00 2001 From: Torrey Payne <11740989+torreypayne@users.noreply.github.com> Date: Wed, 5 Aug 2026 20:49:50 +0000 Subject: [PATCH 1/3] chore: preserve and log full error backtraces in generate-updates --- .toys/generate-updates.rb | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/.toys/generate-updates.rb b/.toys/generate-updates.rb index e773277bc48..65b1c7fa08e 100644 --- a/.toys/generate-updates.rb +++ b/.toys/generate-updates.rb @@ -62,7 +62,14 @@ def run pr_clean_old_gems if clean unless @errors.empty? puts "Errors:", :red, :bold - @errors.each { |name| puts "Error generating #{name}", :red } + @errors.each do |err| + if err.is_a?(Hash) + puts "Error generating #{err[:name]} (exit code #{err[:exit_code]}):", :red, :bold + puts err[:error], :red if err[:error] && !err[:error].empty? + else + puts "Error generating #{err}", :red + end + end exit 1 end end @@ -162,8 +169,16 @@ def regen_single_gem api, version "--names=#{context_directory}/api_names.yaml", "--names-out=#{context_directory}/api_names_out.yaml" ] - result = exec cmd, in: [:string, "a\n"], e: false - yoshi_pr_generator.abort_capture! unless result.success? + cmd << "--verbose" if verbosity > 0 + result = exec cmd, in: [:string, "a\n"], out: [:capture, :inherit], err: [:capture, :inherit], e: false + unless result.success? + err_detail = result.captured_err.to_s.strip + err_detail = result.captured_out.to_s.strip if err_detail.empty? + puts "Failed generating google-apis-#{api}_#{version} (exit code #{result.exit_code}):", :red, :bold + puts err_detail, :red unless err_detail.empty? + @errors << { name: "google-apis-#{api}_#{version}", exit_code: result.exit_code, error: err_detail } + yoshi_pr_generator.abort_capture! + end end end @@ -175,8 +190,16 @@ def clean_old_gems "#{context_directory}/generated", "--clean" ] - result = exec cmd, e: false - yoshi_pr_generator.abort_capture! unless result.success? + cmd << "--verbose" if verbosity > 0 + result = exec cmd, out: [:capture, :inherit], err: [:capture, :inherit], e: false + unless result.success? + err_detail = result.captured_err.to_s.strip + err_detail = result.captured_out.to_s.strip if err_detail.empty? + puts "Failed cleaning obsolete gems (exit code #{result.exit_code}):", :red, :bold + puts err_detail, :red unless err_detail.empty? + @errors << { name: "cleanup of obsolete gems", exit_code: result.exit_code, error: err_detail } + yoshi_pr_generator.abort_capture! + end end end From a13eae5be7c9a2e7b016a0793e7e06d8b1347bd7 Mon Sep 17 00:00:00 2001 From: Torrey Payne <11740989+torreypayne@users.noreply.github.com> Date: Thu, 6 Aug 2026 22:05:51 +0000 Subject: [PATCH 2/3] chore: make generate-api verbose by default in generate-updates --- .toys/generate-updates.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.toys/generate-updates.rb b/.toys/generate-updates.rb index 65b1c7fa08e..d458a41838d 100644 --- a/.toys/generate-updates.rb +++ b/.toys/generate-updates.rb @@ -167,9 +167,9 @@ def regen_single_gem api, version "--api=#{api}.#{version}", "--spot-check", "--names=#{context_directory}/api_names.yaml", - "--names-out=#{context_directory}/api_names_out.yaml" + "--names-out=#{context_directory}/api_names_out.yaml", + "--verbose" ] - cmd << "--verbose" if verbosity > 0 result = exec cmd, in: [:string, "a\n"], out: [:capture, :inherit], err: [:capture, :inherit], e: false unless result.success? err_detail = result.captured_err.to_s.strip @@ -188,9 +188,9 @@ def clean_old_gems "bundle", "exec", "bin/generate-api", "gen", "#{context_directory}/generated", - "--clean" + "--clean", + "--verbose" ] - cmd << "--verbose" if verbosity > 0 result = exec cmd, out: [:capture, :inherit], err: [:capture, :inherit], e: false unless result.success? err_detail = result.captured_err.to_s.strip From c47925c0b653ed878588c3c95016b467d704bc5f Mon Sep 17 00:00:00 2001 From: Torrey Payne <11740989+torreypayne@users.noreply.github.com> Date: Fri, 7 Aug 2026 17:37:02 +0000 Subject: [PATCH 3/3] chore: output discovery url on generation failure --- .toys/generate-updates.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/.toys/generate-updates.rb b/.toys/generate-updates.rb index d458a41838d..5c97e8cf76c 100644 --- a/.toys/generate-updates.rb +++ b/.toys/generate-updates.rb @@ -175,6 +175,7 @@ def regen_single_gem api, version err_detail = result.captured_err.to_s.strip err_detail = result.captured_out.to_s.strip if err_detail.empty? puts "Failed generating google-apis-#{api}_#{version} (exit code #{result.exit_code}):", :red, :bold + puts "Discovery doc: https://raw.githubusercontent.com/googleapis/discovery-artifact-manager/master/discoveries/#{api}.#{version}.json", :red puts err_detail, :red unless err_detail.empty? @errors << { name: "google-apis-#{api}_#{version}", exit_code: result.exit_code, error: err_detail } yoshi_pr_generator.abort_capture!