Skip to content

Commit 5f72ff3

Browse files
Add functinality to upload release info to GitHub release assets
1 parent 21efa88 commit 5f72ff3

File tree

3 files changed

+99
-36
lines changed

3 files changed

+99
-36
lines changed

.evergreen-functions.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -778,6 +778,18 @@ functions:
778778
GH_TOKEN: ${GH_TOKEN}
779779
binary: scripts/dev/run_python.sh scripts/release/create_chart_release_pr.py --chart_version ${OPERATOR_VERSION|*triggered_by_git_tag}
780780

781+
add_releaseinfo_to_github_assets:
782+
- command: github.generate_token
783+
params:
784+
expansion_name: GH_TOKEN
785+
- command: subprocess.exec
786+
type: setup
787+
params:
788+
working_dir: src/github.com/mongodb/mongodb-kubernetes
789+
env:
790+
GH_TOKEN: ${GH_TOKEN}
791+
binary: scripts/dev/run_python.sh scripts/release/release_info.py --version 1.0.1
792+
781793
release_kubectl_mongodb_plugin:
782794
- command: github.generate_token
783795
params:

.evergreen-release.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ tasks:
115115
- func: install_macos_notarization_service
116116
- func: release_kubectl_mongodb_plugin
117117

118+
- name: add_releaseinfo_to_github_assets
119+
commands:
120+
- func: clone
121+
- func: python_venv
122+
- func: add_releaseinfo_to_github_assets
123+
118124
- name: create_chart_release_pr
119125
tags: [ "helm_chart_release_pr" ]
120126
commands:
@@ -151,6 +157,18 @@ buildvariants:
151157
- name: release_readiness_probe
152158
- name: release_version_upgrade_hook
153159

160+
- name: add_releaseinfo_to_github_assets
161+
display_name: add_releaseinfo_to_github_assets
162+
tags: ["release"]
163+
run_on:
164+
- ubuntu2404-small
165+
allowed_requesters: ["patch", "github_tag"]
166+
# depends_on:
167+
# - name: "*"
168+
# variant: release_images
169+
tasks:
170+
- name: add_releaseinfo_to_github_assets
171+
154172
- name: preflight_release_images
155173
display_name: preflight_release_images
156174
tags: [ "release" ]

scripts/release/release_info.py

Lines changed: 69 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import argparse
22
import json
3-
import pathlib
3+
import os
44

55
from scripts.release.build.build_info import (
66
DATABASE_IMAGE,
@@ -10,81 +10,114 @@
1010
OPERATOR_IMAGE,
1111
READINESS_PROBE_IMAGE,
1212
UPGRADE_HOOK_IMAGE,
13+
OPS_MANAGER_IMAGE,
14+
AGENT_IMAGE,
1315
BuildInfo,
1416
load_build_info,
1517
)
18+
from scripts.release.kubectl_mongodb.promote_kubectl_plugin import upload_assets_to_github_release
1619
from scripts.release.build.build_scenario import BuildScenario
1720
from scripts.release.constants import (
1821
DEFAULT_CHANGELOG_PATH,
1922
DEFAULT_RELEASE_INITIAL_VERSION,
2023
DEFAULT_REPOSITORY_PATH,
2124
)
2225

26+
SEARCH_IMAGE = "search"
27+
SEARCH_IMAGE_REPOSITORY = "quay.io/mongodb/mongodb-search"
28+
2329
RELEASE_INFO_IMAGES_ORDERED = [
24-
OPERATOR_IMAGE,
25-
INIT_DATABASE_IMAGE,
26-
INIT_APPDB_IMAGE,
27-
INIT_OPS_MANAGER_IMAGE,
28-
DATABASE_IMAGE,
29-
READINESS_PROBE_IMAGE,
30-
UPGRADE_HOOK_IMAGE,
30+
OPERATOR_IMAGE, # mongodb-kubernetes
31+
INIT_DATABASE_IMAGE, # mongodb-kubernetes-init-database
32+
INIT_APPDB_IMAGE, # mongodb-kubernetes-init-appdb
33+
INIT_OPS_MANAGER_IMAGE, # mongodb-kubernetes-init-ops-manager
34+
DATABASE_IMAGE, # mongodb-kubernetes-database
35+
READINESS_PROBE_IMAGE, # mongodb-kubernetes-readinessprobe
36+
UPGRADE_HOOK_IMAGE, # mongodb-kubernetes-operator-version-upgrade-post-start-hook
3137
]
3238

