Skip to content

Commit f31e414

Browse files
authored
Merge pull request #43 from exa-labs/devin/1771623343-cross-build-support
feat(image-spec): add cross-platform nix build support via remote builders
2 parents 9ae5fe4 + a63f8b2 commit f31e414

1 file changed

Lines changed: 12 additions & 1 deletion

File tree

flytekit/image_spec/default_builder.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import json
22
import os
3+
import platform
34
import re
45
import shutil
56
import subprocess
@@ -816,14 +817,24 @@ def _build_image(self, image_spec: ImageSpec, *, push: bool = True) -> str:
816817
f"Unsupported platform for nix builds: {image_spec.platform}. "
817818
f"Supported: {', '.join(platform_to_nix_system.keys())}"
818819
)
820+
os_suffix = "darwin" if platform.system() == "Darwin" else "linux"
821+
machine_to_nix = {"x86_64": f"x86_64-{os_suffix}", "aarch64": f"aarch64-{os_suffix}", "arm64": f"aarch64-{os_suffix}"}
822+
local_system = machine_to_nix.get(platform.machine(), f"x86_64-{os_suffix}")
823+
is_cross_build = nix_system != local_system
824+
819825
if push and image_spec.registry:
820826
ecr_token = subprocess.run(
821827
["aws", "ecr", "get-login-password", "--region", "us-west-2"],
822828
capture_output=True, text=True, check=True,
823829
).stdout.strip()
830+
if is_cross_build:
831+
docker_attr = f"packages.{local_system}.docker-{nix_system}.copyTo"
832+
click.secho(f"Cross-build: {nix_system} image via {local_system} n2c", fg="yellow")
833+
else:
834+
docker_attr = f"packages.{nix_system}.docker.copyTo"
824835
command = [
825836
"nix", "run",
826-
f"path:{tmp_dir}#packages.{nix_system}.docker.copyTo", "--",
837+
f"path:{tmp_dir}#{docker_attr}", "--",
827838
f"docker://{image_spec.image_name()}",
828839
"--dest-creds", f"AWS:{ecr_token}",
829840
"--image-parallel-copies", "32",

0 commit comments

Comments
 (0)