1818logger = logging .getLogger ("airbyte-cdk.utils.docker.build" )
1919
2020
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-
8321def set_up_logging (verbose : bool = False ) -> None :
8422 """Set up logging configuration.
8523
@@ -94,33 +32,6 @@ def set_up_logging(verbose: bool = False) -> None:
9432 )
9533
9634
97- def read_metadata (connector_dir : Path ) -> ConnectorMetadata :
98- """Read and parse connector metadata from metadata.yaml.
99-
100- Args:
101- connector_dir: Path to the connector directory.
102-
103- Returns:
104- The parsed connector metadata.
105-
106- Raises:
107- FileNotFoundError: If the metadata.yaml file doesn't exist.
108- ValueError: If the metadata is invalid.
109- """
110- metadata_path = connector_dir / "metadata.yaml"
111- if not metadata_path .exists ():
112- raise FileNotFoundError (f"Metadata file not found: { metadata_path } " )
113-
114- metadata_content = metadata_path .read_text ()
115- metadata_dict = yaml .safe_load (metadata_content )
116-
117- if not metadata_dict or "data" not in metadata_dict :
118- raise ValueError ("Invalid metadata format: missing 'data' field" )
119-
120- metadata_file = MetadataFile .model_validate (metadata_dict )
121- return metadata_file .data
122-
123-
12435def run_docker_command (cmd : List [str ], check : bool = True ) -> Tuple [int , str , str ]:
12536 """Run a Docker command as a subprocess.
12637
0 commit comments