33-
# TODO: this is dummy version, to be replaced with actual versioning logic https://docs.google.com/document/d/1eJ8iKsI0libbpcJakGjxcPfbrTn8lmcZDbQH1UqMR_g/edit?tab=t.45ig7xr3e3w4#bookmark=id.748ik8snxcyl
34-
DUMMY_VERSION = "dummy_version"
35-
39+
EXTERNAL_INFO_IMAGES = [
40+
OPS_MANAGER_IMAGE,
41+
AGENT_IMAGE
42+
]
3643

37-
def create_release_info_json() -> str:
44+
def create_release_info_json(version: str) -> str:
3845
build_info = load_build_info(scenario=BuildScenario.RELEASE)
3946

40-
release_info_json = convert_to_release_info_json(build_info)
47+
release_info_json = convert_to_release_info_json(build_info, version)
4148

4249
return json.dumps(release_info_json, indent=2)
4350

4451

45-
def convert_to_release_info_json(build_info: BuildInfo) -> dict:
46-
output = {
52+
def convert_to_release_info_json(build_info: BuildInfo, version: str) -> dict:
53+
release_json_data = os.path.join(os.getcwd(), "release.json")
54+
with open(release_json_data, "r") as fd:
55+
release_data = json.load(fd)
56+
57+
release_info_output = {
4758
"images": {},
48-
"binaries": {},
49-
"helm-charts": {},
5059
}
5160
# Filter (and order) images to include only those relevant for release info
52-
images = {name: build_info.images[name] for name in RELEASE_INFO_IMAGES_ORDERED}
61+
images = {name: build_info.images[name] for name in RELEASE_INFO_IMAGES_ORDERED + EXTERNAL_INFO_IMAGES}
5362

5463
for name, image in images.items():
55-
output["images"][name] = {
64+
release_info_output["images"][name] = {
5665
"repositories": image.repositories,
5766
"platforms": image.platforms,
58-
"version": DUMMY_VERSION,
5967
}
68+
69+
if name == OPS_MANAGER_IMAGE:
70+
release_info_output["images"][name]["version"] = latest_om_version(release_data)
71+
continue
6072

61-
for name, binary in build_info.binaries.items():
62-
output["binaries"][name] = {
63-
"platforms": binary.platforms,
64-
"version": DUMMY_VERSION,
65-
}
73+
if name == AGENT_IMAGE:
74+
release_info_output["images"][name]["version"] = latest_agent_version(release_data)
75+
continue
6676

67-
for name, chart in build_info.helm_charts.items():
68-
output["helm-charts"][name] = {
69-
"registry": chart.registry,
70-
"repository": chart.repository,
71-
"version": DUMMY_VERSION,
72-
}
77+
release_info_output["images"][name]["version"] = version
78+
79+
# add search image detail
80+
release_info_output["images"][SEARCH_IMAGE] = {
81+
"repositories": SEARCH_IMAGE_REPOSITORY,
82+
"platforms": ["linux/arm64", "linux/amd64"],
83+
"version": latest_search_version(release_data)
84+
}
85+
86+
release_info_output = add_om_agent_mappings(release_data, release_info_output)
87+
88+
return release_info_output
89+
90+
def add_om_agent_mappings(release_data, output):
91+
om_agent_mapping = release_data["supportedImages"]["latestOpsManagerAgentMapping"]
92+
output["latestOpsManagerAgentMapping"] = om_agent_mapping
7393

7494
return output
7595

96+
def latest_om_version(release_data):
97+
return release_data["supportedImages"]["ops-manager"]["versions"][-1]
98+
99+
def latest_agent_version(release_data):
100+
newest_om_version = release_data["supportedImages"]["ops-manager"]["versions"][-1]
101+
newest_om_mapping = release_data["supportedImages"]["mongodb-agent"]["opsManagerMapping"]["ops_manager"][newest_om_version]
102+
return newest_om_mapping["agent_version"]
103+
104+
def latest_search_version(release_data):
105+
return release_data["search"]["version"]
76106

77107
if __name__ == "__main__":
78108
parser = argparse.ArgumentParser(
79109
description="Create relevant release artifacts information in JSON format.",
80110
formatter_class=argparse.RawTextHelpFormatter,
81111
)
112+
parser.add_argument("--version", help="released MCK version", required=True)
82113
args = parser.parse_args()
83114

84-
release_info = create_release_info_json()
115+
release_info_filename = f"release_info_{args.version}.json"
85116

86-
if args.output is not None:
87-
with open(args.output, "w") as file:
117+
release_info = create_release_info_json(args.version)
118+
119+
if release_info_filename is not None:
120+
with open(release_info_filename, "w") as file:
88121
file.write(release_info)
89-
else:
90-
print(release_info)
122+
123+
upload_assets_to_github_release([release_info_filename], args.version)

0 commit comments

Comments
 (0)