Other Projects

scripts

/root/hermes-projects/scripts

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