Skip to content

Commit 210a05d

Browse files
Address review comments, refactor
1 parent 702369b commit 210a05d

File tree

4 files changed

+124
-94
lines changed

4 files changed

+124
-94
lines changed

.evergreen-functions.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -786,9 +786,11 @@ functions:
786786
type: setup
787787
params:
788788
working_dir: src/github.com/mongodb/mongodb-kubernetes
789+
include_expansions_in_env:
790+
- OPERATOR_VERSION
789791
env:
790792
GH_TOKEN: ${GH_TOKEN}
791-
binary: scripts/dev/run_python.sh scripts/release/release_info.py --version 1.0.1
793+
binary: scripts/dev/run_python.sh scripts/release/release_info.py --version ${OPERATOR_VERSION|*triggered_by_git_tag}
792794

793795
release_kubectl_mongodb_plugin:
794796
- command: github.generate_token

scripts/release/kubectl_mongodb/promote_kubectl_plugin.py

Lines changed: 1 addition & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from pathlib import Path
77

88
from botocore.exceptions import ClientError
9-
from github import Github, GithubException
109

1110
from lib.base_logger import logger
1211
from scripts.release.build.build_info import (
@@ -19,16 +18,14 @@
1918
)
2019
from scripts.release.kubectl_mongodb.utils import (
2120
CHECKSUMS_PATH,
22-
GITHUB_REPO,
2321
LOCAL_ARTIFACTS_DIR,
2422
create_s3_client,
2523
kubectl_plugin_name,
2624
parse_platform,
2725
s3_path,
26+
upload_assets_to_github_release,
2827
)
2928

30-
GITHUB_TOKEN = os.environ.get("GH_TOKEN")
31-
3229

3330
def main():
3431
release_version = os.environ.get("OPERATOR_VERSION")
@@ -269,50 +266,5 @@ def create_tarballs():
269266

270267
return created_archives
271268

272-
273-
# upload_assets_to_github_release uploads the release artifacts (downloaded notarized/signed staging artifacts) to
274-
# the GitHub release as assets.
275-
def upload_assets_to_github_release(asset_paths: list[str], release_version: str):
276-
if not GITHUB_TOKEN:
277-
logger.info("ERROR: GITHUB_TOKEN environment variable not set.")
278-
sys.exit(1)
279-
280-
try:
281-
g = Github(GITHUB_TOKEN)
282-
repo = g.get_repo(GITHUB_REPO)
283-
except GithubException as e:
284-
logger.info(f"ERROR: Could not connect to GitHub or find repository '{GITHUB_REPO}', Error {e}.")
285-
sys.exit(1)
286-
287-
try:
288-
gh_release = None
289-
# list all the releases (including draft ones), and get the one corresponding to the passed release_version
290-
for r in repo.get_releases():
291-
if r.tag_name == release_version:
292-
gh_release = r
293-
break
294-
295-
if gh_release is None:
296-
logger.error(
297-
f"Could not find release (published or draft) with tag '{release_version}'. Please ensure the release exists."
298-
)
299-
sys.exit(2)
300-
except GithubException as e:
301-
logger.debug(f"Failed to retrieve releases from the repository {GITHUB_REPO}. Error: {e}")
302-
sys.exit(2)
303-
304-
for asset_path in asset_paths:
305-
asset_name = os.path.basename(asset_path)
306-
logger.info(f"Uploading artifact '{asset_name}' to github release as asset")
307-
try:
308-
gh_release.upload_asset(path=asset_path, name=asset_name, content_type="application/gzip")
309-
except GithubException as e:
310-
logger.debug(f"ERROR: Failed to upload asset {asset_name}. Error: {e}")
311-
sys.exit(2)
312-
except Exception as e:
313-
logger.debug(f"An unexpected error occurred during upload of {asset_name}: {e}")
314-
sys.exit(2)
315-
316-
317269
if __name__ == "__main__":
318270
main()

scripts/release/kubectl_mongodb/utils.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
import os
2+
import sys
3+
14
import boto3
25
from botocore.exceptions import NoCredentialsError, PartialCredentialsError
6+
from github import Github, GithubException
37

8+
from lib.base_logger import logger
49
from scripts.release.build.build_info import KUBECTL_PLUGIN_BINARY
510

611
AWS_REGION = "eu-north-1"
712

813
GITHUB_REPO = "mongodb/mongodb-kubernetes"
14+
GITHUB_TOKEN = os.environ.get("GH_TOKEN")
915

