Files
devops-skills/engine/devops_agent/runtime.py

66 lines
2.0 KiB
Python

from __future__ import annotations
from pathlib import Path
from typing import Any
from engine.devops_agent.evidence import write_run_artifact
from engine.devops_agent.policies import RuntimePolicy
def run_issue_comment_workflow(
*,
lock: dict[str, Any],
provider: Any,
event_payload: dict[str, Any],
output_dir: str | Path,
) -> dict[str, Any]:
event = provider.parse_issue_comment_event(event_payload)
repo = str(event["repo"])
issue_number = int(event["issue_number"])
issue = provider.get_issue(repo, issue_number)
policy = RuntimePolicy(
safe_outputs=lock.get("safe_outputs") or {},
path_scope=lock.get("policy", {}).get("path_scope") or [],
)
policy.assert_operation_allowed("add_comment")
verification_summary = (
f"Workflow `{lock['workflow_name']}` processed issue #{issue_number} "
f"and prepared evidence for review."
)
comment_response = provider.post_issue_comment(
repo,
issue_number,
verification_summary,
)
artifact: dict[str, Any] = {
"run_id": f"{lock['workflow_name']}-issue-{issue_number}",
"workflow_name": lock["workflow_name"],
"provider": lock["provider"],
"event": event,
"plan_state": {
"status": "pending_review",
"repo": repo,
"issue_number": issue_number,
"issue_title": issue.get("title", ""),
},
"operations": [
{
"action": "add_comment",
"issue_number": issue_number,
"repo": repo,
}
],
"evidence": {
"issue_comment": comment_response,
"verification_summary": verification_summary,
},
"result": "success",
}
artifact_path = write_run_artifact(output_dir, artifact)
artifact["artifact_path"] = str(artifact_path.as_posix())
artifact_path.write_text(__import__("json").dumps(artifact, ensure_ascii=False, indent=2), encoding="utf-8")
return artifact