بنقرة واحدة
deploy
Deploy a release to staging or production, or show current deployment status.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Deploy a release to staging or production, or show current deployment status.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف 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"