diff --git a/sentential/cli/root.py b/sentential/cli/root.py index b2bfe93..0654c72 100644 --- a/sentential/cli/root.py +++ b/sentential/cli/root.py @@ -22,11 +22,14 @@ def init(repository_name: str, runtime: Runtimes): @root.command() -def build(arch: Architecture = typer.Option(Architecture.system().value)): +def build( + arch: Architecture = typer.Option(Architecture.system().value), + ssh_agent: bool = typer.Option(False), +): """build lambda image""" ontology = Ontology() LocalLambdaDriver(ontology).destroy() - LocalImagesDriver(ontology).build(arch) + LocalImagesDriver(ontology).build(arch, ssh_agent) @root.command() @@ -35,6 +38,7 @@ def publish( minor: bool = typer.Option(False), arch: List[Architecture] = typer.Option([Architecture.system().value]), multiarch: bool = typer.Option(False), + ssh_agent: bool = typer.Option(False), ): """publish lambda image""" ontology = Ontology() @@ -42,9 +46,9 @@ def publish( docker = LocalImagesDriver(ontology) if multiarch: - docker.publish(tag, [a for a in Architecture]) + docker.publish(tag, [a for a in Architecture], ssh_agent) else: - docker.publish(tag, [a for a in arch]) + docker.publish(tag, [a for a in arch], ssh_agent) @root.command() diff --git a/sentential/lib/drivers/local_images.py b/sentential/lib/drivers/local_images.py index d10022b..eba1a7c 100644 --- a/sentential/lib/drivers/local_images.py +++ b/sentential/lib/drivers/local_images.py @@ -17,13 +17,15 @@ def __init__(self, ontology: Ontology) -> None: self.repo_name = ontology.context.repository_name self.repo_url = ontology.context.repository_url - def build(self, arch: Architecture) -> Image: + def build(self, arch: Architecture, ssh_agent: bool) -> Image: platform = f"linux/{arch.value}" manifest_uri = f"{self.repo_name}:{SNTL_WORKING_IMAGE_TAG}" - self._build(manifest_uri, platform) + self._build(manifest_uri, platform, ssh_agent) return self.get_image() - def publish(self, tag: str, arch: List[Architecture]) -> List[Image]: + def publish( + self, tag: str, arch: List[Architecture], ssh_agent: bool + ) -> List[Image]: platforms = [f"linux/{a.value}" for a in arch] manifest_list_uri = f"{self.repo_url}:{tag}" image_manifest_uris = [] @@ -32,15 +34,10 @@ def publish(self, tag: str, arch: List[Architecture]) -> List[Image]: for platform in platforms: image_manifest_uri = f"{manifest_list_uri}-{platform.split('/')[1]}" - image = self._build(image_manifest_uri, platform) + image = self._build(image_manifest_uri, platform, ssh_agent) image_manifest_uris.append(image_manifest_uri) built.append(image) - if cwi.id not in [build.id for build in built]: - raise LocalDriverError( - "current working image id does not match that of any local build" - ) - for image_manifest_uri in image_manifest_uris: clients.docker.push(image_manifest_uri) @@ -49,7 +46,7 @@ def publish(self, tag: str, arch: List[Architecture]) -> List[Image]: clients.docker.manifest.push(manifest_list_uri, False) return built - def _build(self, tag: str, platform: str) -> Image: + def _build(self, tag: str, platform: str, ssh_agent: bool) -> Image: self.ontology.args.export_defaults() cmd = { "tags": [tag], @@ -57,6 +54,8 @@ def _build(self, tag: str, platform: str) -> Image: "load": True, "build_args": self.ontology.args.parameters.dict(), } + if ssh_agent: + cmd["ssh"] = "default" image = clients.docker.build(self.ontology.context.path.root, **cmd) diff --git a/sentential/sntl.py b/sentential/sntl.py index 5db838a..983313c 100644 --- a/sentential/sntl.py +++ b/sentential/sntl.py @@ -16,7 +16,7 @@ ValidationError, ) -root.add_typer(store, name="args", help="build arguments", callback=Assurances.build) +root.add_typer(store, name="args", help="build arguments") root.add_typer(store, name="envs", help="environment variables") root.add_typer(store, name="secrets", help="secrets") root.add_typer(store, name="configs", help="provisioning") diff --git a/tests/fixtures/common.py b/tests/fixtures/common.py index 528f67f..c488a2e 100644 --- a/tests/fixtures/common.py +++ b/tests/fixtures/common.py @@ -17,7 +17,7 @@ def cwi(): local_images_driver = LocalImagesDriver(Ontology()) local_images_driver.clean() - yield local_images_driver.build(Architecture.system()) + yield local_images_driver.build(Architecture.system(), False) # diff --git a/tests/lib/drivers/test_local_images.py b/tests/lib/drivers/test_local_images.py index 362dc54..cdad74e 100644 --- a/tests/lib/drivers/test_local_images.py +++ b/tests/lib/drivers/test_local_images.py @@ -37,12 +37,12 @@ def test_get_image(self, cwi: Image, local_images_driver: LocalImagesDriver): def test_publish( self, cwi: Image, local_images_driver: LocalImagesDriver, native_arch ): - assert cwi in local_images_driver.publish("1.0.0", [native_arch]) + assert cwi in local_images_driver.publish("1.0.0", [native_arch], False) def test_publish_multi_arch( self, cwi: Image, local_images_driver: LocalImagesDriver ): - built = local_images_driver.publish("2.0.0", [a for a in Architecture]) + built = local_images_driver.publish("2.0.0", [a for a in Architecture], False) archs = [image.architecture for image in built] assert len(archs) == 2 assert "amd64" in archs @@ -50,16 +50,13 @@ def test_publish_multi_arch( assert cwi in built def test_cross_build(self, local_images_driver: LocalImagesDriver, cross_arch): - assert local_images_driver.build(cross_arch).architecture == cross_arch.value - - def test_cross_publish_failure( - self, local_images_driver: LocalImagesDriver, native_arch - ): - with pytest.raises(LocalDriverError): - local_images_driver.publish("1.0.1", [native_arch]) + assert ( + local_images_driver.build(cross_arch, False).architecture + == cross_arch.value + ) def test_cross_publish(self, local_images_driver: LocalImagesDriver, cross_arch): - built = local_images_driver.publish("1.0.1", [cross_arch]) + built = local_images_driver.publish("1.0.1", [cross_arch], False) archs = [image.architecture for image in built] assert len(archs) == 1 assert cross_arch.value in archs diff --git a/tests/lib/drivers/test_local_lambda.py b/tests/lib/drivers/test_local_lambda.py index caa85e3..116c970 100644 --- a/tests/lib/drivers/test_local_lambda.py +++ b/tests/lib/drivers/test_local_lambda.py @@ -33,7 +33,7 @@ def test_build( local_images_driver: LocalImagesDriver, ): local_images_driver.ontology.args.set("buildarg", "present") - local_images_driver.build(Architecture.system()) + local_images_driver.build(Architecture.system(), False) def test_deploy( self, diff --git a/tests/lib/mounts/test_local_lambda_public_url.py b/tests/lib/mounts/test_local_lambda_public_url.py index 78ce82b..37cf03c 100644 --- a/tests/lib/mounts/test_local_lambda_public_url.py +++ b/tests/lib/mounts/test_local_lambda_public_url.py @@ -26,7 +26,7 @@ def http_handler_returns_environ(init): class TestAwsLambdaPublicUrlMount: def test_build(self, local_images_driver: LocalImagesDriver): local_images_driver.ontology.args.set("buildarg", "present") - local_images_driver.build(Architecture.system()) + local_images_driver.build(Architecture.system(), False) def test_deploy(self, cwi: Image, local_lambda_driver: LocalLambdaDriver): local_lambda_driver.ontology.envs.set("ENVVAR", "present")