deploy-activity-reminder-repeat-final.sh
text
#!/usr/bin/env bash
set -euo pipefail
PROJECT="/root/hermes-projects/Activity Reminder Bot"
tar -xzf /root/hermes-projects/activity-reminder-bot.tar.gz -C "$PROJECT"
cd "$PROJECT"
for item in \
GOOGLE_SHEETS_WORKSHEET_NAME=Sheet1 \
ALARM_REPEAT_ENABLED=true \
ALARM_REPEAT_INTERVAL_SECONDS=60 \
ALARM_REPEAT_MAX_COUNT=5 \
ALARM_DELETE_PREVIOUS_MESSAGE=true
do
key="${item%%=*}"
if grep -q "^${key}=" .env; then
sed -i "s/^${key}=.*/${item}/" .env
else
printf '\n%s\n' "$item" >> .env
fi
done
docker compose build
docker compose run --rm api python - <<'PY'
from activity_reminder_bot.services.sheets import get_reminder_repository
repo = get_reminder_repository()
repo.ensure_layout()
service = repo._build_sheets_service()
spreadsheet = service.spreadsheets().get(
spreadsheetId=repo.spreadsheet_id,
fields="sheets.properties",
).execute()
sheet_id = None
for sheet in spreadsheet.get("sheets", []):
properties = sheet.get("properties", {})
if properties.get("title") == repo.worksheet_name:
sheet_id = int(properties["sheetId"])
break
if sheet_id is None:
raise RuntimeError(f"Worksheet not found: {repo.worksheet_name}")
rows = service.spreadsheets().values().get(
spreadsheetId=repo.spreadsheet_id,
range=f"'{repo.worksheet_name}'!A:N",
).execute().get("values", [])
duplicate_header_rows = [
index
for index, row in enumerate(rows[1:], start=2)
if row and str(row[0]).strip().lower() == "id"
]
for row_number in reversed(duplicate_header_rows):
service.spreadsheets().batchUpdate(
spreadsheetId=repo.spreadsheet_id,
body={
"requests": [
{
"deleteDimension": {
"range": {
"sheetId": sheet_id,
"dimension": "ROWS",
"startIndex": row_number - 1,
"endIndex": row_number,
}
}
}
]
},
).execute()
print(f"layout-ok duplicate_headers_deleted={len(duplicate_header_rows)}")
PY
docker compose up -d --force-recreate
sleep 8
curl -fsS http://127.0.0.1:8022/ready
echo
docker compose ps