Initial commit
This commit is contained in:
152
skills/adw-bootstrap/reference/scaled/workflows/adw_sdlc_iso.py
Normal file
152
skills/adw-bootstrap/reference/scaled/workflows/adw_sdlc_iso.py
Normal file
@@ -0,0 +1,152 @@
|
||||
#!/usr/bin/env -S uv run
|
||||
# /// script
|
||||
# dependencies = ["python-dotenv", "pydantic"]
|
||||
# ///
|
||||
|
||||
"""
|
||||
ADW SDLC Iso - Complete Software Development Life Cycle workflow with isolation
|
||||
|
||||
Usage: uv run adw_sdlc_iso.py <issue-number> [adw-id] [--skip-e2e] [--skip-resolution]
|
||||
|
||||
This script runs the complete ADW SDLC pipeline in isolation:
|
||||
1. adw_plan_iso.py - Planning phase (isolated)
|
||||
2. adw_build_iso.py - Implementation phase (isolated)
|
||||
3. adw_test_iso.py - Testing phase (isolated)
|
||||
4. adw_review_iso.py - Review phase (isolated)
|
||||
5. adw_document_iso.py - Documentation phase (isolated)
|
||||
|
||||
The scripts are chained together via persistent state (adw_state.json).
|
||||
Each phase runs in its own git worktree with dedicated ports.
|
||||
"""
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Add the parent directory to Python path to import modules
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
from adw_modules.workflow_ops import ensure_adw_id
|
||||
|
||||
|
||||
def main():
|
||||
"""Main entry point."""
|
||||
# Check for flags
|
||||
skip_e2e = "--skip-e2e" in sys.argv
|
||||
skip_resolution = "--skip-resolution" in sys.argv
|
||||
|
||||
# Remove flags from argv
|
||||
if skip_e2e:
|
||||
sys.argv.remove("--skip-e2e")
|
||||
if skip_resolution:
|
||||
sys.argv.remove("--skip-resolution")
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: uv run adw_sdlc_iso.py <issue-number> [adw-id] [--skip-e2e] [--skip-resolution]")
|
||||
print("\nThis runs the complete isolated Software Development Life Cycle:")
|
||||
print(" 1. Plan (isolated)")
|
||||
print(" 2. Build (isolated)")
|
||||
print(" 3. Test (isolated)")
|
||||
print(" 4. Review (isolated)")
|
||||
print(" 5. Document (isolated)")
|
||||
sys.exit(1)
|
||||
|
||||
issue_number = sys.argv[1]
|
||||
adw_id = sys.argv[2] if len(sys.argv) > 2 else None
|
||||
|
||||
# Ensure ADW ID exists with initialized state
|
||||
adw_id = ensure_adw_id(issue_number, adw_id)
|
||||
print(f"Using ADW ID: {adw_id}")
|
||||
|
||||
# Get the directory where this script is located
|
||||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
# Run isolated plan with the ADW ID
|
||||
plan_cmd = [
|
||||
"uv",
|
||||
"run",
|
||||
os.path.join(script_dir, "adw_plan_iso.py"),
|
||||
issue_number,
|
||||
adw_id,
|
||||
]
|
||||
print(f"\n=== ISOLATED PLAN PHASE ===")
|
||||
print(f"Running: {' '.join(plan_cmd)}")
|
||||
plan = subprocess.run(plan_cmd)
|
||||
if plan.returncode != 0:
|
||||
print("Isolated plan phase failed")
|
||||
sys.exit(1)
|
||||
|
||||
# Run isolated build with the ADW ID
|
||||
build_cmd = [
|
||||
"uv",
|
||||
"run",
|
||||
os.path.join(script_dir, "adw_build_iso.py"),
|
||||
issue_number,
|
||||
adw_id,
|
||||
]
|
||||
print(f"\n=== ISOLATED BUILD PHASE ===")
|
||||
print(f"Running: {' '.join(build_cmd)}")
|
||||
build = subprocess.run(build_cmd)
|
||||
if build.returncode != 0:
|
||||
print("Isolated build phase failed")
|
||||
sys.exit(1)
|
||||
|
||||
# Run isolated test with the ADW ID
|
||||
test_cmd = [
|
||||
"uv",
|
||||
"run",
|
||||
os.path.join(script_dir, "adw_test_iso.py"),
|
||||
issue_number,
|
||||
adw_id,
|
||||
"--skip-e2e", # Always skip E2E tests in SDLC workflows
|
||||
]
|
||||
|
||||
print(f"\n=== ISOLATED TEST PHASE ===")
|
||||
print(f"Running: {' '.join(test_cmd)}")
|
||||
test = subprocess.run(test_cmd)
|
||||
if test.returncode != 0:
|
||||
print("Isolated test phase failed")
|
||||
# Note: Continue anyway as some tests might be flaky
|
||||
print("WARNING: Test phase failed but continuing with review")
|
||||
|
||||
# Run isolated review with the ADW ID
|
||||
review_cmd = [
|
||||
"uv",
|
||||
"run",
|
||||
os.path.join(script_dir, "adw_review_iso.py"),
|
||||
issue_number,
|
||||
adw_id,
|
||||
]
|
||||
if skip_resolution:
|
||||
review_cmd.append("--skip-resolution")
|
||||
|
||||
print(f"\n=== ISOLATED REVIEW PHASE ===")
|
||||
print(f"Running: {' '.join(review_cmd)}")
|
||||
review = subprocess.run(review_cmd)
|
||||
if review.returncode != 0:
|
||||
print("Isolated review phase failed")
|
||||
sys.exit(1)
|
||||
|
||||
# Run isolated documentation with the ADW ID
|
||||
document_cmd = [
|
||||
"uv",
|
||||
"run",
|
||||
os.path.join(script_dir, "adw_document_iso.py"),
|
||||
issue_number,
|
||||
adw_id,
|
||||
]
|
||||
print(f"\n=== ISOLATED DOCUMENTATION PHASE ===")
|
||||
print(f"Running: {' '.join(document_cmd)}")
|
||||
document = subprocess.run(document_cmd)
|
||||
if document.returncode != 0:
|
||||
print("Isolated documentation phase failed")
|
||||
sys.exit(1)
|
||||
|
||||
print(f"\n=== ISOLATED SDLC COMPLETED ===")
|
||||
print(f"ADW ID: {adw_id}")
|
||||
print(f"All phases completed successfully!")
|
||||
print(f"\nWorktree location: trees/{adw_id}/")
|
||||
print(f"To clean up: ./scripts/purge_tree.sh {adw_id}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user