|
1 | 1 | import json |
2 | 2 | import os |
| 3 | +import platform |
3 | 4 | import re |
4 | 5 | import shutil |
5 | 6 | import subprocess |
@@ -816,14 +817,24 @@ def _build_image(self, image_spec: ImageSpec, *, push: bool = True) -> str: |
816 | 817 | f"Unsupported platform for nix builds: {image_spec.platform}. " |
817 | 818 | f"Supported: {', '.join(platform_to_nix_system.keys())}" |
818 | 819 | ) |
| 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 | + |
819 | 825 | if push and image_spec.registry: |
820 | 826 | ecr_token = subprocess.run( |
821 | 827 | ["aws", "ecr", "get-login-password", "--region", "us-west-2"], |
822 | 828 | capture_output=True, text=True, check=True, |
823 | 829 | ).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" |
824 | 835 | command = [ |
825 | 836 | "nix", "run", |
826 | | - f"path:{tmp_dir}#packages.{nix_system}.docker.copyTo", "--", |
| 837 | + f"path:{tmp_dir}#{docker_attr}", "--", |
827 | 838 | f"docker://{image_spec.image_name()}", |
828 | 839 | "--dest-creds", f"AWS:{ecr_token}", |
829 | 840 | "--image-parallel-copies", "32", |
|
0 commit comments