Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
201 changes: 201 additions & 0 deletions build_info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
{
"images": {
"mongodbOperator": {
"dev": {
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes",
"platforms": [
"linux/amd64"
]
},
"staging": {
"repository": "quay.io/mongodb/mongodb-kubernetes-stg",
"platforms": [
"linux/arm64",
"linux/amd64"
]
},
"prod": {
"repository": "quay.io/mongodb/mongodb-kubernetes",
"platforms": [
"linux/arm64",
"linux/amd64"
]
}
},
"initDatabase": {
"dev": {
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-database",
"platforms": [
"linux/amd64"
]
},
"staging": {
"repository": "quay.io/mongodb/mongodb-kubernetes-init-database-stg",
"platforms": [
"linux/arm64",
"linux/amd64"
]
},
"prod": {
"repository": "quay.io/mongodb/mongodb-kubernetes-init-database",
"platforms": [
"linux/arm64",
"linux/amd64"
]
}
},
"initAppDb": {
"dev": {
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-appdb",
"platforms": [
"linux/amd64"
]
},
"staging": {
"repository": "quay.io/mongodb/mongodb-kubernetes-init-appdb-stg",
"platforms": [
"linux/arm64",
"linux/amd64"
]
},
"prod": {
"repository": "quay.io/mongodb/mongodb-kubernetes-init-appdb",
"platforms": [
"linux/arm64",
"linux/amd64"
]
}
},
"initOpsManager": {
"dev": {
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-ops-manager",
"platforms": [
"linux/amd64"
]
},
"staging": {
"repository": "quay.io/mongodb/mongodb-kubernetes-init-ops-manager-stg",
"platforms": [
"linux/arm64",
"linux/amd64"
]
},
"prod": {
"repository": "quay.io/mongodb/mongodb-kubernetes-init-ops-manager",
"platforms": [
"linux/arm64",
"linux/amd64"
]
}
},
"database": {
"dev": {
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-database",
"platforms": [
"linux/amd64"
]
},
"staging": {
"repository": "quay.io/mongodb/mongodb-kubernetes-database-stg",
"platforms": [
"linux/arm64",
"linux/amd64"
]
},
"prod": {
"repository": "quay.io/mongodb/mongodb-kubernetes-database",
"platforms": [
"linux/arm64",
"linux/amd64"
]
}
},
"readinessprobe": {
"dev": {
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-readinessprobe",
"platforms": [
"linux/amd64"
]
},
"staging": {
"repository": "quay.io/mongodb/mongodb-kubernetes-readinessprobe-stg",
"platforms": [
"linux/arm64",
"linux/amd64"
]
},
"prod": {
"version": "1.0.22",
"repository": "quay.io/mongodb/mongodb-kubernetes-readinessprobe",
"platforms": [
"linux/arm64",
"linux/amd64"
]
}
},
"operator-version-upgrade-post-start-hook": {
"dev": {
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-operator-version-upgrade-post-start-hook",
"platforms": [
"linux/amd64"
]
},
"staging": {
"repository": "quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook-stg",
"platforms": [
"linux/arm64",
"linux/amd64"
]
},
"prod": {
"version": "1.0.9",
"repository": "quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook",
"platforms": [
"linux/arm64",
"linux/amd64"
]
}
}
},
"binaries": {
"kubectl-mongodb": {
"dev": {
"s3-store": "s3://kubectl-mongodb/dev",
"platforms": [
"linux/amd64"
]
},
"staging": {
"s3-store": "s3://kubectl-mongodb/staging",
"platforms": [
"darwin/amd64",
"darwin/arm64",
"linux/amd64",
"linux/arm64"
]
},
"prod": {
"s3-store": "s3://kubectl-mongodb/prod",
"platforms": [
"darwin/amd64",
"darwin/arm64",
"linux/amd64",
"linux/arm64"
]
}
}
},
"helm-charts": {
"mongodb-kubernetes": {
"dev": {
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/helm-charts"
},
"staging": {
"repository": "quay.io/mongodb/helm-charts-stg"
},
"prod": {
"repository": "quay.io/mongodb/helm-charts"
}
}
}
}
6 changes: 2 additions & 4 deletions scripts/release/calculate_next_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
DEFAULT_CHANGELOG_PATH,
DEFAULT_INITIAL_GIT_TAG_VERSION,
)
from scripts.release.release_notes import calculate_next_version_with_changelog
from scripts.release.version import calculate_next_version

