Skip to content

Commit a9718aa

Browse files
committed
Add option to keep build contexts on failure
i.e., Docker containers and temporary directories
1 parent 7d8bb5e commit a9718aa

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

cpython-unix/build.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ def simple_build(
249249
):
250250
archive = download_entry(entry, DOWNLOADS_PATH)
251251

252-
with build_environment(client, image) as build_env:
252+
with build_environment(client, image, entry) as build_env:
253253
if settings.get("needs_toolchain"):
254254
build_env.install_toolchain(
255255
BUILD,
@@ -291,7 +291,7 @@ def build_binutils(client, image, host_platform):
291291
"""Build binutils in the Docker image."""
292292
archive = download_entry("binutils", DOWNLOADS_PATH)
293293

294-
with build_environment(client, image) as build_env:
294+
with build_environment(client, image, "binutils") as build_env:
295295
install_sccache(build_env)
296296

297297
build_env.copy_file(archive)
@@ -332,7 +332,7 @@ def build_musl(client, image, host_platform: str, target_triple: str, build_opti
332332
musl = "musl-static" if static else "musl"
333333
musl_archive = download_entry(musl, DOWNLOADS_PATH)
334334

335-
with build_environment(client, image) as build_env:
335+
with build_environment(client, image, "musl") as build_env:
336336
build_env.install_toolchain(
337337
BUILD,
338338
host_platform,
@@ -362,7 +362,7 @@ def build_libedit(
362362
):
363363
libedit_archive = download_entry("libedit", DOWNLOADS_PATH)
364364

365-
with build_environment(client, image) as build_env:
365+
with build_environment(client, image, "libedit") as build_env:
366366
if settings.get("needs_toolchain"):
367367
build_env.install_toolchain(
368368
BUILD,
@@ -397,7 +397,7 @@ def build_tix(
397397
tk_archive = download_entry("tk", DOWNLOADS_PATH)
398398
tix_archive = download_entry("tix", DOWNLOADS_PATH)
399399

400-
with build_environment(client, image) as build_env:
400+
with build_environment(client, image, "tix") as build_env:
401401
if settings.get("needs_toolchain"):
402402
build_env.install_toolchain(
403403
BUILD,
@@ -444,7 +444,7 @@ def build_cpython_host(
444444
"""Build binutils in the Docker image."""
445445
archive = download_entry(entry, DOWNLOADS_PATH)
446446

447-
with build_environment(client, image) as build_env:
447+
with build_environment(client, image, "cpython-host") as build_env:
448448
python_version = DOWNLOADS[entry]["version"]
449449

450450
build_env.install_toolchain(
@@ -760,7 +760,7 @@ def build_cpython(
760760
setup_local_content = setup["setup_local"]
761761
extra_make_content = setup["make_data"]
762762

763-
with build_environment(client, image) as build_env:
763+
with build_environment(client, image, "cpython") as build_env:
764764
if settings.get("needs_toolchain"):
765765
build_env.install_toolchain(
766766
BUILD,

pythonbuild/buildenv.py

+9-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import io
88
import os
99
import pathlib
10+
import random
1011
import shutil
12+
import string
1113
import tarfile
1214
import tempfile
1315

@@ -264,22 +266,25 @@ def find_output_files(self, base_path, pattern):
264266

265267

266268
@contextlib.contextmanager
267-
def build_environment(client, image):
269+
def build_environment(client, image, name):
268270
if client is not None:
271+
suffix = "".join(random.choices(string.ascii_uppercase + string.digits, k=8))
269272
container = client.containers.run(
270-
image, command=["/bin/sleep", "86400"], detach=True
273+
image, command=["/bin/sleep", "86400"], name=f"{name}-{suffix}", detach=True
271274
)
272275
td = None
273276
context = ContainerContext(container)
274277
else:
275278
container = None
276-
td = tempfile.TemporaryDirectory()
279+
td = tempfile.TemporaryDirectory(prefix=f"{name}-", delete=False)
277280
context = TempdirContext(td.name)
278281

279282
try:
280283
yield context
281284
finally:
282-
if container:
285+
if os.environ.get("PYBUILD_KEEP_ENV"):
286+
pass
287+
elif container:
283288
container.stop(timeout=0)
284289
container.remove()
285290
else:

0 commit comments

Comments
 (0)