- Проект был написан для того, чтобы не тащить Ruby в систему хоста.
- Проект был написана потому что стандардтный докер-образ из репозитория
Jekyllсоздавал неработающее непонятно что, которое требовало доработки напильником и консультаций сDeepSeek.
Задача проекта - создать приемлемую конфигурацию для автоматической инициализации и ведения блога на Jekyll. Использует docker и bash-скрипты.
Перед работой необходимо сохранить копию файла .env-example с именем .env
и заменить в нем переменные на свои. Поддерживает работу с несколькими файлами переменных,
для этого нужно явно указать имя файла настроек, например:
make new ENV=.env-My-Cool-Blog
Все конфигурации работают с авторизацией по ключу, который ищется в папке ~/.ssh/ по
указанному имени в файле с переменными.
Команды:
make <command> <vars>
<command>:
clone - клонировать обьект из git в папку блога
new - инициализировать содержимое папки блога файлами Jekyll (используется docker)
serve - запустить блог локально (используется docker)
anonimize - установить одного автора комментариев в истории git
<vars>:
ENV - имя env-файла, по умолчанию ENV=.env
Содержимое .env файла:
GITHUB_BRANCH - ветка git (main)
SITE_DIR - имя локальной папки блога (my-awesome-site)
GITHUB_REPO - адрес гит-репозитория (git@github.com:username/username.github.io.git)
GITHUB_KEY_NAME - имя ключа git (ed_username)
GITHUB_USER_NAME - имя пользователя git, который будет указан в коммите (username)
GITHUB_USER_EMAIL - е-майл пользователя git, который будет указан коммите (username@username.com)
* Клонировать проект в папку
make clone
Если папки нет то она автоматически создается. После клонирования вызывается скрипт git-set-local.sh,
который прописывает в локальных настройках репозитория использования ключа авторизации из ./ssh а так же устанавливает локальные переменные user.name и user.email для будущих коммитов.
* Запустить блог локально
make serve
Поднимается docker-конфигурация с превью-доступом по http://127.0.0.1:4000 и hot-reload. После правок в папке блог автоматически пересобирается, обновление содержимого текущей странички не требует перезагрузки.
Если при запуске все падает с ошибкой Jeckull Could not locate Gemfile (GitHubPages работает со
своим набором плагинов и для его работы Gemfile не требуется) то нужно в папке с блогом
создать файл с именем Gemfile следудщего содержимого:
source "https://rubygems.org"
gem "github-pages", group: :jekyll_plugins
make new
В папку блога копируется стартовый набор файлов для Jekyll. Если папки нет, то она создается.
* Исправить автора коммитов
make anonimize
Все user.name и user.email заменяются значениями из .env. Это меняет историю коммитов,
после чего git push срабатывает только с ключиком --force
Громадную работу проделал DeepSeek, отвечая на мои вопросы, и по большей части правильно. Правда он обманывал меня, убеждая что на GitHub Pages нужна 4.x.x версия Jekyll, когда там стояла 3.x.x :)
При проверке работы блога от форка https://github.com/barryclark/jekyll-now выяснилось, что без Gemfile
локально конфигурация не поднимается. Пришлось добавить. Если make serve падает с ошибкой "Jeckull Could not locate Gemfile" то файл из репозитория нужно разместить вручную в корне папки блога. Думаю над автоматическим добавлением файла, но чем больше неявной магии при работе тем хуже.
Подумал что хорошо бы иметь возможность работать с несколькими папками чтобы если нужно вести сразу
несколько дневников на разных сайтах, то не качать template-jekyll каждый раз на каждый дневник,
а хранить все папки дневников в одной директории, указывая в команде какой текущий дневник брать.
Сделал работу с разными папками через указание в переменной текущей конфигурации ENV=.env-my-awesome-site
Подумал о том чтобы сделать некий wizard для формирования .env файла на основе ряда задаваемых вопросов, но так как создание такого файла операция не слишком частая, отказался. Вполне допустимо формировать вручную.
О переносе команд из make в shell
Подумал о том что было бы неплохо перенести команды из make в shell-файлы, вызывая из make только shell-скрипты. Пока удалось обойтись