Я большой сторонник непрерывной доставки: доставляющая стоимость должна быть рутина, быстро и легко. Я недавно применил это мышление к моей записи, благодаря Действия GitHub и dev.to API Отказ
Но почему?
Мой типичный рабочий процесс для записи — это начать мозговой штурм в текстовом файле (обычно с vim или vscode) и постепенно формируйте, что в когерентный кусок письма. Я предпочитаю писать в Markdown, поскольку формат достаточно прост, чтобы сделать вручную, и легко рендерировать как HTML или просто вставить в Google Docs.
Издательская часть обычно там, где я увязнул. Я бы обсудил с собой, что была правильная платформа, а затем придется переформатировать, чтобы убедиться, что ссылки работали. Что, если мне нужно было сделать коррекцию? Повторить процесс. Часто я просто перестану работать на кусок, потому что процесс раздражает. Это было точно так же, как проблема непрерывной доставки может решить.
CI/CD писателя с действиями GitHub
Мой обычный письменный рабочий процесс начинается с Markdown и Text файлов, поэтому для меня не было никаких изменений, чтобы я мог хранить свое письмо в Git Repo. На самом деле, у меня был в основном пустой репо, уже лежал, с каким-то старым письмом уже в нем!
Создание действия GitHub
Я признаю спереди, что создавая свое собственное действие GitHub для публикации было ненужно, и я только сделал это как учебное упражнение. Уже было Действие для публикации в Dev.to , но я не очень хорош в JavaScript, и хотел понять действия лучше, поэтому я построил свои собственные: Muncus/devto-publish-action Отказ
Код Golang для вызова DEV.TO API довольно прост, и я провел больше времени с Dockerfile и Github Actions Yaml файлы.
Бинар в основном принимает 3 входа: каталог, полный файлов Markdown, ключа API dev.to, и файл json, в котором для хранения идентификаторов статьи (что позволяет нам повторно опубликовать тот же файл, когда есть изменения).
Эти аргументы должны быть объявлены в входы
Раздел Action.yaml и ссылается в args
раздел.
В качестве дополнительного бонуса я добавил рабочий процесс для создания и проверки кода GO для действия AS .Github/Workflows/build-go.yml Отказ Этот рабочий процесс взят из учебного пособия по действию (но я забыл источник, извините!).
Теперь, когда наше Reach Repo создано и опубликовано, настало время использовать его в нашем письменном репо, создав другой рабочий процесс.
Вызывая действие с рабочего процесса
Полный рабочий процесс для публикации статьи имеет 3 шага:
- Проверьте мое частное репо, содержащее мои посты
- Опубликовать статьи для dev.to
- Обновление
Ids.json
С недавно опубликованной идентификаторами статьи, поэтому я могу редактировать сообщения после первоначальной публикации.
Настройка некоторых секретов
Прежде чем мы сможем настроить этот рабочий процесс, нам нужно безопасное место для хранения двух ключевых частей секретной информации. Github Secrets идеально подходит для этого.
- Учетные данные GitHub, чтобы прочитать мой личный репозиторий
- Я создал личный токен доступа и назвал его
My_gh_pat
Отказ
- Я создал личный токен доступа и назвал его
- DEV.TO Учетные данные для публикации от моего имени.
- Они созданы в Dev.to Настройки учетных записей под «ключами API DEV».
- Этот секрет называется
Devto_api_token.
С помощью этих секретов создано, мы можем создать рабочий процесс, который ссылается на них, не подвергая наши драгоценные полномочия! Давайте посмотрим на каждый шаг по отдельности, и полный пример ниже.
Шаг 1: Проверьте частный репо
- name: Check out repo uses: actions/checkout@v2 with: token: "${{ secrets.MY_GH_PAT }}"
Это использует встроенное действие для проверки репо, который принимает токен
Вход. Потому что я держу свое письмо в частном репо, мы должны указать токен доступа.
Шаг 2: Опубликовать с нашими пользовательскими действиями
- name: Publish to Dev.to uses: muncus/devto-publish-action@release/v1 with: directory: "$GITHUB_WORKSPACE/dev.to/" api-key: "${{ secrets.DEVTO_API_TOKEN }}" state-file: "$GITHUB_WORKSPACE/ids.json"
Это ссылается на мои пользовательские действия и обеспечивает потребности в будущем. Обратите внимание, что $ Github_workspace
Это встроенная переменная среды, которая является базовым каталогом репо, мы проверили на предыдущем шаге.
Шаг 3: Сделайте PR с местными изменениями
Когда мои публикации работают, он обновляет «файл состояния», который отображает имена файлов для DEV.TO IDS. Это означает, что после добавления новой статьи будут добавлены местные изменения. Чтобы сохранить эти изменения, нам нужно будет создать запрос на тягу от этих местных изменений.
- name: Create PR to update state file uses: peter-evans/create-pull-request@v3 with: title: "[CI] Update state file with published article ids" reviewers: ${{ github.actor }} token: "${{ secrets.MY_GH_PAT }}" base: master branch: "ci/state-file-update"
Есть много вариантов для Peter-Evans/Create-Pull-request Действие, но давайте пройдем через те, которые я использую здесь:
Название
: целиком косметики, но это помогает мне быстро одобрить PRS, когда я знаю, что они из моей системы CI.рецензенты
: Чтобы уточнить, что кто бы ни толкнул новую статью, отвечает за утверждение PR, они перечислены в качестве рецензента.токен
: Это токен доступа GitHub, созданный выше. Он использует мои учетные данные в этом частном репо, поэтому все эти PRS похожи на то, что они были сделаны мной. Это не идеально для общего репо, но хорошо для моих потребностей.база
: ветвь, против которой сделать пр. Мы проверяем Master для публикации, так что это то, что мы сравниваем.филиал
: Использование стабильного имени ветви PR продолжает прощения, а также помогает «укладывать» несколько изменений в файл состояния, в случае, если я забуду одобрить предыдущий PR перед публикацией новой статьи.
Выводы
По моему опыту, самая сложная часть процесса развития действий была испытательная и ошибка, необходимая для получения ЯМЛ «Просто правильно». Там еще есть комната для улучшения в DockerFile, и я мог бы использовать предварительностроенное изображение, чтобы сэкономить еще 30 секунд на каждой публикации статьи. Но это работает достаточно хорошо, чтобы вернуться к записи прозы вместо кода.
Я надеюсь, что это вдохновляет вас использовать действия GitHub не традиционным способом!
Приложение: полный рабочий процесс YAML
name: Publish # Only trigger this workflow on master, and a feature branch specifically for testing the workflow. on: push: branches: [ master, ci-action ] jobs: build: name: Publish runs-on: ubuntu-latest steps: # First, check out the private repo. - name: Check out repo uses: actions/checkout@v2 with: token: "${{ secrets.MY_GH_PAT }}" # Then publish articles. - name: Publish to Dev.to uses: muncus/devto-publish-action@release/v1 with: directory: "$GITHUB_WORKSPACE/dev.to/" api-key: "${{ secrets.DEVTO_API_TOKEN }}" state-file: "$GITHUB_WORKSPACE/ids.json" # Last, update the state file by making a PR. - name: Create PR to update state file uses: peter-evans/create-pull-request@v3 with: title: "[CI] Update state file with published article ids" reviewers: ${{ github.actor }} token: "${{ secrets.MY_GH_PAT }}" base: master branch: "ci/state-file-update"
Оригинал: «https://dev.to/muncus/continuous-delivery-of-dev-to-articles-with-github-actions-5a63»