1016
LOCAL_ARTIFACTS_DIR = "artifacts"
1117
CHECKSUMS_PATH = f"{LOCAL_ARTIFACTS_DIR}/checksums.txt"
@@ -34,3 +40,47 @@ def kubectl_plugin_name(os_name: str, arch_name: str) -> str:
3440
# The `version` string has the correct version (either patch id or commit sha), based on the BuildScenario.
3541
def s3_path(filename: str, version: str) -> str:
3642
return f"{KUBECTL_PLUGIN_BINARY}/{version}/{filename}"
43+
44+
45+
# upload_assets_to_github_release uploads the release artifacts (downloaded notarized/signed staging artifacts) to
46+
# the GitHub release as assets.
47+
def upload_assets_to_github_release(asset_paths: list[str], release_version: str):
48+
if not GITHUB_TOKEN:
49+
logger.info("ERROR: GITHUB_TOKEN environment variable not set.")
50+
sys.exit(1)
51+
52+
try:
53+
g = Github(GITHUB_TOKEN)
54+
repo = g.get_repo(GITHUB_REPO)
55+
except GithubException as e:
56+
logger.info(f"ERROR: Could not connect to GitHub or find repository '{GITHUB_REPO}', Error {e}.")
57+
sys.exit(1)
58+
59+
try:
60+
gh_release = None
61+
# list all the releases (including draft ones), and get the one corresponding to the passed release_version
62+
for r in repo.get_releases():
63+
if r.tag_name == release_version:
64+
gh_release = r
65+
break
66+
67+
if gh_release is None:
68+
logger.error(
69+
f"Could not find release (published or draft) with tag '{release_version}'. Please ensure the release exists."
70+
)
71+
sys.exit(2)
72+
except GithubException as e:
73+
logger.debug(f"Failed to retrieve releases from the repository {GITHUB_REPO}. Error: {e}")
74+
sys.exit(2)
75+
76+
for asset_path in asset_paths:
77+
asset_name = os.path.basename(asset_path)
78+
logger.info(f"Uploading artifact '{asset_name}' to github release as asset")
79+
try:
80+
gh_release.upload_asset(path=asset_path, name=asset_name, content_type="application/gzip")
81+
except GithubException as e:
82+
logger.debug(f"ERROR: Failed to upload asset {asset_name}. Error: {e}")
83+
sys.exit(2)
84+
except Exception as e:
85+
logger.debug(f"An unexpected error occurred during upload of {asset_name}: {e}")
86+
sys.exit(2)

scripts/release/release_info.py

Lines changed: 70 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,53 +3,45 @@
33
import os
44

55
from scripts.release.build.build_info import (
6+
AGENT_IMAGE,
67
DATABASE_IMAGE,
78
INIT_APPDB_IMAGE,
89
INIT_DATABASE_IMAGE,
910
INIT_OPS_MANAGER_IMAGE,
1011
OPERATOR_IMAGE,
12+
OPS_MANAGER_IMAGE,
1113
READINESS_PROBE_IMAGE,
1214
UPGRADE_HOOK_IMAGE,
13-
OPS_MANAGER_IMAGE,
14-
AGENT_IMAGE,
1515
BuildInfo,
1616
load_build_info,
1717
)
18-
from scripts.release.kubectl_mongodb.promote_kubectl_plugin import upload_assets_to_github_release
1918
from scripts.release.build.build_scenario import BuildScenario
20-
from scripts.release.constants import (
21-
DEFAULT_CHANGELOG_PATH,
22-
DEFAULT_RELEASE_INITIAL_VERSION,
23-
DEFAULT_REPOSITORY_PATH,
19+
from scripts.release.kubectl_mongodb.utils import (
20+
upload_assets_to_github_release,
2421
)
2522

2623
SEARCH_IMAGE = "search"
2724
SEARCH_IMAGE_REPOSITORY = "quay.io/mongodb/mongodb-search"
2825

2926
RELEASE_INFO_IMAGES_ORDERED = [
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
27+
OPERATOR_IMAGE, # mongodb-kubernetes
28+
INIT_DATABASE_IMAGE, # mongodb-kubernetes-init-database
29+
INIT_APPDB_IMAGE, # mongodb-kubernetes-init-appdb
30+
INIT_OPS_MANAGER_IMAGE, # mongodb-kubernetes-init-ops-manager
31+
DATABASE_IMAGE, # mongodb-kubernetes-database
32+
READINESS_PROBE_IMAGE, # mongodb-kubernetes-readinessprobe
3733
]
3834

39-
EXTERNAL_INFO_IMAGES = [
40-
OPS_MANAGER_IMAGE,
41-
AGENT_IMAGE
42-
]
4335

44-
def create_release_info_json(version: str) -> str:
36+
def create_release_info_json(operator_version: str) -> str:
4537
build_info = load_build_info(scenario=BuildScenario.RELEASE)
4638

47-
release_info_json = convert_to_release_info_json(build_info, version)
39+
release_info_json = convert_to_release_info_json(build_info, operator_version)
4840

4941
return json.dumps(release_info_json, indent=2)
5042

5143

52-
def convert_to_release_info_json(build_info: BuildInfo, version: str) -> dict:
44+
def convert_to_release_info_json(build_info: BuildInfo, operator_version: str) -> dict:
5345
release_json_data = os.path.join(os.getcwd(), "release.json")
5446
with open(release_json_data, "r") as fd:
5547
release_data = json.load(fd)
@@ -58,52 +50,86 @@ def convert_to_release_info_json(build_info: BuildInfo, version: str) -> dict:
5850
"images": {},
5951
}
6052
# Filter (and order) images to include only those relevant for release info
61-
images = {name: build_info.images[name] for name in RELEASE_INFO_IMAGES_ORDERED + EXTERNAL_INFO_IMAGES}
53+
images = {name: build_info.images[name] for name in RELEASE_INFO_IMAGES_ORDERED}
6254

