Giddy-up с GitHub Actions

Изучите GitHub Actions с помощью генератора резюме ✨.

Что такое GitHub Actions?

GitHub Actions — это платформа, которую можно использовать для автоматизации конвейера сборки, тестирования и развертывания. Эта платформа состоит из нескольких компонентов:

  • События: То, что происходит в репозитории GitHub (например, перемещение в ветку, открытие проблемы или запрос на вытягивание), которое может запустить рабочий процесс.

  • Рабочие процессы: Автоматизированный процесс, который настроен на запуск после выполнения триггера. Они состоят из одного или нескольких заданий.

  • Задания: Задание состоит из серии шагов, которые выполняются в порядке их написания, один за другим в одной программе. Несколько заданий могут выполняться параллельно. Каждый шаг в задании может быть сценарием оболочки или действием.

  • Действия: Это то, что происходит в рабочем процессе (отдельный шаг). Они выполняют сложные и повторяющиеся задачи, поэтому могут сократить количество повторяющегося кода в файле рабочего процесса.

  • Бегуны: Бегунок — это сервер, который запускает запущенный рабочий процесс, и каждый бегунок будет выполнять одно задание за раз.


Эта статья посвящена проекту, который генерирует CV с помощью скрипта python, преобразующего данные в файлах JSON в формат для шаблона CV LaTeX, запускаемого автоматически рабочим процессом GitHub Actions, который также преобразует сгенерированный файл .tex в CV в формате PDF при вводе изменений в ветку master.

methminug / CV-Generator

Редактирование простого JSON-файла для создания элегантно оформленной автобиографии ✨.

CV-Generator 🖨️.

Скрипт на python, который преобразует данные в файлах JSON в формат .tex для шаблона LaTex CV, запускаемый автоматически рабочим процессом GitHub Actions, который также преобразует сгенерированный файл .tex в CV в формате PDF при переносе изменений в ветку master.

Шаблоны LaTex отлично подходят для создания хорошо отформатированных документов.
Однако некоторым может быть трудно работать с системой настройки типа TeX, используемой в LaTex, и они могут даже посчитать, что не стоит тратить время на редактирование сложного .tex-файла для создания довольно простого резюме.

Именно это и пытается исправить данный скрипт.

Использование

Пользователь редактирует простые JSON файлы в папке sections, которые соответствуют каждому разделу в шаблоне резюме.
Вот пример из файла experience.json для раздела резюме «Опыт работы».

