Skip to content

Release Runner

A release pipeline as an authored Workflow: each stage is a step, human sign-offs are approval pauses, and the whole run is durable.

Code

import asyncio
import os

from coactra import ModelProfile, ModelResolver, ModelRoute, Policy, Scope, StaticToken, Skill, Team, Workflow
from coactra.workflow import step


async def main(version: str) -> None:
    team = Team(
        scope=Scope(tenant_id="acme", namespace="release"),
        policy=Policy.permissive(),
        model_resolver=ModelResolver([
            ModelRoute(
                capability="release",
                profile=ModelProfile(
                    name="release",
                    model="openai/deepseek-v4-pro",
                    api_base="https://opencode.ai/zen/go/v1",
                    api_key=os.environ["OC_KEY"],
                ),
            )
        ]),
    )
    await team.add_agent(
        model_capability="release",
        name="release-eng",
        auth=StaticToken("gateway-token"),
        gateway="https://gateway/mcp",
        skills=[Skill("release", description="Run release stages", tags=["pipeline", "execute"])],
        expose=True,
    )

    play = Workflow(f"release-{version}", steps=[
        step("run pre-release checks and tests", requires_skill="release", required_tags=["execute"]),
        step("build and push artifacts", requires_skill="release", required_tags=["execute"]),
        step("deploy to staging", requires_skill="release", required_tags=["execute"]),
        step("staging validation sign-off", approve=True, approval_only=True),
        step("deploy to production", requires_skill="release", required_tags=["execute"]),
        step("smoke-test production", requires_skill="release", required_tags=["execute"]),
        step("release manager sign-off", approve=True, approval_only=True),
        step("tag release and close", requires_skill="release", required_tags=["execute"]),
    ])

    run = await team.run(play)
    print(f"Release {version} -> {run.status}")