diff --git a/Library/Homebrew/attestation.rb b/Library/Homebrew/attestation.rb index 3e19d100bc..d456651b13 100644 --- a/Library/Homebrew/attestation.rb +++ b/Library/Homebrew/attestation.rb @@ -179,6 +179,8 @@ module Homebrew attestation end + ATTESTATION_MAX_RETRIES = 5 + # Verifies the given bottle against a cryptographic attestation of build provenance # from homebrew-core's CI, falling back on a "backfill" attestation for older bottles. # @@ -246,12 +248,15 @@ module Homebrew end backfill_attestation - rescue InvalidAttestationError => e - raise if ENV["HOMEBREW_GITHUB_ACTIONS"].blank? + rescue InvalidAttestationError + @attestation_retry_count ||= T.let(Hash.new(0), T.nilable(T::Hash[Bottle, Integer])) + raise if @attestation_retry_count[bottle] >= ATTESTATION_MAX_RETRIES - opoo "Attestation verification failed (please verify that this is not a network error before rebottling): #{e}" - - {} + sleep_time = 3 ** @attestation_retry_count[bottle] + opoo "Failed to verify attestation. Retrying in #{sleep_time}..." + sleep sleep_time + @attestation_retry_count[bottle] += 1 + retry end end end