С memos 26.10 картинку-вложение можно вставить прямо в текст: в content
попадает markdown-ссылка , а вложение
остаётся в attachments. remembos выводит текст как есть, поэтому в боте и
на странице появлялась нечитаемая ссылка, а в Telegram она ещё и съедала
лимит подписи к фото.
Memo.ContentWithoutInlineImages убирает такие ссылки, если они ведут на
картинки-вложения самой заметки: картинка и так показывается среди
вложений. Чужие и внешние картинки, ссылки на прочие вложения и блоки
кода не трогаются.
Remembos
Проект для получения прошлых заметок из сервиса Memos (https://github.com/usememos/memos), чтобы они были как воспоминания о прошлых событиях.
Проект состоит из двух частей:
- Telegram Bot. Бот, который каждый день присылает одно воспоминание
- web-сервис с одной страницей, где можно увидеть одно воспоминание
Спецификации
Сборка и деплой
Команды проекта — через Task, список: task --list.
Перед коммитом lefthook запускает golangci-lint
(конфиг lefthook.yml). В свежем клоне хуки ставятся командой task hooks.
Линтер должен быть собран той же версией Go, что и проект: после обновления
Go его надо переустановить (go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest),
иначе он падает на чтении стандартной библиотеки.
Деплоем занимается плейбук playbook-remembos.yml в pet-project-server:
роль app_image собирает образ локально этим репозиторием и везёт его на
сервер через docker save/load — реестр не участвует.
Контракт роли — задача image: она получает BUILD_ID через окружение и
собирает remembos:$BUILD_ID. Без переменной (task image) собирается
remembos:dev для локальной работы.
Стек
- Go — основной язык
- SQLite — хранение истории показов и кэша запросов
- Memos API — источник заметок
Настройки
Memos
Исходный код в директории memos-source (не в репозитории, клонировать с GitHub)
Справка API: https://usememos.com/docs/api
Ломающие изменения API: memos-source/proto/api/CHANGELOG.md
Memos ломает API между релизами, поэтому клиент (internal/memos) говорит на
нескольких диалектах: таблица dialects в internal/memos/dialect.go. По
умолчанию (memos.api = "auto") диалект выбирается по версии из
GET /api/instance/profile и перевыбирается, если API ответил 404/410: так
обновление memos подхватывается без перезапуска. Поэтому порядок деплоя
такой: сначала remembos с поддержкой нового диалекта, потом memos.