1111skip_if_exists handles already-published images.
1212
1313Usage:
14- python release_on_merge .py [--dry-run]
14+ python release_om_and_agents .py [--dry-run]
1515"""
1616import json
1717import logging
18- import re
1918import subprocess
2019import sys
2120from pathlib import Path
2221from typing import Dict , List
2322
23+ import semver
24+ import yaml
25+
2426logging .basicConfig (
2527 level = logging .INFO ,
2628 format = "%(asctime)s - %(levelname)s - %(message)s" ,
@@ -92,7 +94,7 @@ def get_ops_manager_mapping(release_data: Dict) -> Dict:
9294
9395def get_latest_om_versions_from_evergreen_yaml () -> Dict [str , str ]:
9496 """
95- Extract OM versions from .evergreen.yml anchors.
97+ Extract OM versions from .evergreen.yml anchors
9698
9799 Returns: {"60": "6.0.27", "70": "7.0.19", "80": "8.0.16"}
98100 """
@@ -103,16 +105,24 @@ def get_latest_om_versions_from_evergreen_yaml() -> Dict[str, str]:
103105 logger .error (".evergreen.yml not found" )
104106 return versions
105107
106- content = evergreen_path .read_text ()
107-
108- # Match patterns like: - &ops_manager_60_latest 6.0.27 #
109- pattern = r"-\s*&ops_manager_(\d+)_latest\s+(\S+)\s+#"
110-
111- for match in re .finditer (pattern , content ):
112- major = match .group (1 ) # "60", "70", "80"
113- version = match .group (2 ) # "6.0.27", "7.0.19", "8.0.16"
114- versions [major ] = version
115- logger .info (f"Found OM { major } : { version } " )
108+ with open (evergreen_path , "r" ) as f :
109+ data = yaml .safe_load (f )
110+
111+ # Extract version strings from the variables list
112+ # The YAML structure is: variables: [6.0.27, 7.0.19, 8.0.16, ...]
113+ variables = data .get ("variables" , [])
114+
115+ for var in variables :
116+ # Try to parse as semver
117+ try :
118+ version_info = semver .VersionInfo .parse (var )
119+ # Use major*10 + minor as the key (e.g., 6.0.x -> "60", 7.0.x -> "70")
120+ major_key = f"{ version_info .major } { version_info .minor } "
121+ versions [major_key ] = var
122+ logger .info (f"Found OM { major_key } : { var } " )
123+ except ValueError :
124+ # Not a valid semver string, skip it
125+ continue
116126
117127 return versions
118128
@@ -198,7 +208,8 @@ def main():
198208 if not release_agent (agent_version , tools_version , f"OM { om_version } " , args .dry_run ):
199209 success = False
200210 else :
201- logger .warning (f"No agent found for OM { om_version } in release.json" )
211+ logger .critical (f"No agent found for OM { om_version } in release.json" )
212+ sys .exit (1 )
202213
203214 # Always print summary
204215 print_summary (args .dry_run )
0 commit comments