Рубрики
Без рубрики

Syndicate: Уборка комминтов и составления разработки

Я сделал это для людей, которые пишет слова, которые они делятся с другими: … помечены с Showdev, Python, Development.

Изготовление «синдиката» (4 части серии)

Я сделал это для людей, которые пишет слова, которые они делятся с другими:

Dabrady/Syndicate

Простая реализация модели публикации контента POSSE

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

Мне потребовалось неделю целесообразных вечеров и выходных преданного взлома, чтобы полировать его по своему вкусу; И еще неделя, чтобы написать об этом.

Вот как я это сделал.

С Скелет проекта на месте и четкое направление Чтобы войти, я был готов начать всерьез.

Я решил получить Dev.to API Взаимодействия работают в первую очередь, а потом мне нужно было выяснить, как собирать урожай A Гит Обязаться к фактическому вводу в разработку.

Создание основных обертков для «Создать» и «Обновление» Конечные точки Dev.to API пошли довольно плавно и быстро и быстро: я бы уже загрузил кривую обучения ранее с моим “Fetch” реализация.

Сейчас пришли биты, которые докажут мне самую вызов в этом проекте: делать вещи с Гит Отказ Это где Github Workflow и Действие Документация Стал по-настоящему ценным: это показало мне, что у меня есть доступ ко многим портить -релированные вещи, касающиеся фиксации, которая вызвала рабочий процесс, подвергается мнению моего действия в виде Переменные среды Отказ

Для моих целей самым ценным из них оказалось бы:

  • Github_token (используется для аутентификационные запросы на API GitHub)
  • Github_sha. (Commit Sha, который вызвал рабочий процесс)
  • Github_repository (полное имя репо, содержащего рабочий процесс)

Это быстро стало очевидно, что фактическое содержание фиксации, которое вызвало рабочий процесс, не были доступны для меня из коробки; Мне нужно было бы получить их сам, как-то. Я начал этот проект, ожидая, что единственные внешние API, которым я буду взаимодействовать, были бы теми, что для силовых платформов я включал поддержку; Но это новое развитие означало, что мне нужно было узнать о API GitHub , также.

Если бы я решил использовать API GitHub прямо через Запросы Пакет, как у меня делал с Dev.to API, у меня был бы совершенно другой опыт (хотя не обязательно лучше или хуже). Но я этого не сделал.

Вместо этого я пошел искать специальную библиотеку Python Github для использования. Я не помню, почему я выбрал этот путь, но это могло бы просто было, потому что я знал, что многие расширения и интеграции GitHub существовали, что они были связаны с некоторыми, кто завернул API GitHub в прошедшую к употреблению библиотеку Python.

И действительно было несколько вариантов на выбор. Первый вариант, рекламируемый в Интернете через Google, был Pygithub . Но Документация почувствовала ужасную : Полная половина Readme была просто хвастана тем, кто использовал библиотеку и связываю с людьми в Интернете, рекомендую его. По этой причине я почти сразу же пошел в поисках другого варианта.

Пакет, который я решил использовать, назывался github3.py Отказ Сравнение, Документация чувствовала себя замечательно Как и авторы пакета на самом деле заботились о помощи людям понять программное обеспечение, а не только каждый бит кода в изоляции. (Примечание для себя: не будь лицемером, создайте отличный сайт ReadTheDocs для Syndicate ).

Но возникла проблема: добавление github3.py Для моих проектных зависимостей все равно.

Корневая причина, опять же, было то, что мой документ докера не создал среду, необходимую для поддержки кода, который я пытался запустить. Я быстро обнаружил, что переключение с использованием Python: 3-ALPINE Вернуться к Python: 3 Разрешил проблемы сборки, хотя он также вернул «Эта вещь, займет слишком чертовски», чтобы построить «проблемы». Но я был нетерпеливым, поэтому я решил поступить с более длинным временем сборки, чтобы разблокировать то, что было похоже на «развитие реального проекта» и отсроченным решением этой проблемы с производительностью до конца проекта.

