|
18 | 18 | logger = logging.getLogger("airbyte-cdk.utils.docker.build") |
19 | 19 |
|
20 | 20 |
|
| 21 | +def run_command( |
| 22 | + connector_dir: Path, |
| 23 | + tag: str = "dev", |
| 24 | + platform: str = "linux/amd64", |
| 25 | + no_verify: bool = False, |
| 26 | + verbose: bool = False, |
| 27 | +) -> int: |
| 28 | + """Run the build command with the given arguments. |
| 29 | + |
| 30 | + Args: |
| 31 | + connector_dir: Path to the connector directory. |
| 32 | + tag: Tag to apply to the built image. |
| 33 | + platform: Platform to build for. |
| 34 | + no_verify: Whether to skip verification of the built image. |
| 35 | + verbose: Whether to enable verbose logging. |
| 36 | + |
| 37 | + Returns: |
| 38 | + Exit code (0 for success, non-zero for failure). |
| 39 | + """ |
| 40 | + set_up_logging(verbose) |
| 41 | + |
| 42 | + if not verify_docker_installation(): |
| 43 | + logger.error("Docker is not installed or not running. Please install Docker and try again.") |
| 44 | + return 1 |
| 45 | + |
| 46 | + if not connector_dir.exists(): |
| 47 | + logger.error(f"Connector directory not found: {connector_dir}") |
| 48 | + return 1 |
| 49 | + |
| 50 | + try: |
| 51 | + metadata = read_metadata(connector_dir) |
| 52 | + logger.info(f"Connector: {metadata.dockerRepository}") |
| 53 | + logger.info(f"Version: {metadata.dockerImageTag}") |
| 54 | + except (FileNotFoundError, ValueError) as e: |
| 55 | + logger.error(f"Error reading connector metadata: {e}") |
| 56 | + return 1 |
| 57 | + |
| 58 | + try: |
| 59 | + if metadata.connectorBuildOptions and metadata.connectorBuildOptions.baseImage: |
| 60 | + image_name = build_from_base_image(connector_dir, metadata, tag, platform) |
| 61 | + else: |
| 62 | + image_name = build_from_dockerfile(connector_dir, metadata, tag, platform) |
| 63 | + |
| 64 | + if not no_verify: |
| 65 | + if verify_image(image_name): |
| 66 | + logger.info(f"Build completed successfully: {image_name}") |
| 67 | + return 0 |
| 68 | + else: |
| 69 | + logger.error(f"Built image failed verification: {image_name}") |
| 70 | + return 1 |
| 71 | + else: |
| 72 | + logger.info(f"Build completed successfully (without verification): {image_name}") |
| 73 | + return 0 |
| 74 | + |
| 75 | + except Exception as e: |
| 76 | + logger.error(f"Error building Docker image: {e}") |
| 77 | + if verbose: |
| 78 | + import traceback |
| 79 | + logger.error(traceback.format_exc()) |
| 80 | + return 1 |
| 81 | + |
| 82 | + |
21 | 83 | def set_up_logging(verbose: bool = False) -> None: |
22 | 84 | """Set up logging configuration. |
23 | 85 |
|
|
0 commit comments