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

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

Дано: движок 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