Публикация Hugo сайта на GitHub

Из этого руководства вы узнаете как технически грамотно разместить свой сайт, созданный в Hugo, на Github сразу в двух репозиториях, одной командой в Termux на Android или linux. Для этого напишем красивый bash скрипт для публикации, сделаем его исполняемым. А почему сразу в двух? Спросите вы. Вот на этот вопрос и последующие я подробнейшим образом отвечу. Нa картинке ниже показана работа скрипта

deploy.sh

1. Структура каталогов Hugo

my-site/
├── archetypes/
├── assets/
├── content/    <-- Самое ценное)
├── data/ 
├── i18n/
├── layouts/ 
├── public!!!/  <-- Сайт
├── static/ 
├── themes/     <-- Темы Hugo
└── hugo.toml   <-- файл конфигурации

команда hugo new site my-site создаёт структуру каталогов выше. Кроме public/, она появится в процессе .

2. Так зачем нам 2 репозитория?

Тут всё просто. В public/ каталоге содержится опубликованный веб-сайт, созданный при выполнении команд hugo или hugo server. Hugo воссоздает этот каталог и его содержимое по мере необходимости. Его мы будем размещать в отдельном репозитории. А как же content/, где мы размещаем статьи и другие каталоги, которые содержит шаблоны для преобразования контента, данных и ресурсов в полноценный веб-сайт? А вот его мы будем размещать в основном репозитории! Все помнят пословицу про яйца и корзину)))

3. Добавляем папку public/ в качестве субмодуля

В данном примере директория public/, где размещаются файлы сайта подключена к основному репозиторию с помощью git submodule То есть сам сайт находится в одной папке, в одном репозитории. А файлы участвующие в сборке - в другом.

Важно! Перед выполнением команды, папки public/ в основном репозитории не должно существовать. Она создается автоматически командой `hugo -D` из bash скрипта ниже или командой ` hugo server`, если хотите посмотреть как выглядит ваш сайт на локальном устройстве
git submodule add git@github.com:MarchBro/MarchBro.github.io.git public
  • git@github.com:MarchBro - аккаунт на GitHub.
  • MarchBro.github.io.git - репозиторий.
  • public/ - папка с сайтом.

4. Создаём скрипт для публикации

#!/bin/bash
# HUGO-DEPLOY
# GITHUB.COM/MARCHBRO                 # BY BESSONOV MAKSYM

# Если команда завершится неудачно
# то развертывание остановится
set -e

# Формируем приветственное сообщение 
echo ""
printf "\033[0;32m Публикация обновления на GitHub...\033[0m\n"

#mkdir -p "$(pwd)/resources/hugo_cache"
#export HUGO_CACHEDIR="$(pwd)/resources/hugo_cache"

# Разукрасим консоль и выведем сообщение
echo ""
echo -e "\e[034m"  "Сборка...\n"

# Cборка проекта
hugo -D

# Переходим в папку public/
cd public

# Добавим изменения в git
git add .

# Формируем сообщение для коммита из текста
# и даты
msg="Сборка сайта $(date)"
if [[ -n "$*" ]]
then
    msg="$*"
fi

echo ""
echo -e "\e[036m"  "Фиксирую изменение в public/ ...\n"

# Фиксируем изменения  в подмодуле
git commit -am "$msg"

# Отправляем изменения в ваш GitHub репозиторий 
git push origin

# Переходим в директорию выше
cd ..

# Добавим изменения в git
git add .

echo ""
echo -e "\e[032m"  "Фиксирую изменения в основном репозитории ...\n"

# Фиксируем изменения в основном реп.
git commit -am "$msg"

# Отправляем изменения в ваш GitHub репозиторий 
git push origin 

5. Записываем скрипт в файл

Тут всё просто. Переходим в папку с проектом Hugo, открываем любимый текстовый редактор и сохраняем. В моём случае это nvim

nvim deploy.sh

6. Делаем его исполняемым

chmod +x deploy.sh

После каких-то изменений в вашем сайте достаточно выполнить ./deploy.sh в папке с проектом 💪

7. Ссылки по теме

  • Hugo конструктор сайтов
  • GitHub сервис для хостинга и разработки
  • Termux эмулятор терминала на android