6355
for name, image in images.items():
64-
release_info_output["images"][name] = {
65-
"repositories": image.repositories,
66-
"platforms": image.platforms,
67-
}
68-
69-
if name == OPS_MANAGER_IMAGE:
70-
release_info_output["images"][name]["version"] = latest_om_version(release_data)
71-
continue
72-
73-
if name == AGENT_IMAGE:
74-
release_info_output["images"][name]["version"] = latest_agent_version(release_data)
75-
continue
76-
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-
}
56+
add_image_info(release_info_output, name, image.repositories, image.platforms, operator_version)
57+
58+
# add OPS manager image info
59+
om_build_info = build_info.images[OPS_MANAGER_IMAGE]
60+
add_image_info(
61+
release_info_output,
62+
OPS_MANAGER_IMAGE,
63+
om_build_info.repositories,
64+
om_build_info.platforms,
65+
latest_om_version(release_data),
66+
)
67+
68+
# add agent image info
69+
agent_build_info = build_info.images[AGENT_IMAGE]
70+
add_image_info(
71+
release_info_output,
72+
AGENT_IMAGE,
73+
agent_build_info.repositories,
74+
agent_build_info.platforms,
75+
latest_agent_version(release_data),
76+
)
77+
78+
# add upgrade hook image info
79+
upgradehook_build_info = build_info.images[UPGRADE_HOOK_IMAGE]
80+
add_image_info(
81+
release_info_output,
82+
UPGRADE_HOOK_IMAGE,
83+
upgradehook_build_info.repositories,
84+
upgradehook_build_info.platforms,
85+
latest_upgrade_hook_version(release_data),
86+
)
87+
88+
# add search image info
89+
add_image_info(
90+
release_info_output,
91+
SEARCH_IMAGE,
92+
SEARCH_IMAGE_REPOSITORY,
93+
["linux/arm64", "linux/amd64"],
94+
latest_search_version(release_data),
95+
)
8596

8697
release_info_output = add_om_agent_mappings(release_data, release_info_output)
8798

8899
return release_info_output
89100

101+
102+
def add_image_info(release_info_output, name, repositories, platforms, version):
103+
release_info_output["images"][name] = {"repositories": repositories, "platforms": platforms, "version": version}
104+
105+
90106
def add_om_agent_mappings(release_data, output):
91107
om_agent_mapping = release_data["latestOpsManagerAgentMapping"]
92108
output["latestOpsManagerAgentMapping"] = om_agent_mapping
93109

94110
return output
95111

112+
113+
def latest_upgrade_hook_version(relese_data):
114+
return relese_data["versionUpgradeHookVersion"]
115+
116+
96117
def latest_om_version(release_data):
97118
return release_data["supportedImages"]["ops-manager"]["versions"][-1]
98119

120+
99121
def latest_agent_version(release_data):
100122
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]
123+
newest_om_mapping = release_data["supportedImages"]["mongodb-agent"]["opsManagerMapping"]["ops_manager"][
124+
newest_om_version
125+
]
102126
return newest_om_mapping["agent_version"]
103127

128+
104129
def latest_search_version(release_data):
105130
return release_data["search"]["version"]
106131

132+
107133
if __name__ == "__main__":
108134
parser = argparse.ArgumentParser(
109135
description="Create relevant release artifacts information in JSON format.",

0 commit comments

Comments
 (0)