@@ -24,10 +24,6 @@ def load_releases(filepath):
2424 print (f"Error parsing YAML: { exc } " )
2525 return {}
2626
27- def save_releases (filepath , data ):
28- with open (filepath , "w" ) as file :
29- yaml .dump (data , file , default_flow_style = False )
30-
3127def get_base_image_digest (image_name ):
3228 if image_name == "placeholder-image" :
3329 return None
@@ -37,74 +33,70 @@ def get_base_image_digest(image_name):
3733 shell = True ,
3834 text = True
3935 ).strip ()
40- return result .replace ("sha256:" , "" ) if result else None
36+ return result .replace ("sha256:" , "" )
4137 except subprocess .CalledProcessError as e :
4238 print (f"Error fetching digest for { image_name } : { e } " )
4339 return None
4440
45- def process_opflex_metadata (releases ):
41+ def extract_opflex_metadata (releases ):
4642 release_list = []
47- updated = False
4843
4944 for release in releases .get ("releases" , []):
50- if not release .get ("released" , False ):
51- for stream in release .get ("release_streams" , []):
52- if stream .get ("release_name" , "" ).endswith (".z" ):
53- for image in stream .get ("container_images" , []):
54- if image .get ("name" ) == "opflex" :
55- # Ensure opflex-metadata exists
56- if "opflex-metadata" not in image :
57- print (f"Adding missing opflex-metadata for { release ['release_tag' ]} " )
58- image ["opflex-metadata" ] = {
59- "base-image" : "placeholder-image" ,
60- "base-image-sha" : "unknown" ,
61- "update_digest" : "true"
62- }
63- updated = True
64-
65- metadata = image ["opflex-metadata" ]
66- base_image = metadata ["base-image" ]
67- stored_digest = metadata ["base-image-sha" ]
68-
69- if base_image == "placeholder-image" :
70- print (f"Skipping digest lookup for { release ['release_tag' ]} (Base-Image is placeholder)." )
71- release_list .append ({
72- "release_tag" : release ["release_tag" ],
73- "base_tag" : f"{ release ['release_tag' ]} -opflex-build-base" ,
74- "base_image" : base_image ,
75- "stored_digest" : stored_digest ,
76- "latest_digest" : "unknown" ,
77- "update_digest" : "true"
78- })
79- continue
80-
81- latest_digest = get_base_image_digest (base_image )
82-
83- if latest_digest and latest_digest != stored_digest :
84- print (f"Digest changed for { release ['release_tag' ]} : { stored_digest } → { latest_digest } " )
85- metadata ["base-image-sha" ] = latest_digest
86- updated = True
87- release_list .append ({
88- "release_tag" : release ["release_tag" ],
89- "base_tag" : f"{ release ['release_tag' ]} -opflex-build-base" ,
90- "base_image" : base_image ,
91- "stored_digest" : stored_digest ,
92- "latest_digest" : latest_digest ,
93- "update_digest" : "false"
94- })
95-
96- return release_list , updated
45+ release_tag = release .get ("release_tag" , "" )
46+ release_status = None
47+ z_stream = None
48+
49+ for stream in release .get ("release_streams" , []):
50+ release_name = stream .get ("release_name" , "" )
51+ if ".rc" in release_name :
52+ continue
53+ if release_name == release_tag :
54+ release_status = stream .get ("released" , False )
55+ elif release_name .endswith (".z" ):
56+ z_stream = stream
57+
58+ if z_stream :
59+ if release_status is False :
60+ print (f"Processing .z stream for { release_tag } " )
61+ for image in z_stream .get ("container_images" , []):
62+ if image .get ("name" ) == "opflex" :
63+ base_image = image .get ("opflex-metadata" , {}).get ("base-image" , "placeholder-image" )
64+ stored_digest = image .get ("opflex-metadata" , {}).get ("base-image-sha" , "unknown" )
65+
66+ if base_image == "placeholder-image" :
67+ print (f"Skipping digest lookup for { release_tag } (Base-Image is placeholder)." )
68+ release_list .append ({
69+ "release_tag" : release_tag ,
70+ "base_tag" : f"{ release_tag } -opflex-build-base" ,
71+ "base_image" : base_image ,
72+ "stored_digest" : stored_digest ,
73+ "latest_digest" : "unknown" ,
74+ "update_digest" : "true"
75+ })
76+ continue
77+
78+ print (f"digest lookup for { release_tag } , { base_image } " )
79+ latest_digest = get_base_image_digest (base_image )
80+ if latest_digest and latest_digest != stored_digest :
81+ print (f"Digest changed for { release_tag } : { stored_digest } → { latest_digest } " )
82+ image ["opflex-metadata" ]["base-image-sha" ] = latest_digest
83+ release_list .append ({
84+ "release_tag" : release_tag ,
85+ "base_tag" : f"{ release_tag } -opflex-build-base" ,
86+ "base_image" : base_image ,
87+ "stored_digest" : stored_digest ,
88+ "latest_digest" : latest_digest ,
89+ "update_digest" : "false"
90+ })
91+ else :
92+ print (f"Digest not changed for { release_tag } : stored:{ stored_digest } :: latest:{ latest_digest } " )
93+
94+ return release_list
9795
9896releases = load_releases (release_filepath )
99- release_list , metadata_updated = process_opflex_metadata (releases )
100-
101- # Save updated releases.yaml if changes were made
102- if metadata_updated :
103- save_releases (release_filepath , releases )
104- print (f"Updated releases.yaml with new opflex metadata and digest information." )
97+ release_list = extract_opflex_metadata (releases )
10598
106- # Save extracted metadata to JSON file
10799with open (output_filepath , "w" ) as json_file :
108100 json .dump (release_list , json_file , indent = 2 )
109101
110- print (f"Extracted opflex metadata saved to { output_filepath } " )
102+ print (f"Extracted OpFlex metadata saved to { output_filepath } " )
0 commit comments