generated from coulomb/repo-seed
Implement source lock and submission package baseline
This commit is contained in:
@@ -45,6 +45,8 @@ def run_step(
|
||||
"runner_kind": "external",
|
||||
},
|
||||
"artifact_refs": [],
|
||||
"requirement_refs": [],
|
||||
"metadata": _object_or_empty(entrypoint.get("metadata")),
|
||||
}
|
||||
if entrypoint["kind"] == "command":
|
||||
return _run_command(root, run_dir, run_id, plan, step, extension_path, entrypoint)
|
||||
@@ -63,6 +65,8 @@ def _no_runner_result(step: dict[str, Any]) -> dict[str, Any]:
|
||||
"runner_kind": None,
|
||||
},
|
||||
"artifact_refs": [],
|
||||
"requirement_refs": [],
|
||||
"metadata": {},
|
||||
}
|
||||
|
||||
|
||||
@@ -118,6 +122,8 @@ def _run_python_module(
|
||||
"error_type": type(exc).__name__,
|
||||
},
|
||||
"artifact_refs": [],
|
||||
"requirement_refs": [],
|
||||
"metadata": _object_or_empty(entrypoint.get("metadata")),
|
||||
}
|
||||
if not isinstance(result, dict):
|
||||
raise ValidationError(f"{entrypoint['id']}: runner must return an object")
|
||||
@@ -126,6 +132,8 @@ def _run_python_module(
|
||||
"observations": result.get("observations", []),
|
||||
"facts": result.get("facts", {}),
|
||||
"artifact_refs": result.get("artifact_refs", []),
|
||||
"requirement_refs": result.get("requirement_refs", []),
|
||||
"metadata": _merge_metadata(entrypoint.get("metadata"), result.get("metadata")),
|
||||
}
|
||||
|
||||
|
||||
@@ -192,6 +200,8 @@ def _run_command(
|
||||
"command": command,
|
||||
},
|
||||
"artifact_refs": [str(context_path.relative_to(run_dir))],
|
||||
"requirement_refs": [],
|
||||
"metadata": _object_or_empty(entrypoint.get("metadata")),
|
||||
}
|
||||
except subprocess.TimeoutExpired:
|
||||
return {
|
||||
@@ -206,6 +216,8 @@ def _run_command(
|
||||
"command": command,
|
||||
},
|
||||
"artifact_refs": [str(context_path.relative_to(run_dir))],
|
||||
"requirement_refs": [],
|
||||
"metadata": _object_or_empty(entrypoint.get("metadata")),
|
||||
}
|
||||
|
||||
parsed = _parse_runner_stdout(completed.stdout)
|
||||
@@ -225,6 +237,8 @@ def _run_command(
|
||||
"command": command,
|
||||
},
|
||||
"artifact_refs": [str(context_path.relative_to(run_dir))],
|
||||
"requirement_refs": [],
|
||||
"metadata": _object_or_empty(entrypoint.get("metadata")),
|
||||
}
|
||||
|
||||
facts = parsed.get("facts", {})
|
||||
@@ -245,6 +259,9 @@ def _run_command(
|
||||
if not isinstance(artifact_refs, list):
|
||||
artifact_refs = []
|
||||
artifact_refs.append(str(context_path.relative_to(run_dir)))
|
||||
requirement_refs = parsed.get("requirement_refs", [])
|
||||
if not isinstance(requirement_refs, list):
|
||||
requirement_refs = []
|
||||
|
||||
result = parsed.get("result", "unknown")
|
||||
if completed.returncode != 0 and result in {"pass", "warning", "manual", "skipped"}:
|
||||
@@ -258,6 +275,8 @@ def _run_command(
|
||||
"observations": observations,
|
||||
"facts": facts,
|
||||
"artifact_refs": artifact_refs,
|
||||
"requirement_refs": requirement_refs,
|
||||
"metadata": _merge_metadata(entrypoint.get("metadata"), parsed.get("metadata")),
|
||||
}
|
||||
|
||||
|
||||
@@ -328,5 +347,17 @@ def _parse_runner_stdout(stdout: str) -> dict[str, Any] | None:
|
||||
return parsed
|
||||
|
||||
|
||||
def _merge_metadata(*values: Any) -> dict[str, Any]:
|
||||
merged: dict[str, Any] = {}
|
||||
for value in values:
|
||||
if isinstance(value, dict):
|
||||
merged.update(value)
|
||||
return merged
|
||||
|
||||
|
||||
def _object_or_empty(value: Any) -> dict[str, Any]:
|
||||
return value if isinstance(value, dict) else {}
|
||||
|
||||
|
||||
def _safe_id(value: str) -> str:
|
||||
return "".join(char if char.isalnum() or char in {"-", "_"} else "_" for char in value)
|
||||
|
||||
Reference in New Issue
Block a user