3
3
# Distributed under the terms of the Modified BSD License.
4
4
import logging
5
5
import os
6
+ import time
6
7
7
8
import plumbum
8
9
@@ -63,6 +64,25 @@ def pull_missing_tags(merged_tag: str, all_local_tags: list[str]) -> list[str]:
63
64
return existing_platform_tags
64
65
65
66
67
+ def push_manifest (merged_tag : str ) -> None :
68
+ ATTEMPTS = 3
69
+ SLEEP_TIME = 5
70
+
71
+ LOGGER .info (f"Pushing manifest for tag: { merged_tag } " )
72
+ # Retry pushing the manifest up to ATTEMPTS times in case of failure
73
+ for attempt in range (ATTEMPTS ):
74
+ try :
75
+ docker ["manifest" , "push" , merged_tag ] & plumbum .FG
76
+ break
77
+ except plumbum .ProcessExecutionError as e :
78
+ LOGGER .warning (f"Attempt { attempt + 1 } to push manifest failed: { e } " )
79
+ if attempt + 1 == ATTEMPTS :
80
+ LOGGER .error (f"Failed to push manifest after { ATTEMPTS } attempts" )
81
+ raise
82
+ time .sleep (SLEEP_TIME )
83
+ LOGGER .info (f"Successfully pushed manifest for tag: { merged_tag } " )
84
+
85
+
66
86
def merge_tags (
67
87
merged_tag : str , all_local_tags : list [str ], push_to_registry : bool
68
88
) -> None :
@@ -84,9 +104,7 @@ def merge_tags(
84
104
docker ["manifest" , "create" , merged_tag ][existing_platform_tags ] & plumbum .FG
85
105
LOGGER .info (f"Successfully created manifest for tag: { merged_tag } " )
86
106
87
- LOGGER .info (f"Pushing manifest for tag: { merged_tag } " )
88
- docker ["manifest" , "push" , merged_tag ] & plumbum .FG
89
- LOGGER .info (f"Successfully merged and pushed tag: { merged_tag } " )
107
+ push_manifest (merged_tag )
90
108
else :
91
109
LOGGER .info (f"Skipping push for tag: { merged_tag } " )
92
110
0 commit comments