Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions release.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
},
{
"7": {
"opsManagerVersion": "7.0.19",
"agentVersion": "107.0.19.8805-1"
"opsManagerVersion": "7.0.21",
"agentVersion": "107.0.21.8817-1"
}
},
{
Expand Down
63 changes: 30 additions & 33 deletions scripts/evergreen/release/update_release.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import logging
import os

import semver
import yaml

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -32,7 +33,7 @@ def update_release_json():
update_operator_related_versions(data, newest_operator_version)

# Adds mapping between latest major version of OM and agent to the release.json
update_latest_om_agent_mapping(data, newest_om_version)
update_latest_om_agent_mapping(data)

with open(release, "w") as f:
json.dump(
Expand All @@ -43,7 +44,7 @@ def update_release_json():
f.write("\n")


def update_latest_om_agent_mapping(data, new_om_version):
def update_latest_om_agent_mapping(data):
"""
Updates the 'latestOpsManagerAgentMapping' in release.json with
newly released Ops Manager version and its corresponding Agent version.
Expand All @@ -53,40 +54,36 @@ def update_latest_om_agent_mapping(data, new_om_version):

Args:
data (dict): The complete configuration dictionary.
new_om_version (str): The new Ops Manager version (e.g., "8.0.11").
"""

try:
om_agent_mapping = data["latestOpsManagerAgentMapping"]
except KeyError:
logger.error("Error: 'latestOpsManagerAgentMapping' field not found in the release.json data.")

new_agent_version = data["supportedImages"]["mongodb-agent"]["opsManagerMapping"]["ops_manager"][new_om_version][
"agent_version"
]

try:
new_om_major_version = new_om_version.split(".")[0]
except IndexError:
logger.error(f"Error: Invalid version format for new_om_version: {new_om_version}")

new_om_agent_mapping = {"opsManagerVersion": new_om_version, "agentVersion": new_agent_version}

new_entry = {new_om_major_version: new_om_agent_mapping}

major_version_found = False
for mapping in om_agent_mapping:
if new_om_major_version in mapping:
# Update the existing entry
mapping[new_om_major_version] = new_om_agent_mapping
major_version_found = True
logger.info(f"Updated existing entry for major version '{new_om_major_version}' to {new_om_version}.")
break
# since we don't really know which OM version was released (OM is not alway release in semver increasing order),
# we will have to check all the highest version of every major version in supportedImages.ops-manager.versions
# and for those will have to make sure we have respective entry in latestOpsManagerAgentMapping.
om_versions = data["supportedImages"]["ops-manager"]["versions"]
# highest_versions_map is just going to have major version and and it's respective highest full version
# {6: Version(major=6, minor=0, patch=27, prerelease=None, build=None), 7: Version(major=7, minor=0, patch=20, prerelease=None, build=None), 8: Version(major=8, minor=0, patch=18, prerelease=None, build=None)}
highest_om_version_by_major = {}
for version in om_versions:
ver = semver.Version.parse(version)
if ver.major not in highest_om_version_by_major or ver > highest_om_version_by_major[ver.major]:
highest_om_version_by_major[ver.major] = ver

# final_output iterates over highest_versions_map and creates a list with OM Version and respective agent version
final_output = []
for major in sorted(highest_om_version_by_major.keys()):
version_obj = highest_om_version_by_major[major]
om_version = str(version_obj)
agent_mapping = data["supportedImages"]["mongodb-agent"]["opsManagerMapping"]["ops_manager"]
final_output.append(
{
str(major): {
"opsManagerVersion": om_version,
"agentVersion": agent_mapping[om_version]["agent_version"],
},
}
)

# this is new major version of OM, a new entry will be added
if not major_version_found:
om_agent_mapping.append(new_entry)
logger.info(f"Added new entry for major version '{new_om_major_version}' with version {new_om_version}.")
data["latestOpsManagerAgentMapping"] = final_output


def update_operator_related_versions(release: dict, version: str):
Expand Down