Решил немного “прокачать” свой блог, заодно начать писать что-то полезное :) Чтобы начать писать что-то полезное, нужно сначала автоматизировать какую-нибудь рутинную работу, которая вызывает прокарстинацию.

Для меня этой рутинной работой оказался процесс выкладывания новых статей.

Дано: движок hugo, github, маленький сервер где-то в германии.

Цель: Статья после написания и коммита в github репозиторий, должна автоматически публиковаться в блоге.

Решение: а вот решение оказалось очень простым :) Об этом как раз и расскажу.

Создаём необходимые файлы и директории

Будем использовать Github Actions, для этого в проекте создал директорию .github/workflows

Далее создаём файл в котором будем описывать все наши шаги для диплоя проекта на сервер main.yml

Содержимое файла main.yml

name: Deploy hugo project

on:
  push:
    branches: [ master ] # наши инструкции будут срабатывать на пуше в ветку master
  pull_request:
    branches: [ master ] # или при мерже PR в тот же master

env:
  HUGO_VERSION: 0.76.2 # указываем какая версия hugo нам нужна

jobs:
  build-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2 # забираем все изменения из master ветки + подтягиваем тему для нашего блога, которая подключена как сабмодуль
        with:
          submodules: true

      - name: Setup Hugo # устанавливаем hugo c нужной версией
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.76.2'

      - name: Build # собираем наш блог, все страницы будут в итоге лежать в директории /public
        run: hugo --minify

      - name: copy file via ssh password # и в заключении копируем нашу директорию /public на сервер
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          password: ${{ secrets.PASSWORD }}
          port: 22
          source: "public/"
          target: #{server_directory}

Адрес сервера, имя пользователя и пароль для подключения к серверу мы указываем в https://github.com/{your_profile}/{project_name}/settings/secrets