mirror of
https://github.com/github/spec-kit.git
synced 2026-07-03 12:28:06 +08:00
Add support for SPECKIT_WORKFLOW_RUN_ID override (#2742)
* Initial plan * feat: support SPECKIT_WORKFLOW_RUN_ID override * docs: clarify run_id env var precedence wording --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -11,6 +11,7 @@ The engine is the orchestrator that:
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import uuid
|
||||
from datetime import datetime, timezone
|
||||
@@ -425,7 +426,7 @@ class WorkflowEngine:
|
||||
inputs:
|
||||
User-provided input values.
|
||||
run_id:
|
||||
Optional run ID (auto-generated if not provided).
|
||||
Optional run ID (uses SPECKIT_WORKFLOW_RUN_ID when set, otherwise auto-generated).
|
||||
|
||||
Returns
|
||||
-------
|
||||
@@ -433,8 +434,14 @@ class WorkflowEngine:
|
||||
"""
|
||||
from . import STEP_REGISTRY
|
||||
|
||||
effective_run_id = run_id
|
||||
if effective_run_id is None:
|
||||
env_run_id = os.environ.get("SPECKIT_WORKFLOW_RUN_ID", "").strip()
|
||||
if env_run_id:
|
||||
effective_run_id = env_run_id
|
||||
|
||||
state = RunState(
|
||||
run_id=run_id,
|
||||
run_id=effective_run_id,
|
||||
workflow_id=definition.id,
|
||||
project_root=self.project_root,
|
||||
)
|
||||
|
||||
@@ -2332,6 +2332,48 @@ steps:
|
||||
assert state.status == RunStatus.COMPLETED
|
||||
assert state.step_results["only-step"]["output"]["stdout"].strip() == "hello"
|
||||
|
||||
def test_run_id_uses_speckit_workflow_run_id_env_override(self, project_dir, monkeypatch):
|
||||
"""When no run_id argument is provided, SPECKIT_WORKFLOW_RUN_ID overrides the auto-generated run ID."""
|
||||
from specify_cli.workflows.engine import WorkflowDefinition, WorkflowEngine
|
||||
|
||||
monkeypatch.setenv("SPECKIT_WORKFLOW_RUN_ID", "env-run-123")
|
||||
definition = WorkflowDefinition.from_string("""
|
||||
schema_version: "1.0"
|
||||
workflow:
|
||||
id: "env-run-id"
|
||||
name: "Env Run Id"
|
||||
version: "1.0.0"
|
||||
steps:
|
||||
- id: stamp
|
||||
type: shell
|
||||
run: "echo {{ context.run_id }}"
|
||||
""")
|
||||
state = WorkflowEngine(project_dir).execute(definition)
|
||||
|
||||
assert state.run_id == "env-run-123"
|
||||
assert state.step_results["stamp"]["output"]["stdout"].strip() == "env-run-123"
|
||||
|
||||
def test_run_id_arg_takes_precedence_over_env_override(self, project_dir, monkeypatch):
|
||||
"""Explicit run_id keeps existing precedence over SPECKIT_WORKFLOW_RUN_ID."""
|
||||
from specify_cli.workflows.engine import WorkflowDefinition, WorkflowEngine
|
||||
|
||||
monkeypatch.setenv("SPECKIT_WORKFLOW_RUN_ID", "env-run-123")
|
||||
definition = WorkflowDefinition.from_string("""
|
||||
schema_version: "1.0"
|
||||
workflow:
|
||||
id: "explicit-run-id"
|
||||
name: "Explicit Run Id"
|
||||
version: "1.0.0"
|
||||
steps:
|
||||
- id: stamp
|
||||
type: shell
|
||||
run: "echo {{ context.run_id }}"
|
||||
""")
|
||||
state = WorkflowEngine(project_dir).execute(definition, run_id="explicit-456")
|
||||
|
||||
assert state.run_id == "explicit-456"
|
||||
assert state.step_results["stamp"]["output"]["stdout"].strip() == "explicit-456"
|
||||
|
||||
|
||||
# ===== State Persistence Tests =====
|
||||
|
||||
|
||||
Reference in New Issue
Block a user