if __name__ == "__main__":
parser = argparse.ArgumentParser(
Expand Down Expand Up @@ -53,8 +53,6 @@

repo = Repo(args.path)

version, _ = calculate_next_version_with_changelog(
repo, args.changelog_path, args.initial_commit_sha, args.initial_version
)
version = calculate_next_version(repo, args.changelog_path, args.initial_commit_sha, args.initial_version)

print(version)
24 changes: 24 additions & 0 deletions scripts/release/conftest.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import json
import os
import shutil
import tempfile
from typing import Dict

from _pytest.fixtures import fixture
from git import Repo
Expand Down Expand Up @@ -162,3 +164,25 @@ def add_file(repo_path: str, src_file_path: str, dst_file_path: str | None = Non
src_path = os.path.join("scripts/release/testdata", src_file_path)

return shutil.copy(src_path, dst_path)


def get_manually_upgradable_versions() -> Dict[str, str]:
with open("build_info.json", "r") as f:
build_info = json.load(f)

return {
"readinessprobe": build_info["images"]["readinessprobe"]["prod"]["version"],
"operator_version_upgrade_post_start_hook": build_info["images"]["operator-version-upgrade-post-start-hook"][
"prod"
]["version"],
}


@fixture(scope="module")
def readinessprobe_version() -> str:
return get_manually_upgradable_versions()["readinessprobe"]


@fixture(scope="module")
def operator_version_upgrade_post_start_hook_version() -> str:
return get_manually_upgradable_versions()["operator_version_upgrade_post_start_hook"]
128 changes: 128 additions & 0 deletions scripts/release/release_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
import argparse
import json
import pathlib
from typing import Dict

from scripts.release.version import (
Environment,
)


class ImageInfo(dict):
def __init__(self, repository: str, platforms: list[str], version: str):
super().__init__()
self.repository = repository
self.platforms = platforms
self.version = version

def to_json(self):
return {"repository": self.repository, "platforms": self.platforms, "version": self.version}


class BinaryInfo(dict):
def __init__(self, s3_store: str, platforms: list[str], version: str):
super().__init__()
self.s3_store = s3_store
self.platforms = platforms
self.version = version

def to_json(self):
return {"platforms": self.platforms, "version": self.version}


class HelmChartInfo(dict):
def __init__(self, repository: str, version: str):
super().__init__()
self.repository = repository
self.version = version

def to_json(self):
return {"repository": self.repository, "version": self.version}


class BuildInfo(dict):
def __init__(
self, images: Dict[str, ImageInfo], binaries: Dict[str, BinaryInfo], helm_charts: Dict[str, HelmChartInfo]
):
super().__init__()
self.images = images
self.binaries = binaries
self.helm_charts = helm_charts

def __dict__(self):
return {
"images": {name: images.__dict__ for name, images in self.images.items()},
"binaries": {name: bin.__dict__ for name, bin in self.binaries.items()},
"helm-charts": {name: chart.__dict__ for name, chart in self.helm_charts.items()},
}

def to_json(self):
return {
"images": {name: images.to_json() for name, images in self.images.items()},
"binaries": {name: bin.to_json() for name, bin in self.binaries.items()},
"helm-charts": {name: chart.to_json() for name, chart in self.helm_charts.items()},
}


def load_build_info(environment: Environment, version: str) -> BuildInfo:
with open("build_info.json", "r") as f:
build_info = json.load(f)

images = {}
for name, env_data in build_info["images"].items():
data = env_data[environment]
# Only update the image_version if it is not already set in the build_info.json file
image_version = data.get("version")
if not image_version:
image_version = version

images[name] = ImageInfo(repository=data["repository"], platforms=data["platforms"], version=image_version)

binaries = {}
for name, env_data in build_info["binaries"].items():
data = env_data[environment]
binaries[name] = BinaryInfo(s3_store=data["s3-store"], platforms=data["platforms"], version=version)

helm_charts = {}
for name, env_data in build_info["helm-charts"].items():
data = env_data[environment]
helm_charts[name] = HelmChartInfo(repository=data["repository"], version=version)

return BuildInfo(images=images, binaries=binaries, helm_charts=helm_charts)


def create_release_info_json(version: str) -> str:
build_info = load_build_info(Environment.PROD, version)

return json.dumps(build_info.to_json(), indent=2)


if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Create relevant release artifacts information in JSON format.",
formatter_class=argparse.RawTextHelpFormatter,
)
parser.add_argument(
"-v",
"--version",
metavar="",
action="store",
type=str,
help=f"Version to use for this release.",
)
parser.add_argument(
"--output",
"-o",
metavar="",
type=pathlib.Path,
help="Path to save the release information file. If not provided, prints to stdout.",
)
args = parser.parse_args()

release_info = create_release_info_json(args.version)

if args.output is not None:
with open(args.output, "w") as file:
file.write(release_info)
else:
print(release_info)
Loading
Loading