wrap provenance download & verification in retry

Bug: https://github.com/flutter/flutter/issues/151791
Change-Id: Ic0e00dec2fe96612b471ca30a7cff39c6126d0b5
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/58420
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Christopher Fujino <fujino@google.com>
diff --git a/recipe_modules/flutter_bcid/__init__.py b/recipe_modules/flutter_bcid/__init__.py
index 767e06f..ce4fd70 100644
--- a/recipe_modules/flutter_bcid/__init__.py
+++ b/recipe_modules/flutter_bcid/__init__.py
@@ -6,6 +6,7 @@
     'dart/dart',
     'depot_tools/gsutil',
     'flutter/repo_util',
+    'flutter/retry',
     'recipe_engine/bcid_reporter',
     'recipe_engine/buildbucket',
     'recipe_engine/file',
diff --git a/recipe_modules/flutter_bcid/api.py b/recipe_modules/flutter_bcid/api.py
index ef8413a..4a6cd86 100644
--- a/recipe_modules/flutter_bcid/api.py
+++ b/recipe_modules/flutter_bcid/api.py
@@ -72,9 +72,18 @@
       with self.m.step.nest("Verify %s provenance" % filename):
         verify_temp_path = self.m.path.mkdtemp("verify")
         download_path = download_path = verify_temp_path.join(filename)
-        bcid_response = self.m.dart.download_and_verify(
-            filename, bucket, gcs_path_without_bucket, download_path,
-            'misc_software://flutter/engine'
+        def download_and_verify():
+            return self.m.dart.download_and_verify(
+                filename, bucket, gcs_path_without_bucket, download_path,
+                'misc_software://flutter/engine'
+            )
+
+        # The provenance file may not have been uploaded yet
+        bcid_response = self.m.retry.wrap(
+            download_and_verify,
+            sleep=60,
+            backoff_factor=2,
+            max_attempts=4,
         )
 
         artifact_vsa = bcid_response['verificationSummary']