Skip to content

Commit 5bfacf6

Browse files
committed
Fixes after merging remote branch
1 parent 8a4e4b7 commit 5bfacf6

File tree

3 files changed

+46
-96
lines changed

3 files changed

+46
-96
lines changed

scripts/release/atomic_pipeline.py

Lines changed: 28 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
#!/usr/bin/env python3
22

3-
"""This pipeline script knows about the details of our Docker images
4-
and where to fetch and calculate parameters. It uses Sonar.py
5-
to produce the final images."""
3+
"""This atomic_pipeline script knows about the details of our Docker images
4+
and where to fetch and calculate parameters."""
65
import json
76
import os
87
import shutil
@@ -22,7 +21,8 @@
2221
verify_signature,
2322
)
2423
from scripts.release.build.image_build_configuration import ImageBuildConfiguration
25-
from .build_images import process_image
24+
from scripts.release.build.image_build_process import build_image
25+
2626
from .optimized_operator_build import build_operator_image_fast
2727

2828
TRACER = trace.get_tracer("evergreen-agent")
@@ -36,10 +36,6 @@ def get_tools_distro(tools_version: str) -> Dict[str, str]:
3636
return default_distro
3737

3838

39-
def is_running_in_evg_pipeline():
40-
return os.getenv("RUNNING_IN_EVG", "") == "true"
41-
42-
4339
def load_release_file() -> Dict:
4440
with open("release.json") as release:
4541
return json.load(release)
@@ -59,27 +55,37 @@ def pipeline_process_image(
5955
if dockerfile_args:
6056
span.set_attribute("mck.build_args", str(dockerfile_args))
6157

62-
logger.info(f"Dockerfile args: {dockerfile_args}, for image: {image_name}")
63-
6458
if not dockerfile_args:
6559
dockerfile_args = {}
66-
logger.debug(f"Build args: {dockerfile_args}")
67-
process_image(
60+
logger.info(f"Dockerfile args: {dockerfile_args}, for image: {image_name}")
61+
62+
build_image(
6863
image_tag=build_configuration.version,
6964
dockerfile_path=dockerfile_path,
7065
dockerfile_args=dockerfile_args,
7166
registry=build_configuration.registry,
7267
platforms=build_configuration.platforms,
73-
sign=build_configuration.sign,
7468
build_path=build_path,
7569
)
7670

71+
if build_configuration.sign:
72+
pipeline_sign_image(
73+
registry=build_configuration.registry,
74+
version=build_configuration.version,
75+
)
76+
77+
78+
@TRACER.start_as_current_span("sign_image_in_repositories")
79+
def pipeline_sign_image(registry: str, version: str):
80+
logger.info("Signing image")
81+
sign_image(registry, version)
82+
verify_signature(registry, version)
83+
7784

7885
def build_tests_image(build_configuration: ImageBuildConfiguration):
7986
"""
8087
Builds image used to run tests.
8188
"""
82-
image_name = "mongodb-kubernetes-tests"
8389

8490
# helm directory needs to be copied over to the tests docker context.
8591
helm_src = "helm_chart"
@@ -170,20 +176,6 @@ def build_database_image(build_configuration: ImageBuildConfiguration):
170176
)
171177

172178

173-
@TRACER.start_as_current_span("sign_image_in_repositories")
174-
def sign_image_in_repositories(args: Dict[str, str], arch: str = None):
175-
span = trace.get_current_span()
176-
repository = args["quay_registry"] + args["ubi_suffix"]
177-
tag = args["release_version"]
178-
if arch:
179-
tag = f"{tag}-{arch}"
180-
181-
span.set_attribute("mck.tag", tag)
182-
183-
sign_image(repository, tag)
184-
verify_signature(repository, tag)
185-
186-
187179
def find_om_in_releases(om_version: str, releases: Dict[str, str]) -> Optional[str]:
188180
"""
189181
There are a few alternatives out there that allow for json-path or xpath-type
@@ -257,43 +249,12 @@ def build_om_image(build_configuration: ImageBuildConfiguration):
257249
)
258250

259251

260-
def build_image_generic(
261-
dockerfile_path: str,
262-
build_configuration: ImageBuildConfiguration,
263-
extra_args: dict | None = None,
264-
):
265-
"""
266-
Build one or more platform-specific images, then (optionally)
267-
push a manifest and sign the result.
268-
"""
269-
270-
registry = build_configuration.registry
271-
image_name = build_configuration.image_name()
272-
args_list = extra_args or {}
273-
version = args_list.get("version", "")
274-
275-
# merge in the registry without mutating caller’s dict
276-
build_args = {**args_list, "quay_registry": registry}
277-
logger.debug(f"Build args: {build_args}")
278-
279-
logger.debug(f"Building {image_name} for platforms={build_configuration.platforms}")
280-
logger.debug(f"build image generic - registry={registry}")
281-
pipeline_process_image(
282-
dockerfile_path=dockerfile_path,
283-
build_configuration=build_configuration,
284-
dockerfile_args=build_args,
285-
)
286-
287-
if build_configuration.sign:
288-
sign_image(registry, version)
289-
verify_signature(registry, version)
290-
291-
292252
def build_init_appdb(build_configuration: ImageBuildConfiguration):
293253
release = load_release_file()
294254
base_url = "https://fastdl.mongodb.org/tools/db/"
295255
mongodb_tools_url_ubi = "{}{}".format(base_url, release["mongodbToolsBundle"]["ubi"])
296256
args = {"version": build_configuration.version, "mongodb_tools_url_ubi": mongodb_tools_url_ubi}
257+
297258
pipeline_process_image(
298259
dockerfile_path="docker/mongodb-kubernetes-init-appdb/Dockerfile",
299260
build_configuration=build_configuration,
@@ -326,10 +287,10 @@ def build_readiness_probe_image(build_configuration: ImageBuildConfiguration):
326287
"GOLANG_VERSION": golang_version,
327288
}
328289

329-
build_image_generic(
290+
pipeline_process_image(
330291
dockerfile_path="docker/mongodb-kubernetes-readinessprobe/Dockerfile",
331292
build_configuration=build_configuration,
332-
extra_args=extra_args,
293+
dockerfile_args=extra_args,
333294
)
334295

335296

@@ -345,10 +306,10 @@ def build_upgrade_hook_image(build_configuration: ImageBuildConfiguration):
345306
"GOLANG_VERSION": golang_version,
346307
}
347308

348-
build_image_generic(
309+
pipeline_process_image(
349310
dockerfile_path="docker/mongodb-kubernetes-upgrade-hook/Dockerfile",
350311
build_configuration=build_configuration,
351-
extra_args=extra_args,
312+
dockerfile_args=extra_args,
352313
)
353314

354315

@@ -373,13 +334,13 @@ def build_agent_pipeline(
373334
"init_database_image": init_database_image,
374335
"mongodb_tools_url_ubi": mongodb_tools_url_ubi,
375336
"mongodb_agent_url_ubi": mongodb_agent_url_ubi,
376-
"quay_registry": build_configuration.registry,
337+
"quay_registry": build_configuration_copy.registry,
377338
}
378339

379-
build_image_generic(
340+
pipeline_process_image(
380341
dockerfile_path="docker/mongodb-agent/Dockerfile",
381342
build_configuration=build_configuration_copy,
382-
extra_args=args,
343+
dockerfile_args=args,
383344
)
384345

385346

scripts/release/build_images.py renamed to scripts/release/build/image_build_process.py

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
import docker
1111
from lib.base_logger import logger
12-
from scripts.evergreen.release.images_signing import sign_image, verify_signature
1312

1413

1514
def ecr_login_boto3(region: str, account_id: str):
@@ -47,16 +46,16 @@ def ensure_buildx_builder(builder_name: str = "multiarch") -> str:
4746
:return: The builder name that was created or reused
4847
"""
4948

50-
docker = python_on_whales.docker
49+
docker_cmd = python_on_whales.docker
5150

52-
existing_builders = docker.buildx.list()
51+
existing_builders = docker_cmd.buildx.list()
5352
if any(b.name == builder_name for b in existing_builders):
5453
logger.info(f"Builder '{builder_name}' already exists – reusing it.")
55-
docker.buildx.use(builder_name)
54+
docker_cmd.buildx.use(builder_name)
5655
return builder_name
5756

5857
try:
59-
docker.buildx.create(
58+
docker_cmd.buildx.create(
6059
name=builder_name,
6160
driver="docker-container",
6261
use=True,
@@ -70,8 +69,8 @@ def ensure_buildx_builder(builder_name: str = "multiarch") -> str:
7069
return builder_name
7170

7271

73-
def build_image(
74-
tag: str, dockerfile: str, path: str, args: Dict[str, str] = {}, push: bool = True, platforms: list[str] = None
72+
def docker_build_image(
73+
tag: str, dockerfile: str, path: str, args: Dict[str, str], push: bool, platforms: list[str]
7574
):
7675
"""
7776
Build a Docker image using python_on_whales and Docker Buildx for multi-architecture support.
@@ -83,15 +82,11 @@ def build_image(
8382
:param push: Whether to push the image after building
8483
:param platforms: List of target platforms (e.g., ["linux/amd64", "linux/arm64"])
8584
"""
86-
docker = python_on_whales.docker
85+
docker_cmd = python_on_whales.docker
8786

8887
try:
8988
# Convert build args to the format expected by python_on_whales
90-
build_args = {k: str(v) for k, v in args.items()} if args else {}
91-
92-
# Set default platforms if not specified
93-
if platforms is None:
94-
platforms = ["linux/amd64"]
89+
build_args = {k: str(v) for k, v in args.items()}
9590

9691
logger.info(f"Building image: {tag}")
9792
logger.info(f"Platforms: {platforms}")
@@ -107,9 +102,10 @@ def build_image(
107102
builder_name = ensure_buildx_builder("multiarch")
108103

109104
# Build the image using buildx
110-
docker.buildx.build(
105+
docker_cmd.buildx.build(
111106
context_path=path,
112107
file=dockerfile,
108+
# TODO: add tag for release builds (OLM immutable tag)
113109
tags=[tag],
114110
platforms=platforms,
115111
builder=builder_name,
@@ -126,32 +122,25 @@ def build_image(
126122
raise RuntimeError(f"Failed to build image {tag}: {str(e)}")
127123

128124

129-
def process_image(
125+
def build_image(
130126
image_tag: str,
131127
dockerfile_path: str,
132128
dockerfile_args: Dict[str, str],
133129
registry: str,
134-
platforms: list[str] = None,
135-
sign: bool = False,
136-
build_path: str = ".",
137-
push: bool = True,
130+
platforms: list[str],
131+
build_path: str,
138132
):
139133
# Login to ECR
140134
ecr_login_boto3(region="us-east-1", account_id="268558157000")
141135

142136
image_full_uri = f"{registry}:{image_tag}"
143137

144138
# Build image with docker buildx
145-
build_image(
139+
docker_build_image(
146140
tag=image_full_uri,
147141
dockerfile=dockerfile_path,
148142
path=build_path,
149143
args=dockerfile_args,
150-
push=push,
144+
push=True,
151145
platforms=platforms,
152146
)
153-
154-
if sign:
155-
logger.info("Signing image")
156-
sign_image(docker_registry, image_tag)
157-
verify_signature(docker_registry, image_tag)

scripts/release/pipeline_main.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@
3030
build_upgrade_hook_image,
3131
)
3232
from scripts.release.build.build_info import load_build_info
33+
from scripts.release.build.build_scenario import (
34+
BuildScenario,
35+
)
3336
from scripts.release.build.image_build_configuration import (
3437
SUPPORTED_PLATFORMS,
3538
ImageBuildConfiguration,
3639
)
37-
from scripts.release.build.build_scenario import (
38-
BuildScenario,
39-
)
4040

4141
"""
4242
The goal of main.py, image_build_configuration.py and build_context.py is to provide a single source of truth for the build

0 commit comments

Comments
 (0)