{
    "title":"Work Experience"
    "sectionname":"cventries",

Посмотреть на GitHub

Этот проект не состоит исключительно из рабочих процессов GitHub Actions, но они являются ядром того, что в конечном итоге будет использоваться для создания резюме. В общем, окончательный файл рабочего процесса будет:

  1. Запускаться для генерации нового CV при внесении изменений в данные в файлах JSON.
  2. Запустить контейнер Docker, который запустит сценарий Python для преобразования данных из файлов JSON в шаблон LaTeX, затем преобразовать файл из шаблона в PDF.
  3. Зафиксируйте созданный PDF в репозитории.

В качестве небольшой справки, LaTeX — это программная система, широко используемая для создания академических документов, позволяющая авторам сосредоточиться на содержании, в то время как LaTeX занимается форматированием. Шаблоны для документов LaTeX ускоряют процесс, что делает его идеальным вариантом для создания такого документа, как резюме, где больше времени и усилий нужно уделить содержанию, а не формату.

Шаблон LaTeX, использованный здесь, — Awesome CV от posquit0, и его можно найти по адресу: github.com/posquit0/Awesome-CV.

Спасибо за этот классный шаблон!


Поскольку эта статья посвящена действиям и файлам рабочего процесса, содержание скриптов Python здесь обсуждаться не будет, но если вкратце, они заменяют текст-заполнитель в шаблоне LaTeX данными из JSON-файлов, которые содержат фактические данные для резюме.

Итак, давайте перейдем к файлу рабочего процесса!

Части файла рабочего процесса

Рабочий процесс — это файл, написанный в синтаксисе YAML.

GitHub Actions распознает файлы рабочих процессов для запуска, проверяя наличие директории с именем .github/workflows в ветке, из которой вы хотите запустить рабочий процесс (в данном случае ветка master).

Основными частями файла рабочего процесса являются:

  1. Имя (необязательно)
  2. Триггер
  3. Задания

Имя, данное рабочему процессу, — это то, что будет отображаться, когда рабочий процесс будет показан на вкладке Действия в репозитории GitHub. Имя задается в верхней части файла с помощью утверждения:

name: Update CV
Войти в полноэкранный режим Выйти из полноэкранного режима

Триггер — это то, что приведет к запуску рабочего процесса. Триггером может быть несколько событий или одно событие. Следующее утверждение настраивает рабочий процесс на запуск, когда в любой ветке или когда кто-то форкает репозиторий.

on: [push, fork]
Войти в полноэкранный режим Выйти из полноэкранного режима

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

jobs:
   <Name of first job>:
      . . .
Войти в полноэкранный режим Выход из полноэкранного режима

Создание файла рабочего процесса

Суть этого генератора заключается в том, что при обновлении данных в наборе JSON-файлов в ветке master должен быть создан новый CV в соответствии с обновленными данными в файлах.

Поэтому мы хотим, чтобы рабочий процесс генерации CV запускался каждый раз, когда любые изменения переносятся в ветвь master репозитория.

name: Update CV
on:
   push:
      branches: [ "master" ]
Вход в полноэкранный режим Выход из полноэкранного режима

Как объяснялось ранее, раздел on: определяет событие запуска, а событием запуска этого рабочего процесса является толчок к ветке, поэтому используется push:.

Событие push: имеет фильтр branches:, который позволяет нам настроить рабочий процесс так, чтобы он срабатывал только тогда, когда происходит событие push в определенной ветви или ветвях. В данном случае рабочий процесс будет запускаться только тогда, когда push будет сделан в ветку master репозитория.

Переходя к разделу jobs: файла рабочего процесса, мы видим следующие цели:

  1. Проверить текущую ветку.
  2. Сгенерировать резюме.
  3. Зафиксировать изменения.
  4. Перенести изменения в ветку master.

Поскольку эти шаги должны выполняться один за другим, все они могут быть определены как последовательные шаги одного задания. Каждый новый шаг будет отмечен дефисом (-).

Чтобы задать среду для выполнения этого задания, в файл будут добавлены следующие строки в разделе jobs::

name: Update CV
on:
   push:
      branches: [ "master" ]
jobs:
   update_cv:
      runs-on: ubuntu-latest

      steps:
      - . . .
Войти в полноэкранный режим Выйти из полноэкранного режима

Здесь update_cv — это имя, данное заданию, которое будет выполнять ранее упомянутые шаги. Обратите внимание, что Update CV — это имя рабочего процесса, который запускает задание с именем update_cv.

Далее задание update_cv настраивается для запуска на последней версии Ubuntu Linux runner, как определено в runs-on: . Это задание будет выполняться на виртуальной машине, размещенной на GitHub.

Затем шаги будут добавлены в порядке выполнения под steps: .

1. Проверка текущей ветки

Этот шаг необходим для того, чтобы сделать репозиторий содержимого доступным для рабочего процесса. Это важно, так как позже в этой работе мы будем использовать приватное действие в этом хранилище. Поэтому действие checkout должно использоваться каждый раз, когда рабочий процесс будет работать с кодом хранилища.

. . .
jobs:
   update_cv:
      runs-on: ubuntu-latest

      steps:
      - uses: actions/checkout@v3
Вход в полноэкранный режим Выход из полноэкранного режима

Шаг, используемый для проверки репозитория, использует действие Checkout V3 из GitHub Marketplace и использует ключевое слово uses: для определения действия, которое будет использоваться в этом конкретном шаге.

2. Генерация резюме

Следующий шаг — запуск скрипта для генерации резюме и конвертации его в PDF, который будет выполняться в контейнере Docker, поэтому сначала мы создадим действие контейнера docker, которое будет выполняться на этом шаге. Это действие будет определено в отдельном YAML-файле в репозитории под названием generate-cv.yaml.

Действие контейнера Docker

Чтобы запустить контейнер Docker и выполнить код действия, необходимо указать образ Docker.

Образ Docker может быть указан двумя способами:

  1. В виде Dockerfile в репозитории.

  2. Используя образ из публичного реестра Docker.

В данном примере мы будем использовать Dockerfile, созданный в корневом каталоге репозитория.

Поэтому действие в файле generate-cv.yaml (который также находится в корневом каталоге) будет таким:

name: 'Generate CV'
runs:
   using: 'docker'
   image: 'Dockerfile'
Войти в полноэкранный режим Выйти из полноэкранного режима

Согласно коду, это действие будет запущено с помощью 'docker', поскольку это действие Docker, и образ будет собран из 'Dockerfile', а команды будут запущены в новом контейнере с использованием этого образа.

Теперь созданное действие контейнера Docker можно использовать в качестве частного действия в следующем шаге задания update_cv нашего файла рабочего процесса.

. . .
jobs:
   update_cv:
      runs-on: ubuntu-latest

      steps:
      - uses: actions/checkout@v3
      - name: Generate CV
        uses: ./
Вход в полноэкранный режим Выйти из полноэкранного режима

Имя частного действия Generate CV присваивается ключевому слову name: в этом шаге. Поскольку этот шаг использует действие в корневом каталоге, ключевому слову uses: присвоен путь ./.

На этом шаге будет запущен сценарий Python, который обновит файл шаблона LaTeX, создаст файл .tex из обновленного файла шаблона LaTeX и, наконец, создаст PDF-файл резюме из файла .tex.

3. Зафиксировать изменения

Далее необходимо зафиксировать вновь созданный PDF-файл и обновления в файле шаблона LaTeX.

Это можно сделать с помощью команд git.

. . .
jobs:
   update_cv:
      runs-on: ubuntu-latest

      steps:
      - uses: actions/checkout@v3
      - name: Generate CV
        uses: ./
      - name: Commit generated PDF
        run: |
           git config --local user.email "action@github.com"
           git config --local user.name "github-actions"
           git add --all
           git commit -m "CV updated via GH Actions" -a
        shell: bash
Войти в полноэкранный режим Выйти из полноэкранного режима

Первые две команды настраивают бота GitHub Actions на фиксацию изменений в репозитории.

Затем все изменения фиксируются ботом под новым коммитом с сообщением "CV updated via GH Actions" .

Эти команды выполняются с помощью bash, который является оболочкой по умолчанию на платформах, отличных от Windows.

4. Перенести изменения в ветку

Наконец, сделанный коммит должен быть перенесен в ветку master.

Для этого будет использовано стороннее действие GitHub Push из GitHub Marketplace.

. . .
jobs:
   update_cv:
      runs-on: ubuntu-latest

      steps:
      - uses: actions/checkout@v3
      - name: Generate CV
        uses: ./
      - name: Commit generated PDF
        run: |
           git config --local user.email "action@github.com"
           git config --local user.name "github-actions"
           git add --all
           git commit -m "CV updated via GH Actions" -a
        shell: bash
      - name: Push changes
        uses: ad-m/github-push-action@master
        with:
           github_token: ${{ secrets.GITHUB_TOKEN }}
Вход в полноэкранный режим Выход из полноэкранного режима

Ключевое слово with: группирует входные данные, отправляемые действию GitHub Push. Поскольку в качестве входных данных не был указан репозиторий, изменения будут перенесены в ветку master текущего репозитория.

Входные данные для github_token, используемые здесь, — это уникальный секрет GITHUB_TOKEN, который GitHub автоматически создает в начале каждого рабочего процесса и который может использоваться для аутентификации от имени GitHub Actions.

В качестве входа github_token можно также использовать персональный токен доступа к хранилищу.


На этом мы завершаем работу над нашим рабочим процессом GitHub Actions!

Полная кодовая база находится в репозитории по ссылке ниже, так что не стесняйтесь форкнуть его, внесите некоторые изменения в JSON-файлы в директории /sections и наблюдайте, как этот рабочий процесс приходит в действие!

methminug / CV-Generator

Редактирование простого JSON-файла для создания элегантно оформленного CV ✨

CV-Generator 🖨️

Скрипт на python, который преобразует данные в файлах JSON в формат .tex для шаблона LaTex CV, запускаемый автоматически рабочим процессом GitHub Actions, который также преобразует сгенерированный файл .tex в CV в формате PDF при переносе изменений в ветку master.

Шаблоны LaTex отлично подходят для создания хорошо отформатированных документов.
Однако некоторым может быть трудно работать с системой настройки типа TeX, используемой в LaTex, и даже может показаться, что не стоит тратить время на редактирование сложного .tex-файла для создания довольно простого резюме.

Именно это и пытается исправить данный скрипт.

Использование

Пользователь редактирует простые JSON файлы в папке sections, которые соответствуют каждому разделу в шаблоне резюме.
Вот пример из файла experience.json для раздела резюме «Опыт работы».

{
    "title":"Work Experience"
    "sectionname":"cventries",

Посмотреть на GitHub

До следующего раза, счастливого кодинга!


  • Мультяшный вектор собаки, созданный catalyststuff — www.freepik.com

Оцените статью
devanswers.ru
Добавить комментарий