🐌🌸 Примечание из будущего Мне Я бы в конечном итоге выключил от использования github3.py Использование Pygitub (который не ввел те же проблемы сборки), и если бы я только что попробовал это, вместо того, чтобы вместо того, чтобы быть настолько нетерпелив, чтобы продолжить развитие функций, я мог бы спасти себя много времени, и самостоятельно разочарованные расстройства, в ожидании мой код для компиляции.

С постройкой обратно в стабильное состояние, я наконец начал решать проблему выяснения, как преобразовать Гит Обязать в проект на Dev.to.

github3.py Документация API велика, и я быстро выяснил, как извлечь содержимое добавленных/измененных файлов в фиксации, которое вызвало действие. Однако я понял, что я не мог предположить, что все измененные файлы в фиксации были посты, которые нуждались в синдикации; Мне нужен способ определить файлы Commite Предназначен синдикатировать.

Быстрое и простым решением было ввести переменную конфигурации для моего действия GitHUB, указав префикс пути, который можно использовать для различения «сообщений» из других файлов в их репозитории. Это имеет недостатки: предполагает, что автор сохраняет все свои посты в определенном месте, и предполагает, что все файлы в этом конкретном месте являются сообщениями.

Тем не менее, это хватило бы, пока он действительно не вызвал проблемы с кем-то, поэтому я пошел с этим подходом. Я решил сделать его переменной среды вместо явного входа в действие из-за того, как работает рабочие процессы GitHub: это значение является статической информацией о репозитории, и мое действие может быть использовано в нескольких шагах в том же рабочем процессе; Использование переменной среды позволяет указывать ее на более высоком уровне, чем отдельный конфиг действий, если вы хотите, чтобы вы будете делиться значением в большей части вашего рабочего процесса и избежать дублирования.

Теперь, когда я мог точно Определите «посты» в данном фиксации , Мне нужно было уметь анализировать детали, необходимые для вызова API, который будет сделан.

Создать пост, единственный фактический Данные, требуемые dev.to API это заголовок. Простой. Теперь, когда я мог получить доступ к всему в том, что файлы синдицированы, я мог бы просто захватить их заголовки и содержимое, подключить их к запросу API и выиграть в жизни.

Но ждать. Где название поста? 🤔

Очевидно, но, вероятно, плохой ответ: «В имени файла. «Я уже мог сказать, что спускаясь, что маршрут приведет к боли и страданиям, поэтому я решил сделать еще одно предположение: мое действие ожидает, что все сообщения будут написаны в Markdown, и содержат фронтмацтец YAML по крайней мере, как минимум Название атрибут.

Учитывая, что моя первоначальная целевая аудитория – это те, кто пишет для dev.to, и именно здесь отформатированы посты, это не так случайный выбор, поскольку он может сначала появиться. Но все же, я не делал никаких исследований на распространенность этого формата усыновления, и это может вернуться, чтобы укусить меня в будущем.

Но для первой итерации это все будет хорошо. Теперь мне нужен путь для разбора YAML из строки; Я знал, что YAML довольно широко используется в конфигурации программного обеспечения, и Python известен своим использованием в обработке данных, поэтому я ожидал, что есть хорошая библиотека для работы с ней.

И действительно там было. Pyyaml Казалось каноническим, от того, что я мог сказать, но он также казался излишним для моих нужд; Плюс, Документация была уродливая и трудно использовать (Опять обратите внимание на себя: уродливые документы обескураживают пользователи). Я продолжал искать, и в одном из моих запросов я включил ключевое слово «Frontmatter» и поймал счастливого перерыва: Python-frontmatter Была ли небольшая библиотека специально для манипулирования метаданными YAML встроена в текстовые документы и идеально подходит для моих потребностей.

В тот момент он взял только немного звонков и Внезапно у меня было что-то Это автоматически нажимает мой вновь созданный контент в dev.to как черновик, когда я толкнул его на мой репо. Это было время для моего счастливого танца.

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

Изготовление «синдиката» (4 части серии)

Оригинал: “https://dev.to/daniel13rady/syndicate-harvesting-commits-and-drafting-to-dev-1kkd”