diff --git a/codeflash/api/cfapi.py b/codeflash/api/cfapi.py index 0f1fbf65..9eb7bdb4 100644 --- a/codeflash/api/cfapi.py +++ b/codeflash/api/cfapi.py @@ -261,3 +261,16 @@ def mark_optimization_success(trace_id: str, *, is_optimization_found: bool) -> """ payload = {"trace_id": trace_id, "is_optimization_found": is_optimization_found} return make_cfapi_request(endpoint="/mark-as-success", method="POST", payload=payload) + + +def send_completion_email() -> Response: + """Send an email notification when codeflash --all completes.""" + try: + owner, repo = get_repo_owner_and_name() + except Exception as e: + sentry_sdk.capture_exception(e) + response = requests.Response() + response.status_code = 500 + return response + payload = {"owner": owner, "repo": repo} + return make_cfapi_request(endpoint="/send-completion-email", method="POST", payload=payload) diff --git a/codeflash/optimization/optimizer.py b/codeflash/optimization/optimizer.py index 63a32199..4ada42a9 100644 --- a/codeflash/optimization/optimizer.py +++ b/codeflash/optimization/optimizer.py @@ -9,6 +9,7 @@ from typing import TYPE_CHECKING from codeflash.api.aiservice import AiServiceClient, LocalAiServiceClient +from codeflash.api.cfapi import send_completion_email from codeflash.cli_cmds.console import console, logger, progress_bar from codeflash.code_utils import env_utils from codeflash.code_utils.code_utils import cleanup_paths, get_run_tmp_file @@ -342,6 +343,11 @@ def run(self) -> None: logger.info("❌ No optimizations found.") elif self.args.all: logger.info("✨ All functions have been optimized! ✨") + response = send_completion_email() # TODO: Include more details in the email + if response.ok: + logger.info("✅ Completion email sent successfully.") + else: + logger.warning("⚠️ Failed to send completion email. Status") finally: if function_optimizer: function_optimizer.cleanup_generated_files()