con un clic
deploy
Deploy a release to staging or production, or show current deployment status.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Deploy a release to staging or production, or show current deployment status.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
Tag a CalVer release on main, create a GitHub release, and generate a Discord announcement.
Compare two traced summarize runs from Langfuse and produce a qualitative evaluation of how subjects, descriptions, and speaker contributions changed.
Read application logs from the production or staging server via SSH.
Create a new task in the opencouncil-tasks codebase. Use when implementing new features or task handlers.
Write documentation for tasks in the opencouncil-tasks codebase. Use after completing a new task implementation.
| name | deploy |
| description | Deploy a release to staging or production, or show current deployment status. |
| argument-hint | [staging|production [<tag>]] |
Deploy a tagged release to the tasks server, or show what's currently running.
Host: 134.122.74.255 (SSH as root)
| Environment | Directory | Container | Port |
|---|---|---|---|
| production | /root/opencouncil-tasks/ | opencouncil-tasks-app-1 | 3005 |
| staging | /root/staging-opencouncil-tasks/ | staging-opencouncil-tasks-app-1 | 3006 |
$ARGUMENTS — optional, space-separated tokens:
staging — deploy the latest release tag to stagingproduction — deploy the latest release tag to productionstaging <tag> or production <tag> — deploy a specific tagstatus — explicit status check (same as empty)$ARGUMENTS is empty or status, set ACTION=status.$ARGUMENTS starts with staging or production, set ACTION=deploy and TARGET accordingly. If a second token is present, set TAG to that value; otherwise TAG=latest.Always run this step regardless of action. SSH to the server and collect:
ssh root@134.122.74.255 bash -s <<'SCRIPT'
echo "=== Production ==="
cd /root/opencouncil-tasks
echo "version: $(git describe --tags --always 2>/dev/null)"
echo "container: $(docker compose ps app --format '{{.Status}}' 2>/dev/null)"
echo "=== Staging ==="
cd /root/staging-opencouncil-tasks
echo "version: $(git describe --tags --always 2>/dev/null)"
echo "container: $(docker compose ps app --format '{{.Status}}' 2>/dev/null)"
SCRIPT
Also fetch the list of available release tags locally:
git tag --list '20[0-9][0-9].[0-9]*' --sort=-version:refname | head -5
Present the status in a clear table:
Environment | Version | Container Status
-------------|-----------|------------------
production | 2026.5.1 | Up 28 hours
staging | 2026.5.1 | Up 2 hours
If ACTION=status, stop here.
Before deploying, check if there are tasks running on the target environment. The /tasks endpoint requires a bearer token from secrets/apiTokens.json:
ssh root@134.122.74.255 bash -s <<'SCRIPT'
TOKEN=$(cat <target-directory>/secrets/apiTokens.json | python3 -c 'import json,sys; print(json.load(sys.stdin)[0])')
curl -s -H "Authorization: Bearer $TOKEN" http://localhost:<target-port>/tasks
SCRIPT
The response looks like:
{"running":[...],"queued":0,"maxParallelTasks":10}
If there are running or queued tasks, stop and warn the user. Show what's running (task type, stage, duration, and the meeting context parsed from the callback URL — e.g. https://opencouncil.gr/api/cities/zografou/meetings/dec11_2025/... → zografou / dec11_2025). Ask whether to proceed or wait. Do not deploy without explicit confirmation that it's OK to interrupt running tasks.
If no tasks are running or queued, proceed.
If TAG=latest, determine the latest release tag:
DEPLOY_TAG=$(git tag --list '20[0-9][0-9].[0-9]*' --sort=-version:refname | head -1)
If a specific tag was given, verify it exists:
git rev-parse --verify "$TAG" >/dev/null 2>&1
If the tag doesn't exist, stop and tell the user.
Show what will be deployed: the tag, and a brief summary of what changed since what's currently running on the target environment. Use git log --oneline <current>..<deploy_tag> to show the commits.
Always confirm with the user before deploying. Show:
After confirmation, deploy:
ssh root@134.122.74.255 bash -s <<SCRIPT
cd <target-directory>
git fetch --tags
git checkout $DEPLOY_TAG
docker compose up app -d --build
SCRIPT
Wait a few seconds, then check the container came up healthy:
ssh root@134.122.74.255 bash -s <<SCRIPT
cd <target-directory>
echo "version: $(git describe --tags --always)"
docker compose ps app
SCRIPT
Report the result. If the container didn't start, show the last 20 lines of logs:
ssh root@134.122.74.255 "cd <target-directory> && docker compose logs app --tail 20"