Deploy a merged change to an environment. Verifies the change is merged, finds the build artifact, confirms with the user, triggers the deployment, and verifies the result.
Check if /tmp/ops-suite-session/config.json exists:
config.yaml, parse it, and write to /tmp/ops-suite-session/config.json for other skills to reuse.
If neither exists, tell the user to copy config.example.yaml to config.yaml and fill in their values. Stop here.Extract:
deploy.ci_provider — determines which adapter to loaddeploy.image_tag_source — how to find the image tag (run-id, commit-sha, tag)deploy.migration_tool — whether migrations need to runenvironments — available environmentsAlso read the reference at references/commands.md (in this skill's directory) for the step-by-step process.
Read the adapter file at adapters/{deploy.ci_provider}.md (in this skill's directory).
If the adapter does not exist, tell the user that the CI provider is not yet supported and stop.
{deploy.ci_provider}If $ARGUMENTS contains a PR number:
If $ARGUMENTS contains a commit SHA or branch ref:
If nothing is provided, ask the user for a PR number or ref.
If $ARGUMENTS contains an environment name, use it.
Otherwise, list available environments from config and ask the user.
IMPORTANT: If the CI workflow auto-deploys to dev on merge (check the build run for a deploy-dev job),
inform the user that dev was already deployed automatically. Then:
Never chain merge → prod deploy without explicit approval for each environment.
Using the adapter's commands and deploy.image_tag_source:
Verify the build completed successfully before proceeding.
Use the adapter to show:
ALWAYS ask the user for explicit confirmation before deploying.
Display:
Ready to deploy:
Change: PR #{pr_number} — {pr_title}
Image tag: {image_tag}
Target: {environment}
Current tag: {current_tag}
Proceed? (yes/no)
Use the adapter's deploy command to trigger the deployment. Monitor the deployment progress using the adapter's status commands.
After deployment completes, run the following read-only checks automatically:
Use ops-suite:service-status with arguments: {service} {env_name}.
Use session state from /tmp/ops-suite-session/ — do not re-ask for environment.
Use ops-suite:service-logs with arguments: {service} {env_name}. Check for errors in last 5 minutes.
Deployment Summary:
PR: #{pr_number} — {pr_title}
Environment: {environment}
Image tag: {image_tag}
Status: {success/failed}
Duration: {time}
Post-deploy checks:
Service health: {ok/degraded}
Error check: {clean/errors found}
If deploy.migration_tool is not "none", add:
Next steps:
→ Run `/ops-suite:db-migrate {env_name}` to check and apply pending migrations.