Разделить фид и ссылки на сайте
Closed this issue · 12 comments
У нас есть несколько проблем с отображение фида, которые можно было бы решить другим рендерингом маркдауна. Например, YouTube и Apple Podcasts не любят заголовки <h2>
. Но проблема в том, что содержимое фида буквально рендерится в описание эпизода на сайте: заголовки, списки, ссылки.
То есть, если убрать заголовки из фида, чтобы они не ломали YouTube и Apple Podcasts, то на сайте будет плохо.
Вероятно, нужно поменять сборку эпизода на сайте, чтобы она использовала маркдаун-исходники вместо содержимого фида. Но могут быть и другие варианты решения.
Помнится, самой первой реализацией создания страниц для подкаста было вытягивание файлов через Github API. Было жутко медленно, неудобно и требовало создания токена для API.
Также можно класть рядом два репозитория - сайт и подкаст - и связывать через символические ссылки.
3-ий способ - git-субмодули. В .eleventyignore
нужно будет добавить некоторые файлы из репо подкаста, чтобы лишние файлы не обрабатывались.
Ну и, на мой взгляд, самый лучший вариант - добавить репо подкаста в package.json
как зависимость (npm позволяет добавлять git-репозитории) и подключить md-файлы как виртуальные шаблоны, либо создать плагин, который будет экспортировать коллекцию. Но для этого нужно обновить Eleventy до самой последней canary-версии.
Идея с подкастом как зависимостью для сайта — отличная. Она только упирается в возможности движка, но думаю рано или поздно всё равно нужно будет до 3-й версии обновляться, чего бы не начать с альфы)
добавить репо подкаста в package.json как зависимость
Есть опасение, что из-за того, что у пакета нет версионирования, где-нибудь в Github Actions он может закэшироваться навечно.
у пакета нет версионирования
Можно автоматически релизить мажорную версию пакета podcast
раз в неделю :)
Ещё одна проблема - придётся вписывать (можно автоматизировать) размер mp3-файла в дата-файлы, так как на стороне репозитория сайта не будет доступа к mp3-файлам.
В репозитории подкаста для этого используется такой код:
config.addFilter('length', (path) => {
const stats = fs.statSync(path);
return stats.size;
});
`<enclosure
type='audio/mpeg'
url='${data.meta.url}episodes/${episode.fileSlug}.mp3'
length='${this.length(`src/mp3/${episode.fileSlug}.mp3`)}'
/>`
Размеры можно брать из фида 😁
Размеры можно брать из фида 😁
фид я собираюсь генерировать на стороне репозитория сайта )
А, точно! Привычка)
на стороне репозитория сайта не будет доступа к mp3-файлам.
Предлагаю прогонять перед коммитом скрипт, который будет создавать json с размером файла. Попробовал записывать в yaml, но библиотеки форматируют по другому - убирают пустые строки, добавляют кавычки.
Есть опасение, что из-за того, что у пакета нет версионирования, где-нибудь в Github Actions он может закэшироваться навечно.
В общем, так и есть. Когда добавляется git-репозиторий как пакет, то в package-lock.json
добавляется ссылка на хеш коммита, например:
"node_modules/test-child": {
"resolved": "git+ssh://git@github.com/<organization-or-user>/<repo-name>.git#5687b1e50660e5d437d0af59387978d881a2b3cc"
}
Поэтому внутри Github Actions npm ci
будет всегда ставить версию, соответствующую коммиту. npm i
тоже не сильно, поможет, так как у Actions есть свой кэш.
Варианты решения - в package-lock.json
вписать руками имя ветки вместо хэша коммита:
"node_modules/test-child": {
"resolved": "git+ssh://git@github.com/<organization-or-user>/<repo-name>.git#main"
}
Но это не очень надёжно, так как lock-файл может быть пересоздан.
Другой вариант - внутри action ставить обновлённую версию.
Ещё один вариант установки всегда свежей версии репозитория подкаста - добавить скрипт postinstall
:
{
"postinstall": "npm install git://github.com/web-standards-ru/podcast.git#main --save=false --package-lock=false"
}
Так не нужно каждый раз обновлять файлы package.json
и package-lock.json
для git.
Привет.
Я была бы осторожной с сабмодулями, и с символическими ссылками. При сборке с ними постоянно возникают какие-нибудь проблемы (ну точнее у меня возникают и я всегда фолбечусь на решение попроще)
По поводу генерации, я очень не в контексте, но кажется если есть md исходник из него хорошо все вытаскивать. Если исходник публичный, то, кажется github api не нужно можно прямо GET-запросом выдергивать.
C API ключиком тоже, кажется не большая проблема - закинули его в secrets и забыли
Закинул два PR'а по теме: